difftreelog
Merge remote-tracking branch 'origin/develop' into feature/CORE-37
in: master
144 files changed
.devcontainer/Dockerfilediffbeforeafterboth13 [ -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.devcontainer/devcontainer.jsondiffbeforeafterboth1{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}.devcontainer/docker-compose.ymldiffbeforeafterbothno changes
.github/workflows/node_build_test.ymldiffbeforeafterboth31 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: 300m35 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_hub38 git clone git@github.com:usetech-llc/nft_private.git38 git clone git@github.com:UniqueNetwork/nft_private.git39 cd nft_private39 cd nft_private40 git checkout develop40 git checkout develop41 # git pull --all41 # git pull --all42 chmod +x ci_node.sh42 chmod +x ci_node.sh43 ./ci_node.sh43 ./ci_node.sh44 rm -rf /home/polkadot/nft_private44 rm -rf /home/polkadot/nft_private4545.maintain/frame-weight-template.hbsdiffbeforeafterbothno changes
.maintain/scripts/compile_stub.shdiffbeforeafterbothno changes
.maintain/scripts/generate_api.shdiffbeforeafterbothno changes
Cargo.lockdiffbeforeafterboth18source = "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]232324[[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]3233[[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]627163[[package]]72[[package]]88checksum = "739f4a8db6605981345c5654f3a85b056ce52f37a39d34da03f25bf2151ea16e"97checksum = "739f4a8db6605981345c5654f3a85b056ce52f37a39d34da03f25bf2151ea16e"899890[[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]109110[[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"122142123[[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"128148129[[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]137138[[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"236247237[[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]364374365[[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]377387378[[package]]388[[package]]409419410[[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]424434448458449[[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]457467458[[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",528538529[[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",553563554[[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]563575564[[package]]576[[package]]692]704]693705694[[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]720721[[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]735736[[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]752753[[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]769770[[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]786787[[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]801802[[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]816817[[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"723846724[[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"729730[[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"776893777[[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]902903[[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]798924799[[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]938939[[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]807947808[[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]9871127988[[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]9971136998[[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]123313721234[[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]160217421603[[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]17551756[[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]161517681622 "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]16281781170018531701[[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]17121866181419681815[[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]191820721919[[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]194821021949[[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]19611962[[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]199321341994[[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]20092010[[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]20232024[[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]203821492039[[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]207321862074[[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]209722102098[[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]210822212109[[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]211922322123source = "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]212822412129[[package]]2242[[package]]216222752163[[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]217122842172[[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]231824312319[[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]23302331[[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]239124922392[[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"244925502450[[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]263127322632[[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",270528062706[[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",272028212721[[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]273028312731[[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"273628372737[[package]]2838[[package]]2738name = "futures-cpupool"2839name = "futures-cpupool"274628472747[[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",275828592759[[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"276428652765[[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]277928802780[[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",280329042804[[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"280929102810[[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"281529162816[[package]]2917[[package]]2817name = "futures-timer"2918name = "futures-timer"282729282828[[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]291730182918[[package]]3019[[package]]3020name = "gimli"3021version = "0.25.0"3022source = "registry+https://github.com/rust-lang/crates.io-index"3023checksum = "f0a01e0497841a3b2db4f8afa483cce65f7e96a3498bd6c541734792aeac8fe7"30243025[[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"292330302924[[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]302531323026[[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]31413142[[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"303431503035[[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]304931653050[[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"305531713056[[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]316932853170[[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",325633723257[[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",336134773362[[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]337034863371[[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]33793380[[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]33883389[[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]339734953398[[package]]3496[[package]]340635043407[[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]34173418[[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"342835153429[[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]343935263440[[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]347335603754 "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]380438913805[[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]39763977[[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"387040423871[[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"387640483877[[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]398641583991checksum = "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",433645084337[[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]43644536438345554384[[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]439445664395[[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]440345754404[[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]443846104439[[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]444846204480source = "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]448546574486[[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]455047224551[[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]461147834639[[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]464848204652source = "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]466848404669[[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]483250044833[[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]48494850[[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]486550224915 "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]498451444985[[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",510252685103[[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]512352915124[[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]51325133[[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"516353225164[[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]51745175[[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"521553635216[[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]535255005353[[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]538055295381[[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]55505551[[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]555857345559[[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]57495750[[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]57665767[[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]57825783[[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]57995800[[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]58135814[[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]582160795822[[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]61016102[[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]584961305850[[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]61446145[[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]590261975903[[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]62136214[[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]62266227[[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]593562615936[[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]62706271[[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]602463606025[[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]606664056067[[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]60926432612764676128[[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]61396140[[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]615264816153[[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]623365626234[[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]626865976269[[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]644367726444[[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]645267816453[[package]]6782[[package]]646367926464[[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",648068096481[[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"648668156487[[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",657369026574[[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",659369226594[[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",664269716643[[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",665469836655[[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]668370156684[[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]683471696835[[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]689572316896[[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",704673827047[[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",706173977062[[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",711374497114[[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",714674827147[[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]721875587219[[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",726076037261[[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",729776427298[[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]738577347386[[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",740677557407[[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]741677657417[[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]747378217474[[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",756579137566[[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]757879267579[[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]75917592[[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"764679817647[[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]772080557721[[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]777281077773[[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"777881137779[[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",812984648130[[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]81388139[[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]816984958170[[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]85628563[[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"817985728180[[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"818585788186[[package]]8579[[package]]8187name = "rustc-hash"8580name = "rustc-hash"8205]8598]820685998207[[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]86088609[[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"825686588257[[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]829286948293[[package]]8695[[package]]8309]8711]831087128311[[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]87248725[[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]887992958880[[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]933997569380]9797]938197989382[[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]93909391[[package]]9392name = "secp256k1-sys"9393version = "0.3.0"9394source = "registry+https://github.com/rust-lang/crates.io-index"9395checksum = "11553d210db090930f4432bea123b31f70bbf693ace14504ea2a35e796c28dd2"9396dependencies = [9397 "cc",9398]93999400[[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"954099399541[[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",9612100119613[[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"9618100179619[[package]]10018[[package]]9620name = "signal-hook"10019name = "signal-hook"9637100369638[[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"9643100429644[[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]96559656[[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]9682100699683[[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]9694100819695[[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]9736101239764 "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]9773101609774[[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]9788101759789[[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]98009801[[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]9910102859911[[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]99199920[[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]9995103619996[[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]100821044810083[[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]102171058310218[[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]103241069010325[[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"103521071810353[[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]105491091510550[[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]105721093810573[[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]1058410585[[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"106051095910606[[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",106161097010617[[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]106711102510672[[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]107471110110748[[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",107571111110758[[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",107951114910796[[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"108011115510802[[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",108121116610813[[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",108361119010837[[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"108421119610843[[package]]11197[[package]]10844name = "tempfile"11198name = "tempfile"108741122810875[[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]108831123710884[[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",109631131710964[[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]110251137911026[[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]110351138911036[[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]1133411688113551170911356[[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",113771173111378[[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]114091176311410[[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]1149411849115061186111507[[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]1151811519[[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]115571190011558[[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"115631190611564[[package]]11907[[package]]11565name = "unicode-width"11908name = "unicode-width"115751191811576[[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]115851192811586[[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]116281197111629[[package]]11972[[package]]116611200411662[[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"116671201011668[[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]121191246212120[[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]1254512546[[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"122141264012215[[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]122241265012225[[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",122431266912244[[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",122801270612281[[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]Cargo.tomldiffbeforeafterboth5 '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'Makefilediffbeforeafterbothno changes
README.mddiffbeforeafterboth257Uncomment following lies:257Uncomment following lies:2581. In node/rpc/Cargo.toml2581. In node/rpc/Cargo.toml259```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```2622622632. In node/rpc/src/lib.rs2632. In node/rpc/src/lib.rs280 # [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 = false283 # branch = 'polkadot-v0.9.7'283 # branch = 'polkadot-v0.9.8'284 # version = '3.0.0'284 # version = '3.0.0'285285286 # [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 = false289 # branch = 'polkadot-v0.9.7'289 # branch = 'polkadot-v0.9.8'290 # version = '3.0.0'290 # version = '3.0.0'291291292 # [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 = false295 # 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' }crates/evm-coder-macros/src/lib.rsdiffbeforeafterboth6use 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};1212106 }106 }107}107}108108109fn 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}118118119fn 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}123123124fn 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}128128129// 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)?;133133160 }160 }161 };161 };162162163 parse_ident_from_type(ty)163 Ok(ty)164}164}165165166fn 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}186187fn format_ty(ty: &Ident) -> String {188 if ty == "string" {189 format!("{} memory", ty)190 } else {191 ty.to_string()192 }193}194186195#[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();199191200 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 };204196205 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 };201202 (quote! {203 #input204205 #expanded206 })209 .into()207 .into()210}208}211209crates/evm-coder-macros/src/solidity_interface.rsdiffbeforeafterboth5use 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};111112use 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),545455 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 }666667 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 }747675 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 }8384 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}859186#[derive(Default)]92#[derive(Default)]100106101#[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)]116123117struct 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 }176186177 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}182195197 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 }394407395 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;416410 write!(out, " returns ({})", format_ty(&self.result)).unwrap();417 let args = self411 }418 .args419 .iter()420 .filter(|a| !a.is_special())421 .map(MethodArg::expand_solidity_argument);422423 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}416437417pub 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();428447429 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;462457 let items = self.items;463 let solidity_name = self.info.name.to_string();458459 let call_name = pascal_ident_to_call(&name);464 let call_name = pascal_ident_to_call(&self.info.name);460461 let call_sub = self465 let generics = self.generics;462 .info466463 .inline_is464 .0465 .iter()466 .chain(self.info.is.0.iter())467 .map(Is::expand_call_def);468 let call_inner = self467 let call_sub = self469 .info468 .info470 .inline_is469 .inline_is471 .0470 .0472 .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 = self476 .info475 .info477 .inline_is476 .inline_is495 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);498499 // TODO: Inline inline_is500 let solidity_is = self501 .info502 .is503 .0504 .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 = self509 .info510 .is511 .0512 .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);498516499 // let methods = self.methods.iter().map(Method::solidity_def);517 // let methods = self.methods.iter().map(Method::solidity_def);500518501 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 #consts532 )*533 pub const fn interface_id() -> u32 {534 let mut interface_id = 0;535 #(#interface_id)*536 #(#inline_interface_id)*537 interface_id538 }539 pub fn supports_interface(interface_id: u32) -> bool {540 interface_id != 0xffffff && (541 interface_id == Self::interface_id()542 #(543 || #supports_interface544 )*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_generators568 )*569 #(570 #solidity_event_generators571 )*572573 let mut out = string::new();574 // In solidity interface usage (is) should be preceeded by interface definition575 // This comment helps to sort it in a set576 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 #consts514 )*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_id533 }534 pub fn supports_interface(interface_id: u32) -> bool {535 interface_id != 0xffffff && (536 interface_id == Self::interface_id()537 #(538 || #supports_interface539 )*540 )541 }542 }543 #vis trait #name {544 #(545 #items546 )*547 #(548 #call_inner549 )*550 #[allow(unreachable_code)] // In case of no inner calls599 #[allow(unreachable_code)] // In case of no inner calls551 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 {crates/evm-coder-macros/src/to_log.rsdiffbeforeafterboth1use 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;677struct 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}121413impl 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}324333struct 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 }130131 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}114146115pub struct Events {147pub struct Events {138170139 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);141175142 quote! {176 quote! {143 impl #name {177 impl #name {144 #(178 #(145 #consts179 #consts146 )*180 )*181182 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 }148198149 #[automatically_derived]199 #[automatically_derived]crates/evm-coder/Cargo.tomldiffbeforeafterboth8primitive-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"111312[dev-dependencies]14[dev-dependencies]13hex = "0.4.3"15hex = "0.4.3"141615[features]17[features]16default = ["std"]18default = ["std"]17std = ["ethereum/std", "primitive-types/std"]19std = ["ethereum/std", "primitive-types/std", "evm-core/std"]crates/evm-coder/src/abi.rsdiffbeforeafterboth8 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};121313use crate::types::string;14use crate::{execution::Error, types::string};15use crate::execution::Result;141615const ABI_ALIGNMENT: usize = 32;17const ABI_ALIGNMENT: usize = 32;1617pub type Result<T> = core::result::Result<T, &'static str>;181819#[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]);343935 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 }374938 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 empty44 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 }698175 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 }829783 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()?))103118104 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 }111130163 self.write_padleft(&u128::to_be_bytes(*value))182 self.write_padleft(&u128::to_be_bytes(*value))164 }183 }165184166 /// This method writes u128, and exists only for convenience, because there is167 /// no u256 support in rust168 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();200217201 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);231249232pub 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}262263/// Error, which can be constructed from any ToString type264/// Encoded to Abi as Error(string)265#[derive(Debug)]266pub struct StringError(String);267268impl<E> From<E> for StringError269where270 E: ToString,271{272 fn from(e: E) -> Self {273 Self(e.to_string())274 }275}276277impl 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 out282 }283}284280285#[macro_export]281#[macro_export]286macro_rules! abi_decode {282macro_rules! abi_decode {310 }}306 }}311}307}308309#[cfg(test)]310pub mod test {311 use super::{AbiReader, AbiWriter};312 use hex_literal::hex;313314 #[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();320321 let mut encoder = AbiWriter::new();322 encoder.bool(&true);323 // Offset to subresult324 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();329330 assert_eq!(encoded, alternative_encoded);331332 let mut decoder = AbiReader::new(&encoded);333 assert_eq!(decoder.bool().unwrap(), true);334 assert_eq!(decoder.string().unwrap(), "test");335 }336337 #[test]338 fn mint_sample() {339 let (call, mut decoder) = AbiReader::new_call(&hex!(340 "341 50bb4e7f342 000000000000000000000000ad2c0954693c2b5404b7e50967d3481bea432374343 0000000000000000000000000000000000000000000000000000000000000001344 0000000000000000000000000000000000000000000000000000000000000060345 0000000000000000000000000000000000000000000000000000000000000008346 5465737420555249000000000000000000000000000000000000000000000000347 "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}312359crates/evm-coder/src/execution.rsdiffbeforeafterbothno changes
crates/evm-coder/src/lib.rsdiffbeforeafterboth2#[cfg(not(feature = "std"))]2#[cfg(not(feature = "std"))]3extern crate alloc;3extern crate alloc;445use 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;91210/// Solidity type definitions13/// Solidity type definitions11pub mod types {14pub mod types {50 }53 }51}54}5556pub trait Call: Sized {57 fn parse(selector: u32, input: &mut AbiReader) -> execution::Result<Option<Self>>;58}5960pub trait Callable<C: Call> {61 fn call(&mut self, call: types::Msg<C>) -> execution::Result<AbiWriter>;62}6364#[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}528653#[cfg(test)]87#[cfg(test)]54mod tests {88mod tests {crates/evm-coder/src/solidity.rsdiffbeforeafterbothno changes
crates/evm-coder/tests/a.rsdiffbeforeafterboth1#![allow(dead_code)] // This test only checks that macros is not panicking1#![allow(dead_code)] // This test only checks that macros is not panicking223use 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;67struct Impls;586#[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}111512#[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}172218#[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 }243725 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}284529#[derive(ToLog)]46#[derive(ToLog)]42 },59 },43}60}6162struct ERC20;446345#[solidity_interface]64#[solidity_interface(name = "ERC20")]46trait ERC20 {65impl ERC20 {47 type Error;4849 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}7291launch-config.jsondiffbeforeafterboth7 "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 ]node/cli/Cargo.tomldiffbeforeafterboth334[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'889################################################################################9################################################################################171718[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'222223[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'272728[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'323233[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'373738[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'424243[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'474748[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'535354[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'585859[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'636364[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'686869[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'747475[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'797980[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'848485[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'898990[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'949495[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'100100101[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'105105106[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'110110111[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'115115116[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'120120121[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'125125126[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'130130131[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'135135136[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'140140141[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'145145146[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'150150151[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'155155156[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'160160161[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'165165166[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'170170171[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'175175176[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'180180181[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'185185186[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'190190191[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'195195196[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'200200201[dependencies.serde]201[dependencies.serde]211211212[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'215215216[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'219219220[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'223223224[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'227227228[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'231231232[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'235235236[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'239239240[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'243243244244245################################################################################245################################################################################246# Polkadot dependencies246# Polkadot dependencies247[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'250250251[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'254254255[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'258258259[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'262262263[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'266266267267268################################################################################268################################################################################305jsonrpc-core = '15.0.0'305jsonrpc-core = '15.0.0'306jsonrpc-pubsub = "15.0.0"306jsonrpc-pubsub = "15.0.0"307307308fc-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" }315315316nft-rpc = { path = "../rpc" }316nft-rpc = { path = "../rpc" }317317318[features]318[features]319default = []319default = []320runtime-benchmarks = ['nft-runtime/runtime-benchmarks']320runtime-benchmarks = [321 'nft-runtime/runtime-benchmarks',322 'polkadot-service/runtime-benchmarks',323]321324node/cli/src/chain_spec.rsdiffbeforeafterboth197 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 {node/cli/src/service.rsdiffbeforeafterboth10use 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;131514// Local Runtime Types16// Local Runtime Types15use 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;374038// Frontier Imports41// Frontier Imports39use 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;414542// Runtime type overrides46// Runtime type overrides43type 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();286287 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 });307308 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 );301319302 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 proposing487 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 )node/rpc/Cargo.tomldiffbeforeafterboth13futures = { 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"] }444445pallet-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" }515152pallet-nft = { path = "../../pallets/nft" }52pallet-nft = { path = "../../pallets/nft" }53nft-runtime = { path = "../../runtime" }53nft-runtime = { path = "../../runtime" }pallets/contract-helpers/Cargo.tomldiffbeforeafterboth15version = '0.1.0'15version = '0.1.0'161617[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' }232324[features]24[features]25default = ["std"]25default = ["std"]pallets/contract-helpers/src/lib.rsdiffbeforeafterboth232324 #[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 }262827 #[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 >;646765 #[pallet::storage]68 #[pallet::storage]72 QueryKind = ValueQuery,75 QueryKind = ValueQuery,73 >;76 >;7778 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) == user84 }85 }748675 #[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) != who197 {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;pallets/evm-coder-substrate/Cargo.tomldiffbeforeafterbothno changes
pallets/evm-coder-substrate/src/lib.rsdiffbeforeafterbothno changes
pallets/evm-contract-helpers/Cargo.tomldiffbeforeafterbothno changes
pallets/evm-contract-helpers/src/eth.rsdiffbeforeafterbothno changes
pallets/evm-contract-helpers/src/lib.rsdiffbeforeafterbothno changes
pallets/evm-contract-helpers/src/stubs/ContractHelpers.rawdiffbeforeafterbothbinary blob — no preview
pallets/evm-contract-helpers/src/stubs/ContractHelpers.soldiffbeforeafterbothno changes
pallets/evm-migration/Cargo.tomldiffbeforeafterbothno changes
pallets/evm-migration/src/benchmarking.rsdiffbeforeafterbothno changes
pallets/evm-migration/src/lib.rsdiffbeforeafterbothno changes
pallets/evm-migration/src/weights.rsdiffbeforeafterbothno changes
pallets/evm-transaction-payment/Cargo.tomldiffbeforeafterbothno changes
pallets/evm-transaction-payment/src/lib.rsdiffbeforeafterbothno changes
pallets/inflation/Cargo.tomldiffbeforeafterboth43default-features = false43default-features = false44optional = true44optional = true45git = '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'484849[dependencies.frame-support]49[dependencies.frame-support]50default-features = false50default-features = false51git = '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'545455[dependencies.frame-system]55[dependencies.frame-system]56default-features = false56default-features = false57git = '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'606061[dependencies.pallet-balances]61[dependencies.pallet-balances]62default-features = false62default-features = false63git = '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'666667[dependencies.pallet-timestamp]67[dependencies.pallet-timestamp]68default-features = false68default-features = false69git = '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'727273[dependencies.pallet-randomness-collective-flip]73[dependencies.pallet-randomness-collective-flip]74default-features = false74default-features = false75git = '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'787879[dependencies.sp-std]79[dependencies.sp-std]80default-features = false80default-features = false81git = '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'848485[dependencies.serde]85[dependencies.serde]90[dependencies.sp-runtime]90[dependencies.sp-runtime]91default-features = false91default-features = false92git = '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'959596[dependencies.sp-core]96[dependencies.sp-core]97default-features = false97default-features = false98git = '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'101101102[dependencies.sp-io]102[dependencies.sp-io]103default-features = false103default-features = false104git = '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'107107108108pallets/inflation/src/tests.rsdiffbeforeafterboth32 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}373738frame_support::construct_runtime!(38frame_support::construct_runtime!(91 type InflationBlockInterval = InflationBlockInterval;91 type InflationBlockInterval = InflationBlockInterval;92}92}939394// 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 BlockInflation112 Inflation::on_initialize(1);111 Inflation::on_initialize(1);112113 // SBP M2 review: Verify expected block inflation for year 1113 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();160161 // SBP M2 review: go through all the block inflations for year 1,162 // total issuance will be updated accordingly163 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 );159170160 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 2163 // Assert that year 1 inflation is less than year 0164 assert!(block_inflation_year_0 > block_inflation_year_1);174 assert_eq!(block_inflation_year_1, 1952);175176 // SBP M2 review: this is actually not true177 // Assert that year 1 inflation is less than year 0178 // assert!(block_inflation_year_0 > block_inflation_year_1);165 });179 });166}180}167181179 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();181195196 // 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 inflation183 assert!(block_inflation_year_before > block_inflation_year_after);198 assert!(block_inflation_year_before > block_inflation_year_after);184 }199 }pallets/nft-charge-transaction/Cargo.tomldiffbeforeafterboth202021[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' }323233pallet-nft-transaction-payment = { default-features = false, path="../nft-transaction-payment" }33pallet-nft-transaction-payment = { default-features = false, path="../nft-transaction-payment" }3434pallets/nft-charge-transaction/src/lib.rsdiffbeforeafterboth76 where76 where77 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 }818182 fn get_priority(82 fn get_priority(pallets/nft-transaction-payment/Cargo.tomldiffbeforeafterboth202021[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' }313132up-sponsorship = { default-features = false, path = "../../primitives/sponsorship", version = "0.1.0" }32up-sponsorship = { default-features = false, path = "../../primitives/sponsorship", version = "0.1.0" }3333pallets/nft-transaction-payment/src/benchmarking.rsdiffbeforeafterbothno changes
pallets/nft-transaction-payment/src/lib.rsdiffbeforeafterboth11#[cfg(feature = "std")]11#[cfg(feature = "std")]12pub use serde::*;12pub use serde::*;1314#[cfg(feature = "runtime-benchmarks")]15mod benchmarking;161317use frame_support::{decl_module, decl_storage};14use frame_support::{decl_module, decl_storage};18use sp_std::prelude::*;15use sp_std::prelude::*;pallets/nft/Cargo.tomldiffbeforeafterboth37 'ethereum/std',37 'ethereum/std',38 'rlp/std',38 'rlp/std',393940 '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"]444545################################################################################46################################################################################46# Substrate Dependencies47# Substrate Dependencies55default-features = false56default-features = false56optional = true57optional = true57git = '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'606161[dependencies.frame-support]62[dependencies.frame-support]62default-features = false63default-features = false63git = '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'666767[dependencies.frame-system]68[dependencies.frame-system]68default-features = false69default-features = false69git = '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'727373[dependencies.pallet-balances]74[dependencies.pallet-balances]74default-features = false75default-features = false75git = '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'787979[dependencies.pallet-timestamp]80[dependencies.pallet-timestamp]80default-features = false81default-features = false81git = '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'848585[dependencies.pallet-randomness-collective-flip]86[dependencies.pallet-randomness-collective-flip]86default-features = false87default-features = false87git = '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'909191[dependencies.sp-std]92[dependencies.sp-std]92default-features = false93default-features = false93git = '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'969797[dependencies.pallet-transaction-payment]98[dependencies.pallet-transaction-payment]98default-features = false99default-features = false99git = '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'102103103[dependencies.serde]104[dependencies.serde]108[dependencies.sp-runtime]109[dependencies.sp-runtime]109default-features = false110default-features = false110git = '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'113114114[dependencies.sp-core]115[dependencies.sp-core]115default-features = false116default-features = false116git = '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'119120120[dependencies.sp-io]121[dependencies.sp-io]121default-features = false122default-features = false122git = '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'125126126127139140140141141[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" }146146147evm-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] }149152150pallet-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"157pallets/nft/src/benchmarking.rsdiffbeforeafterboth1#![cfg(feature = "runtime-benchmarks")]1#![cfg(feature = "runtime-benchmarks")]223use super::*;3use super::*;4use crate::Module as Nft;4use crate::Pallet;56use 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;91010const SEED: u32 = 1;11const SEED: u32 = 1;11/*1212fn 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}191920fn 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}2627fn default_fungible_data() -> CreateItemData {28 CreateItemData::Fungible(CreateFungibleData { value: 1000 })29}3031fn 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}3839fn 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}247325benchmarks! {74benchmarks! {267527 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 }8788 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)9293 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))9899 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))105106 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)110111 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)115116 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)121122 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))127128 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))134135 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())139140 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)145146 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)152153 // nft item154 create_item_nft {155 let b in 0..(CUSTOM_DATA_LIMIT * 2);156157 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)164165 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_LIMIT168 let b in 1..1000;169170 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)174175 // fungible item176 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)183184 create_multiple_items_fungible {185 let b in 1..1000;186187 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)191192 // refungible item193 create_item_refungible {194 let b in 0..(CUSTOM_DATA_LIMIT * 2);195196 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)204205 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_LIMIT208 let b in 1..1000;209210 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)214215 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)221222 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)229230 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)237238 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)245246 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/*25035 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;25843 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());259 // Nft44 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());26853 let whitelist_account: T::AccountId = account("admin", 0, SEED);269 // Fungible54 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());27863 let whitelist_account: T::AccountId = account("admin", 0, SEED);279 // ReFungible64 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;28873 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)29176292 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();29681 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())?;29984 }: 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>>();30489 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());30792 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 {31297 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();315100 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 {322107 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());327112 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)331116332 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)135136 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)146147 // nft item148 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();156157 }: create_item(RawOrigin::Signed(caller.clone()), 2, caller.clone(), data)158159 #[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())?;176177 }: create_item(RawOrigin::Signed(caller.clone()), 2, caller.clone(), data)178179 // fungible item180 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();188189 }: create_item(RawOrigin::Signed(caller.clone()), 2, caller.clone(), data)190191 // refungible item192 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();200201 }: create_item(RawOrigin::Signed(caller.clone()), 2, caller.clone(), data)202203 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)?;212213 }: burn_item(RawOrigin::Signed(caller.clone()), 2, 1)214215 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)?;225226 }: transfer(RawOrigin::Signed(caller.clone()), recipient.clone(), 2, 1, 1)227228 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)?;238239 }: transfer(RawOrigin::Signed(caller.clone()), recipient.clone(), 2, 1, 1)240241 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)?;251252 }: transfer(RawOrigin::Signed(caller.clone()), recipient.clone(), 2, 1, 1)253254 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)?;264265 }: approve(RawOrigin::Signed(caller.clone()), recipient.clone(), 2, 1)266267 // Nft268 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)?;279280 }: transfer_from(RawOrigin::Signed(caller.clone()), caller.clone(), recipient.clone(), 2, 1, 1)281282 // Fungible283 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)?;294295 }: transfer_from(RawOrigin::Signed(caller.clone()), caller.clone(), recipient.clone(), 2, 1, 1)296297 // ReFungible298 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)?;309310 }: transfer_from(RawOrigin::Signed(caller.clone()), caller.clone(), recipient.clone(), 2, 1, 1)311312 enable_contract_sponsoring {313 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());314315 }: enable_contract_sponsoring(RawOrigin::Signed(caller.clone()), caller.clone(), true)316317 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())?;324325 }: set_offchain_schema(RawOrigin::Signed(caller.clone()), 2, [1,2,3].to_vec())326327 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())335336 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())344345 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)?;354355 }: set_variable_meta_data(RawOrigin::Signed(caller.clone()), 2, 1, [1, 2, 3].to_vec())356357 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)365366 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: 0376 };377 }: set_chain_limits(RawOrigin::Signed(caller.clone()), limits)378379 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)388389 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())?;396397 let cl = CollectionLimits {398 account_token_ownership_limit: 0,399 sponsored_data_size: 0,400 token_limit: 0,401 sponsor_transfer_timeout: 0402 };403404 }: set_collection_limits(RawOrigin::Signed(caller.clone()), 2, cl)405406 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())409410 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())414415 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}420343pallets/nft/src/default_weights.rsdiffbeforeafterbothno changes
pallets/nft/src/eth/erc.rsdiffbeforeafterboth1use 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};3134#[solidity_interface]14#[solidity_interface(name = "ERC165")]5pub trait InlineNameSymbol {6 type Error;78 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}112412#[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 }153216 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}183719#[solidity_interface]38#[solidity_interface(name = "InlineTotalSupply")]20pub trait ERC165 {39impl<T: Config> CollectionHandle<T> {21 type Error;2223 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 tokens42 Ok(0.into())43 }44}254526#[solidity_interface(inline_is(InlineNameSymbol))]46#[solidity_interface(name = "ERC721Metadata", inline_is(InlineNameSymbol))]27pub trait ERC721Metadata {47impl<T: Config> CollectionHandle<T> {28 type Error;2930 #[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}335934#[solidity_interface(inline_is(InlineTotalSupply))]60#[solidity_interface(name = "ERC721Enumerable", inline_is(InlineTotalSupply))]35pub trait ERC721Enumerable {61impl<T: Config> CollectionHandle<T> {36 type Error;3738 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 }6539 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 implemetable41 owner: address,68 Err("not implemented".into())42 index: uint256,69 }43 ) -> Result<uint256, Self::Error>;70}44}457146#[derive(ToLog)]72#[derive(ToLog)]47pub enum ERC721Events {73pub enum ERC721Events {71 },97 },72}98}739974#[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")]7778 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 implemetable122 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 implemetable132 Err("not implemented".into())133 }9713498 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")?;147148 <Module<T>>::transfer_from_internal(&caller, &from, &to, self, token_id, 1)149 .map_err(|_| "transferFrom error")?;150 Ok(())151 }152106 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")?;163164 <Module<T>>::approve_internal(&caller, &approved, self, token_id, 1)165 .map_err(|_| "approve internal")?;166 Ok(())167 }168113 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 implemetable176 Err("not implemented".into())177 }119178120 fn get_approved(&self, token_id: uint256) -> Result<address, Self::Error>;179 fn get_approved(&self, _token_id: uint256) -> Result<address> {180 // TODO: Not implemetable181 Err("not implemented".into())182 }183121 fn is_approved_for_all(184 fn is_approved_for_all(&self, _owner: address, _operator: address) -> Result<address> {122 &self,185 // TODO: Not implemetable123 owner: address,186 Err("not implemented".into())124 operator: address,187 }125 ) -> Result<address, Self::Error>;126}188}189190#[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")?;195196 <Module<T>>::burn_item_internal(&caller, &self, token_id, 1).map_err(|_| "burn error")?;197 Ok(())198 }199}200201#[derive(ToLog)]202pub enum ERC721MintableEvents {203 #[allow(dead_code)]204 MintingFinished {},205}127206128#[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 }212213 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_id221 {222 return Err("item id should be next".into());223 }224225 <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 }237238 #[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_id253 {254 return Err("item id should be next".into());255 }256257 <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 }271272 fn finish_minting(&mut self, _caller: caller) -> Result<bool> {273 Err("not implementable".into())274 }139}275}276277#[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")?;290291 <Module<T>>::transfer_internal(&caller, &to, self, token_id, 1)292 .map_err(|_| "transfer error")?;293 Ok(())294 }295296 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}140303141#[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}151317152#[derive(ToLog)]318#[derive(ToLog)]153pub enum ERC20Events {319pub enum ERC20Events {168}334}169335170#[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 *decimals345 } 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")?;358359 <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")?;375376 <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")?;390391 <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);398399 Ok(<Allowances<T>>::get(self.id, (1, owner.as_sub(), spender.as_sub())).into())400 }401}197402198#[solidity_interface(is(ERC165, ERC20))]403#[solidity_interface(name = "UniqueFungible", is(ERC165, ERC20))]199pub trait UniqueFungible {404impl<T: Config> CollectionHandle<T> {}200 type Error;405201}406// Not a tests, but code generators407generate_stubgen!(nft_impl, UniqueNFTCall, true);408generate_stubgen!(nft_iface, UniqueNFTCall, false);409410generate_stubgen!(fungible_impl, UniqueFungibleCall, true);411generate_stubgen!(fungible_iface, UniqueFungibleCall, false);202412pallets/nft/src/eth/erc_impl.rsdiffbeforeafterbothno changes
pallets/nft/src/eth/log.rsdiffbeforeafterbothno changes
pallets/nft/src/eth/mod.rsdiffbeforeafterboth1pub mod account;1pub mod account;2pub mod erc;2pub mod erc;3mod erc_impl;4pub mod log;5pub mod sponsoring;3pub mod sponsoring;647use 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;1213use 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;1617use crate::{Config, CollectionById, CollectionHandle, CollectionId, CollectionMode};11use crate::{Config, CollectionById, CollectionHandle, CollectionId, CollectionMode};1819use erc::{UniqueFungible, UniqueFungibleCall, UniqueNFT, UniqueNFTCall};12use erc::{UniqueFungibleCall, UniqueNFTCall};20use evm_coder::{types::*, abi::AbiReader};211322pub struct NftErcSupport<T: Config>(core::marker::PhantomData<T>);14pub struct NftErcSupport<T: Config>(core::marker::PhantomData<T>);231542 H160(out)34 H160(out)43}35}443645fn 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}10084101impl<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}153154// TODO: This function is slow, and output can be memoized155pub 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/8728157 #[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 logs167 data: Vec::from([0, 0, 0, 0]),168 }169 .sign(170 // TODO: move to pallet config171 // 0xF70631E55faff9f3FD3681545aa6c724226a3853172 // 9dbaef9b3ebc00e53f67c6a77bcfbf2c4f2aebe4d70d94af4f2df01744b7a91a173 &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}185132pallets/nft/src/eth/sponsoring.rsdiffbeforeafterboth1//! Implements EVM sponsoring logic via OnChargeEVMTransaction1//! Implements EVM sponsoring logic via OnChargeEVMTransaction223use 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;2021type NegativeImbalanceOf<C, T> =22 <C as Currency<<T as frame_system::Config>::AccountId>>::NegativeImbalance;19use core::marker::PhantomData;2324pub struct ChargeEvmTransaction;25pub struct ChargeEvmLiquidityInfo<T>26where27 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}332134struct AnyError;22struct AnyError;352346 .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_timeout59 } else {46 } else {60 ChainLimit::get().nft_sponsor_transfer_timeout47 NFT_SPONSOR_TRANSFER_TIMEOUT61 };48 };624963 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_timeout90 } else {77 } else {91 ChainLimit::get().fungible_sponsor_transfer_timeout78 FUNGIBLE_SPONSOR_TRANSFER_TIMEOUT92 };79 };938094 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}120107108pub 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> {122where123 T: Config,124 T: pallet_evm::Config,125{126 type LiquidityInfo = Option<ChargeEvmLiquidityInfo<T>>;127128 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 collection118 .sponsorship119 .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 None146147 // TODO: Pay fee from substrate address148 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}171128pallets/nft/src/eth/stubs/ERC1633.bindiffbeforeafterbothno changes
pallets/nft/src/eth/stubs/ERC20.bindiffbeforeafterbothbinary blob — no preview
pallets/nft/src/eth/stubs/ERC20.soldiffbeforeafterbothno changes
pallets/nft/src/eth/stubs/ERC721.bindiffbeforeafterbothno changes
pallets/nft/src/eth/stubs/ERC721.soldiffbeforeafterbothno changes
pallets/nft/src/eth/stubs/Invalid.bindiffbeforeafterbothno changes
pallets/nft/src/eth/stubs/UniqueFungible.rawdiffbeforeafterbothbinary blob — no preview
pallets/nft/src/eth/stubs/UniqueFungible.soldiffbeforeafterbothno changes
pallets/nft/src/eth/stubs/UniqueInvalid.rawdiffbeforeafterbothno changes
pallets/nft/src/eth/stubs/UniqueNFT.rawdiffbeforeafterbothbinary blob — no preview
pallets/nft/src/eth/stubs/UniqueNFT.soldiffbeforeafterbothno changes
pallets/nft/src/eth/stubs/UniqueRefungible.rawdiffbeforeafterbothno changes
pallets/nft/src/lib.rsdiffbeforeafterboth31 StorageValue, transactional,31 StorageValue, transactional,32};32};333334use 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;474848#[cfg(test)]49#[cfg(test)]49mod mock;50mod mock;505151#[cfg(test)]52#[cfg(test)]52mod tests;53mod tests;535454mod default_weights;55mod eth;55mod eth;56mod sponsorship;56mod sponsorship;57pub use sponsorship::NftSponsorshipHandler;57pub use sponsorship::NftSponsorshipHandler;58pub use eth::sponsoring::NftEthSponsorshipHandler;585959pub 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;6566pub 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}986899decl_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 option181 MetadataFlagFrozen,151 MetadataFlagFrozen,152 /// Collection settings not allowing items transferring153 TransferNotAllowed,154 /// Can't transfer tokens to ethereum zero address155 AddressIsZero,182 }156 }183}157}184158159#[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}236214237pub 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>;239217240 /// 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}252231253 type EthereumChainId: Get<u64>;232type SelfWeightOf<T> = <T as Config>::WeightInfo;233234trait 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, fungible247 Self::approve_nft()248 }254 type EthereumTransactionSender: pallet_ethereum::EthereumTransactionSender;249 fn set_variable_meta_data(data: u32) -> Weight {255}250 // TODO: refungible251 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, fungible260 Self::burn_item_nft()261 }262}263impl<T: WeightInfo> WeightInfoHelpers for T {}256264257// # Used definitions265// # Used definitions258//266//289 ItemListIndex: map hasher(blake2_128_concat) CollectionId => TokenId;297 ItemListIndex: map hasher(blake2_128_concat) CollectionId => TokenId;290 //#endregion298 //#endregion291292 //#region Chain limits struct293 pub ChainLimit get(fn chain_limit) config(): ChainLimits;294 //#endregion295299296 //#region Bound counters300 //#region Bound counters297 /// Amount of collections destroyed, used for total amount tracking with301 /// Amount of collections destroyed, used for total amount tracking with444 origin: T::Origin448 origin: T::Origin445 {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>;448453449 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 ID469 #[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 _ => 0496 };501 };497498 let chain_limit = ChainLimit::get();499502500 let created_count = CreatedCollectionCount::get();503 let created_count = CreatedCollectionCount::get();501 let destroyed_count = DestroyedCollectionCount::get();504 let destroyed_count = DestroyedCollectionCount::get();502505503 // bound Total number of collections506 // bound Total number of collections504 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);505508506 // check params509 // check params507 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);511514512 // Generate next collection ID515 // Generate next collection ID513 let next_id = created_count516 let next_id = created_count517 CreatedCollectionCount::put(next_id);520 CreatedCollectionCount::put(next_id);518521519 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 };523526538 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 };542546543 // Add new collection to map547 // Add new collection to map558 /// # Arguments562 /// # Arguments559 ///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 {564568569 fail!(Error::<T>::NoPermission);573 fail!(Error::<T>::NoPermission);570 }574 }571575572 <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);579583580 <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);583587584 <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);587591588 <VariableMetaDataBasket<T>>::remove_prefix(collection_id);592 <VariableMetaDataBasket<T>>::remove_prefix(collection_id, None);589593590 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{612616635 /// * 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{641645663 /// * 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) -> DispatchResult669 {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()676677 Ok(())678 }680 }679681680 /// 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) -> DispatchResult696 {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()703704 Ok(())705 }705 }706706707 /// 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 {721721722 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()727728 Ok(())729 }727 }730728731 /// 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)?;806803807 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()809810 Ok(())811 }806 }812807813 /// # Permissions808 /// # Permissions817 /// # Arguments812 /// # Arguments818 ///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 );830825831 target_collection.sponsorship = SponsorshipState::Confirmed(sender);826 target_collection.sponsorship = SponsorshipState::Confirmed(sender);832 Self::save_collection(target_collection);827 target_collection.save()833834 Ok(())835 }828 }836829837 /// Switch back to pay-per-own-transaction model.830 /// Switch back to pay-per-own-transaction model.843 /// # Arguments836 /// # Arguments844 ///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)?;853846854 target_collection.sponsorship = SponsorshipState::Disabled;847 target_collection.sponsorship = SponsorshipState::Disabled;855 Self::save_collection(target_collection);848 target_collection.save()856857 Ok(())858 }849 }859850860 /// 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))]883874884 #[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)?;889880890 Self::create_item_internal(&sender, &collection, &owner, data)?;881 Self::create_item_internal(&sender, &collection, &owner, data)?;891882892 // Self::submit_logs(collection)?;893 Ok(())883 collection.submit_logs()894 }884 }895885896 /// 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 {923913924 Self::create_multiple_items_internal(&sender, &collection, &owner, items_data)?;914 Self::create_multiple_items_internal(&sender, &collection, &owner, items_data)?;925915926 // Self::submit_logs(collection)?;927 Ok(())916 collection.submit_logs()928 }917 }918919 // TODO! transaction weight920921 /// Set transfers_enabled value for particular collection922 ///923 /// # Permissions924 ///925 /// * Collection Owner.926 ///927 /// # Arguments928 ///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 {935936 let sender = ensure_signed(origin)?;937 let mut target_collection = Self::get_collection(collection_id)?;938939 Self::check_owner_permissions(&target_collection, &sender)?;940941 target_collection.transfers_enabled = value;942 target_collection.save()943 }929944930 // TODO! transaction weight945 // TODO! transaction weight931 /// Set meta_update_permission value for particular collection946 /// Set meta_update_permission value for particular collection971 /// * 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 {977992980995981 Self::burn_item_internal(&sender, &target_collection, item_id, value)?;996 Self::burn_item_internal(&sender, &target_collection, item_id, value)?;982997983 // Self::submit_logs(target_collection)?;984 Ok(())998 target_collection.submit_logs()985 }999 }9861000987 /// Change ownership of the token.1001 /// Change ownership of the token.1007 /// * Non-Fungible Mode: Ignored1021 /// * Non-Fungible Mode: Ignored1008 /// * Fungible Mode: Must specify transferred amount1022 /// * Fungible Mode: Must specify transferred amount1009 /// * 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)?;101510291016 Self::transfer_internal(&sender, &recipient, &collection, item_id, value)?;1030 Self::transfer_internal(&sender, &recipient, &collection, item_id, value)?;101710311018 // Self::submit_logs(collection)?;1019 Ok(())1032 collection.submit_logs()1020 }1033 }102110341022 /// 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)?;104210551043 Self::approve_internal(&sender, &spender, &collection, item_id, amount)?;1056 Self::approve_internal(&sender, &spender, &collection, item_id, amount)?;104410571045 // Self::submit_logs(collection)?;1046 Ok(())1058 collection.submit_logs()1047 }1059 }104810601049 /// 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)?;107310851074 Self::transfer_from_internal(&sender, &from, &recipient, &collection, item_id, value)?;1086 Self::transfer_from_internal(&sender, &from, &recipient, &collection, item_id, value)?;107510871076 // 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: enum1135 #[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()11471148 Ok(())1149 }1158 }115011591151 /// 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)?;117311821174 // check schema limit1183 // check schema limit1175 ensure!(schema.len() as u32 <= ChainLimit::get().offchain_schema_limit, "");1184 ensure!(schema.len() as u32 <= OFFCHAIN_SCHEMA_LIMIT, "");117611851177 target_collection.offchain_schema = schema;1186 target_collection.offchain_schema = schema;1178 Self::save_collection(target_collection);1187 target_collection.save()11791180 Ok(())1181 }1188 }118211891183 /// 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)?;120512121206 // check schema limit1213 // check schema limit1207 ensure!(schema.len() as u32 <= ChainLimit::get().const_on_chain_schema_limit, "");1214 ensure!(schema.len() as u32 <= CONST_ON_CHAIN_SCHEMA_LIMIT, "");120812151209 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()12111212 Ok(())1213 }1218 }121412191215 /// 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)?;123712421238 // check schema limit1243 // check schema limit1239 ensure!(schema.len() as u32 <= ChainLimit::get().variable_on_chain_schema_limit, "");1244 ensure!(schema.len() as u32 <= VARIABLE_ON_CHAIN_SCHEMA_LIMIT, "");124012451241 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()12431244 Ok(())1245 }1248 }124612491247 // Sudo permissions function1248 #[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: ChainLimits1253 ) -> DispatchResult {12541255 #[cfg(not(feature = "runtime-benchmarks"))]1256 ensure_root(origin)?;12571258 <ChainLimit>::put(limits);1259 Ok(())1260 }12611262 #[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();127412611275 // collection bounds1262 // collection bounds1276 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);128012671281 // token_limit check prev1268 // token_limit check prev129012771291 target_collection.limits = new_limits;1278 target_collection.limits = new_limits;12791292 Self::save_collection(target_collection);1280 target_collection.save()12931294 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>::AddressIsZero1295 );12961306 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>::AddressIsZero1314 );13151321 // Limits check1316 // Limits check1322 Self::is_correct_transfer(target_collection, recipient)?;1317 Self::is_correct_transfer(target_collection, recipient)?;132313181324 // Transfer permissions check1319 // Transfer permissions check1325 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>::NoPermission1329 );1324 );133013251371 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)?;137613701377 // Transfer permissions check1371 // Transfer permissions check1378 let bypasses_limits = collection.limits.owner_can_transfer1372 let bypasses_limits = collection.limits.owner_can_transfer1379 && Self::is_owner_or_admin_permissions(collection, sender);1373 && Self::is_owner_or_admin_permissions(collection, sender)?;138013741381 let allowance_limit = if bypasses_limits {1375 let allowance_limit = if bypasses_limits {1382 None1376 None1383 } 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 }139313871388 collection.consume_sload()?;1394 let allowance: u128 = amount1389 let allowance: u128 = amount1395 .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 }141714131418 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 }142614221427 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 him1443 return Self::transfer_internal(from, recipient, collection, item_id, amount);1444 }14451446 // Check approval1445 collection.consume_gas(2000000)?;1447 collection.consume_sload()?;1446 // Check approval1447 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()));144914501454 ensure!(1455 ensure!(1455 approval >= amount1456 approval >= amount1456 || (collection.limits.owner_can_transfer1457 || (collection.limits.owner_can_transfer1457 && Self::is_owner_or_admin_permissions(collection, sender)),1458 && Self::is_owner_or_admin_permissions(collection, sender)?),1458 Error::<T>::NoPermission1459 Error::<T>::NoPermission1459 );1460 );14601461146514661466 // 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 01467 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 }150215041503 Ok(())1505 Ok(())1512 Self::token_exists(collection, item_id)?;1514 Self::token_exists(collection, item_id)?;151315151514 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>::TokenVariableDataLimitExceeded1517 );1519 );151815201519 // Modify permissions check1521 // Modify permissions check1522 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>::NoPermission1526 );152115271522 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_transfer1587 && Self::is_owner_or_admin_permissions(collection, sender)),1593 && Self::is_owner_or_admin_permissions(collection, sender)?),1588 Error::<T>::NoPermission1594 Error::<T>::NoPermission1589 );1595 );159015961626 let collection_id = collection.id;1632 let collection_id = collection.id;162716331628 // check token limit and account token limit1634 // check token limit and account token limit1635 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>::AccountTokenLimitExceeded1634 );1641 );16421643 // preliminary transfer check1644 ensure!(collection.transfers_enabled, Error::<T>::TransferNotAllowed);163516451636 Ok(())1646 Ok(())1637 }1647 }1661 Error::<T>::AccountTokenLimitExceeded1671 Error::<T>::AccountTokenLimitExceeded1662 );1672 );166316731664 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 sizes1681 ensure!(1682 ChainLimit::get().custom_data_limit >= data.const_data.len() as u32,1683 Error::<T>::TokenConstDataLimitExceeded1684 );1685 ensure!(1686 ChainLimit::get().custom_data_limit >= data.variable_data.len() as u32,1687 Error::<T>::TokenVariableDataLimitExceeded1688 );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 sizes1702 ensure!(1703 ChainLimit::get().custom_data_limit >= data.const_data.len() as u32,1704 Error::<T>::TokenConstDataLimitExceeded1705 );1706 ensure!(1707 ChainLimit::get().custom_data_limit >= data.variable_data.len() as u32,1708 Error::<T>::TokenVariableDataLimitExceeded1709 );17101711 // Check refungibility limits1700 // Check refungibility limits1712 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 };174117301742 Self::add_nft_item(collection, item)?;1731 Self::add_nft_item(collection, item)?;175217411753 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 };175817471759 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;177217611773 // 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;177517651776 // Mint1766 // Mint1777 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);178117721782 // Update balance1773 // Update balance1774 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);178717801781 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();180818061809 Self::add_token_index(collection_id, current_index, &owner)?;1807 Self::add_token_index(collection, current_index, &owner)?;181018081811 <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)?;183318311834 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)?;183618341837 <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)?;187418721875 // update balance1873 // update balance1876 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())190319011904 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)?;190719051908 // update balance1906 // update balance1909 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);191519131914 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 }195019531954 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 }19561957 fn save_collection(collection: CollectionHandle<T>) {1958 <CollectionById<T>>::insert(collection.id, collection.into_inner());1959 }19601961 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 }197019591971 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.owner1988 || <AdminList<T>>::get(collection.id).contains(subject)1978 || <AdminList<T>>::get(collection.id).contains(subject))1989 }1979 }199019801991 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>::NoPermission1998 );1988 );199919892000 Ok(())1990 Ok(())2001 }1991 }200219922003 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 }20012002 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 }203620352037 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()?;20422043 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 );20482049 Ok(())2045 Ok(())2074 ) -> DispatchResult {2070 ) -> DispatchResult {2075 let collection_id = collection.id;2071 let collection_id = collection.id;207620722073 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());20772078 recipient_balance.value = recipient_balance2079 .value2080 .checked_add(value)2081 .ok_or(Error::<T>::NumOverflow)?;2078 ensure!(balance.value >= value, Error::<T>::TokenValueTooLow);2082 balance.value = balance20792083 .value2080 // Send balance to recipient (updates balanceOf of recipient)2084 .checked_sub(value)2085 .ok_or(Error::<T>::TokenValueTooLow)?;20862087 // update balanceOf2081 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);208520962086 // Reduce or remove sender2097 // Reduce or remove sender2098 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);209321062094 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)?;21202134212721412128 ensure!(amount >= value, Error::<T>::TokenValueTooLow);2142 ensure!(amount >= value, Error::<T>::TokenValueTooLow);212921432144 collection.consume_sload()?;2130 // update balance2145 // update balance2131 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);213521512152 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);214021582141 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);215621752157 // update index collection2176 // update index collection2158 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_item2161 .owner2180 .owner2179 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 }218422032204 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 }218722072203 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)?;220822292209 ensure!(sender == item.owner, Error::<T>::MustBeTokenOwner);2230 ensure!(sender == item.owner, Error::<T>::MustBeTokenOwner);221022312232 collection.consume_sload()?;2211 // update balance2233 // update balance2212 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);221622392240 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);222122462222 // change owner2247 // change owner2223 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);222622522227 // update index collection2253 // update index collection2228 Self::move_token_index(collection_id, item_id, &old_owner, &new_owner)?;2254 Self::move_token_index(collection, item_id, &old_owner, &new_owner)?;222922552230 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();230723332308 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();230923402325 let current_index = <ItemListIndex>::get(collection_id).checked_add(1).unwrap();2356 let current_index = <ItemListIndex>::get(collection_id).checked_add(1).unwrap();232623572327 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();232823642346 let owner = item.owner.first().unwrap().owner.clone();2382 let owner = item.owner.first().unwrap().owner.clone();234723832348 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();234923902357 }2398 }235823992359 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 limit2406 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 address2409 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>::AddressOwnershipLimitExceeded2371 );2414 );237224152416 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 }238024252426 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());238524322386 if !item_contains {2433 if !item_contains {2387 list.push(item_index);2434 list.push(item_index);2388 }2435 }238924362437 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 }239524442396 Ok(())2445 Ok(())2397 }2446 }239824472399 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 counter2454 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 );241124622463 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());241624692417 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 }242224762423 Ok(())2477 Ok(())2424 }2478 }242524792426 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)?;243424882435 Ok(())2489 Ok(())2436 }2490 }pallets/nft/src/mock.rsdiffbeforeafterboth6use 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}101100101<<<<<<< HEAD102type 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>;104104105=======106>>>>>>> origin/develop105parameter_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.0135 }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(ð.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.1151 }156 }152}157}153158159impl pallet_evm_coder_substrate::Config for Test {160 type EthereumTransactionSender = TestEtheremTransactionSender;161}162154impl 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}166173167// Build genesis storage according to the mock runtime.174// Build genesis storage according to the mock runtime.pallets/nft/src/sponsorship.rsdiffbeforeafterboth1use 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};131614pub 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();515352 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_timeout64 } else {66 } else {65 limits.nft_sponsor_transfer_timeout67 NFT_SPONSOR_TRANSFER_TIMEOUT66 };68 };676968 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_timeout86 } else {88 } else {87 limits.fungible_sponsor_transfer_timeout89 FUNGIBLE_SPONSOR_TRANSFER_TIMEOUT88 };90 };899190 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_timeout109 } else {111 } else {110 limits.refungible_sponsor_transfer_timeout112 REFUNGIBLE_SPONSOR_TRANSFER_TIMEOUT111 };113 };112114113 let mut sponsored = true;115 let mut sponsored = true;pallets/nft/src/tests.rsdiffbeforeafterboth1// Tests to be written here1// Tests to be written here2use 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;111112fn default_collection_numbers_limit() -> u32 {13 1014}1516fn 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}3334fn 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}4018442245fn 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);11895133#[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();137138 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);161135162 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}169143172#[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();176177 create_test_collection(&CollectionMode::NFT, 1);149 create_test_collection(&CollectionMode::NFT, 1);178150179 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}200172201#[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);206177207 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();226227 create_test_collection(&CollectionMode::ReFungible, 1);196 create_test_collection(&CollectionMode::ReFungible, 1);228197229 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();266267 let collection_id = create_test_collection(&CollectionMode::Fungible(3), 1);234 let collection_id = create_test_collection(&CollectionMode::Fungible(3), 1);268235269 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();306307 let collection_id = create_test_collection(&CollectionMode::Fungible(3), 1);272 let collection_id = create_test_collection(&CollectionMode::Fungible(3), 1);308273309 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();348349 let collection_id = create_test_collection(&CollectionMode::ReFungible, 1);312 let collection_id = create_test_collection(&CollectionMode::ReFungible, 1);350313351 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();445446 let collection_id = create_test_collection(&CollectionMode::NFT, 1);407 let collection_id = create_test_collection(&CollectionMode::NFT, 1);447408448 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();468469 let collection_id = create_test_collection(&CollectionMode::NFT, 1);428 let collection_id = create_test_collection(&CollectionMode::NFT, 1);470429471 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();507508 let collection_id = create_test_collection(&CollectionMode::NFT, 1);465 let collection_id = create_test_collection(&CollectionMode::NFT, 1);509466510 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());515472516 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();577578 let collection_id = create_test_collection(&CollectionMode::ReFungible, 1);533 let collection_id = create_test_collection(&CollectionMode::ReFungible, 1);579534580 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();640641 let collection_id = create_test_collection(&CollectionMode::Fungible(3), 1);594 let collection_id = create_test_collection(&CollectionMode::Fungible(3), 1);642595643 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();714715 let collection_id = create_test_collection(&CollectionMode::NFT, 1);666 let collection_id = create_test_collection(&CollectionMode::NFT, 1);716667717 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();734735 let collection_id = create_test_collection(&CollectionMode::NFT, 1);684 let collection_id = create_test_collection(&CollectionMode::NFT, 1);736685737 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();746747 let collection_id = create_test_collection(&CollectionMode::NFT, 1);694 let collection_id = create_test_collection(&CollectionMode::NFT, 1);748695749 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();777778 let collection_id = create_test_collection(&CollectionMode::Fungible(3), 1);723 let collection_id = create_test_collection(&CollectionMode::Fungible(3), 1);779724780 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();808809 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);811754851#[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();855856 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();883884 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();920921 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();973974 let collection_id = create_test_collection(&CollectionMode::NFT, 1);909 let collection_id = create_test_collection(&CollectionMode::NFT, 1);975910976 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();991992 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();10551056 let collection_id = create_test_collection(&CollectionMode::NFT, 1);987 let collection_id = create_test_collection(&CollectionMode::NFT, 1);10579881058 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();10721073 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();10951096 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1023 let collection_id = create_test_collection(&CollectionMode::NFT, 1);109710241098 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();11101111 let origin1 = Origin::signed(1);1036 let origin1 = Origin::signed(1);111210371113 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();11241125 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1048 let collection_id = create_test_collection(&CollectionMode::NFT, 1);112610491127 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();11441145 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);114710681162#[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();11661167 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1086 let collection_id = create_test_collection(&CollectionMode::NFT, 1);116810871169 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();11881189 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();12171218 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);124011541241 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();12521253 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();12761277 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);127911891300#[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();13041305 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1213 let collection_id = create_test_collection(&CollectionMode::NFT, 1);130612141307 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();13341335 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);133712431381#[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();13851386 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1290 let collection_id = create_test_collection(&CollectionMode::NFT, 1);138712911388 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();14151416 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1318 let collection_id = create_test_collection(&CollectionMode::NFT, 1);141713191418 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();14671468 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1368 let collection_id = create_test_collection(&CollectionMode::NFT, 1);146913691470 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();14921493 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1391 let collection_id = create_test_collection(&CollectionMode::NFT, 1);149413921495 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();15201521 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1417 let collection_id = create_test_collection(&CollectionMode::NFT, 1);152214181523 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();15521553 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1447 let collection_id = create_test_collection(&CollectionMode::NFT, 1);155414481555 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();16021603 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);160514971623#[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();16271628 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1518 let collection_id = create_test_collection(&CollectionMode::NFT, 1);162915191630 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();16641665 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1553 let collection_id = create_test_collection(&CollectionMode::NFT, 1);166615541667 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();16981699 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1585 let collection_id = create_test_collection(&CollectionMode::NFT, 1);170015861701 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();17271728 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1612 let collection_id = create_test_collection(&CollectionMode::NFT, 1);172916131730 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();17531754 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1636 let collection_id = create_test_collection(&CollectionMode::NFT, 1);175516371756 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();17901791 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1671 let collection_id = create_test_collection(&CollectionMode::NFT, 1);179216721793 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();18191820 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1698 let collection_id = create_test_collection(&CollectionMode::NFT, 1);182116991822 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();18551856 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();18651866 let origin1 = Origin::signed(1);1740 let origin1 = Origin::signed(1);186717411868 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 }187117451891#[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();18951896 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1768 let collection_id = create_test_collection(&CollectionMode::NFT, 1);189717691898 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 ));19231924 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1780 let collection_id = create_test_collection(&CollectionMode::NFT, 1);192517811926 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());192917831784 for _ in 0..ACCOUNT_TOKEN_OWNERSHIP_LIMIT {1785 let data = default_nft_data();1786 create_test_item(collection_id, &data.clone().into());1787 }17881789 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>::AddressOwnershipLimitExceeded1938#[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 ));19561957 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1801 let collection_id = create_test_collection(&CollectionMode::NFT, 1);195818021959 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 ));19931994 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1822 let collection_id = create_test_collection(&CollectionMode::NFT, 1);199518231996 let origin1 = Origin::signed(1);1824 let origin1 = Origin::signed(1);199718251998 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>::CollectionAdminsLimitExceeded2006 );1840 );2007 });1841 });2008}1842}20092010// 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 ));20292030 let collection_id = create_test_collection(&CollectionMode::NFT, 1);20312032 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 });20372038 assert_noop!(2039 TemplateModule::create_item(origin1, collection_id, account(1), too_big_const_data),2040 Error::<Test>::TokenConstDataLimitExceeded2041 );2042 });2043}20442045// 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 ));20642065 let collection_id = create_test_collection(&CollectionMode::NFT, 1);20662067 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 });20722073 assert_noop!(2074 TemplateModule::create_item(origin1, collection_id, account(1), too_big_const_data),2075 Error::<Test>::TokenVariableDataLimitExceeded2076 );2077 });2078}20792080// 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 ));20992100 let collection_id = create_test_collection(&CollectionMode::NFT, 1);21012102 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 });21072108 assert_noop!(2109 TemplateModule::create_item(origin1, collection_id, account(1), too_big_const_data),2110 Error::<Test>::TokenConstDataLimitExceeded2111 );2112 });2113}21142115// 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 ));21342135 let collection_id = create_test_collection(&CollectionMode::NFT, 1);21362137 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 });21422143 assert_noop!(2144 TemplateModule::create_item(origin1, collection_id, account(1), too_big_const_data),2145 Error::<Test>::TokenVariableDataLimitExceeded2146 );2147 });2148}2149// #endregion1843// #endregion215018442151#[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();21552156 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1848 let collection_id = create_test_collection(&CollectionMode::NFT, 1);215718492158 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();21842185 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1875 let collection_id = create_test_collection(&CollectionMode::NFT, 1);218618762187 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();22132214 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1902 let collection_id = create_test_collection(&CollectionMode::NFT, 1);221519032216 let origin1 = Origin::signed(1);1904 let origin1 = Origin::signed(1);221719052218 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());222019082221 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();22422243 let collection_id = create_test_collection(&CollectionMode::ReFungible, 1);1929 let collection_id = create_test_collection(&CollectionMode::ReFungible, 1);224419302245 let origin1 = Origin::signed(1);1931 let origin1 = Origin::signed(1);224619322247 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());224919352250 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();22712272 let collection_id = create_test_collection(&CollectionMode::Fungible(3), 1);1956 let collection_id = create_test_collection(&CollectionMode::Fungible(3), 1);227319572274 let origin1 = Origin::signed(1);1958 let origin1 = Origin::signed(1);227519592276 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());227819622279 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>::CantStoreMetadataInFungibleTokens2287#[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 ));23052306 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1974 let collection_id = create_test_collection(&CollectionMode::NFT, 1);230719752308 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 ));23392340 let collection_id = create_test_collection(&CollectionMode::ReFungible, 1);1992 let collection_id = create_test_collection(&CollectionMode::ReFungible, 1);234119932342 let origin1 = Origin::signed(1);1994 let origin1 = Origin::signed(1);2427 ),2079 ),2428 Error::<Test>::NoPermission2080 Error::<Test>::NoPermission2429 );2081 );20822083#[test]2084fn collection_transfer_flag_works() {2085 new_test_ext().execute_with(|| {2086 let origin1 = Origin::signed(1);20872088 let collection_id = create_test_collection(&CollectionMode::NFT, 1);2089 assert_ok!(TemplateModule::set_transfers_enabled_flag(origin1, 1, true));20902091 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]);20952096 let origin1 = Origin::signed(1);20972098 // default scenario2099 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);21032104 assert_eq!(TemplateModule::address_tokens(1, 2), [1]);2430 });2105 });2431}2106}243221072578 ),2253 ),2579 Error::<Test>::MetadataUpdateDenied2254 Error::<Test>::MetadataUpdateDenied2580 );2255 );22562257#[test]2258fn collection_transfer_flag_works_neg() {2259 new_test_ext().execute_with(|| {2260 let origin1 = Origin::signed(1);22612262 let collection_id = create_test_collection(&CollectionMode::NFT, 1);2263 assert_ok!(TemplateModule::set_transfers_enabled_flag(2264 origin1, 1, false2265 ));22662267 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]);22712272 let origin1 = Origin::signed(1);22732274 // default scenario2275 assert_noop!(2276 TemplateModule::transfer(origin1, account(2), 1, 1, 1000),2277 Error::<Test>::TransferNotAllowed2278 );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);22822283 assert_eq!(TemplateModule::address_tokens(1, 1), [1]);2581 });2284 });2582}2285}25832286pallets/nft/src/weights.rsdiffbeforeafterbothno changes
pallets/scheduler/Cargo.tomldiffbeforeafterboth12[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' }212122up-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 }242425[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' }282829[features]29[features]30default = ["std"]30default = ["std"]primitives/nft/Cargo.tomldiffbeforeafterboth9version = '0.9.0'9version = '0.9.0'101011[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"182119[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 = []primitives/nft/src/lib.rsdiffbeforeafterboth1#![cfg_attr(not(feature = "std"), no_std)]1#![cfg_attr(not(feature = "std"), no_std)]223#[cfg(feature = "serde")]3pub use serde::{Serialize, Deserialize};4pub use serde::{Serialize, Deserialize};455use 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;222523pub 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;3031pub const COLLECTION_NUMBER_LIMIT: u32 = if cfg!(not(feature = "limit-testing")) {32 10000033} else {34 1035};36pub const CUSTOM_DATA_LIMIT: u32 = if cfg!(not(feature = "limit-testing")) {37 204838} else {39 1040};41pub const COLLECTION_ADMINS_LIMIT: u64 = 5;42pub const ACCOUNT_TOKEN_OWNERSHIP_LIMIT: u32 = if cfg!(not(feature = "limit-testing")) {43 100000044} else {45 1046};4748// Timeouts for item types in passed blocks49pub const NFT_SPONSOR_TRANSFER_TIMEOUT: u32 = 5;50pub const FUNGIBLE_SPONSOR_TRANSFER_TIMEOUT: u32 = 5;51pub const REFUNGIBLE_SPONSOR_TRANSFER_TIMEOUT: u32 = 5;5253// Schema limits54pub const OFFCHAIN_SCHEMA_LIMIT: u32 = 1024;55pub const VARIABLE_ON_CHAIN_SCHEMA_LIMIT: u32 = 1024;56pub const CONST_ON_CHAIN_SCHEMA_LIMIT: u32 = 1024;5758pub const MAX_COLLECTION_NAME_LENGTH: usize = 64;59pub const MAX_COLLECTION_DESCRIPTION_LENGTH: usize = 256;60pub const MAX_TOKEN_PREFIX_LENGTH: usize = 16;6162/// How much items can be created per single63/// create_many call64pub const MAX_ITEMS_PER_BATCH: u32 = 200;6566parameter_types! {67 pub const CustomDataLimit: u32 = CUSTOM_DATA_LIMIT;68}276928pub type CollectionId = u32;70pub type CollectionId = u32;29pub type TokenId = u32;71pub type TokenId = u32;30pub type DecimalPoints = u8;72pub type DecimalPoints = u8;317332#[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}6210463#[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}7411675#[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}8612887#[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}9313594#[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 sender98 Disabled,140 Disabled,128}170}129171130#[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}149192150#[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}157200158#[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}163206164#[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}171214172#[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}202245203#[derive(Encode, Decode, Default, Debug, Clone, PartialEq)]246/// BoundedVec doesn't supports serde204#[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;256207 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 where209 pub custom_data_limit: u32,259 D: ser::Serializer,210211 // Timeouts for item types in passed blocks212 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 }265214 pub refungible_sponsor_transfer_timeout: u32,266 pub fn deserialize<'de, D, V, S>(deserializer: D) -> Result<BoundedVec<V, S>, D::Error>215267 where216 // Schema limits217 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}221278222#[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}228290229#[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}234296235#[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}242309254 }321 }255}322}256323257#[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),runtime/Cargo.tomldiffbeforeafterboth23 '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]849685################################################################################97################################################################################86# Substrate Dependencies98# Substrate Dependencies95default-features = false107default-features = false96git = 'https://github.com/paritytech/substrate.git'108git = 'https://github.com/paritytech/substrate.git'97optional = true109optional = true98branch = 'polkadot-v0.9.7'110branch = 'polkadot-v0.9.8'99version = '3.0.0'111version = '3.0.0'100112101[dependencies.frame-executive]113[dependencies.frame-executive]102default-features = false114default-features = false103git = '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'106118107[dependencies.frame-support]119[dependencies.frame-support]108default-features = false120default-features = false109git = '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'112124113[dependencies.frame-system]125[dependencies.frame-system]114default-features = false126default-features = false115git = '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'118130119[dependencies.frame-system-benchmarking]131[dependencies.frame-system-benchmarking]120default-features = false132default-features = false121git = 'https://github.com/paritytech/substrate.git'133git = 'https://github.com/paritytech/substrate.git'122optional = true134optional = true123branch = 'polkadot-v0.9.7'135branch = 'polkadot-v0.9.8'124version = '3.0.0'136version = '3.0.0'125137126[dependencies.frame-system-rpc-runtime-api]138[dependencies.frame-system-rpc-runtime-api]127default-features = false139default-features = false128git = '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'131143132[dependencies.hex-literal]144[dependencies.hex-literal]142[dependencies.pallet-aura]154[dependencies.pallet-aura]143default-features = false155default-features = false144git = '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'147159148[dependencies.pallet-balances]160[dependencies.pallet-balances]149default-features = false161default-features = false150git = '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'153165154# Contracts specific packages166# Contracts specific packages155# [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 = false158# branch = 'polkadot-v0.9.7'170# branch = 'polkadot-v0.9.8'159# version = '3.0.0'171# version = '3.0.0'160172161# [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 = false164# branch = 'polkadot-v0.9.7'176# branch = 'polkadot-v0.9.8'165# version = '3.0.0'177# version = '3.0.0'166178167# [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 = false170# branch = 'polkadot-v0.9.7'182# branch = 'polkadot-v0.9.8'171# version = '3.0.0'183# version = '3.0.0'172184173[dependencies.pallet-randomness-collective-flip]185[dependencies.pallet-randomness-collective-flip]174default-features = false186default-features = false175git = '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'178190179[dependencies.pallet-sudo]191[dependencies.pallet-sudo]180default-features = false192default-features = false181git = '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'184196185[dependencies.pallet-timestamp]197[dependencies.pallet-timestamp]186default-features = false198default-features = false187git = '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'190202191[dependencies.pallet-transaction-payment]203[dependencies.pallet-transaction-payment]192default-features = false204default-features = false193git = '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'196208197[dependencies.pallet-transaction-payment-rpc-runtime-api]209[dependencies.pallet-transaction-payment-rpc-runtime-api]198default-features = false210default-features = false199git = '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'202214203[dependencies.pallet-treasury]215[dependencies.pallet-treasury]204default-features = false216default-features = false205git = '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'208220209[dependencies.pallet-vesting]221[dependencies.pallet-vesting]210default-features = false222default-features = false211git = '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'214226215[dependencies.sp-arithmetic]227[dependencies.sp-arithmetic]216default-features = false228default-features = false217git = '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'220232221[dependencies.sp-api]233[dependencies.sp-api]222default-features = false234default-features = false223git = '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'226238227[dependencies.sp-block-builder]239[dependencies.sp-block-builder]228default-features = false240default-features = false229git = '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'232244233[dependencies.sp-core]245[dependencies.sp-core]234default-features = false246default-features = false235git = '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'238250239[dependencies.sp-consensus-aura]251[dependencies.sp-consensus-aura]240default-features = false252default-features = false241git = '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'244256245[dependencies.sp-inherents]257[dependencies.sp-inherents]246default-features = false258default-features = false247git = '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'250262251[dependencies.sp-io]263[dependencies.sp-io]252default-features = false264default-features = false253git = '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'256268257[dependencies.sp-offchain]269[dependencies.sp-offchain]258default-features = false270default-features = false259git = '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'262274263[dependencies.sp-runtime]275[dependencies.sp-runtime]264default-features = false276default-features = false265git = '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'268280269[dependencies.sp-session]281[dependencies.sp-session]270default-features = false282default-features = false271git = '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'274286275[dependencies.sp-std]287[dependencies.sp-std]276default-features = false288default-features = false277git = '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'280292281[dependencies.sp-transaction-pool]293[dependencies.sp-transaction-pool]282default-features = false294default-features = false283git = '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'286298287[dependencies.sp-version]299[dependencies.sp-version]288default-features = false300default-features = false289git = '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'292304293[dependencies.smallvec]305[dependencies.smallvec]299[dependencies.parachain-info]311[dependencies.parachain-info]300default-features = false312default-features = false301git = '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'304316305[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 = false309321310[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 = false314326315[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 = false319331320[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 = false324336325[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 = false329341330[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 = false334346335[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 = false339351340[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 = false344356345################################################################################357################################################################################346# Polkadot dependencies358# Polkadot dependencies347359348[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 = false352364353[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 = false357369358[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 = false362374363[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 = false367379368[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 = false372373384374385375################################################################################386################################################################################376# local dependencies387# local dependencies377388378[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" }386403387pallet-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" }390407391################################################################################408################################################################################392# Build Dependencies409# Build Dependenciesruntime/src/chain_extension.rsdiffbeforeafterboth6//6//778use codec::{Decode, Encode};8use codec::{Decode, Encode};9use max_encoded_len::MaxEncodedLen;10use derivative::Derivative;91110pub 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::*;2223use crate::Vec;242425/// Create item parameters25/// Create item parameters26#[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}323233/// Transfer parameters33/// Transfer parameters34#[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}414142#[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}485049#[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}565857#[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}656766#[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}727673#[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}7983828683pub type NftWeightInfoOf<C> = <C as pallet_nft::Config>::WeightInfo;87pub type NftWeightInfoOf<C> = <C as pallet_nft::Config>::WeightInfo;8889pub type AccountIdOf<C> = <C as SysConfig>::AccountId;849085impl<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())?;9810499 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 )?;108114109 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 Item114 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()))?;117123118 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 )?;126132127 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 items132 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 )?;146152147 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 // Approve152 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())?;155161156 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 )?;165171166 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 from171 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())?;174180175 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 )?;185191186 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 )?;203209204 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 whitelist209 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())?;212218213 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 )?;221227222 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")),runtime/src/lib.rsdiffbeforeafterboth72use sp_runtime::{72use sp_runtime::{73 traits::{Dispatchable},73 traits::{Dispatchable},74};74};75// use pallet_contracts::chain_extension::UncheckedFrom;767577// 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>;122123mod nft_weights;124121125/// 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 know126/// 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 formats163pub const HOURS: BlockNumber = MINUTES * 60;160pub const HOURS: BlockNumber = MINUTES * 60;164pub const DAYS: BlockNumber = HOURS * 24;161pub const DAYS: BlockNumber = HOURS * 24;162163parameter_types! {164 pub const DefaultSponsoringRateLimit: BlockNumber = 1 * DAYS;165}165166166#[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}264265impl pallet_evm_migration::Config for Runtime {266 type WeightInfo = pallet_evm_migration::weights::SubstrateWeight<Self>;267}256268257pub 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> {274286275impl 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}281292282impl 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}363374364pub 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 * CENTIUNIQUE371}382}372383373/*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 Mb388 // 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 fifth392 // 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}399410400impl 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*/422433423parameter_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 transfer482 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}488499511impl 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);650651impl pallet_evm_coder_substrate::Config for Runtime {652 type EthereumTransactionSender = pallet_ethereum::Module<Self>;653}639654640impl 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>;682697683 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;690691 type EthereumChainId = ChainId;692 type EthereumTransactionSender = pallet_ethereum::Module<Runtime>;693}705}694706695parameter_types! {707parameter_types! {741 type SponsorshipHandler = SponsorshipHandler;753 type SponsorshipHandler = SponsorshipHandler;742}754}755756impl 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}743763744impl pallet_nft_charge_transaction::Config for Runtime {}764impl pallet_nft_charge_transaction::Config for Runtime {}745765746// impl pallet_contract_helpers::Config for Runtime {}766// impl pallet_contract_helpers::Config for Runtime {767// type DefaultSponsoringRateLimit = DefaultSponsoringRateLimit;768// }769770parameter_types! {771 // 0x842899ECF380553E8a4de75bF534cdf6fBF64049772 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}776777impl pallet_evm_contract_helpers::Config for Runtime {778 type ContractAddress = HelpersContractAddress;779 type DefaultSponsoringRateLimit = DefaultSponsoringRateLimit;780}747781748construct_runtime!(782construct_runtime!(749 pub enum Runtime where783 pub enum Runtime where750 Block = Block,784 Block = Block,751 NodeBlock = opaque::Block,785 NodeBlock = opaque::Block,752 UncheckedExtrinsic = UncheckedExtrinsic786 UncheckedExtrinsic = UncheckedExtrinsic753 {787 {788 ParachainSystem: cumulus_pallet_parachain_system::{Pallet, Call, Storage, Inherent, Event<T>} = 20,789 ParachainInfo: parachain_info::{Pallet, Storage, Config} = 21,790791 Aura: pallet_aura::{Pallet, Config<T>} = 22,792 AuraExt: cumulus_pallet_aura_ext::{Pallet, Config} = 23,793754 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,766767 Aura: pallet_aura::{Pallet, Config<T>},768 AuraExt: cumulus_pallet_aura_ext::{Pallet, Config},769770 // Frontier771 EVM: pallet_evm::{Pallet, Config, Call, Storage, Event<T>},772 Ethereum: pallet_ethereum::{Pallet, Config, Call, Storage, Event, ValidateUnsigned},773803774 // 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,779780809781 // Unique Pallets810 // Unique Pallets782 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,817818 // Frontier819 EVM: pallet_evm::{Pallet, Config, Call, Storage, Event<T>} = 100,820 Ethereum: pallet_ethereum::{Pallet, Config, Call, Storage, Event, ValidateUnsigned} = 101,821822 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);790828910 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 }917956939 }978 }940979941 fn author() -> H160 {980 fn author() -> H160 {942 <pallet_ethereum::Module<Runtime>>::find_author()981 <pallet_evm::Module<Runtime>>::find_author()943 }982 }944983945 fn storage_at(address: H160, index: U256) -> H256 {984 fn storage_at(address: H160, index: U256) -> H256 {1030 )1069 )1031 }1070 }10711072 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 _ => None1076 }).collect()1077 }1032 }1078 }103310791034 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);114011861187 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);11431190runtime/src/nft_weights.rsdiffbeforeafterbothno changes
runtime_types.jsondiffbeforeafterboth63 "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",tests/package.jsondiffbeforeafterboth4 "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": {tests/src/addCollectionAdmin.test.tsdiffbeforeafterboth117 ];117 ];118 const collectionId = await createCollectionExpectSuccess();118 const collectionId = await createCollectionExpectSuccess();119119120 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);123122124 for (let i = 0; i < chainAdminLimit; i++) {123 for (let i = 0; i < chainAdminLimit; i++) {tests/src/addToWhiteList.test.tsdiffbeforeafterboth16 enablePublicMintingExpectSuccess,16 enablePublicMintingExpectSuccess,17 enableWhiteListExpectSuccess,17 enableWhiteListExpectSuccess,18 normalizeAccountId,18 normalizeAccountId,19 addCollectionAdminExpectSuccess,20 addToWhiteListExpectFail,19} from './util/helpers';21} from './util/helpers';202221chai.use(chaiAsPromised);23chai.use(chaiAsPromised);22const expect = chai.expect;24const expect = chai.expect;232524let Alice: IKeyringPair;26let Alice: IKeyringPair;25let Bob: IKeyringPair;27let Bob: IKeyringPair;28let Charlie: IKeyringPair;262927describe('Integration Test ext. addToWhiteList()', () => {30describe('Integration Test ext. addToWhiteList()', () => {2831868987});90});889192describe('Integration Test ext. addToWhiteList() with collection admin permissions:', () => {9394 before(async () => {95 await usingApi(async () => {96 Alice = privateKey('//Alice');97 Bob = privateKey('//Bob');98 Charlie = privateKey('//Charlie');99 });100 });101102 it('Negative. Add to the white list by regular user', async () => {103 const collectionId = await createCollectionExpectSuccess();104 await addToWhiteListExpectFail(Bob, collectionId, Charlie.address);105 });106107 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 });112113 it('Whitelisted minting: list restrictions', async () => {114 const collectionId = await createCollectionExpectSuccess();115 await addCollectionAdminExpectSuccess(Alice, collectionId, Bob);116 await addToWhiteListExpectSuccess(Bob, collectionId, Charlie.address);117118 // allowed only for collection owner119 await enableWhiteListExpectSuccess(Alice, collectionId);120 await enablePublicMintingExpectSuccess(Alice, collectionId);121122 await createItemExpectSuccess(Charlie, collectionId, 'NFT', Charlie.address);123 });124});tests/src/approve.test.tsdiffbeforeafterboth16 destroyCollectionExpectSuccess,16 destroyCollectionExpectSuccess,17 setCollectionLimitsExpectSuccess,17 setCollectionLimitsExpectSuccess,18 transferExpectSuccess,18 transferExpectSuccess,19 addCollectionAdminExpectSuccess,19} from './util/helpers';20} from './util/helpers';202121chai.use(chaiAsPromised);22chai.use(chaiAsPromised);178 });179 });179});180});181182describe('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;186187 before(async () => {188 await usingApi(async () => {189 Alice = privateKey('//Alice');190 Bob = privateKey('//Bob');191 Charlie = privateKey('//Charlie');192 });193 });194195 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);198199 await addCollectionAdminExpectSuccess(Alice, collectionId, Bob);200 await approveExpectSuccess(collectionId, itemId, Bob, Charlie);201 });202});180203tests/src/burnItem.test.tsdiffbeforeafterboth12 getGenericResult,12 getGenericResult,13 destroyCollectionExpectSuccess,13 destroyCollectionExpectSuccess,14 normalizeAccountId,14 normalizeAccountId,15 addCollectionAdminExpectSuccess,15} from './util/helpers';16} from './util/helpers';161717import chai from 'chai';18import chai from 'chai';136136137});137});138139describe('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 });147148 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);153154 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 item159 const item: any = (await api.query.nft.nftItemList(collectionId, tokenId)).toJSON();160 // What to expect161 // tslint:disable-next-line:no-unused-expression162 expect(result.success).to.be.true;163 // tslint:disable-next-line:no-unused-expression164 expect(item).to.be.null;165 });166 });167});138168139describe('Negative integration test: ext. burnItem():', () => {169describe('Negative integration test: ext. burnItem():', () => {140 before(async () => {170 before(async () => {tests/src/change-collection-owner.test.tsdiffbeforeafterboth7import 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';112612chai.use(chaiAsPromised);27chai.use(chaiAsPromised);31 });46 });32});47});4849describe('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');5556 const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();57 expect(collection.Owner).to.be.deep.eq(alice.address);5859 const changeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, bob.address);60 await submitTransactionAsync(alice, changeOwnerTx);6162 const badChangeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, alice.address);63 await expect(submitTransactionExpectFailAsync(alice, badChangeOwnerTx)).to.be.rejected;6465 const collectionAfterOwnerChange: any = (await api.query.nft.collectionById(collectionId)).toJSON();66 expect(collectionAfterOwnerChange.Owner).to.be.deep.eq(bob.address);67 });68 });6970 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');7677 const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();78 expect(collection.Owner).to.be.deep.eq(alice.address);7980 const changeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, bob.address);81 await submitTransactionAsync(alice, changeOwnerTx);8283 const collectionAfterOwnerChange: any = (await api.query.nft.collectionById(collectionId)).toJSON();84 expect(collectionAfterOwnerChange.Owner).to.be.deep.eq(bob.address);8586 // After changing the owner of the collection, all privileged methods are available to the new owner87 // The new owner of the collection has access to sponsorship management operations in the collection88 await setCollectionSponsorExpectSuccess(collectionId, charlie.address, '//Bob');89 await confirmSponsorshipExpectSuccess(collectionId, '//Charlie');90 await removeCollectionSponsorExpectSuccess(collectionId, '//Bob');9192 // The new owner of the collection has access to operations for managing the collection parameters93 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);106107 await setPublicAccessModeExpectSuccess(bob, collectionId, 'WhiteList');108 await enableWhiteListExpectSuccess(bob, collectionId);109 await setMintPermissionExpectSuccess(bob, collectionId, true);110 await destroyCollectionExpectSuccess(collectionId, '//Bob');111 });112 });113114 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);129130 const changeOwnerTx2 = api.tx.nft.changeCollectionOwner(collectionId, charlie.address);131 await submitTransactionAsync(bob, changeOwnerTx2);132 133 // ownership lost134 const collectionAfterOwnerChange2: any = (await api.query.nft.collectionById(collectionId)).toJSON();135 expect(collectionAfterOwnerChange2.Owner).to.be.deep.eq(charlie.address);136 });137 });138});3313934describe('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 });157158 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');163164 await addCollectionAdminExpectSuccess(alice, collectionId, bob);165166 const changeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, bob.address);167 await expect(submitTransactionExpectFailAsync(bob, changeOwnerTx)).to.be.rejected;168169 const collectionAfterOwnerChange: any = (await api.query.nft.collectionById(collectionId)).toJSON();170 expect(collectionAfterOwnerChange.Owner).to.be.deep.eq(alice.address);171172 // Verifying that nothing bad happened (network is live, new collections can be created, etc.)173 await createCollectionExpectSuccess();174 });175 });17651 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 });190191 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');197198 const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();199 expect(collection.Owner).to.be.deep.eq(alice.address);200201 const changeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, bob.address);202 await submitTransactionAsync(alice, changeOwnerTx);203204 const badChangeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, alice.address);205 await expect(submitTransactionExpectFailAsync(alice, badChangeOwnerTx)).to.be.rejected;206207 const collectionAfterOwnerChange: any = (await api.query.nft.collectionById(collectionId)).toJSON();208 expect(collectionAfterOwnerChange.Owner).to.be.deep.eq(bob.address);209210 await setCollectionSponsorExpectFailure(collectionId, charlie.address, '//Alice');211 await confirmSponsorshipExpectFailure(collectionId, '//Alice');212 await removeCollectionSponsorExpectFailure(collectionId, '//Alice');213214 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;227228 await enableWhiteListExpectFail(alice, collectionId);229 await setMintPermissionExpectFailure(alice, collectionId, true);230 await destroyCollectionExpectFailure(collectionId, '//Alice');231 });232 });64});233});65234tests/src/collision-tests/adminLimitsOff.test.tsdiffbeforeafterboth34 await usingApi(async (api) => {34 await usingApi(async (api) => {35 const collectionId = await createCollectionExpectSuccess();35 const collectionId = await createCollectionExpectSuccess();363637 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);403941 const changeAdminTx1 = api.tx.nft.addCollectionAdmin(collectionId, Eve.address);40 const changeAdminTx1 = api.tx.nft.addCollectionAdmin(collectionId, Eve.address);tests/src/config.tsdiffbeforeafterboth778const 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};111212export default config;13export default config;tests/src/confirmSponsorship.test.tsdiffbeforeafterboth19 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 });368369 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 });367375368 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();tests/src/createItem.test.tsdiffbeforeafterboth4//4//556import { 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';131516const expect = chai.expect;14let alice: IKeyringPair;17let alice: IKeyringPair;18let bob: IKeyringPair;151916describe('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 });232836 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});6364describe('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 });7273 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});4089tests/src/createMultipleItems.test.tsdiffbeforeafterboth3// file 'LICENSE', which is part of this source code package.3// file 'LICENSE', which is part of this source code package.4//4//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';192220chai.use(chaiAsPromised);23chai.use(chaiAsPromised);57 });60 });58 });61 });596263 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.nft75 .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;7879 expect(token1Data.Value).to.be.equal(6); // 1 + 2 + 380 });81 });8260 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});118141142describe('Integration Test createMultipleItems(collection_id, owner, items_data) with collection admin permissions:', () => {143144 let Alice: IKeyringPair;145 let Bob: IKeyringPair;146147 before(async () => {148 await usingApi(async () => {149 Alice = privateKey('//Alice');150 Bob = privateKey('//Bob');151 });152 });153154 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.nft162 .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;169170 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));173174 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');177178 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 });183184 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.nft196 .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;199200 expect(token1Data.Value).to.be.equal(6); // 1 + 2 + 3201 });202 });203204 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.nft216 .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;223224 expect(token1Data.Owner[0].Owner).to.be.deep.equal(normalizeAccountId(Bob.address));225 expect(token1Data.Owner[0].Fraction).to.be.equal(1);226227 expect(token2Data.Owner[0].Owner).to.be.deep.equal(normalizeAccountId(Bob.address));228 expect(token2Data.Owner[0].Fraction).to.be.equal(1);229230 expect(token3Data.Owner[0].Owner).to.be.deep.equal(normalizeAccountId(Bob.address));231 expect(token3Data.Owner[0].Fraction).to.be.equal(1);232233 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');236237 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});243119describe('Negative Integration Test createMultipleItems(collection_id, owner, items_data):', () => {244describe('Negative Integration Test createMultipleItems(collection_id, owner, items_data):', () => {245246 let Alice: IKeyringPair;247 let Bob: IKeyringPair;248249 before(async () => {250 await usingApi(async () => {251 Alice = privateKey('//Alice');252 Bob = privateKey('//Bob');253 });254 });255256 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.nft263 .createMultipleItems(collectionId, normalizeAccountId(Alice.address), args);264 await expect(submitTransactionAsync(Bob, createMultipleItemsTx)).to.be.rejected;265 });266 });267268 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.nft279 .createMultipleItems(collectionId, normalizeAccountId(Alice.address), args);280 await expect(submitTransactionAsync(Bob, createMultipleItemsTx)).to.be.rejected;281 });282 });283284 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.nft295 .createMultipleItems(collectionId, normalizeAccountId(Alice.address), args);296 await expect(submitTransactionAsync(Bob, createMultipleItemsTx)).to.be.rejected;297 });298 });299120 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.nft136 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.nft141 .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.nft179 .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)] },200376201 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');204379205 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});tests/src/destroyCollection.test.tsdiffbeforeafterboth11import { createCollectionExpectSuccess, destroyCollectionExpectSuccess, destroyCollectionExpectFailure, setCollectionLimitsExpectSuccess } from './util/helpers';11import { createCollectionExpectSuccess, 12 destroyCollectionExpectSuccess, 13 destroyCollectionExpectFailure, 14 setCollectionLimitsExpectSuccess,15 addCollectionAdminExpectSuccess,16} from './util/helpers';121713chai.use(chaiAsPromised);18chai.use(chaiAsPromised);293430describe('(!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;323833 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 });384553 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 });tests/src/enableDisableTransfer.test.tsdiffbeforeafterbothno changes
tests/src/eth/allowlist.test.tsdiffbeforeafterbothno changes
tests/src/eth/api/ContractHelpers.soldiffbeforeafterbothno changes
tests/src/eth/api/UniqueFungible.soldiffbeforeafterbothno changes
tests/src/eth/api/UniqueNFT.soldiffbeforeafterbothno changes
tests/src/eth/base.test.tsdiffbeforeafterbothno changes
tests/src/eth/crossTransfer.test.tsdiffbeforeafterbothno changes
tests/src/eth/fungible.test.tsdiffbeforeafterboth4//4//556import 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';111112describe('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');191920 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 });212322 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();252726 // FIXME: always equals to 0, because this method is not implemented28 // FIXME: always equals to 0, because this method is not implemented27 expect(totalSupply).to.equal('0');29 expect(totalSupply).to.equal('0');28 });30 });293130 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');363837 const caller = createEthAccount(web3);39 const caller = await createEthAccountWithBalance(api, web3);4038 await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }, { ethereum: caller });41 await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }, { ethereum: caller });394240 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();434644 expect(balance).to.equal('200');47 expect(balance).to.equal('200');45 });48 });46});49});475048describe('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');555856 const owner = createEthAccount(web3);59 const owner = await createEthAccountWithBalance(api, web3);57 await transferBalanceToEth(api, alice, owner, 999999999999999);586059 await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }, { ethereum: owner });61 await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }, { ethereum: owner });606261 const spender = createEthAccount(web3);63 const spender = createEthAccount(web3);626463 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});656766 {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);697170 expect(events).to.be.deep.equal([72 expect(events).to.be.deep.equal([104 const receiver = createEthAccount(web3);106 const receiver = createEthAccount(web3);105107106 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});108110109 await contract.methods.approve(spender, 100).send({ from: owner, gas: '0x1000000', gasPrice: '0x01' });111 await contract.methods.approve(spender, 100).send();110112111 {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);161163162 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});164166165 {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});194195describe('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');201202 const owner = await createEthAccountWithBalance(api, web3);203 const spender = createEthAccount(web3);204205 await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }, { ethereum: owner });206207 const address = collectionIdToAddress(collection);208 const contract = new web3.eth.Contract(fungibleAbi as any, address, { from: owner, ...GAS_ARGS });209210 const cost = await recordEthFee(api, owner, () => contract.methods.approve(spender, 100).send({ from: owner }));211 expect(cost < BigInt(0.2 * Number(UNIQUE)));212 });213214 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);222223 await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }, { ethereum: owner });224225 const address = collectionIdToAddress(collection);226 const contract = new web3.eth.Contract(fungibleAbi as any, address, { from: owner, ...GAS_ARGS });227228 await contract.methods.approve(spender, 100).send({ from: owner });229230 const cost = await recordEthFee(api, spender, () => contract.methods.transferFrom(owner, spender, 100).send({ from: spender }));231 expect(cost < BigInt(0.2 * Number(UNIQUE)));232 });233234 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');239240 const owner = await createEthAccountWithBalance(api, web3);241 const receiver = createEthAccount(web3);242243 await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }, { ethereum: owner });244245 const address = collectionIdToAddress(collection);246 const contract = new web3.eth.Contract(fungibleAbi as any, address, { from: owner, ...GAS_ARGS });247248 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});192252193describe('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 },tests/src/eth/helpersSmoke.test.tsdiffbeforeafterbothno changes
tests/src/eth/marketplace/MarketPlaceKSM.abidiffbeforeafterbothno changes
tests/src/eth/marketplace/MarketPlaceKSM.bindiffbeforeafterbothno changes
tests/src/eth/marketplace/MarketPlaceKSM.soldiffbeforeafterbothno changes
tests/src/eth/marketplace/MarketPlaceUNQ.abidiffbeforeafterbothno changes
tests/src/eth/marketplace/MarketPlaceUNQ.bindiffbeforeafterbothno changes
tests/src/eth/marketplace/MarketPlaceUNQ.soldiffbeforeafterbothno changes
tests/src/eth/marketplace/marketplace.test.tsdiffbeforeafterbothno changes
tests/src/eth/metadata.test.tsdiffbeforeafterboth4//4//556import { 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';111012describe('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);201821 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();242225 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);353236 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();393640 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);514752 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();555156 expect(+decimals).to.equal(6);52 expect(+decimals).to.equal(6);57 });53 });tests/src/eth/migration.test.tsdiffbeforeafterbothno changes
tests/src/eth/nonFungible.test.tsdiffbeforeafterboth4//4//556import 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';111412describe('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);182219 await createItemExpectSuccess(alice, collection, 'NFT', { substrate: alice.address });23 await createItemExpectSuccess(alice, collection, 'NFT', { substrate: alice.address });202421 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();242825 // FIXME: always equals to 0, because this method is not implemented29 // FIXME: always equals to 0, because this method is not implemented26 expect(totalSupply).to.equal('0');30 expect(totalSupply).to.equal('0');27 });31 });283229 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');343835 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 });394340 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();434744 expect(balance).to.equal('3');48 expect(balance).to.equal('3');45 });49 });465047 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');525653 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 });555956 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();596360 expect(owner).to.equal(caller);64 expect(owner).to.equal(caller);61 });65 });62});66});636764describe('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');7475 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);7980 const address = collectionIdToAddress(collection);81 const contract = new web3.eth.Contract(nonFungibleAbi as any, address, {from: caller, ...GAS_ARGS});8283 {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);9293 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 ]);104105 await waitNewBlocks(api, 1);106 expect(await contract.methods.tokenURI(nextTokenId).call()).to.be.equal('Test URI');107 }108 });109110 itWeb3('Can perform burn()', async ({ web3, api }) => {111 const collection = await createCollectionExpectSuccess({112 mode: {type: 'NFT'},113 });114 const alice = privateKey('//Alice');115116 const owner = await createEthAccountWithBalance(api, web3);117118 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});122123 {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 });14065 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);114190115 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});117193118 await contract.methods.approve(spender, tokenId).send({ from: owner, gas: '0x1000000', gasPrice: '0x01' });194 await contract.methods.approve(spender, tokenId).send({ from: owner });119195120 {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);160236161 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});163239164 {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});192268193describe('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');275276 const owner = await createEthAccountWithBalance(api, web3);277 const spender = createEthAccount(web3);278279 const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: owner });280281 const address = collectionIdToAddress(collection);282 const contract = new web3.eth.Contract(nonFungibleAbi as any, address, { from: owner, ...GAS_ARGS });283284 const cost = await recordEthFee(api, owner, () => contract.methods.approve(spender, tokenId).send({ from: owner }));285 expect(cost < BigInt(0.2 * Number(UNIQUE)));286 });287288 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);296297 const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: owner });298299 const address = collectionIdToAddress(collection);300 const contract = new web3.eth.Contract(nonFungibleAbi as any, address, { from: owner, ...GAS_ARGS });301302 await contract.methods.approve(spender, tokenId).send({ from: owner });303304 const cost = await recordEthFee(api, spender, () => contract.methods.transferFrom(owner, spender, tokenId).send({ from: spender }));305 expect(cost < BigInt(0.2 * Number(UNIQUE)));306 });307308 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');313314 const owner = await createEthAccountWithBalance(api, web3);315 const receiver = createEthAccount(web3);316317 const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: owner });318319 const address = collectionIdToAddress(collection);320 const contract = new web3.eth.Contract(nonFungibleAbi as any, address, { from: owner, ...GAS_ARGS });321322 const cost = await recordEthFee(api, owner, () => contract.methods.transfer(receiver, tokenId).send({ from: owner }));323 expect(cost < BigInt(0.2 * Number(UNIQUE)));324 });325});326327describe('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');333334 const address = collectionIdToAddress(collection);335 const contract = new web3.eth.Contract(nonFungibleAbi as any, address);336337 let tokenId: number;338 const events = await recordEvents(contract, async () => {339 tokenId = await createItemExpectSuccess(alice, collection, 'NFT');340 });341342 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 });354355 itWeb3('Events emitted for burn()', async ({ web3 }) => {356 const collection = await createCollectionExpectSuccess({357 mode: { type: 'NFT' },358 });359 const alice = privateKey('//Alice');360361 const address = collectionIdToAddress(collection);362 const contract = new web3.eth.Contract(nonFungibleAbi as any, address);363364 const tokenId = await createItemExpectSuccess(alice, collection, 'NFT');365 const events = await recordEvents(contract, async () => {366 await burnItemExpectSuccess(alice, collection, tokenId);367 });368369 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 });381194 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});474tests/src/eth/nonFungibleAbi.jsondiffbeforeafterboth49 "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]tests/src/eth/payable.test.tsdiffbeforeafterbothno changes
tests/src/eth/proxy/UniqueFungibleProxy.abidiffbeforeafterbothno changes
tests/src/eth/proxy/UniqueFungibleProxy.bindiffbeforeafterbothno changes
tests/src/eth/proxy/UniqueFungibleProxy.soldiffbeforeafterbothno changes
tests/src/eth/proxy/UniqueNFTProxy.abidiffbeforeafterbothno changes
tests/src/eth/proxy/UniqueNFTProxy.bindiffbeforeafterbothno changes
tests/src/eth/proxy/UniqueNFTProxy.soldiffbeforeafterbothno changes
tests/src/eth/proxy/fungibleProxy.test.tsdiffbeforeafterbothno changes
tests/src/eth/proxy/nonFungibleProxy.test.tsdiffbeforeafterbothno changes
tests/src/eth/sponsoring.test.tsdiffbeforeafterbothno changes
tests/src/eth/util/contractHelpersAbi.jsondiffbeforeafterbothno changes
tests/src/eth/util/helpers.d.tsdiffbeforeafterbothno changes
tests/src/eth/util/helpers.tsdiffbeforeafterboth3// file 'LICENSE', which is part of this source code package.3// file 'LICENSE', which is part of this source code package.4//4//56// eslint-disable-next-line @typescript-eslint/triple-slash-reference7/// <reference path="helpers.d.ts" />586import { 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';2223export const GAS_ARGS = { gas: 0x1000000, gasPrice: '0x01' };132414let 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;182919 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);213222 try {33 try {28 }39 }29}40}4142/**43 * @deprecated Web3 update solved issue with deployment over ws provider44 */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);4849 return await cb(web3);50}305131export 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}6869export async function createEthAccountWithBalance(api: ApiPromise, web3: Web3) {70 const alice = privateKey('//Alice');71 const account = createEthAccount(web3);72 await transferBalanceToEth(api, alice, account);7374 return account;75}477648export 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}116145117export 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}150151export function subToEth(eth: string): string {152 return Web3.utils.toChecksumAddress(subToEthLowercase(eth));153}154155export 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: UNLICENSED162 pragma solidity ^0.8.6;163164 ${src}165 `,166 },167 },168 settings: {169 outputSelection: {170 '*': {171 '*': ['*'],172 },173 },174 },175 }))).contracts[`${name}.sol`][name];176177 return {178 abi: out.abi,179 object: '0x' + out.evm.bytecode.object,180 };181}182183export 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});201202 return flipper;203}204205export 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 }221222 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 });234235 return collector;236}237238export function contractHelpers(web3: Web3, caller: string) {239 return new web3.eth.Contract(contractHelpersAbi as any, '0x842899ECF380553E8a4de75bF534cdf6fBF64049', {from: caller, ...GAS_ARGS});240}241242export 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}255256export async function ethBalanceViaSub(api: ApiPromise, address: string): Promise<bigint> {257 return (await getBalance(api, [evmToAddress(address)]))[0];258}259260export async function recordEthFee(api: ApiPromise, user: string, call: () => Promise<any>): Promise<bigint> {261 const before = await ethBalanceViaSub(api, user);262263 await call();264 await waitNewBlocks(api, 1);265266 const after = await ethBalanceViaSub(api, user);267268 // Can't use .to.be.less, because chai doesn't supports bigint269 expect(after < before).to.be.true;270271 return before - after;272}tests/src/pallet-presence.test.tsdiffbeforeafterboth23 '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});tests/src/removeCollectionAdmin.test.tsdiffbeforeafterboth37 });37 });38 });38 });3940 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 Bob49 const addAdminTx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Bob.address));50 await submitTransactionAsync(Alice, addAdminTx);5152 const addAdminTx2 = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Charlie.address));53 await submitTransactionAsync(Alice, addAdminTx2);5455 const adminListAfterAddAdmin: any = (await api.query.nft.adminList(collectionId)).toJSON();56 expect(adminListAfterAddAdmin).to.be.deep.contains(normalizeAccountId(Bob.address));5758 // then remove bob from admins of collection59 const removeAdminTx = api.tx.nft.removeCollectionAdmin(collectionId, normalizeAccountId(Bob.address));60 await submitTransactionAsync(Charlie, removeAdminTx);6162 const adminListAfterRemoveAdmin: any = (await api.query.nft.adminList(collectionId)).toJSON;63 expect(adminListAfterRemoveAdmin).not.to.be.deep.contains(normalizeAccountId(Bob.address));64 });65 });396640 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 });113114 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');120121 const addAdminTx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Bob.address));122 await submitTransactionAsync(Alice, addAdminTx);123124 const changeOwnerTx = api.tx.nft.removeCollectionAdmin(collectionId, normalizeAccountId(Bob.address));125 await expect(submitTransactionExpectFailAsync(Charlie, changeOwnerTx)).to.be.rejected;126127 // Verifying that nothing bad happened (network is live, new collections can be created, etc.)128 await createCollectionExpectSuccess();129 });130 });86});131});87132tests/src/removeCollectionSponsor.test.tsdiffbeforeafterboth17 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 });107108 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 });114115 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 });106120107 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();tests/src/removeFromWhiteList.test.tsdiffbeforeafterboth17 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});919293describe('Integration Test removeFromWhiteList with collection admin permissions', () => {94 let alice: IKeyringPair;95 let bob: IKeyringPair;96 let charlie: IKeyringPair;9798 before(async () => {99 await usingApi(async () => {100 alice = privateKey('//Alice');101 bob = privateKey('//Bob');102 charlie = privateKey('//Charlie');103 });104 });105106 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 });116117 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 });127128 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});tests/src/setChainLimits.test.tsdiffbeforeafterbothno changes
tests/src/setCollectionLimits.test.tsdiffbeforeafterboth16 getDetailedCollectionInfo,16 getDetailedCollectionInfo,17 setCollectionLimitsExpectFailure,17 setCollectionLimitsExpectFailure,18 setCollectionLimitsExpectSuccess,18 setCollectionLimitsExpectSuccess,19 addCollectionAdminExpectSuccess,19} from './util/helpers';20} from './util/helpers';202121chai.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(tests/src/setCollectionSponsor.test.tsdiffbeforeafterboth9import { 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';121713chai.use(chaiAsPromised);18chai.use(chaiAsPromised);141920let alice: IKeyringPair;15let bob: IKeyringPair;21let bob: IKeyringPair;22let charlie: IKeyringPair;162317describe('integration test: ext. setCollectionSponsor():', () => {24describe('integration test: ext. setCollectionSponsor():', () => {182519 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 });617177 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});8196tests/src/setConstOnChainSchema.test.tsdiffbeforeafterboth11import {11import {12 createCollectionExpectSuccess,12 createCollectionExpectSuccess,13 destroyCollectionExpectSuccess,13 destroyCollectionExpectSuccess,14 addCollectionAdminExpectSuccess,14} from './util/helpers';15} from './util/helpers';151616chai.use(chaiAsPromised);17chai.use(chaiAsPromised);43 });44 });44 });45 });4647 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 });455746 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) => {tests/src/setMintPermission.test.tsdiffbeforeafterboth16 findNotExistingCollection,16 findNotExistingCollection,17 setMintPermissionExpectFailure,17 setMintPermissionExpectFailure,18 setMintPermissionExpectSuccess,18 setMintPermissionExpectSuccess,19 addCollectionAdminExpectSuccess,19} from './util/helpers';20} from './util/helpers';202121describe('Integration Test setMintPermission', () => {22describe('Integration Test setMintPermission', () => {91 await setMintPermissionExpectFailure(bob, collectionId, true);92 await setMintPermissionExpectFailure(bob, collectionId, true);92 });93 });9495 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 });9310294 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 () => {tests/src/setOffchainSchema.test.tsdiffbeforeafterboth15 queryCollectionExpectSuccess,15 queryCollectionExpectSuccess,16 setOffchainSchemaExpectFailure,16 setOffchainSchemaExpectFailure,17 setOffchainSchemaExpectSuccess,17 setOffchainSchemaExpectSuccess,18 addCollectionAdminExpectSuccess,18} from './util/helpers';19} from './util/helpers';192020chai.use(chaiAsPromised);21chai.use(chaiAsPromised);242525describe('Integration Test setOffchainSchema', () => {26describe('Integration Test setOffchainSchema', () => {26 let alice: IKeyringPair;27 let alice: IKeyringPair;28 let bob: IKeyringPair;272928 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 });333639 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 });4445 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);5051 expect(collection.OffchainSchema).to.be.equal('0x' + Buffer.from(DATA).toString('hex'));52 });41});53});425443describe('Negative Integration Test setOffchainSchema', () => {55describe('Negative Integration Test setOffchainSchema', () => {tests/src/setPublicAccessMode.test.tsdiffbeforeafterboth18 enablePublicMintingExpectSuccess,18 enablePublicMintingExpectSuccess,19 enableWhiteListExpectSuccess,19 enableWhiteListExpectSuccess,20 normalizeAccountId,20 normalizeAccountId,21 addCollectionAdminExpectSuccess,21} from './util/helpers';22} from './util/helpers';222323chai.use(chaiAsPromised);24chai.use(chaiAsPromised);93 });94 });94});95});9697describe('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-bitwise107 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});95114tests/src/setSchemaVersion.test.tsdiffbeforeafterboth16 getCreatedCollectionCount,16 getCreatedCollectionCount,17 getCreateItemResult,17 getCreateItemResult,18 getDetailedCollectionInfo,18 getDetailedCollectionInfo,19 addCollectionAdminExpectSuccess,19} from './util/helpers';20} from './util/helpers';202121chai.use(chaiAsPromised);22chai.use(chaiAsPromised);22const expect = chai.expect;23const expect = chai.expect;232424let alice: IKeyringPair;25let alice: IKeyringPair;26let bob: IKeyringPair;27let charlie: IKeyringPair;25let collectionIdForTesting: number;28let collectionIdForTesting: number;262927/*30/*44 });47 });45});48});4950describe('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-expression65 expect(result.success).to.be.true;66 // tslint:disable-next-line:no-unused-expression67 expect(collectionInfo).to.be.exist;68 // tslint:disable-next-line:no-unused-expression69 expect(collectionInfo ? collectionInfo.SchemaVersion.toString() : '').to.be.equal('Unique');70 });71 });72});467347describe('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-expression70 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-expression89 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});127161tests/src/setVariableMetaData.test.tsdiffbeforeafterboth16 findNotExistingCollection,16 findNotExistingCollection,17 setVariableMetaDataExpectFailure,17 setVariableMetaDataExpectFailure,18 setVariableMetaDataExpectSuccess,18 setVariableMetaDataExpectSuccess,19 addCollectionAdminExpectSuccess,19} from './util/helpers';20} from './util/helpers';202121chai.use(chaiAsPromised);22chai.use(chaiAsPromised);48 });49 });49});50});5152describe('Integration Test collection admin setVariableMetaData', () => {53 const data = [1, 2, 254, 255];5455 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 });6869 it('execute setVariableMetaData', async () => {70 await setVariableMetaDataExpectSuccess(bob, collectionId, tokenId, data);71 });7273 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();7677 expect(Array.from(item.VariableData)).to.deep.equal(Array.from(data));78 });79 });80});508151describe('Negative Integration Test setVariableMetaData', () => {82describe('Negative Integration Test setVariableMetaData', () => {52 const data = [1];83 const data = [1];tests/src/setVariableOnChainSchema.test.tsdiffbeforeafterboth11import {11import {12 createCollectionExpectSuccess,12 createCollectionExpectSuccess,13 destroyCollectionExpectSuccess,13 destroyCollectionExpectSuccess,14 addCollectionAdminExpectSuccess,14} from './util/helpers';15} from './util/helpers';151616chai.use(chaiAsPromised);17chai.use(chaiAsPromised);55 });56 });56});57});5859describe('Integration Test ext. collection admin setVariableOnChainSchema()', () => {6061 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 });7172 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);8081 });82 });83});578458describe('Negative Integration Test ext. setVariableOnChainSchema()', () => {85describe('Negative Integration Test ext. setVariableOnChainSchema()', () => {5986tests/src/substrate/get-balance.tsdiffbeforeafterboth6import { 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';91310export 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}151920export async function getBalanceSingle(api: ApiPromise, account: string): Promise<bigint> {21 return (await getBalance(api, [account]))[0];22}2324export 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}tests/src/substrate/substrate-api.tsdiffbeforeafterboth37 const consoleWarn = console.warn;37 const consoleWarn = console.warn;383839 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'))tests/src/transfer.test.tsdiffbeforeafterboth18 getCreateItemResult,18 getCreateItemResult,19 transferExpectFailure,19 transferExpectFailure,20 transferExpectSuccess,20 transferExpectSuccess,21 addCollectionAdminExpectSuccess,21} from './util/helpers';22} from './util/helpers';222323let Alice: IKeyringPair;24let Alice: IKeyringPair;90 });91 });91 });92 });9394 it('Collection admin can transfer owned token', async () => {95 await usingApi(async () => {96 const Alice = privateKey('//Alice');97 const Bob = privateKey('//Bob');98 // nft99 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 // fungible104 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 // reFungible109 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});9312394describe('Negative Integration Test Transfer(recipient, collection_id, item_id, value)', () => {124describe('Negative Integration Test Transfer(recipient, collection_id, item_id, value)', () => {tests/src/util/helpers.tsdiffbeforeafterboth535354export const U128_MAX = (1n << 128n) - 1n;54export const U128_MAX = (1n << 128n) - 1n;5556const MICROUNIQUE = 1_000_000_000n;57const MILLIUNIQUE = 1_000n * MICROUNIQUE;58const CENTIUNIQUE = 10n * MILLIUNIQUE;59export const UNIQUE = 100n * CENTIUNIQUE;556056type GenericResult = {61type GenericResult = {57 success: boolean,62 success: boolean,95 checkMsgSysMethod: string;100 checkMsgSysMethod: string;96}101}102103export interface IFungibleTokenDataType {104 Value: number;105}106107export 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}9711998export interface IReFungibleTokenDataType {120export interface IReFungibleTokenDataType {99 Owner: IReFungibleOwner[];121 Owner: IReFungibleOwner[];414 });436 });415}437}416438417export 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) => {419441420 // Run the transaction442 // Run the transaction421 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);425447426 // Get the collection448 // Get the collection434 });456 });435}457}436458437export async function removeCollectionSponsorExpectSuccess(collectionId: number) {459export async function removeCollectionSponsorExpectSuccess(collectionId: number, sender = '//Alice') {438 await usingApi(async (api) => {460 await usingApi(async (api) => {439461440 // Run the transaction462 // Run the transaction441 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}454476455export async function removeCollectionSponsorExpectFailure(collectionId: number) {477export async function removeCollectionSponsorExpectFailure(collectionId: number, senderSeed = '//Alice') {456 await usingApi(async (api) => {478 await usingApi(async (api) => {457479458 // Run the transaction480 // Run the transaction459 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}569570export async function setTransferFlagExpectSuccess(sender: IKeyringPair, collectionId: number, enabled: boolean) {571572 await usingApi(async (api) => {573574 const tx = api.tx.nft.setTransfersEnabledFlag (collectionId, enabled);575 const events = await submitTransactionAsync(sender, tx);576 const result = getGenericResult(events);577578 expect(result.success).to.be.true;579 }); 580}581582export async function setTransferFlagExpectFailure(sender: IKeyringPair, collectionId: number, enabled: boolean) {583584 await usingApi(async (api) => {585586 const tx = api.tx.nft.setTransfersEnabledFlag (collectionId, enabled);587 const events = await expect(submitTransactionExpectFailAsync(sender, tx)).to.be.rejected;588 const result = getGenericResult(events);589590 expect(result.success).to.be.false;591 }); 592}547593548export 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}811812export 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}765820766export async function821export async function767scheduleTransferExpectSuccess(822scheduleTransferExpectSuccess(978 });1033 });979}1034}10351036export async function setPublicAccessModeExpectFail(1037 sender: IKeyringPair, collectionId: number,1038 accessMode: 'Normal' | 'WhiteList',1039) {1040 await usingApi(async (api) => {10411042 // Run the transaction1043 const tx = api.tx.nft.setPublicAccessMode(collectionId, accessMode);1044 const events = await expect(submitTransactionExpectFailAsync(sender, tx)).to.be.rejected;1045 const result = getGenericResult(events);10461047 // What to expect1048 // tslint:disable-next-line:no-unused-expression1049 expect(result.success).to.be.false;1050 });1051}9801052981export 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}10561057export async function enableWhiteListExpectFail(sender: IKeyringPair, collectionId: number) {1058 await setPublicAccessModeExpectFail(sender, collectionId, 'WhiteList');1059}9841060985export 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}11061107export async function setChainLimitsExpectFailure(sender: IKeyringPair, limits: IChainLimits) {1108 await usingApi(async (api) => {1109 // Run the transaction1110 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-expression1114 expect(result.success).to.be.false;1115 });1116}103011171031export 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}11471148export async function addToWhiteListExpectFail(sender: IKeyringPair, collectionId: number, address: string | AccountId) {1149 await usingApi(async (api) => {1150 // Run the transaction1151 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);11541155 // What to expect1156 // tslint:disable-next-line:no-unused-expression1157 expect(result.success).to.be.false;1158 });1159}106011601061export 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}110212021203export 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}tests/yarn.lockdiffbeforeafterboth2# yarn lockfile v12# yarn lockfile v133445"@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==444445"@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==4950"@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"657071"@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"9166"@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"74100101"@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"10975"@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"99134100"@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"144145"@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"111156157"@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"168112"@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"170227228"@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"234171"@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"191255256"@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"269192"@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"222300301"@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"310223"@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"229317318"@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"324230"@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==248343344"@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==348249"@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"272372373"@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"381273"@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==286395396"@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==400287"@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"295409296"@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"579693580"@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"667781668"@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"677791678"@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"696810697"@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"703817777 dependencies:891 dependencies:778 "@babel/helper-plugin-utils" "^7.14.5"892 "@babel/helper-plugin-utils" "^7.14.5"779893780"@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"827941828"@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"836950849 "@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"851965852"@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"9301044931"@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"9531067954"@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"9621076963"@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"98010941095"@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"1101981"@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"100411251126"@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"11401005"@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"101211481149"@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"11561013"@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==101711611018"@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==123813821239"@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"125013941251"@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"128514291286"@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"129514391296"@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"130714511308"@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"131614601317"@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"134614901347"@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"135514991356"@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"136515091366"@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"137515191376"@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"139615401397"@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"154616901547"@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"155717011558"@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"157017141571"@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"158717311588"@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"165118021652"@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"166018111661"@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"166718181668"@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"167818291679"@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"169218431693"@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"169918501700"@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"171518671716"@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"172518771726"@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"173518851736"@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"18951896"@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"175719181758"@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"179319541794"@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"180319641804"@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"181019711811"@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"181819791819"@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"182619871827"@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"183419951835"@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"184420052006"@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"20122013"@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"20252026"@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"20342035"@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"20412042"@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"20532054"@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"20621845"@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==193221501933"@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" "*"194021581941"@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==194521632164"@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==21681946"@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" "*"198822111989"@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==19931994"@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==200822262009"@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==204322612262"@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" "*"22682044"@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==205522802056"@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" "*"206222872072 dependencies:2297 dependencies:2073 "@types/yargs-parser" "*"2298 "@types/yargs-parser" "*"207422992075"@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"208723122088"@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"209923252100"@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"211023372111"@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"212223492123"@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"213223592133"@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"214323692144"@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"215123772152"@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"215623852157"@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==216123902162"@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==216623952167"@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==24002401"@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"218024132181"@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"220624392207"@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"22132214"@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"222124472222"@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"222924552456"@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"24632230"@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==259428282595babel-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"262628602627babel-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"267629102677babel-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"270929432710babel-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"271729512718balanced-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"295431883189browserslist@^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"31992955bs58@^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=301232573258builtin-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==32623013bytes@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==307333233324caniuse-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==33283074caseless@~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"312233773378chalk@^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"33853123changelog-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"334036033604command-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==36083609commander@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==36133341commander@^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"345037233451core-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"345837313459core-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"347137443472coveralls@^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"386141343862diff-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==386641393867diff@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"394842214222ed2curve@^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"42283949ee-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==395842384239electron-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==42433959elliptic@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==412944144130eslint-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"413744224138eslint-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==415844434159eslint-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==44484449eslint-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"423145214232eslint-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==426345534264eslint@^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"430945994310eslint@^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==439246834684estree-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==46884689estree-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==46934393esutils@^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"455248534553expect@^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"456448654565express@^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==486251635164follow-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==51684863for-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=491252185219fs-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"52294913fs-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"525555725256graceful-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==581961366137is-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=61415820is-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==589362156216is-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" "*"62225894is-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"605063796051jest-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"605963886060jest-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"608464136085jest-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"610264316103jest-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"612964586130jest-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"613964686140jest-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"614664756147jest-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"615764866158jest-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"617064996171jest-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"618265116183jest-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==618765166188jest-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"620765366208jest-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"623165606232jest-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"623965686240jest-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"624965786250jest-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"626465936265jest-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" "*"627266016273jest-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==627766066278jest-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==628266116283jest-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"629166206292jest-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"630666356307jest-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"633466636335jest-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"636666956367jest-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"637467036375jest-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"640467336405jest-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"641667456417jest-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"642867576429jest-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"644167706442jest-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"645067796451jest@^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"645967886460js-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=646467936465js-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"659669256926jsonfile@^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"69326597jsonfile@^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==666970057006klaw@^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"70126670kleur@^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=678771306788lodash@^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"687972227223magic-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"72296880make-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=693272827283memorystream@^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=72876933merge-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==730976647665node-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==76697310node-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=775581157756picomatch@^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==793782977938prettier@^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==794283027943pretty-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=834787078348require-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=839787578398resolve@^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==843887988799rimraf@^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"88058439rimraf@^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"846088278828rollup@^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"88348461run-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"847988538480rxjs@^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"848688608546 dependencies:8920 dependencies:8547 semver "^6.3.0"8921 semver "^6.3.0"854889228549"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"876491389139solc@^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"91538765sort-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==881592049205sourcemap-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==92098816spdx-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=921296069213tmp@^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"936097549361tsutils@^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"937497689769tweetnacl@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==97739375tweetnacl@^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=937997789380tweetnacl@^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==93849385type-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==944898429449typescript@^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==945398479848typescript@^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==98529454uglify-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"102601065910261yargs@^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"1067210673yargs@^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"