diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 47379a1014..6ae39d4601 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -3,12 +3,18 @@ FROM mcr.microsoft.com/vscode/devcontainers/rust:0-1 RUN apt-get update && export DEBIAN_FRONTEND=noninteractive && \ apt-get -y install --no-install-recommends libssl-dev pkg-config libclang-dev clang +RUN curl -L -o- https://github.com/WebAssembly/binaryen/releases/download/version_101/binaryen-version_101-x86_64-linux.tar.gz | \ + tar xz --strip-components=1 -C /usr + USER vscode RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash && \ export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")" && \ [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \ - nvm install v12.20.1 && \ - rustup toolchain install nightly-2021-03-01 && \ - rustup default nightly-2021-03-01 && \ - rustup target add wasm32-unknown-unknown \ No newline at end of file + nvm install v16.2.0 && \ + npm install -g yarn && \ + rustup toolchain install nightly-2021-05-30 && \ + rustup default nightly-2021-05-30 && \ + rustup target add wasm32-unknown-unknown && \ + rustup component add rustfmt clippy && \ + cargo install cargo-expand cargo-edit cargo-contract diff --git a/Cargo.lock b/Cargo.lock index b24d53626b..28c8e5c4cb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -18,14 +18,23 @@ version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a55f82cfe485775d02112886f4169bde0c5894d75e79ead7eafe7e40a25e45f7" dependencies = [ - "gimli", + "gimli 0.23.0", +] + +[[package]] +name = "addr2line" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03345e98af8f3d786b6d9f656ccfa6ac316d954e92bc4841f0bba20789d5fb5a" +dependencies = [ + "gimli 0.24.0", ] [[package]] name = "adler" -version = "0.2.3" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee2a4ec343196209d6594e19543ae87a39f96d5534d7174822a3ad825dd6ed7e" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "aead" @@ -89,13 +98,24 @@ checksum = "739f4a8db6605981345c5654f3a85b056ce52f37a39d34da03f25bf2151ea16e" [[package]] name = "aho-corasick" -version = "0.7.15" +version = "0.7.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7404febffaa47dac81aa44dba71523c9d069b1bdc50a77db41195149e17f68e5" +checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" dependencies = [ "memchr", ] +[[package]] +name = "alga" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f823d037a7ec6ea2197046bafd4ae150e6bc36f9ca347404f46a46823fa84f2" +dependencies = [ + "approx 0.3.2", + "num-complex 0.2.4", + "num-traits", +] + [[package]] name = "ansi_term" version = "0.11.0" @@ -116,9 +136,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.38" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afddf7f520a80dbf76e6f50a35bca42a2331ef227a28b3b6dc5c2e2338d114b1" +checksum = "28b2cd92db5cbd74e8e5028f7e27dd7aa3090e89e4f2a197cc7c8dfb69c7063b" [[package]] name = "approx" @@ -129,6 +149,15 @@ dependencies = [ "num-traits", ] +[[package]] +name = "approx" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f2a05fd1bd10b2527e20a2cd32d8873d115b8b39fe219ee25f42a8aca6ba278" +dependencies = [ + "num-traits", +] + [[package]] name = "arrayref" version = "0.3.6" @@ -150,6 +179,12 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" +[[package]] +name = "arrayvec" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a2f58b0bb10c380af2b26e57212856b8c9a59e0925b4c20f4a174a49734eaf7" + [[package]] name = "asn1_der" version = "0.6.3" @@ -171,9 +206,9 @@ dependencies = [ [[package]] name = "async-channel" -version = "1.5.1" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59740d83946db6a5af71ae25ddf9562c2b176b2ca42cf99a455f09f4a220d6b9" +checksum = "2114d64672151c0c5eaa5e131ec84a74f06e1e559830dabba01ca30605d66319" dependencies = [ "concurrent-queue", "event-listener", @@ -182,16 +217,16 @@ dependencies = [ [[package]] name = "async-executor" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb877970c7b440ead138f6321a3b5395d6061183af779340b65e20c0fede9146" +checksum = "871f9bb5e0a22eeb7e8cf16641feb87c9dc67032ccf8ff49e772eb9941d3a965" dependencies = [ "async-task", "concurrent-queue", "fastrand", "futures-lite", "once_cell", - "vec-arena", + "slab", ] [[package]] @@ -212,29 +247,29 @@ dependencies = [ [[package]] name = "async-io" -version = "1.3.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9315f8f07556761c3e48fec2e6b276004acf426e6dc068b2c2251854d65ee0fd" +checksum = "4bbfd5cf2794b1e908ea8457e6c45f8f8f1f6ec5f74617bf4662623f47503c3b" dependencies = [ "concurrent-queue", "fastrand", "futures-lite", "libc", "log", - "nb-connect", "once_cell", "parking", "polling", - "vec-arena", + "slab", + "socket2 0.4.0", "waker-fn", "winapi 0.3.9", ] [[package]] name = "async-lock" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1996609732bde4a9988bc42125f55f2af5f3c36370e27c778d5191a4a1b63bfb" +checksum = "e6a8ea61bf9947a1007c5cada31e647dbc77b103c679858150003ba697ea798b" dependencies = [ "event-listener", ] @@ -250,15 +285,16 @@ dependencies = [ [[package]] name = "async-process" -version = "1.0.2" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef37b86e2fa961bae5a4d212708ea0154f904ce31d1a4a7f47e1bbc33a0c040b" +checksum = "a8f38756dd9ac84671c428afbf7c9f7495feff9ec5b0710f17100098e5b354ac" dependencies = [ "async-io", "blocking", "cfg-if 1.0.0", "event-listener", "futures-lite", + "libc", "once_cell", "signal-hook", "winapi 0.3.9", @@ -275,7 +311,7 @@ dependencies = [ "async-io", "async-lock", "async-process", - "crossbeam-utils 0.8.1", + "crossbeam-utils 0.8.4", "futures-channel", "futures-core", "futures-io", @@ -286,7 +322,7 @@ dependencies = [ "memchr", "num_cpus", "once_cell", - "pin-project-lite 0.2.4", + "pin-project-lite 0.2.6", "pin-utils", "slab", "wasm-bindgen-futures", @@ -300,9 +336,9 @@ checksum = "e91831deabf0d6d7ec49552e489aed63b7456a7a3c46cff62adad428110b0af0" [[package]] name = "async-trait" -version = "0.1.42" +version = "0.1.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d3a45e77e34375a7923b1e8febb049bb011f064714a8e17a1a616fef01da13d" +checksum = "0b98e84bbb4cbcdd97da190ba0c58a1bb0de2c1fdf67d159e192ed766aeca722" dependencies = [ "proc-macro2", "quote", @@ -319,7 +355,7 @@ dependencies = [ "futures-sink", "futures-util", "memchr", - "pin-project-lite 0.2.4", + "pin-project-lite 0.2.6", ] [[package]] @@ -332,7 +368,7 @@ dependencies = [ "futures-sink", "futures-util", "memchr", - "pin-project-lite 0.2.4", + "pin-project-lite 0.2.6", ] [[package]] @@ -369,15 +405,16 @@ checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" [[package]] name = "backtrace" -version = "0.3.56" +version = "0.3.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d117600f438b1707d4e4ae15d3595657288f8235a0eb593e80ecc98ab34e1bc" +checksum = "4717cfcbfaa661a0fd48f8453951837ae7e8f81e481fbb136e3202d72805a744" dependencies = [ - "addr2line", + "addr2line 0.15.1", + "cc", "cfg-if 1.0.0", "libc", "miniz_oxide", - "object 0.23.0", + "object 0.24.0", "rustc-demangle", ] @@ -407,36 +444,30 @@ checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" [[package]] name = "bincode" -version = "1.3.1" +version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f30d3a39baa26f9651f17b375061f3233dde33424a8b72b0dbe93a68a0bc896d" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" dependencies = [ - "byteorder", "serde", ] [[package]] name = "bindgen" -version = "0.54.0" +version = "0.57.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66c0bb6167449588ff70803f4127f0684f9063097eca5016f37eb52b92c2cf36" +checksum = "fd4865004a46a0aafb2a0a5eb19d3c9fc46ee5f063a6cfc605c69ac9ecf5263d" dependencies = [ "bitflags", "cexpr", - "cfg-if 0.1.10", "clang-sys", - "clap", - "env_logger", "lazy_static", "lazycell", - "log", "peeking_take_while", "proc-macro2", "quote", "regex", "rustc-hash", "shlex", - "which 3.1.1", ] [[package]] @@ -447,12 +478,22 @@ checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" [[package]] name = "bitvec" -version = "0.20.1" +version = "0.17.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5011ffc90248764d7005b0e10c7294f5aa1bd87d9dd7248f4ad475b347c294d" +checksum = "41262f11d771fd4a61aa3ce019fca363b4b6c282fca9da2a31186d3965a47a5c" +dependencies = [ + "either", + "radium 0.3.0", +] + +[[package]] +name = "bitvec" +version = "0.20.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7774144344a4faa177370406a7ff5f1da24303817368584c6206c8303eb07848" dependencies = [ "funty", - "radium", + "radium 0.6.2", "tap", "wyz", ] @@ -524,7 +565,7 @@ dependencies = [ "block-padding 0.1.5", "byte-tools", "byteorder", - "generic-array 0.12.3", + "generic-array 0.12.4", ] [[package]] @@ -583,9 +624,9 @@ checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" [[package]] name = "bstr" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a40b47ad93e1a5404e6c18dec46b628214fee441c70f4ab5d6942142cc268a3d" +checksum = "90682c8d613ad3373e66de8c6411e0ae2ab2571e879d2efbf73558cc66f21279" dependencies = [ "memchr", ] @@ -601,9 +642,15 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.6.0" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63396b8a4b9de3f4fdfb320ab6080762242f66a8ef174c49d8e19b674db4cdbe" + +[[package]] +name = "byte-slice-cast" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "099e596ef14349721d9016f6b80dd3419ea1bf289ab9b44df8e4dfd3a005d5d9" +checksum = "b0a5e3906bcbf133e33c1d4d95afc664ad37fbdb9f6568d8043e7ea8c27d93d3" [[package]] name = "byte-slice-cast" @@ -619,9 +666,9 @@ checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" [[package]] name = "byteorder" -version = "1.4.2" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae44d1a3d5a19df61dd0c8beb138458ac2a53a7ac09eba97d55592540004306b" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] name = "bytes" @@ -676,9 +723,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.66" +version = "1.0.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c0496836a84f8d0495758516b8621a622beb77c0fed418570e50764093ced48" +checksum = "e3c69b077ad434294d3ce9f1f6143a2a4b89a8a2d54ef813d85003a4fd1137fd" dependencies = [ "jobserver", ] @@ -762,13 +809,13 @@ dependencies = [ [[package]] name = "clang-sys" -version = "0.29.3" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe6837df1d5cba2397b835c8530f51723267e16abbf83892e9e5af4f0e5dd10a" +checksum = "853eda514c284c2287f4bf20ae614f8781f40a81d32ecda6e91449304dfe077c" dependencies = [ "glob", "libc", - "libloading", + "libloading 0.7.0", ] [[package]] @@ -780,7 +827,7 @@ dependencies = [ "ansi_term 0.11.0", "atty", "bitflags", - "strsim", + "strsim 0.8.0", "textwrap", "unicode-width", "vec_map", @@ -804,18 +851,18 @@ dependencies = [ "cache-padded", ] -[[package]] -name = "const_fn" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28b9d6de7f49e22cf97ad17fc4036ece69300032f45f78f30b4a4482cdc3f4a6" - [[package]] name = "constant_time_eq" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + [[package]] name = "core-foundation" version = "0.7.0" @@ -843,10 +890,13 @@ dependencies = [ ] [[package]] -name = "cpuid-bool" -version = "0.1.2" +name = "cpufeatures" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8aebca1129a03dc6dc2b127edd729435bbc4a37e1d5f4d7513165089ceb02634" +checksum = "ed00c67cb5d0a7d64a44f6ad2668db7e7530311dd53ea79bcd4fb022c64911c8" +dependencies = [ + "libc", +] [[package]] name = "cpuid-bool" @@ -874,7 +924,7 @@ dependencies = [ "cranelift-codegen-meta", "cranelift-codegen-shared", "cranelift-entity", - "gimli", + "gimli 0.23.0", "log", "regalloc", "serde", @@ -959,12 +1009,12 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dca26ee1f8d361640700bde38b2c37d8c22b3ce2d360e1fc1c74ea4b0aa7d775" +checksum = "06ed27e177f16d65f0f0c22a213e17c696ace5dd64b14258b52f9417ccb52db4" dependencies = [ "cfg-if 1.0.0", - "crossbeam-utils 0.8.1", + "crossbeam-utils 0.8.4", ] [[package]] @@ -985,8 +1035,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94af6efb46fef72616855b036a624cf27ba656ffc9be1b9a3c931cfc7749a9a9" dependencies = [ "cfg-if 1.0.0", - "crossbeam-epoch 0.9.1", - "crossbeam-utils 0.8.1", + "crossbeam-epoch 0.9.4", + "crossbeam-utils 0.8.4", ] [[package]] @@ -1006,15 +1056,14 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.1" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1aaa739f95311c2c7887a76863f500026092fb1dce0161dab577e559ef3569d" +checksum = "52fb27eab85b17fbb9f6fd667089e07d6a2eb8743d02639ee7f6a7a7729c9c94" dependencies = [ "cfg-if 1.0.0", - "const_fn", - "crossbeam-utils 0.8.1", + "crossbeam-utils 0.8.4", "lazy_static", - "memoffset 0.6.1", + "memoffset 0.6.3", "scopeguard", ] @@ -1042,9 +1091,9 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.1" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02d96d1e189ef58269ebe5b97953da3274d83a93af647c2ddd6f9dab28cedb8d" +checksum = "4feb231f0d4d6af81aed15928e58ecf5816aa62a2393e2c82f46973e92a9a278" dependencies = [ "autocfg", "cfg-if 1.0.0", @@ -1063,7 +1112,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4434400df11d95d556bac068ddfedd482915eb18fe8bea89bc80b6e4b1c179e5" dependencies = [ - "generic-array 0.12.3", + "generic-array 0.12.4", "subtle 1.0.0", ] @@ -1088,9 +1137,9 @@ dependencies = [ [[package]] name = "ctor" -version = "0.1.19" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8f45d9ad417bcef4817d614a501ab55cdd96a6fdb24f49aab89a54acfd66b19" +checksum = "5e98e2ad1a782e33928b96fc3948e7c355e5af34ba4de7670fe8bac2a3b2006d" dependencies = [ "quote", "syn", @@ -1122,9 +1171,9 @@ dependencies = [ [[package]] name = "curve25519-dalek" -version = "3.0.2" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f627126b946c25a4638eec0ea634fc52506dea98db118aae985118ce7c3d723f" +checksum = "639891fde0dbea823fc3d798a0fdf9d2f9440a42d64a78ab3488b0ca025117b3" dependencies = [ "byteorder", "digest 0.9.0", @@ -1133,6 +1182,41 @@ dependencies = [ "zeroize", ] +[[package]] +name = "darling" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "757c0ded2af11d8e739c4daea1ac623dd1624b06c844cf3f5a39f1bdbd99bb12" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c34d8efb62d0c2d7f60ece80f75e5c63c1588ba68032740494b0b9a996466e3" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.10.0", + "syn", +] + +[[package]] +name = "darling_macro" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ade7bff147130fe5e6d39f089c6bd49ec0250f35d70b2eebf72afdfc919f15cc" +dependencies = [ + "darling_core", + "quote", + "syn", +] + [[package]] name = "data-encoding" version = "2.3.2" @@ -1161,10 +1245,11 @@ dependencies = [ [[package]] name = "derive_more" -version = "0.99.11" +version = "0.99.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41cb0e6161ad61ed084a36ba71fbba9e3ac5aee3606fb607fe08da6acbcf3d8c" +checksum = "5cc7b9cef1e351660e5443924e4f43ab25fbbed3e9a5f052df3677deb4d6b320" dependencies = [ + "convert_case", "proc-macro2", "quote", "syn", @@ -1176,7 +1261,7 @@ version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" dependencies = [ - "generic-array 0.12.3", + "generic-array 0.12.4", ] [[package]] @@ -1190,9 +1275,9 @@ dependencies = [ [[package]] name = "directories" -version = "3.0.1" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8fed639d60b58d0f53498ab13d26f621fd77569cc6edb031f4cc36a2ad9da0f" +checksum = "e69600ff1703123957937708eb27f7a564e48885c537782722ed0ba3189ce1d7" dependencies = [ "dirs-sys", ] @@ -1209,12 +1294,12 @@ dependencies = [ [[package]] name = "dirs-sys" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e93d7f5705de3e49895a2b5e0b8855a1c27f080192ae9c32a6432d50741a57a" +checksum = "03d86534ed367a67548dc68113a0f5db55432fdfbb6e6f9d77704397d95d5780" dependencies = [ "libc", - "redox_users 0.3.5", + "redox_users", "winapi 0.3.9", ] @@ -1225,7 +1310,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" dependencies = [ "libc", - "redox_users 0.4.0", + "redox_users", "winapi 0.3.9", ] @@ -1268,9 +1353,9 @@ checksum = "ee2626afccd7561a06cf1367e2950c4718ea04565e20fb5029b6c7d8ad09abcf" [[package]] name = "ed25519" -version = "1.0.3" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37c66a534cbb46ab4ea03477eae19d5c22c01da8258030280b7bd9d8433fb6ef" +checksum = "8d0860415b12243916284c67a9be413e044ee6668247b99ba26d94b2bc06c8f6" dependencies = [ "signature", ] @@ -1281,11 +1366,11 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" dependencies = [ - "curve25519-dalek 3.0.2", + "curve25519-dalek 3.1.0", "ed25519", "rand 0.7.3", "serde", - "sha2 0.9.3", + "sha2 0.9.5", "zeroize", ] @@ -1330,9 +1415,9 @@ dependencies = [ [[package]] name = "environmental" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6576a1755ddffd988788025e75bce9e74b018f7cc226198fe931d077911c6d7e" +checksum = "68b91989ae21441195d7d9b9993a2f9295c7e1a8c96255d8b729accddc124797" [[package]] name = "erased-serde" @@ -1364,19 +1449,184 @@ dependencies = [ "libc", ] +[[package]] +name = "ethbloom" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71a6567e6fd35589fea0c63b94b4cf2e55573e413901bdbe60ab15cf0e25e5df" +dependencies = [ + "crunchy", + "fixed-hash 0.6.1", + "impl-rlp 0.2.1", + "impl-serde", + "tiny-keccak", +] + +[[package]] +name = "ethbloom" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "779864b9c7f7ead1f092972c3257496c6a84b46dba2ce131dd8a282cb2cc5972" +dependencies = [ + "crunchy", + "fixed-hash 0.7.0", + "impl-codec 0.5.0", + "impl-rlp 0.3.0", + "impl-serde", + "tiny-keccak", +] + +[[package]] +name = "ethereum" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567ce064a8232c16e2b2c2173a936b91fbe35c2f2c5278871f5a1a31688b42e9" +dependencies = [ + "ethereum-types 0.11.0", + "funty", + "hash-db", + "hash256-std-hasher", + "parity-scale-codec 2.1.1", + "rlp 0.5.0", + "rlp-derive", + "serde", + "sha3 0.9.1", + "triehash", +] + +[[package]] +name = "ethereum-tx-sign" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdcbb5f48282fa71ba2864818a442d0ee0ca04ebc9ef9eb1837c48298c3b8cbf" +dependencies = [ + "ethereum-types 0.9.2", + "num-traits", + "rlp 0.4.6", + "secp256k1", + "serde", + "serde_derive", + "serde_json", + "tiny-keccak", +] + +[[package]] +name = "ethereum-types" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "473aecff686bd8e7b9db0165cbbb53562376b39bf35b427f0c60446a9e1634b0" +dependencies = [ + "ethbloom 0.9.2", + "fixed-hash 0.6.1", + "impl-rlp 0.2.1", + "impl-serde", + "primitive-types 0.7.3", + "uint 0.8.5", +] + +[[package]] +name = "ethereum-types" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f64b5df66a228d85e4b17e5d6c6aa43b0310898ffe8a85988c4c032357aaabfd" +dependencies = [ + "ethbloom 0.11.0", + "fixed-hash 0.7.0", + "impl-codec 0.5.0", + "impl-rlp 0.3.0", + "impl-serde", + "primitive-types 0.9.0", + "uint 0.9.0", +] + [[package]] name = "event-listener" version = "2.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7531096570974c3a9dcf9e4b8e1cede1ec26cf5046219fb3b9d897503b9be59" +[[package]] +name = "evm" +version = "0.27.0" +source = "git+https://github.com/usetech-llc/evm.git?branch=precompile-output#081b56a17b8e587655bf45cacc1c823265530b50" +dependencies = [ + "environmental", + "ethereum", + "evm-core", + "evm-gasometer", + "evm-runtime", + "log", + "parity-scale-codec 2.1.1", + "primitive-types 0.9.0", + "rlp 0.5.0", + "serde", + "sha3 0.8.2", +] + +[[package]] +name = "evm-coder" +version = "0.1.0" +dependencies = [ + "ethereum", + "evm-coder-macros", + "hex", + "hex-literal", + "primitive-types 0.9.0", +] + +[[package]] +name = "evm-coder-macros" +version = "0.1.0" +dependencies = [ + "Inflector", + "darling", + "hex", + "proc-macro2", + "quote", + "sha3 0.9.1", + "syn", +] + +[[package]] +name = "evm-core" +version = "0.27.1" +source = "git+https://github.com/usetech-llc/evm.git?branch=precompile-output#081b56a17b8e587655bf45cacc1c823265530b50" +dependencies = [ + "funty", + "parity-scale-codec 2.1.1", + "primitive-types 0.9.0", + "serde", +] + +[[package]] +name = "evm-gasometer" +version = "0.27.0" +source = "git+https://github.com/usetech-llc/evm.git?branch=precompile-output#081b56a17b8e587655bf45cacc1c823265530b50" +dependencies = [ + "environmental", + "evm-core", + "evm-runtime", + "primitive-types 0.9.0", +] + +[[package]] +name = "evm-runtime" +version = "0.27.0" +source = "git+https://github.com/usetech-llc/evm.git?branch=precompile-output#081b56a17b8e587655bf45cacc1c823265530b50" +dependencies = [ + "environmental", + "evm-core", + "primitive-types 0.9.0", + "sha3 0.8.2", +] + [[package]] name = "exit-future" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e43f2f1833d64e33f15592464d6fdd70f349dda7b1a53088eb83cd94014008c5" dependencies = [ - "futures 0.3.12", + "futures 0.3.15", ] [[package]] @@ -1415,13 +1665,125 @@ checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" [[package]] name = "fastrand" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca5faf057445ce5c9d4329e382b2ce7ca38550ef3b73a5348362d5f24e0c7fe3" +checksum = "77b705829d1e87f762c2df6da140b26af5839e1033aa84aa5f56bb688e4e1bdb" dependencies = [ "instant", ] +[[package]] +name = "fc-consensus" +version = "2.0.0-dev" +source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions#7b3b742c4e95eb7ae6c5435137670365f17ae1fa" +dependencies = [ + "derive_more", + "fc-db", + "fp-consensus", + "fp-rpc", + "futures 0.3.15", + "log", + "parity-scale-codec 2.1.1", + "sc-client-api", + "sp-api", + "sp-block-builder", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-inherents", + "sp-runtime", + "sp-timestamp", + "substrate-prometheus-endpoint", +] + +[[package]] +name = "fc-db" +version = "1.0.0" +source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions#7b3b742c4e95eb7ae6c5435137670365f17ae1fa" +dependencies = [ + "kvdb", + "kvdb-rocksdb", + "parity-scale-codec 2.1.1", + "parking_lot 0.11.1", + "sp-core", + "sp-database", + "sp-runtime", +] + +[[package]] +name = "fc-mapping-sync" +version = "2.0.0-dev" +source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions#7b3b742c4e95eb7ae6c5435137670365f17ae1fa" +dependencies = [ + "fc-consensus", + "fc-db", + "fp-consensus", + "fp-rpc", + "futures 0.3.15", + "futures-timer 3.0.2", + "log", + "sc-client-api", + "sp-api", + "sp-blockchain", + "sp-runtime", +] + +[[package]] +name = "fc-rpc" +version = "2.0.0-dev" +source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions#7b3b742c4e95eb7ae6c5435137670365f17ae1fa" +dependencies = [ + "ethereum", + "ethereum-types 0.11.0", + "evm", + "fc-consensus", + "fc-db", + "fc-rpc-core", + "fp-consensus", + "fp-evm", + "fp-rpc", + "fp-storage", + "futures 0.3.15", + "jsonrpc-core 15.1.0", + "jsonrpc-core-client 14.2.0", + "jsonrpc-derive 14.2.2", + "jsonrpc-pubsub 15.1.0", + "libsecp256k1", + "log", + "pallet-ethereum", + "pallet-evm", + "parity-scale-codec 2.1.1", + "rand 0.7.3", + "rlp 0.5.0", + "rustc-hex", + "sc-client-api", + "sc-network", + "sc-rpc", + "sc-service", + "sha3 0.8.2", + "sp-api", + "sp-blockchain", + "sp-io", + "sp-runtime", + "sp-storage", + "sp-transaction-pool", +] + +[[package]] +name = "fc-rpc-core" +version = "1.1.0-dev" +source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions#7b3b742c4e95eb7ae6c5435137670365f17ae1fa" +dependencies = [ + "ethereum-types 0.11.0", + "jsonrpc-core 15.1.0", + "jsonrpc-core-client 14.2.0", + "jsonrpc-derive 14.2.2", + "jsonrpc-pubsub 15.1.0", + "rustc-hex", + "serde", + "serde_json", +] + [[package]] name = "fdlimit" version = "0.2.1" @@ -1443,19 +1805,31 @@ dependencies = [ [[package]] name = "finality-grandpa" -version = "0.13.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cd795898c348a8ec9edc66ec9e014031c764d4c88cc26d09b492cd93eb41339" +checksum = "c6447e2f8178843749e8c8003206def83ec124a7859475395777a28b5338647c" dependencies = [ "either", - "futures 0.3.12", + "futures 0.3.15", "futures-timer 3.0.2", "log", "num-traits", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "parking_lot 0.11.1", ] +[[package]] +name = "fixed-hash" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11498d382790b7a8f2fd211780bec78619bba81cdad3a283997c0c41f836759c" +dependencies = [ + "byteorder", + "rand 0.7.3", + "rustc-hex", + "static_assertions", +] + [[package]] name = "fixed-hash" version = "0.7.0" @@ -1512,33 +1886,80 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "632b95f97f332b2ff5bc3a42bc8e28772b067e333830e03fd046504f11cd0fb8" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "parity-scale-codec", + "parity-scale-codec 2.1.1", ] [[package]] name = "form_urlencoded" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ece68d15c92e84fa4f19d3780f1294e5ca82a78a6d515f1efaabcc144688be00" +checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" dependencies = [ "matches", "percent-encoding 2.1.0", ] +[[package]] +name = "fp-consensus" +version = "1.0.0" +source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions#7b3b742c4e95eb7ae6c5435137670365f17ae1fa" +dependencies = [ + "ethereum", + "parity-scale-codec 2.1.1", + "rlp 0.5.0", + "sha3 0.8.2", + "sp-core", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "fp-evm" +version = "2.0.0" +source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions#7b3b742c4e95eb7ae6c5435137670365f17ae1fa" +dependencies = [ + "evm", + "impl-trait-for-tuples 0.1.3", + "parity-scale-codec 2.1.1", + "serde", + "sp-core", + "sp-std", +] + +[[package]] +name = "fp-rpc" +version = "2.0.0" +source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions#7b3b742c4e95eb7ae6c5435137670365f17ae1fa" +dependencies = [ + "ethereum", + "ethereum-types 0.11.0", + "fp-evm", + "parity-scale-codec 2.1.1", + "sp-api", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "fp-storage" +version = "1.0.1" +source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions#7b3b742c4e95eb7ae6c5435137670365f17ae1fa" + [[package]] name = "frame-benchmarking" version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70fe99487f84579a3f2c4ba52650fec875492eea41be0e4eea8019187f105052" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "frame-support", "frame-system", "linregress", - "parity-scale-codec", - "paste 1.0.4", + "log", + "parity-scale-codec 2.1.1", + "paste", "sp-api", "sp-io", "sp-runtime", @@ -1550,14 +1971,13 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2921b7890c5e4421a0b2eafbf835417eed8127b1cec3e1a0389515069f11d219" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "Inflector", "chrono", "frame-benchmarking", "handlebars", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "sc-cli", "sc-client-db", "sc-executor", @@ -1574,12 +1994,11 @@ dependencies = [ [[package]] name = "frame-executive" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1da8fd471442bee91b9b3f587ec832e3f47800374fdb89b4a66591cd7c42b29f" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "frame-support", "frame-system", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "serde", "sp-core", "sp-io", @@ -1591,10 +2010,9 @@ dependencies = [ [[package]] name = "frame-metadata" version = "13.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "073f7bef18421362441a1708f8528e442234954611f95bdc554b313fb321948e" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "parity-scale-codec", + "parity-scale-codec 2.1.1", "serde", "sp-core", "sp-std", @@ -1603,17 +2021,16 @@ dependencies = [ [[package]] name = "frame-support" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04e521e6214615bd82ba6b5fc7fd40a9cc14fdeb40f83da5eba12aa2f8179fb8" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "bitflags", "frame-metadata", "frame-support-procedural", - "impl-trait-for-tuples", + "impl-trait-for-tuples 0.2.1", "log", "once_cell", - "parity-scale-codec", - "paste 1.0.4", + "parity-scale-codec 2.1.1", + "paste", "serde", "smallvec 1.6.1", "sp-arithmetic", @@ -1630,8 +2047,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2668e24cbaba7f0e91d0c92a94bd1ae425a942608ad0b775db32477f5df4da9e" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "Inflector", "frame-support-procedural-tools", @@ -1643,11 +2059,10 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4f88cfd111e004590f4542b75e6d3302137b9067d7e7219e4ac47a535c3b5c1" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "frame-support-procedural-tools-derive", - "proc-macro-crate", + "proc-macro-crate 1.0.0", "proc-macro2", "quote", "syn", @@ -1656,8 +2071,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79285388b120ac96c15a791c56b26b9264f7231324fbe0fd05026acd92bf2e6a" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "proc-macro2", "quote", @@ -1667,12 +2081,12 @@ dependencies = [ [[package]] name = "frame-system" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5fedbff05d665c00bf4e089b4377fcb15b8bd37ebc3e5fc06665474cf6e25d7" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "frame-support", - "impl-trait-for-tuples", - "parity-scale-codec", + "impl-trait-for-tuples 0.2.1", + "log", + "parity-scale-codec 2.1.1", "serde", "sp-core", "sp-io", @@ -1684,13 +2098,12 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e93602f58cdab9820b6d607b7b50834d9b878efa33405a65c89ebfb5a596b584" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "frame-benchmarking", "frame-support", "frame-system", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "sp-core", "sp-runtime", "sp-std", @@ -1699,22 +2112,31 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cb9d2f86a903fdee4ca3d660c767e69a743cee8aeb103563a14ea52e9f0001d" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "parity-scale-codec", + "parity-scale-codec 2.1.1", "sp-api", ] [[package]] name = "fs-swap" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5839fda247e24ca4919c87c71dd5ca658f1f39e4f06829f80e3f15c3bafcfc2c" +checksum = "03d47dad3685eceed8488986cad3d5027165ea5edb164331770e2059555f10a5" dependencies = [ "lazy_static", "libc", - "libloading", + "libloading 0.5.2", + "winapi 0.3.9", +] + +[[package]] +name = "fs2" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" +dependencies = [ + "libc", "winapi 0.3.9", ] @@ -1748,15 +2170,15 @@ checksum = "fed34cd105917e91daa4da6b3728c47b068749d6a62c59811f06ed2ac71d9da7" [[package]] name = "futures" -version = "0.1.30" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7e4c2612746b0df8fed4ce0c69156021b704c9aefa360311c04e6e9e002eed" +checksum = "3a471a38ef8ed83cd6e40aa59c1ffe17db6855c18e3604d9c4ed8c08ebc28678" [[package]] name = "futures" -version = "0.3.12" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da9052a1a50244d8d5aa9bf55cbc2fb6f357c86cc52e46c62ed390a7180cf150" +checksum = "0e7e43a803dae2fa37c1f6a8fe121e1f7bf9548b4dfc0522a42f34145dadfc27" dependencies = [ "futures-channel", "futures-core", @@ -1769,9 +2191,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.12" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2d31b7ec7efab6eefc7c57233bb10b847986139d88cc2f5a02a1ae6871a1846" +checksum = "e682a68b29a882df0545c143dc3646daefe80ba479bcdede94d5a703de2871e2" dependencies = [ "futures-core", "futures-sink", @@ -1779,9 +2201,9 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.12" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79e5145dde8da7d1b3892dad07a9c98fc04bc39892b1ecc9692cf53e2b780a65" +checksum = "0402f765d8a89a26043b889b26ce3c4679d268fa6bb22cd7c6aad98340e179d1" [[package]] name = "futures-cpupool" @@ -1789,7 +2211,7 @@ version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab90cde24b3319636588d0c35fe03b1333857621051837ed769faefb4c2162e4" dependencies = [ - "futures 0.1.30", + "futures 0.1.31", "num_cpus", ] @@ -1799,21 +2221,21 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdcef58a173af8148b182684c9f2d5250875adbcaff7b5794073894f9d8634a9" dependencies = [ - "futures 0.1.30", - "futures 0.3.12", + "futures 0.1.31", + "futures 0.3.15", "lazy_static", "log", "parking_lot 0.9.0", - "pin-project 0.4.27", + "pin-project 0.4.28", "serde", "serde_json", ] [[package]] name = "futures-executor" -version = "0.3.12" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9e59fdc009a4b3096bf94f740a0f2424c082521f20a9b08c5c07c48d90fd9b9" +checksum = "badaa6a909fac9e7236d0620a2f57f7664640c56575b71a7552fbd68deafab79" dependencies = [ "futures-core", "futures-task", @@ -1823,9 +2245,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.12" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28be053525281ad8259d47e4de5de657b25e7bac113458555bb4b70bc6870500" +checksum = "acc499defb3b348f8d8f3f66415835a9131856ff7714bf10dadfc4ec4bdb29a1" [[package]] name = "futures-lite" @@ -1838,16 +2260,17 @@ dependencies = [ "futures-io", "memchr", "parking", - "pin-project-lite 0.2.4", + "pin-project-lite 0.2.6", "waker-fn", ] [[package]] name = "futures-macro" -version = "0.3.12" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c287d25add322d9f9abdcdc5927ca398917996600182178774032e9f8258fedd" +checksum = "a4c40298486cdf52cc00cd6d6987892ba502c7656a16a4192a9992b1ccedd121" dependencies = [ + "autocfg", "proc-macro-hack", "proc-macro2", "quote", @@ -1861,24 +2284,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3a1387e07917c711fb4ee4f48ea0adb04a3c9739e53ef85bf43ae1edc2937a8b" dependencies = [ "futures-io", - "rustls 0.19.0", + "rustls 0.19.1", "webpki", ] [[package]] name = "futures-sink" -version = "0.3.12" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caf5c69029bda2e743fddd0582d1083951d65cc9539aebf8812f36c3491342d6" +checksum = "a57bead0ceff0d6dde8f465ecd96c9338121bb7717d3e7b108059531870c4282" [[package]] name = "futures-task" -version = "0.3.12" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13de07eb8ea81ae445aca7b69f5f7bf15d7bf4912d8ca37d6645c77ae8a58d86" -dependencies = [ - "once_cell", -] +checksum = "8a16bef9fc1a4dddb5bee51c989e3fbba26569cbb0e31f5b303c184e3dd33dae" [[package]] name = "futures-timer" @@ -1894,11 +2314,12 @@ checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c" [[package]] name = "futures-util" -version = "0.3.12" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "632a8cd0f2a4b3fdea1657f08bde063848c3bd00f9bbf6e256b8be78802e624b" +checksum = "feb5c238d27e2bf94ffdfd27b2c29e3df4a68c4193bb6427384259e2bf191967" dependencies = [ - "futures 0.1.30", + "autocfg", + "futures 0.1.31", "futures-channel", "futures-core", "futures-io", @@ -1906,7 +2327,7 @@ dependencies = [ "futures-sink", "futures-task", "memchr", - "pin-project-lite 0.2.4", + "pin-project-lite 0.2.6", "pin-utils", "proc-macro-hack", "proc-macro-nested", @@ -1921,18 +2342,18 @@ checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2" [[package]] name = "generic-array" -version = "0.12.3" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c68f0274ae0e023facc3c97b2e00f076be70e254bc851d972503b328db79b2ec" +checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" dependencies = [ "typenum", ] [[package]] name = "generic-array" -version = "0.13.2" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ed1e761351b56f54eb9dcd0cfaca9fd0daecf93918e1cfc01c8a3d26ee7adcd" +checksum = "f797e67af32588215eaaab8327027ee8e71b9dd0b2b26996aedf20c030fce309" dependencies = [ "typenum", ] @@ -1990,6 +2411,12 @@ dependencies = [ "stable_deref_trait", ] +[[package]] +name = "gimli" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e4075386626662786ddb0ec9081e7c7eeb1ba31951f447ca780ef9f5d568189" + [[package]] name = "glob" version = "0.3.0" @@ -2031,7 +2458,7 @@ dependencies = [ "byteorder", "bytes 0.4.12", "fnv", - "futures 0.1.30", + "futures 0.1.31", "http 0.1.21", "indexmap", "log", @@ -2051,7 +2478,7 @@ dependencies = [ "futures-core", "futures-sink", "futures-util", - "http 0.2.3", + "http 0.2.4", "indexmap", "slab", "tokio 0.2.25", @@ -2062,14 +2489,14 @@ dependencies = [ [[package]] name = "handlebars" -version = "3.5.2" +version = "3.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "964d0e99a61fe9b1b347389b77ebf8b7e1587b70293676aaca7d27e59b9073b2" +checksum = "4498fc115fa7d34de968184e473529abb40eeb6be8bc5f7faba3d08c316cb3e3" dependencies = [ "log", "pest", "pest_derive", - "quick-error 2.0.0", + "quick-error 2.0.1", "serde", "serde_json", ] @@ -2118,9 +2545,9 @@ dependencies = [ [[package]] name = "hex" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "644f9158b2f133fd50f5fb3242878846d9eb792e445c893805ff0e3824006e35" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "hex-literal" @@ -2161,7 +2588,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c6e570451493f10f6581b48cdd530413b63ea9e780f544bfd3bdcaa0d89d1a7b" dependencies = [ "digest 0.8.1", - "generic-array 0.12.3", + "generic-array 0.12.4", "hmac 0.7.1", ] @@ -2178,9 +2605,9 @@ dependencies = [ [[package]] name = "http" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7245cd7449cc792608c3c8a9eaf69bd4eabbabf802713748fd739c98b82f0747" +checksum = "527e8c9ac747e28542699a951517aa9a6945af506cd1f2e1b53a576c17b6cc11" dependencies = [ "bytes 1.0.1", "fnv", @@ -2194,7 +2621,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6741c859c1b2463a423a1dbce98d418e6c3c3fc720fb0d45528657320920292d" dependencies = [ "bytes 0.4.12", - "futures 0.1.30", + "futures 0.1.31", "http 0.1.21", "tokio-buf", ] @@ -2206,14 +2633,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13d5ff830006f7646652e057693569bfe0d51760c0085a071769d142a205111b" dependencies = [ "bytes 0.5.6", - "http 0.2.3", + "http 0.2.4", ] [[package]] name = "httparse" -version = "1.3.5" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "615caabe2c3160b313d52ccc905335f4ed5f10881dd63dc5699d47e90be85691" +checksum = "f3a87b616e37e93c22fb19bcd386f02f3af5ea98a25670ad0fce773de23c5e68" [[package]] name = "httpdate" @@ -2232,12 +2659,12 @@ dependencies = [ [[package]] name = "hyper" -version = "0.12.35" +version = "0.12.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dbe6ed1438e1f8ad955a4701e9a944938e9519f6888d12d8558b645e247d5f6" +checksum = "5c843caf6296fc1f93444735205af9ed4e109a539005abb2564ae1d6fad34c52" dependencies = [ "bytes 0.4.12", - "futures 0.1.30", + "futures 0.1.31", "futures-cpupool", "h2 0.1.26", "http 0.1.21", @@ -2271,13 +2698,13 @@ dependencies = [ "futures-core", "futures-util", "h2 0.2.7", - "http 0.2.3", + "http 0.2.4", "http-body 0.3.1", "httparse", "httpdate", "itoa", - "pin-project 1.0.5", - "socket2", + "pin-project 1.0.7", + "socket2 0.3.19", "tokio 0.2.25", "tower-service", "tracing", @@ -2302,6 +2729,12 @@ dependencies = [ "webpki", ] +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + [[package]] name = "idna" version = "0.1.5" @@ -2315,9 +2748,9 @@ dependencies = [ [[package]] name = "idna" -version = "0.2.1" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de910d521f7cc3135c4de8db1cb910e0b5ed1dc6f57c381cd07e8e661ce10094" +checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" dependencies = [ "matches", "unicode-bidi", @@ -2352,7 +2785,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97b8538953a3f0d0d3868f0a706eb4273535e10d72acb5c82c1c23ae48835c85" dependencies = [ "async-io", - "futures 0.3.12", + "futures 0.3.15", "futures-lite", "if-addrs", "ipnet", @@ -2361,13 +2794,40 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "impl-codec" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1be51a921b067b0eaca2fad532d9400041561aa922221cc65f95a85641c6bf53" +dependencies = [ + "parity-scale-codec 1.3.7", +] + [[package]] name = "impl-codec" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df170efa359aebdd5cb7fe78edcc67107748e4737bdca8a8fb40d15ea7a877ed" dependencies = [ - "parity-scale-codec", + "parity-scale-codec 2.1.1", +] + +[[package]] +name = "impl-rlp" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f7a72f11830b52333f36e3b09a288333888bf54380fd0ac0790a3c31ab0f3c5" +dependencies = [ + "rlp 0.4.6", +] + +[[package]] +name = "impl-rlp" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28220f89297a075ddc7245cd538076ee98b01f2a9c23a53a4f1105d5a322808" +dependencies = [ + "rlp 0.5.0", ] [[package]] @@ -2379,6 +2839,17 @@ dependencies = [ "serde", ] +[[package]] +name = "impl-trait-for-tuples" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ef5550a42e3740a0e71f909d4c861056a284060af885ae7aa6242820f920d9d" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "impl-trait-for-tuples" version = "0.2.1" @@ -2392,9 +2863,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "1.6.1" +version = "1.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb1fa934250de4de8aef298d81c729a7d33d8c239daa3a7575e6b92bfc7313b" +checksum = "824845a0bf897a9042383849b02c1bc219c2383772efcd5c6f9766fa4b81aef3" dependencies = [ "autocfg", "hashbrown", @@ -2425,7 +2896,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "64fa110ec7b8f493f416eed552740d10e7030ad5f63b2308f82c9608ec2df275" dependencies = [ - "futures 0.3.12", + "futures 0.3.15", "futures-timer 2.0.2", ] @@ -2467,22 +2938,38 @@ checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736" [[package]] name = "jobserver" -version = "0.1.21" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c71313ebb9439f74b00d9d2dcec36440beaf57a6aa0623068441dd7cd81a7f2" +checksum = "972f5ae5d1cb9c6ae417789196c803205313edde988685da5e3aae0827b9e7fd" dependencies = [ "libc", ] [[package]] name = "js-sys" -version = "0.3.47" +version = "0.3.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cfb73131c35423a367daf8cbd24100af0d077668c8c2943f0e7dd775fef0f65" +checksum = "83bdfbace3a0e81a4253f73b49e960b053e396a11012cbd49b9b74d6a2b67062" dependencies = [ "wasm-bindgen", ] +[[package]] +name = "jsonrpc-client-transports" +version = "14.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2773fa94a2a1fd51efb89a8f45b8861023dbb415d18d3c9235ae9388d780f9ec" +dependencies = [ + "failure", + "futures 0.1.31", + "jsonrpc-core 14.2.0", + "jsonrpc-pubsub 14.2.0", + "log", + "serde", + "serde_json", + "url 1.7.2", +] + [[package]] name = "jsonrpc-client-transports" version = "15.1.0" @@ -2490,35 +2977,69 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "489b9c612e60c766f751ab40fcb43cbb55a1e10bb44a9b4307ed510ca598cbd7" dependencies = [ "failure", - "futures 0.1.30", - "jsonrpc-core", - "jsonrpc-pubsub", + "futures 0.1.31", + "jsonrpc-core 15.1.0", + "jsonrpc-pubsub 15.1.0", "log", "serde", "serde_json", "url 1.7.2", ] +[[package]] +name = "jsonrpc-core" +version = "14.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0747307121ffb9703afd93afbd0fb4f854c38fb873f2c8b90e0e902f27c7b62" +dependencies = [ + "futures 0.1.31", + "log", + "serde", + "serde_derive", + "serde_json", +] + [[package]] name = "jsonrpc-core" version = "15.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0745a6379e3edc893c84ec203589790774e4247420033e71a76d3ab4687991fa" dependencies = [ - "futures 0.1.30", + "futures 0.1.31", "log", "serde", "serde_derive", "serde_json", ] +[[package]] +name = "jsonrpc-core-client" +version = "14.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34221123bc79b66279a3fde2d3363553835b43092d629b34f2e760c44dc94713" +dependencies = [ + "jsonrpc-client-transports 14.2.1", +] + [[package]] name = "jsonrpc-core-client" version = "15.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6f764902d7b891344a0acb65625f32f6f7c6db006952143bd650209fbe7d94db" dependencies = [ - "jsonrpc-client-transports", + "jsonrpc-client-transports 15.1.0", +] + +[[package]] +name = "jsonrpc-derive" +version = "14.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0e77e8812f02155b85a677a96e1d16b60181950c0636199bc4528524fba98dc" +dependencies = [ + "proc-macro-crate 0.1.5", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -2527,7 +3048,7 @@ version = "15.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99a847f9ec7bb52149b2786a17c9cb260d6effc6b8eeb8c16b343a487a7563a3" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 0.1.5", "proc-macro2", "quote", "syn", @@ -2539,8 +3060,8 @@ version = "15.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4fb5c4513b7b542f42da107942b7b759f27120b5cc894729f88254b28dff44b7" dependencies = [ - "hyper 0.12.35", - "jsonrpc-core", + "hyper 0.12.36", + "jsonrpc-core 15.1.0", "jsonrpc-server-utils", "log", "net2", @@ -2554,7 +3075,7 @@ version = "15.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf50e53e4eea8f421a7316c5f63e395f7bc7c4e786a6dc54d76fab6ff7aa7ce7" dependencies = [ - "jsonrpc-core", + "jsonrpc-core 15.1.0", "jsonrpc-server-utils", "log", "parity-tokio-ipc", @@ -2562,13 +3083,26 @@ dependencies = [ "tokio-service", ] +[[package]] +name = "jsonrpc-pubsub" +version = "14.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d44f5602a11d657946aac09357956d2841299ed422035edf140c552cb057986" +dependencies = [ + "jsonrpc-core 14.2.0", + "log", + "parking_lot 0.10.2", + "rand 0.7.3", + "serde", +] + [[package]] name = "jsonrpc-pubsub" version = "15.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "639558e0604013be9787ae52f798506ae42bf4220fe587bdc5625871cc8b9c77" dependencies = [ - "jsonrpc-core", + "jsonrpc-core 15.1.0", "log", "parking_lot 0.10.2", "rand 0.7.3", @@ -2583,7 +3117,7 @@ checksum = "72f1f3990650c033bd8f6bd46deac76d990f9bbfb5f8dc8c4767bf0a00392176" dependencies = [ "bytes 0.4.12", "globset", - "jsonrpc-core", + "jsonrpc-core 15.1.0", "lazy_static", "log", "tokio 0.1.22", @@ -2597,7 +3131,7 @@ version = "15.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6596fe75209b73a2a75ebe1dce4e60e03b88a2b25e8807b667597f6315150d22" dependencies = [ - "jsonrpc-core", + "jsonrpc-core 15.1.0", "jsonrpc-server-utils", "log", "parity-ws", @@ -2653,9 +3187,9 @@ dependencies = [ [[package]] name = "kvdb-rocksdb" -version = "0.11.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34446c373ccc494c2124439281c198c7636ccdc2752c06722bbffd56d459c1e4" +checksum = "94b27cdb788bf1c8ade782289f9dbee626940be2961fd75c7cde993fa2f1ded1" dependencies = [ "fs-swap", "kvdb", @@ -2689,9 +3223,9 @@ checksum = "3576a87f2ba00f6f106fdfcd16db1d698d648a26ad8e0573cad8537c3c362d2a" [[package]] name = "libc" -version = "0.2.86" +version = "0.2.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7282d924be3275cec7f6756ff4121987bc6481325397dde6ba3e7802b1a8b1c" +checksum = "18794a8ad5b29321f790b55d93dfba91e125cb1a9edbd4f8e3150acc771c1a5e" [[package]] name = "libloading" @@ -2703,6 +3237,16 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "libloading" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f84d96438c15fcd6c3f244c8fce01d1e2b9c6b5623e9c711dc9286d8fc92d6a" +dependencies = [ + "cfg-if 1.0.0", + "winapi 0.3.9", +] + [[package]] name = "libm" version = "0.2.1" @@ -2711,16 +3255,15 @@ checksum = "c7d73b3f436185384286bd8098d17ec07c9a7d2388a6599f824d8502b529702a" [[package]] name = "libp2p" -version = "0.34.0" +version = "0.35.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5133112ce42be9482f6a87be92a605dd6bbc9e93c297aee77d172ff06908f3a" +checksum = "adc225a49973cf9ab10d0cdd6a4b8f0cda299df9b760824bbb623f15f8f0c95a" dependencies = [ "atomic", "bytes 1.0.1", - "futures 0.3.12", + "futures 0.3.15", "lazy_static", "libp2p-core", - "libp2p-core-derive", "libp2p-deflate", "libp2p-dns", "libp2p-floodsub", @@ -2735,6 +3278,7 @@ dependencies = [ "libp2p-pnet", "libp2p-request-response", "libp2p-swarm", + "libp2p-swarm-derive", "libp2p-tcp", "libp2p-uds", "libp2p-wasm-ext", @@ -2742,7 +3286,7 @@ dependencies = [ "libp2p-yamux", "parity-multiaddr", "parking_lot 0.11.1", - "pin-project 1.0.5", + "pin-project 1.0.7", "smallvec 1.6.1", "wasm-timer", ] @@ -2758,7 +3302,7 @@ dependencies = [ "ed25519-dalek", "either", "fnv", - "futures 0.3.12", + "futures 0.3.15", "futures-timer 3.0.2", "lazy_static", "libsecp256k1", @@ -2767,13 +3311,13 @@ dependencies = [ "multistream-select", "parity-multiaddr", "parking_lot 0.11.1", - "pin-project 1.0.5", + "pin-project 1.0.7", "prost", "prost-build", "rand 0.7.3", "ring", "rw-stream-sink", - "sha2 0.9.3", + "sha2 0.9.5", "smallvec 1.6.1", "thiserror", "unsigned-varint 0.7.0", @@ -2781,16 +3325,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "libp2p-core-derive" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4bc40943156e42138d22ed3c57ff0e1a147237742715937622a99b10fbe0156" -dependencies = [ - "quote", - "syn", -] - [[package]] name = "libp2p-deflate" version = "0.27.1" @@ -2798,7 +3332,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d42eed63305f0420736fa487f9acef720c4528bd7852a6a760f5ccde4813345" dependencies = [ "flate2", - "futures 0.3.12", + "futures 0.3.15", "libp2p-core", ] @@ -2808,7 +3342,7 @@ version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5153b6db68fd4baa3b304e377db744dd8fea8ff4e4504509ee636abcde88d3e3" dependencies = [ - "futures 0.3.12", + "futures 0.3.15", "libp2p-core", "log", ] @@ -2821,7 +3355,7 @@ checksum = "b3c63dfa06581b24b1d12bf9815b43689a784424be217d6545c800c7c75a207f" dependencies = [ "cuckoofilter", "fnv", - "futures 0.3.12", + "futures 0.3.15", "libp2p-core", "libp2p-swarm", "log", @@ -2833,16 +3367,16 @@ dependencies = [ [[package]] name = "libp2p-gossipsub" -version = "0.27.0" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12451ba9493e87c91baf2a6dffce9ddf1fbc807a0861532d7cf477954f8ebbee" +checksum = "502dc5fcbfec4aa1c63ef3f7307ffe20e90c1a1387bf23ed0bec087f2dde58a1" dependencies = [ - "asynchronous-codec 0.5.0", + "asynchronous-codec 0.6.0", "base64 0.13.0", "byteorder", "bytes 1.0.1", "fnv", - "futures 0.3.12", + "futures 0.3.15", "hex_fmt", "libp2p-core", "libp2p-swarm", @@ -2851,9 +3385,9 @@ dependencies = [ "prost-build", "rand 0.7.3", "regex", - "sha2 0.9.3", + "sha2 0.9.5", "smallvec 1.6.1", - "unsigned-varint 0.6.0", + "unsigned-varint 0.7.0", "wasm-timer", ] @@ -2863,7 +3397,7 @@ version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b40fb36a059b7a8cce1514bd8b546fa612e006c9937caa7f5950cb20021fe91e" dependencies = [ - "futures 0.3.12", + "futures 0.3.15", "libp2p-core", "libp2p-swarm", "log", @@ -2884,16 +3418,16 @@ dependencies = [ "bytes 1.0.1", "either", "fnv", - "futures 0.3.12", + "futures 0.3.15", "libp2p-core", "libp2p-swarm", "log", "prost", "prost-build", "rand 0.7.3", - "sha2 0.9.3", + "sha2 0.9.5", "smallvec 1.6.1", - "uint", + "uint 0.9.0", "unsigned-varint 0.7.0", "void", "wasm-timer", @@ -2908,7 +3442,7 @@ dependencies = [ "async-io", "data-encoding", "dns-parser", - "futures 0.3.12", + "futures 0.3.15", "if-watch", "lazy_static", "libp2p-core", @@ -2916,7 +3450,7 @@ dependencies = [ "log", "rand 0.7.3", "smallvec 1.6.1", - "socket2", + "socket2 0.3.19", "void", ] @@ -2928,7 +3462,7 @@ checksum = "350ce8b3923594aedabd5d6e3f875d058435052a29c3f32df378bc70d10be464" dependencies = [ "asynchronous-codec 0.6.0", "bytes 1.0.1", - "futures 0.3.12", + "futures 0.3.15", "libp2p-core", "log", "nohash-hasher", @@ -2945,15 +3479,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4aca322b52a0c5136142a7c3971446fb1e9964923a526c9cc6ef3b7c94e57778" dependencies = [ "bytes 1.0.1", - "curve25519-dalek 3.0.2", - "futures 0.3.12", + "curve25519-dalek 3.1.0", + "futures 0.3.15", "lazy_static", "libp2p-core", "log", "prost", "prost-build", "rand 0.7.3", - "sha2 0.9.3", + "sha2 0.9.5", "snow", "static_assertions", "x25519-dalek", @@ -2966,7 +3500,7 @@ version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6f3813276d0708c8db0f500d8beda1bda9ad955723b9cb272c41f4727256f73c" dependencies = [ - "futures 0.3.12", + "futures 0.3.15", "libp2p-core", "libp2p-swarm", "log", @@ -2983,7 +3517,7 @@ checksum = "9d58defcadb646ae4b033e130b48d87410bf76394dc3335496cae99dac803e61" dependencies = [ "asynchronous-codec 0.6.0", "bytes 1.0.1", - "futures 0.3.12", + "futures 0.3.15", "libp2p-core", "log", "prost", @@ -2998,12 +3532,12 @@ version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ce3374f3b28162db9d3442c9347c4f14cb01e8290052615c7d341d40eae0599" dependencies = [ - "futures 0.3.12", + "futures 0.3.15", "log", - "pin-project 1.0.5", + "pin-project 1.0.7", "rand 0.7.3", "salsa20", - "sha3", + "sha3 0.9.1", ] [[package]] @@ -3014,7 +3548,7 @@ checksum = "10e5552827c33d8326502682da73a0ba4bfa40c1b55b216af3c303f32169dd89" dependencies = [ "async-trait", "bytes 1.0.1", - "futures 0.3.12", + "futures 0.3.15", "libp2p-core", "libp2p-swarm", "log", @@ -3033,7 +3567,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7955b973e1fd2bd61ffd43ce261c1223f61f4aacd5bae362a924993f9a25fd98" dependencies = [ "either", - "futures 0.3.12", + "futures 0.3.15", "libp2p-core", "log", "rand 0.7.3", @@ -3042,6 +3576,16 @@ dependencies = [ "wasm-timer", ] +[[package]] +name = "libp2p-swarm-derive" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c564ebaa36a64839f51eaddb0243aaaa29ce64affb56129193cc3248b72af273" +dependencies = [ + "quote", + "syn", +] + [[package]] name = "libp2p-tcp" version = "0.27.1" @@ -3049,14 +3593,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "88a5aef80e519a6cb8e2663605142f97baaaea1a252eecbf8756184765f7471b" dependencies = [ "async-io", - "futures 0.3.12", + "futures 0.3.15", "futures-timer 3.0.2", "if-watch", "ipnet", "libc", "libp2p-core", "log", - "socket2", + "socket2 0.3.19", ] [[package]] @@ -3066,7 +3610,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "80ac51ce419f60be966e02103c17f67ff5dc4422ba83ba54d251d6c62a4ed487" dependencies = [ "async-std", - "futures 0.3.12", + "futures 0.3.15", "libp2p-core", "log", ] @@ -3077,7 +3621,7 @@ version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6149c46cb76935c80bc8be6ec6e3ebd5f5e1679765a255fb34331d54610f15dd" dependencies = [ - "futures 0.3.12", + "futures 0.3.15", "js-sys", "libp2p-core", "parity-send-wrapper", @@ -3092,24 +3636,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3b1c6a3431045da8b925ed83384e4c5163e14b990572307fca9c507435d4d22" dependencies = [ "either", - "futures 0.3.12", + "futures 0.3.15", "futures-rustls", "libp2p-core", "log", "quicksink", "rw-stream-sink", "soketto", - "url 2.2.0", + "url 2.2.2", "webpki-roots", ] [[package]] name = "libp2p-yamux" -version = "0.30.0" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "490b8b27fc40fe35212df1b6a3d14bffaa4117cbff956fdc2892168a371102ad" +checksum = "4819358c542a86ff95f6ae691efb4b94ddaf477079b01a686f5705b79bfc232a" dependencies = [ - "futures 0.3.12", + "futures 0.3.15", "libp2p-core", "parking_lot 0.11.1", "thiserror", @@ -3118,9 +3662,9 @@ dependencies = [ [[package]] name = "librocksdb-sys" -version = "6.11.4" +version = "6.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb5b56f651c204634b936be2f92dbb42c36867e00ff7fe2405591f3b9fa66f09" +checksum = "5da125e1c0f22c7cae785982115523a0738728498547f415c9054cb17c7e89f9" dependencies = [ "bindgen", "cc", @@ -3146,9 +3690,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "602113192b08db8f38796c4e85c39e960c145965140e918018bcde1952429655" +checksum = "de5435b8549c16d423ed0c03dbaafe57cf6c3344744f1242520d59c9d8ecec66" dependencies = [ "cc", "pkg-config", @@ -3172,11 +3716,11 @@ dependencies = [ [[package]] name = "linregress" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d0ad4b5cc8385a881c561fac3501353d63d2a2b7a357b5064d71815c9a92724" +checksum = "b36162d2e1dcbdeb61223cb788f029f8ac9f2ab19969b89c5a8f4517aad4d940" dependencies = [ - "nalgebra", + "nalgebra 0.25.4", "statrs", ] @@ -3191,9 +3735,9 @@ dependencies = [ [[package]] name = "lock_api" -version = "0.4.2" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd96ffd135b2fd7b973ac026d28085defbe8983df057ced3eb4f2130b0831312" +checksum = "0382880606dff6d15c9476c416d18690b72742aa7b605bb6dd6ec9030fbf07eb" dependencies = [ "scopeguard", ] @@ -3256,6 +3800,15 @@ dependencies = [ "rawpointer", ] +[[package]] +name = "matrixmultiply" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a8a15b776d9dfaecd44b03c5828c2199cddff5247215858aac14624f8d6b741" +dependencies = [ + "rawpointer", +] + [[package]] name = "maybe-uninit" version = "2.0.0" @@ -3264,15 +3817,15 @@ checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" [[package]] name = "memchr" -version = "2.3.4" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525" +checksum = "b16bd47d9e329435e309c58469fe0791c2d0d1ba96ec0954152a5ae2b04387dc" [[package]] name = "memmap2" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04e3e85b970d650e2ae6d70592474087051c11c54da7f7b4949725c5735fbcc6" +checksum = "397d1a6d6d0563c0f5462bbdae662cf6c784edf5e828e40c7257f85d82bf56dd" dependencies = [ "libc", ] @@ -3288,9 +3841,9 @@ dependencies = [ [[package]] name = "memoffset" -version = "0.6.1" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "157b4208e3059a8f9e78d559edc658e13df41410cb3ae03979c83130067fdd87" +checksum = "f83fb6581e8ed1f85fd45c116db8405483899489e38406156c25eb743554361d" dependencies = [ "autocfg", ] @@ -3326,18 +3879,18 @@ dependencies = [ [[package]] name = "minicbor" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3265a9f5210bb726f81ef9c456ae0aff5321cd95748c0e71889b0e19d8f0332b" +checksum = "1c2b2c73f9640fccab53947e2b3474d5071fcbc8f82cac51ddf6c8041a30a9ea" dependencies = [ "minicbor-derive", ] [[package]] name = "minicbor-derive" -version = "0.6.1" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "130b9455e28a3f308f6579671816a6f2621e2e0cbf55dc2f886345bef699481e" +checksum = "7f2b9e8883d58e34b18facd16c4564a77ea50fce028ad3d0ee6753440e37acc8" dependencies = [ "proc-macro2", "quote", @@ -3346,9 +3899,9 @@ dependencies = [ [[package]] name = "miniz_oxide" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f2d26ec3309788e423cfbf68ad1800f061638098d76a83681af979dc4eda19d" +checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" dependencies = [ "adler", "autocfg", @@ -3393,7 +3946,7 @@ checksum = "0840c1c50fd55e521b247f949c241c9997709f23bd7f023b9762cd561e935656" dependencies = [ "log", "mio", - "miow 0.3.6", + "miow 0.3.7", "winapi 0.3.9", ] @@ -3422,11 +3975,10 @@ dependencies = [ [[package]] name = "miow" -version = "0.3.6" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a33c1b55807fbed163481b5ba66db4b2fa6cde694a5027be10fb724206c5897" +checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" dependencies = [ - "socket2", "winapi 0.3.9", ] @@ -3459,8 +4011,8 @@ dependencies = [ "digest 0.9.0", "generic-array 0.14.4", "multihash-derive", - "sha2 0.9.3", - "sha3", + "sha2 0.9.5", + "sha3 0.9.1", "unsigned-varint 0.5.1", ] @@ -3470,7 +4022,7 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85ee3c48cb9d9b275ad967a0e96715badc13c6029adb92f34fa17b9ff28fd81f" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 0.1.5", "proc-macro-error", "proc-macro2", "quote", @@ -3480,59 +4032,66 @@ dependencies = [ [[package]] name = "multimap" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1255076139a83bb467426e7f8d0134968a8118844faa755985e077cf31850333" +checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" [[package]] name = "multistream-select" -version = "0.10.1" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5df70763c86c98487451f307e1b68b4100da9076f4c12146905fc2054277f4e8" +checksum = "7d91ec0a2440aaff5f78ec35631a7027d50386c6163aa975f7caa0d5da4b6ff8" dependencies = [ "bytes 1.0.1", - "futures 0.3.12", + "futures 0.3.15", "log", - "pin-project 1.0.5", + "pin-project 1.0.7", "smallvec 1.6.1", "unsigned-varint 0.7.0", ] [[package]] name = "nalgebra" -version = "0.21.1" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6b6147c3d50b4f3cdabfe2ecc94a0191fd3d6ad58aefd9664cf396285883486" +checksum = "0abb021006c01b126a936a8dd1351e0720d83995f4fc942d0d426c654f990745" dependencies = [ - "approx", - "generic-array 0.13.2", - "matrixmultiply", - "num-complex", - "num-rational", + "alga", + "approx 0.3.2", + "generic-array 0.13.3", + "matrixmultiply 0.2.4", + "num-complex 0.2.4", + "num-rational 0.2.4", "num-traits", "rand 0.7.3", "rand_distr", - "simba", "typenum", ] [[package]] -name = "names" -version = "0.11.0" +name = "nalgebra" +version = "0.25.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef320dab323286b50fb5cdda23f61c796a72a89998ab565ca32525c5c556f2da" +checksum = "c70c9e8c5f213c8e93fc8c112ade4edd3ee62062fb897776c23dcebac7932900" dependencies = [ - "rand 0.3.23", + "approx 0.4.0", + "generic-array 0.14.4", + "matrixmultiply 0.3.1", + "num-complex 0.3.1", + "num-rational 0.3.2", + "num-traits", + "serde", + "simba", + "typenum", ] [[package]] -name = "nb-connect" -version = "1.0.3" +name = "names" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "670361df1bc2399ee1ff50406a0d422587dd3bb0da596e1978fe8e05dabddf4f" +checksum = "ef320dab323286b50fb5cdda23f61c796a72a89998ab565ca32525c5c556f2da" dependencies = [ - "libc", - "socket2", + "rand 0.3.23", ] [[package]] @@ -3550,14 +4109,23 @@ dependencies = [ name = "nft" version = "3.0.0" dependencies = [ + "fc-consensus", + "fc-db", + "fc-mapping-sync", + "fc-rpc", + "fc-rpc-core", "flexi_logger", + "fp-rpc", "frame-benchmarking", "frame-benchmarking-cli", - "futures 0.3.12", - "jsonrpc-core", + "futures 0.3.15", + "jsonrpc-core 15.1.0", + "jsonrpc-pubsub 15.1.0", "log", "nft-runtime", "pallet-contracts-rpc", + "pallet-ethereum", + "pallet-nft", "pallet-transaction-payment-rpc", "parking_lot 0.10.2", "sc-basic-authorship", @@ -3585,6 +4153,7 @@ dependencies = [ "sp-finality-grandpa", "sp-inherents", "sp-runtime", + "sp-timestamp", "sp-transaction-pool", "structopt", "substrate-build-script-utils", @@ -3595,6 +4164,7 @@ dependencies = [ name = "nft-runtime" version = "3.0.0" dependencies = [ + "fp-rpc", "frame-benchmarking", "frame-executive", "frame-support", @@ -3607,6 +4177,8 @@ dependencies = [ "pallet-contracts", "pallet-contracts-primitives", "pallet-contracts-rpc-runtime-api", + "pallet-ethereum", + "pallet-evm", "pallet-grandpa", "pallet-inflation", "pallet-nft", @@ -3617,7 +4189,7 @@ dependencies = [ "pallet-transaction-payment-rpc-runtime-api", "pallet-treasury", "pallet-vesting", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "serde", "smallvec 1.6.1", "sp-api", @@ -3678,6 +4250,15 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-complex" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "747d632c0c558b87dbabbe6a82f3b4ae03720d0646ac5b7b4dae89394be5f2c5" +dependencies = [ + "num-traits", +] + [[package]] name = "num-integer" version = "0.1.44" @@ -3700,6 +4281,17 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-rational" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + [[package]] name = "num-traits" version = "0.2.14" @@ -3732,15 +4324,15 @@ dependencies = [ [[package]] name = "object" -version = "0.23.0" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9a7ab5d64814df0fe4a4b5ead45ed6c5f181ee3ff04ba344313a6c80446c5d4" +checksum = "1a5b3dd1c072ee7963717671d1ca129f1048fda25edea6b752bfc71ac8854170" [[package]] name = "once_cell" -version = "1.5.2" +version = "1.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13bd41f508810a131401606d54ac32a467c97172d74ba7662562ebba5ad07fa0" +checksum = "af8b08b04175473088b46763e51ee54da5f9a164bc162f615b91bc179dbf15a3" dependencies = [ "parking_lot 0.11.1", ] @@ -3759,9 +4351,9 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "openssl-probe" -version = "0.1.2" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de" +checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a" [[package]] name = "owning_ref" @@ -3775,32 +4367,29 @@ dependencies = [ [[package]] name = "pallet-aura" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73ff6054e982e7841a2519c988680620a85c1da5cd32363998a30302ed47f6f9" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "frame-support", "frame-system", "pallet-session", "pallet-timestamp", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "serde", "sp-application-crypto", "sp-consensus-aura", "sp-runtime", "sp-std", - "sp-timestamp", ] [[package]] name = "pallet-authorship" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47433a94141451e7079aabf3ca28f2bde8c642d84b568be9626e9b7cae8b11b1" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "frame-support", "frame-system", - "impl-trait-for-tuples", - "parity-scale-codec", + "impl-trait-for-tuples 0.2.1", + "parity-scale-codec 2.1.1", "sp-authorship", "sp-inherents", "sp-runtime", @@ -3810,13 +4399,13 @@ dependencies = [ [[package]] name = "pallet-balances" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41aaeaf084e594273f82bcbf96416ef1fcab602e15dd1df04b9930eceb2eb518" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "frame-benchmarking", "frame-support", "frame-system", - "parity-scale-codec", + "log", + "parity-scale-codec 2.1.1", "serde", "sp-runtime", "sp-std", @@ -3825,14 +4414,14 @@ dependencies = [ [[package]] name = "pallet-contracts" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0979c1dd82fc56a87b37311006fe56f406de027c24591353058e9e9fc56487c" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "frame-support", "frame-system", + "log", "pallet-contracts-primitives", "pallet-contracts-proc-macro", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "parity-wasm 0.41.0", "pwasm-utils 0.16.0", "serde", @@ -3847,11 +4436,10 @@ dependencies = [ [[package]] name = "pallet-contracts-primitives" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "621d75148763349f72e76e79f62365d28adb51e3f2e0285e4e8b8600ae600978" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "bitflags", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "sp-runtime", "sp-std", ] @@ -3859,8 +4447,7 @@ dependencies = [ [[package]] name = "pallet-contracts-proc-macro" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90046017aeee3f77752a6c77cdfb1bc93eb728591dc6edad36e2706f7626fd50" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "proc-macro2", "quote", @@ -3870,15 +4457,14 @@ dependencies = [ [[package]] name = "pallet-contracts-rpc" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22491e3c304819f96c83d02e43bd99128e4e42a57da4d6a9d4b5193778da915b" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "jsonrpc-core", - "jsonrpc-core-client", - "jsonrpc-derive", + "jsonrpc-core 15.1.0", + "jsonrpc-core-client 15.1.0", + "jsonrpc-derive 15.1.0", "pallet-contracts-primitives", "pallet-contracts-rpc-runtime-api", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "serde", "sp-api", "sp-blockchain", @@ -3890,28 +4476,81 @@ dependencies = [ [[package]] name = "pallet-contracts-rpc-runtime-api" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb4b410cb148e68256e3827854a67ec34b16157f448e78173219dcd6a8ec7343" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "pallet-contracts-primitives", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "sp-api", "sp-runtime", "sp-std", ] +[[package]] +name = "pallet-ethereum" +version = "2.0.0-dev" +source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions#7b3b742c4e95eb7ae6c5435137670365f17ae1fa" +dependencies = [ + "ethereum", + "ethereum-types 0.11.0", + "evm", + "fp-consensus", + "fp-evm", + "fp-rpc", + "fp-storage", + "frame-support", + "frame-system", + "libsecp256k1", + "pallet-balances", + "pallet-evm", + "pallet-timestamp", + "parity-scale-codec 2.1.1", + "rlp 0.5.0", + "rustc-hex", + "serde", + "sha3 0.8.2", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-evm" +version = "4.0.0-dev" +source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions#7b3b742c4e95eb7ae6c5435137670365f17ae1fa" +dependencies = [ + "evm", + "evm-gasometer", + "evm-runtime", + "fp-evm", + "frame-support", + "frame-system", + "impl-trait-for-tuples 0.2.1", + "log", + "pallet-balances", + "pallet-timestamp", + "parity-scale-codec 2.1.1", + "primitive-types 0.9.0", + "rlp 0.5.0", + "serde", + "sha3 0.8.2", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + [[package]] name = "pallet-grandpa" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c012cb0337ce1eaf0685be2777bce1ef8c5d7b7be77ea33916c316b40af43fa" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "frame-benchmarking", "frame-support", "frame-system", + "log", "pallet-authorship", "pallet-session", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "serde", "sp-application-crypto", "sp-core", @@ -3932,7 +4571,7 @@ dependencies = [ "pallet-balances", "pallet-randomness-collective-flip", "pallet-timestamp", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "serde", "sp-core", "sp-io", @@ -3944,16 +4583,26 @@ dependencies = [ name = "pallet-nft" version = "3.0.0" dependencies = [ + "ethereum", + "ethereum-tx-sign", + "evm-coder", + "fp-evm", "frame-benchmarking", "frame-support", "frame-system", + "hex-literal", "pallet-balances", "pallet-contracts", + "pallet-ethereum", + "pallet-evm", "pallet-randomness-collective-flip", "pallet-timestamp", "pallet-transaction-payment", - "parity-scale-codec", + "parity-scale-codec 2.1.1", + "primitive-types 0.9.0", + "rlp 0.5.0", "serde", + "sp-api", "sp-core", "sp-io", "sp-runtime", @@ -3963,12 +4612,11 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3ea6fa9aa36735ec11d7ec4d97dd6472650c0656fdc6d4adaca2578bd71134" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "frame-support", "frame-system", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "safe-mix", "sp-runtime", "sp-std", @@ -3977,14 +4625,13 @@ dependencies = [ [[package]] name = "pallet-session" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d243c3ccac56a4c55fade6be5c5af1de07fac374fa7856377980a76b0c193cf" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "frame-support", "frame-system", - "impl-trait-for-tuples", + "impl-trait-for-tuples 0.2.1", "pallet-timestamp", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "serde", "sp-core", "sp-io", @@ -3998,12 +4645,11 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a96774302e3824b7924c2465935ca4d558ea5f6a762c043fbc45fd2646ce89" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "frame-support", "frame-system", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "serde", "sp-io", "sp-runtime", @@ -4013,14 +4659,14 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b17dd274716a55a2c3e34d9c0ed66aaac3d7e0393ec9fd985e2b8532d697a7f3" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "frame-benchmarking", "frame-support", "frame-system", - "impl-trait-for-tuples", - "parity-scale-codec", + "impl-trait-for-tuples 0.2.1", + "log", + "parity-scale-codec 2.1.1", "serde", "sp-inherents", "sp-io", @@ -4032,12 +4678,11 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48e10dc1a10dd3f52edb20d3885cf5b2b16f26273a4d93e61331c6691fb13ab3" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "frame-support", "frame-system", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "serde", "smallvec 1.6.1", "sp-core", @@ -4049,14 +4694,13 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7835717b7d8fb59c33dd73f083c68a6d143a1dbe6029364c63ea7f4cb0ba3f9c" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "jsonrpc-core", - "jsonrpc-core-client", - "jsonrpc-derive", + "jsonrpc-core 15.1.0", + "jsonrpc-core-client 15.1.0", + "jsonrpc-derive 15.1.0", "pallet-transaction-payment-rpc-runtime-api", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "sp-api", "sp-blockchain", "sp-core", @@ -4067,11 +4711,10 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a92d3383260d0d19d9a36f40766d48d779fd19baccba8b20c3e7d2670a26ee1" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "pallet-transaction-payment", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "sp-api", "sp-runtime", ] @@ -4079,14 +4722,13 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d19f881664d42d1c33dd67e690d6bddd35d38723fcc099b19304f9723fc3070c" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "frame-support", "frame-system", - "impl-trait-for-tuples", + "impl-trait-for-tuples 0.2.1", "pallet-balances", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "serde", "sp-runtime", "sp-std", @@ -4095,13 +4737,12 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e4e1af42bbdf1d477c3762387c74855f24bca47700df3ce7d9428045986b544" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "enumflags2", "frame-support", "frame-system", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "serde", "sp-runtime", "sp-std", @@ -4109,12 +4750,13 @@ dependencies = [ [[package]] name = "parity-db" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "111e193c96758d476d272093a853882668da17489f76bf4361b8decae0b6c515" +checksum = "495197c078e54b8735181aa35c00a327f7f3a3cc00a1ee8c95926dd010f0ec6b" dependencies = [ "blake2-rfc", "crc32fast", + "fs2", "hex", "libc", "log", @@ -4125,9 +4767,9 @@ dependencies = [ [[package]] name = "parity-multiaddr" -version = "0.11.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2c6805f98667a3828afb2ec2c396a8d610497e8d546f5447188aae47c5a79ec" +checksum = "58341485071825827b7f03cf7efd1cb21e6a709bea778fb50227fd45d2f361b4" dependencies = [ "arrayref", "bs58", @@ -4138,29 +4780,41 @@ dependencies = [ "serde", "static_assertions", "unsigned-varint 0.7.0", - "url 2.2.0", + "url 2.2.2", ] [[package]] name = "parity-scale-codec" -version = "2.0.1" +version = "1.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cd3dab59b5cf4bc81069ade0fc470341a1ef3ad5fa73e5a8943bed2ec12b2e8" +checksum = "a4b26b16c7687c3075982af47719e481815df30bc544f7a6690763a25ca16e9d" dependencies = [ "arrayvec 0.5.2", - "bitvec", - "byte-slice-cast", + "bitvec 0.17.4", + "byte-slice-cast 0.3.5", + "serde", +] + +[[package]] +name = "parity-scale-codec" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0f518afaa5a47d0d6386229b0a6e01e86427291d643aa4cabb4992219f504f8" +dependencies = [ + "arrayvec 0.7.0", + "bitvec 0.20.4", + "byte-slice-cast 1.0.0", "parity-scale-codec-derive", "serde", ] [[package]] name = "parity-scale-codec-derive" -version = "2.0.1" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa04976a81fde04924b40cc4036c4d12841e8bb04325a5cf2ada75731a150a7d" +checksum = "f44c5f94427bd0b5076e8f7e15ca3f60a4d8ac0077e4793884e6fdfd8915344e" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 0.1.5", "proc-macro2", "quote", "syn", @@ -4179,11 +4833,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e57fea504fea33f9fbb5f49f378359030e7e026a6ab849bb9e8f0787376f1bf" dependencies = [ "bytes 0.4.12", - "futures 0.1.30", + "futures 0.1.31", "libc", "log", "mio-named-pipes", - "miow 0.3.6", + "miow 0.3.7", "rand 0.7.3", "tokio 0.1.22", "tokio-named-pipes", @@ -4199,10 +4853,10 @@ checksum = "664a8c6b8e62d8f9f2f937e391982eb433ab285b4cd9545b342441e04a906e42" dependencies = [ "cfg-if 1.0.0", "hashbrown", - "impl-trait-for-tuples", + "impl-trait-for-tuples 0.2.1", "parity-util-mem-derive", "parking_lot 0.11.1", - "primitive-types", + "primitive-types 0.9.0", "smallvec 1.6.1", "winapi 0.3.9", ] @@ -4248,7 +4902,7 @@ dependencies = [ "rand 0.7.3", "sha-1 0.8.2", "slab", - "url 2.2.0", + "url 2.2.2", ] [[package]] @@ -4285,7 +4939,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d7744ac029df22dca6284efe4e898991d28e3085c706c972bcd7da4a27a15eb" dependencies = [ "instant", - "lock_api 0.4.2", + "lock_api 0.4.4", "parking_lot_core 0.8.3", ] @@ -4327,35 +4981,16 @@ dependencies = [ "cfg-if 1.0.0", "instant", "libc", - "redox_syscall 0.2.5", + "redox_syscall 0.2.8", "smallvec 1.6.1", "winapi 0.3.9", ] [[package]] name = "paste" -version = "0.1.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45ca20c77d80be666aef2b45486da86238fabe33e38306bd3118fe4af33fa880" -dependencies = [ - "paste-impl", - "proc-macro-hack", -] - -[[package]] -name = "paste" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5d65c4d95931acda4498f675e332fcbdc9a06705cd07086c510e9b6009cd1c1" - -[[package]] -name = "paste-impl" -version = "0.1.18" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d95a7db200b97ef370c8e6de0088252f7e0dfff7d047a28528e47456c0fc98b6" -dependencies = [ - "proc-macro-hack", -] +checksum = "acbf547ad0c65e31259204bd90935776d1c693cec2f4ff7abb7a1bbbd40dfe58" [[package]] name = "pbkdf2" @@ -4455,27 +5090,27 @@ dependencies = [ [[package]] name = "pin-project" -version = "0.4.27" +version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ffbc8e94b38ea3d2d8ba92aea2983b503cd75d0888d75b86bb37970b5698e15" +checksum = "918192b5c59119d51e0cd221f4d49dde9112824ba717369e903c97d076083d0f" dependencies = [ - "pin-project-internal 0.4.27", + "pin-project-internal 0.4.28", ] [[package]] name = "pin-project" -version = "1.0.5" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96fa8ebb90271c4477f144354485b8068bd8f6b78b428b01ba892ca26caf0b63" +checksum = "c7509cc106041c40a4518d2af7a61530e1eed0e6285296a3d8c5472806ccc4a4" dependencies = [ - "pin-project-internal 1.0.5", + "pin-project-internal 1.0.7", ] [[package]] name = "pin-project-internal" -version = "0.4.27" +version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65ad2ae56b6abe3a1ee25f15ee605bacadb9a764edaba9c2bf4103800d4a1895" +checksum = "3be26700300be6d9d23264c73211d8190e755b6b5ca7a1b28230025511b52a5e" dependencies = [ "proc-macro2", "quote", @@ -4484,9 +5119,9 @@ dependencies = [ [[package]] name = "pin-project-internal" -version = "1.0.5" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "758669ae3558c6f74bd2a18b41f7ac0b5a195aea6639d6a9b5e5d1ad5ba24c0b" +checksum = "48c950132583b500556b1efd71d45b319029f2b71518d979fcc208e16b42426f" dependencies = [ "proc-macro2", "quote", @@ -4495,15 +5130,15 @@ dependencies = [ [[package]] name = "pin-project-lite" -version = "0.1.11" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c917123afa01924fc84bb20c4c03f004d9c38e5127e3c039bbf7f4b9c76a2f6b" +checksum = "257b64915a082f7811703966789728173279bdebb956b143dbcd23f6f970a777" [[package]] name = "pin-project-lite" -version = "0.2.4" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439697af366c49a6d0a010c56a0d97685bc140ce0d377b13a2ea2aa42d64a827" +checksum = "dc0e1f259c92177c30a4c9d177246edd0a3568b25756a977d0632cf8fa37e905" [[package]] name = "pin-utils" @@ -4525,11 +5160,11 @@ checksum = "989d43012e2ca1c4a02507c67282691a0a3207f9dc67cec596b43fe925b3d325" [[package]] name = "polling" -version = "2.0.2" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2a7bc6b2a29e632e45451c941832803a18cce6781db04de8a04696cdca8bde4" +checksum = "4fc12d774e799ee9ebae13f4076ca003b40d18a11ac0f3641e6f899618580b7b" dependencies = [ - "cfg-if 0.1.10", + "cfg-if 1.0.0", "libc", "log", "wepoll-sys", @@ -4542,7 +5177,7 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b7456bc1ad2d4cf82b3a016be4c2ac48daf11bf990c1603ebd447fe6f30fca8" dependencies = [ - "cpuid-bool 0.2.0", + "cpuid-bool", "universal-hash", ] @@ -4552,7 +5187,7 @@ version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eebcc4aa140b9abd2bc40d9c3f7ccec842679cd79045ac3a7ac698c1a064b7cd" dependencies = [ - "cpuid-bool 0.2.0", + "cpuid-bool", "opaque-debug 0.3.0", "universal-hash", ] @@ -4563,16 +5198,30 @@ version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" +[[package]] +name = "primitive-types" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dd39dcacf71411ba488570da7bbc89b717225e46478b30ba99b92db6b149809" +dependencies = [ + "fixed-hash 0.6.1", + "impl-codec 0.4.2", + "impl-rlp 0.2.1", + "impl-serde", + "uint 0.8.5", +] + [[package]] name = "primitive-types" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2415937401cb030a2a0a4d922483f945fa068f52a7dbb22ce0fe5f2b6f6adace" dependencies = [ - "fixed-hash", - "impl-codec", + "fixed-hash 0.7.0", + "impl-codec 0.5.0", + "impl-rlp 0.3.0", "impl-serde", - "uint", + "uint 0.9.0", ] [[package]] @@ -4584,6 +5233,16 @@ dependencies = [ "toml", ] +[[package]] +name = "proc-macro-crate" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41fdbd1df62156fbc5945f4762632564d7d038153091c3fcf1067f6aef7cff92" +dependencies = [ + "thiserror", + "toml", +] + [[package]] name = "proc-macro-error" version = "1.0.4" @@ -4622,9 +5281,9 @@ checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086" [[package]] name = "proc-macro2" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71" +checksum = "a152013215dca273577e18d2bf00fa862b89b24169fb78c4c95aeb07992c9cec" dependencies = [ "unicode-xid", ] @@ -4668,7 +5327,7 @@ dependencies = [ "prost", "prost-types", "tempfile", - "which 4.0.2", + "which", ] [[package]] @@ -4733,9 +5392,9 @@ checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[package]] name = "quick-error" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ac73b1112776fc109b2e61909bc46c7e1bf0d7f690ffb1676553acce16d5cda" +checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" [[package]] name = "quicksink" @@ -4745,7 +5404,7 @@ checksum = "77de3c815e5a160b1539c6592796801df2043ae35e123b46d73380cfa57af858" dependencies = [ "futures-core", "futures-sink", - "pin-project-lite 0.1.11", + "pin-project-lite 0.1.12", ] [[package]] @@ -4757,6 +5416,12 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "radium" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "def50a86306165861203e7f84ecffbbdfdea79f0e51039b33de1e952358c47ac" + [[package]] name = "radium" version = "0.6.2" @@ -4938,7 +5603,7 @@ checksum = "9ab346ac5921dc62ffa9f89b7a773907511cdfa5490c572ae9be1be33e8afa4a" dependencies = [ "crossbeam-channel", "crossbeam-deque 0.8.0", - "crossbeam-utils 0.8.1", + "crossbeam-utils 0.8.4", "lazy_static", "num_cpus", ] @@ -4954,28 +5619,17 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.1.57" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" - -[[package]] -name = "redox_syscall" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94341e4e44e24f6b591b59e47a8a027df12e008d73fd5672dbea9cc22f4507d9" -dependencies = [ - "bitflags", -] +version = "0.1.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" [[package]] -name = "redox_users" -version = "0.3.5" +name = "redox_syscall" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de0737333e7a9502c789a36d7c7fa6092a49895d4faa31ca5df163857ded2e9d" +checksum = "742739e41cd49414de871ea5e549afb7e2a3ac77b589bcbebe8c82fab37147fc" dependencies = [ - "getrandom 0.1.16", - "redox_syscall 0.1.57", - "rust-argon2", + "bitflags", ] [[package]] @@ -4985,7 +5639,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64" dependencies = [ "getrandom 0.2.2", - "redox_syscall 0.2.5", + "redox_syscall 0.2.8", ] [[package]] @@ -5021,14 +5675,13 @@ dependencies = [ [[package]] name = "regex" -version = "1.4.3" +version = "1.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9251239e129e16308e70d853559389de218ac275b515068abc96829d05b948a" +checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461" dependencies = [ "aho-corasick", "memchr", "regex-syntax", - "thread_local", ] [[package]] @@ -5043,9 +5696,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.22" +version = "0.6.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5eb417147ba9860a96cfe72a0b93bf88fee1744b5636ec99ab20c1aa9376581" +checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" [[package]] name = "region" @@ -5070,9 +5723,9 @@ dependencies = [ [[package]] name = "retain_mut" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53552c6c49e1e13f1a203ef0080ab3bbef0beb570a528993e83df057a9d9bba1" +checksum = "e9c17925a9027d298a4603d286befe3f9dc0e8ed02523141914eb628798d6e5b" [[package]] name = "ring" @@ -5089,11 +5742,41 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "rlp" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1190dcc8c3a512f1eef5d09bb8c84c7f39e1054e174d1795482e18f5272f2e73" +dependencies = [ + "rustc-hex", +] + +[[package]] +name = "rlp" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e54369147e3e7796c9b885c7304db87ca3d09a0a98f72843d532868675bbfba8" +dependencies = [ + "bytes 1.0.1", + "rustc-hex", +] + +[[package]] +name = "rlp-derive" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e33d7b2abe0c340d8797fe2907d3f20d3b5ea5908683618bfe80df7f621f672a" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "rocksdb" -version = "0.15.0" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23d83c02c429044d58474eaf5ae31e062d0de894e21125b47437ec0edc1397e6" +checksum = "c749134fda8bfc90d0de643d59bfc841dcb3ac8a1062e12b6754bd60235c48b3" dependencies = [ "libc", "librocksdb-sys", @@ -5109,23 +5792,11 @@ dependencies = [ "winapi 0.3.9", ] -[[package]] -name = "rust-argon2" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b18820d944b33caa75a71378964ac46f58517c92b6ae5f762636247c09e78fb" -dependencies = [ - "base64 0.13.0", - "blake2b_simd", - "constant_time_eq", - "crossbeam-utils 0.8.1", -] - [[package]] name = "rustc-demangle" -version = "0.1.18" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e3bad0ee36814ca07d7968269dd4b7ec89ec2da10c4bb613928d3077083c232" +checksum = "410f7acf3cb3a44527c5d9546bad4bf4e6c460915d5f9f2fc524498bfe8f70ce" [[package]] name = "rustc-hash" @@ -5163,9 +5834,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "064fd21ff87c6e87ed4506e68beb42459caa4a0e2eb144932e6776768556980b" +checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7" dependencies = [ "base64 0.13.0", "log", @@ -5192,8 +5863,8 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4da5fcb054c46f5a5dff833b129285a93d3f0179531735e6c866e8cc307d2020" dependencies = [ - "futures 0.3.12", - "pin-project 0.4.27", + "futures 0.3.15", + "pin-project 0.4.28", "static_assertions", ] @@ -5233,13 +5904,12 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de86afb63617599821312bda08882451ff2b49d9c45e22513ddff5a07c6d966e" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "futures 0.3.12", + "futures 0.3.15", "futures-timer 3.0.2", "log", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "sc-block-builder", "sc-client-api", "sc-proposer-metrics", @@ -5257,15 +5927,13 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9862161f9d09d870401c7256c89ad1eb3afa56a61f7d7135c2bac76ff7152955" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "parity-scale-codec", + "parity-scale-codec 2.1.1", "sc-client-api", "sp-api", "sp-block-builder", "sp-blockchain", - "sp-consensus", "sp-core", "sp-inherents", "sp-runtime", @@ -5275,11 +5943,10 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d97030776b49bc9c109e2d349212d8f2500637761048e1af5b7ce2dfd994c7" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "impl-trait-for-tuples", - "parity-scale-codec", + "impl-trait-for-tuples 0.2.1", + "parity-scale-codec 2.1.1", "sc-chain-spec-derive", "sc-consensus-babe", "sc-consensus-epochs", @@ -5297,10 +5964,9 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f14985513db9798fcedea58bdc8a08f1c6b3a515d6546ced7467b059b7982c4" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 1.0.0", "proc-macro2", "quote", "syn", @@ -5309,17 +5975,16 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ec1647b5c1483fa05f7f32e436d0e378e2f3d5696a5a30bddf66f5faf28acb4" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "chrono", "fdlimit", - "futures 0.3.12", + "futures 0.3.15", "hex", "libp2p", "log", "names", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "rand 0.7.3", "regex", "rpassword", @@ -5348,17 +6013,16 @@ dependencies = [ [[package]] name = "sc-client-api" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56d8b2c8dc0cee9ac56e87ad50c980edbdeb35bdd5b5d9da4ae90567423363be" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "derive_more", "fnv", - "futures 0.3.12", + "futures 0.3.15", "hash-db", "kvdb", "lazy_static", "log", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "parking_lot 0.11.1", "sc-executor", "sp-api", @@ -5383,8 +6047,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5741e447d71ff36c147f961b2271b6b3fad0cc347e96936bc8b63ddffa594b27" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "blake2-rfc", "hash-db", @@ -5394,7 +6057,7 @@ dependencies = [ "linked-hash-map", "log", "parity-db", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "parity-util-mem", "parking_lot 0.11.1", "sc-client-api", @@ -5414,8 +6077,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99f20cc8b8a74e218365ac4187bce26ea631d58d221caa1797bc6ec8056dba33" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "sc-client-api", "sp-blockchain", @@ -5426,14 +6088,13 @@ dependencies = [ [[package]] name = "sc-consensus-aura" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e0d32ccddef567a0fe373729aa4da51b2d437cbb102b9810400c9e77e040c1d" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "derive_more", - "futures 0.3.12", + "futures 0.3.15", "futures-timer 3.0.2", "log", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "parking_lot 0.11.1", "sc-block-builder", "sc-client-api", @@ -5459,19 +6120,18 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98d52048476e0fcb53feae8ca919a602104f1ba0b89a729b496440f36b332961" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "derive_more", "fork-tree", - "futures 0.3.12", + "futures 0.3.15", "futures-timer 3.0.2", "log", "merlin", "num-bigint", - "num-rational", + "num-rational 0.2.4", "num-traits", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "parking_lot 0.11.1", "pdqselect", "rand 0.7.3", @@ -5506,11 +6166,10 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "326313ffb249a526e8ee8e08af9fdf0c4459cebeaa760b934e9df3985b68e4df" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "fork-tree", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "parking_lot 0.11.1", "sc-client-api", "sp-blockchain", @@ -5520,13 +6179,12 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76e09ff8b680d449102da9717a70c3bbbbb981fd4cf1bfbafc1739d954eb0898" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "futures 0.3.12", + "futures 0.3.15", "futures-timer 3.0.2", "log", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "parking_lot 0.11.1", "sc-client-api", "sc-telemetry", @@ -5547,8 +6205,7 @@ dependencies = [ [[package]] name = "sc-consensus-uncles" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37294bae6d787eecf2b15255dc75cd559b4ad813e0efcf28cd4423e218931b80" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "log", "sc-client-api", @@ -5562,14 +6219,13 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bace6a35999d2da7311d8fb98a29c1e89dbf0d14e50ac14140f2c38089819f46" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "derive_more", "lazy_static", "libsecp256k1", "log", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "parity-wasm 0.41.0", "parking_lot 0.11.1", "sc-executor-common", @@ -5592,11 +6248,10 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87004102a8e95f432f1c624c7fa7fb0edc5995db2e0fcbabbb697f1955e7c1d2" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "derive_more", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "parity-wasm 0.41.0", "sp-allocator", "sp-core", @@ -5609,11 +6264,10 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d3d7b6db2df5f2c24848883a855a8276363f00cef5b49744974f7e1203bf274" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "log", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "sc-executor-common", "sp-allocator", "sp-core", @@ -5625,11 +6279,10 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24673c981fad2dff4398a09a1086579e2774f18d81639fa2bd9cb215e6dd9e36" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "log", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "parity-wasm 0.41.0", "pwasm-utils 0.14.0", "sc-executor-common", @@ -5644,19 +6297,19 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7e87e63c57933e173a8643ff197b579e3fc5c91b16ca006096f482de8159318" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "derive_more", + "dyn-clone", "finality-grandpa", "fork-tree", - "futures 0.3.12", + "futures 0.3.15", "futures-timer 3.0.2", "linked-hash-map", "log", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "parking_lot 0.11.1", - "pin-project 1.0.5", + "pin-project 1.0.7", "rand 0.7.3", "sc-block-builder", "sc-client-api", @@ -5683,11 +6336,10 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f4c8994853e1158dc4f448b014aa83eef56ced214ec0af316eecf4a6ca3268f" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "ansi_term 0.12.1", - "futures 0.3.12", + "futures 0.3.15", "log", "parity-util-mem", "sc-client-api", @@ -5702,12 +6354,11 @@ dependencies = [ [[package]] name = "sc-keystore" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d966ed36c404eced656bd63aad8a30d2c1a14633f07cd1d7d9c11b62f75a7905" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "async-trait", "derive_more", - "futures 0.3.12", + "futures 0.3.15", "futures-util", "hex", "merlin", @@ -5723,12 +6374,11 @@ dependencies = [ [[package]] name = "sc-light" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04e8dbcb2951f7cf76ddf97ed26dcef0dab79d76745de4a8f169d58236ea8704" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "hash-db", "lazy_static", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "parking_lot 0.11.1", "sc-client-api", "sc-executor", @@ -5743,8 +6393,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20fb4ed5d6b86faafb0743c8c2fd1c89b52cde7697373b254c7553800efaebbf" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "async-std", "async-trait", @@ -5758,7 +6407,7 @@ dependencies = [ "erased-serde", "fnv", "fork-tree", - "futures 0.3.12", + "futures 0.3.15", "futures-timer 3.0.2", "hex", "ip_network", @@ -5768,9 +6417,9 @@ dependencies = [ "log", "lru", "nohash-hasher", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "parking_lot 0.11.1", - "pin-project 1.0.5", + "pin-project 1.0.7", "prost", "prost-build", "rand 0.7.3", @@ -5797,10 +6446,9 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2cd5487d6f8051863a186e2aea4c233a07bb691780d3b117c9d6ffe1ff9a8fe" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "futures 0.3.12", + "futures 0.3.15", "futures-timer 3.0.2", "libp2p", "log", @@ -5814,18 +6462,18 @@ dependencies = [ [[package]] name = "sc-offchain" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bc91fc71c128748a3393cb3421e12a7759ccffcc1cc4a9e6ff4ead6cc68ba48" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "bytes 0.5.6", "fnv", - "futures 0.3.12", + "futures 0.3.15", "futures-timer 3.0.2", + "hex", "hyper 0.13.10", "hyper-rustls", "log", "num_cpus", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "parking_lot 0.11.1", "rand 0.7.3", "sc-client-api", @@ -5842,10 +6490,9 @@ dependencies = [ [[package]] name = "sc-peerset" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce454e528e7797a239e734d0d66bf904d48be47aa92691ac7546a45ec32a64cf" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "futures 0.3.12", + "futures 0.3.15", "libp2p", "log", "serde_json", @@ -5856,8 +6503,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecfc2c6cc5dc0ecb1109cce9773b50ad9a3cdbf239dc702ef9071949244dcf3e" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -5866,15 +6512,14 @@ dependencies = [ [[package]] name = "sc-rpc" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "750397c6aa5a4f922cac99599ad74a4082e3e87553d51ceb4c48abfa056ff32c" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "futures 0.3.12", + "futures 0.3.15", "hash-db", - "jsonrpc-core", - "jsonrpc-pubsub", + "jsonrpc-core 15.1.0", + "jsonrpc-pubsub 15.1.0", "log", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "parking_lot 0.11.1", "sc-block-builder", "sc-client-api", @@ -5901,17 +6546,16 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc8393410297df2885efec20d0629a9833b4fd9e4ad83a92471e1ea0c11a0a54" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "derive_more", - "futures 0.3.12", - "jsonrpc-core", - "jsonrpc-core-client", - "jsonrpc-derive", - "jsonrpc-pubsub", + "futures 0.3.15", + "jsonrpc-core 15.1.0", + "jsonrpc-core-client 15.1.0", + "jsonrpc-derive 15.1.0", + "jsonrpc-pubsub 15.1.0", "log", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "parking_lot 0.11.1", "serde", "serde_json", @@ -5926,14 +6570,13 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17c76164897bd3b0d04c2d6aeeb4d3492c86e324b0b08f408b847ea35421b589" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "futures 0.1.30", - "jsonrpc-core", + "futures 0.1.31", + "jsonrpc-core 15.1.0", "jsonrpc-http-server", "jsonrpc-ipc-server", - "jsonrpc-pubsub", + "jsonrpc-pubsub 15.1.0", "jsonrpc-ws-server", "log", "serde", @@ -5945,23 +6588,22 @@ dependencies = [ [[package]] name = "sc-service" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9315b44eb991ca4f477d889bbd649a2b4b557f963fe48ec5a36c3422518e4a0" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "directories", "exit-future", - "futures 0.1.30", - "futures 0.3.12", + "futures 0.1.31", + "futures 0.3.15", "futures-timer 3.0.2", "hash-db", - "jsonrpc-core", - "jsonrpc-pubsub", + "jsonrpc-core 15.1.0", + "jsonrpc-pubsub 15.1.0", "lazy_static", "log", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "parity-util-mem", "parking_lot 0.11.1", - "pin-project 1.0.5", + "pin-project 1.0.7", "rand 0.7.3", "sc-block-builder", "sc-chain-spec", @@ -6009,11 +6651,10 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f144043d5860ce133f701fa78679d6278f2dfc698686beb5f6d892c267e9d92" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "log", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "parity-util-mem", "parity-util-mem-derive", "parking_lot 0.11.1", @@ -6025,22 +6666,19 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d05040c594b331d90d7341e82c6dc6a3eb7bb2afb4e5dc9c36a79a6754166057" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "chrono", - "futures 0.3.12", + "futures 0.3.15", "libp2p", "log", "parking_lot 0.11.1", - "pin-project 1.0.5", + "pin-project 1.0.7", "rand 0.7.3", "serde", "serde_json", - "sp-utils", "take_mut", - "tracing", - "tracing-subscriber", + "thiserror", "void", "wasm-timer", ] @@ -6048,8 +6686,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef0a4aa327b8bc89d9c5ae57a2f493d8f54ccd706f6763614ab522559fe481d8" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "ansi_term 0.12.1", "atty", @@ -6060,7 +6697,6 @@ dependencies = [ "parking_lot 0.11.1", "regex", "rustc-hash", - "sc-telemetry", "sc-tracing-proc-macro", "serde", "serde_json", @@ -6077,10 +6713,9 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec18b0506911e6d624d9ea8f8cc5f503e7944a0fe7d37de95ee84033cf160ebc" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 1.0.0", "proc-macro2", "quote", "syn", @@ -6089,11 +6724,10 @@ dependencies = [ [[package]] name = "sc-transaction-graph" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87b385b8f66cce185478c500ad3de8f4775ab0e948c31561aeac78a27bedc654" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "derive_more", - "futures 0.3.12", + "futures 0.3.15", "linked-hash-map", "log", "parity-util-mem", @@ -6112,14 +6746,13 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09f4331ea8da2ff45a9466637f90f5cc89f9d31fcd1cd20f74f2520b33bff069" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "futures 0.3.12", + "futures 0.3.15", "futures-diagnose", "intervalier", "log", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "parity-util-mem", "parking_lot 0.11.1", "sc-client-api", @@ -6199,14 +6832,32 @@ dependencies = [ [[package]] name = "sct" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3042af939fca8c3453b7af0f1c66e533a15a86169e39de2657310ade8f98d3c" +checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce" dependencies = [ "ring", "untrusted", ] +[[package]] +name = "secp256k1" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6179428c22c73ac0fbb7b5579a56353ce78ba29759b3b8575183336ea74cdfb" +dependencies = [ + "secp256k1-sys", +] + +[[package]] +name = "secp256k1-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11553d210db090930f4432bea123b31f70bbf693ace14504ea2a35e796c28dd2" +dependencies = [ + "cc", +] + [[package]] name = "secrecy" version = "0.7.0" @@ -6284,18 +6935,18 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.123" +version = "1.0.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92d5161132722baa40d802cc70b15262b98258453e85e5d1d365c757c73869ae" +checksum = "ec7505abeacaec74ae4778d9d9328fe5a5d04253220a85c4ee022239fc996d03" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.123" +version = "1.0.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9391c295d64fc0abb2c556bad848f33cb8296276b1ad2677d1ae1ace4f258f31" +checksum = "963a7dbc9895aeac7ac90e74f34a5d5261828f79df35cbed41e10189d3804d43" dependencies = [ "proc-macro2", "quote", @@ -6304,9 +6955,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.62" +version = "1.0.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea1c6153794552ea7cf7cf63b1231a25de00ec90db326ba6264440fa08e31486" +checksum = "799e97dc9fdae36a5c8b8f2cae9ce2ee9fdce2058c57a93e6099d919fd982f79" dependencies = [ "itoa", "ryu", @@ -6327,13 +6978,13 @@ dependencies = [ [[package]] name = "sha-1" -version = "0.9.3" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4b312c3731e3fe78a185e6b9b911a7aa715b8e31cce117975219aab2acf285d" +checksum = "8c4cfa741c5832d0ef7fab46cabed29c2aae926db0b11bb2069edd8db5e64e16" dependencies = [ "block-buffer 0.9.0", "cfg-if 1.0.0", - "cpuid-bool 0.1.2", + "cpufeatures", "digest 0.9.0", "opaque-debug 0.3.0", ] @@ -6352,17 +7003,30 @@ dependencies = [ [[package]] name = "sha2" -version = "0.9.3" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa827a14b29ab7f44778d14a88d3cb76e949c45083f7dbfa507d0cb699dc12de" +checksum = "b362ae5752fd2137731f9fa25fd4d9058af34666ca1966fb969119cc35719f12" dependencies = [ "block-buffer 0.9.0", "cfg-if 1.0.0", - "cpuid-bool 0.1.2", + "cpufeatures", "digest 0.9.0", "opaque-debug 0.3.0", ] +[[package]] +name = "sha3" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd26bc0e7a2e3a7c959bc494caf58b72ee0c71d67704e9520f736ca7e4853ecf" +dependencies = [ + "block-buffer 0.7.3", + "byte-tools", + "digest 0.8.1", + "keccak", + "opaque-debug 0.2.3", +] + [[package]] name = "sha3" version = "0.9.1" @@ -6392,9 +7056,9 @@ checksum = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2" [[package]] name = "signal-hook" -version = "0.3.4" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "780f5e3fe0c66f67197236097d89de1e86216f1f6fdeaf47c442f854ab46c240" +checksum = "ef33d6d0cd06e0840fba9985aab098c147e67e05cee14d412d3345ed14ff30ac" dependencies = [ "libc", "signal-hook-registry", @@ -6417,21 +7081,21 @@ checksum = "0f0242b8e50dd9accdd56170e94ca1ebd223b098eb9c83539a6e367d0f36ae68" [[package]] name = "simba" -version = "0.1.5" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb931b1367faadea6b1ab1c306a860ec17aaa5fa39f367d0c744e69d971a1fb2" +checksum = "5132a955559188f3d13c9ba831e77c802ddc8782783f050ed0c52f5988b95f4c" dependencies = [ - "approx", - "num-complex", + "approx 0.4.0", + "num-complex 0.3.1", "num-traits", - "paste 0.1.18", + "paste", ] [[package]] name = "slab" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" +checksum = "f173ac3d1a7e3b28003f40de0b5ce7fe2710f9b9dc3fc38664cebee46b3b6527" [[package]] name = "smallvec" @@ -6461,7 +7125,7 @@ dependencies = [ "rand_core 0.5.1", "ring", "rustc_version", - "sha2 0.9.3", + "sha2 0.9.5", "subtle 2.4.0", "x25519-dalek", ] @@ -6477,6 +7141,16 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "socket2" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e3dfc207c526015c632472a77be09cf1b6e46866581aecae5cc38fb4235dea2" +dependencies = [ + "libc", + "winapi 0.3.9", +] + [[package]] name = "soketto" version = "0.4.2" @@ -6486,18 +7160,17 @@ dependencies = [ "base64 0.12.3", "bytes 0.5.6", "flate2", - "futures 0.3.12", + "futures 0.3.15", "httparse", "log", "rand 0.7.3", - "sha-1 0.9.3", + "sha-1 0.9.6", ] [[package]] name = "sp-allocator" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec5f988ad0cabdb646318cb515a91e9d89062debc9728f9b634d73acab3f3f39" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "log", "sp-core", @@ -6509,11 +7182,11 @@ dependencies = [ [[package]] name = "sp-api" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e63c3460d5daecf67df542c34c2bbd636214a5a200d4bddcfa2ffb9e72c346af" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "hash-db", - "parity-scale-codec", + "log", + "parity-scale-codec 2.1.1", "sp-api-proc-macro", "sp-core", "sp-runtime", @@ -6526,11 +7199,10 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "289624f4fe0f61e63a5019ed26c3bc732b5145eb52796ac6053cd72656d947a1" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "blake2-rfc", - "proc-macro-crate", + "proc-macro-crate 1.0.0", "proc-macro2", "quote", "syn", @@ -6539,10 +7211,9 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c52e2e6d43036b97c4fce1ed87c5262c1ffdc78c655ada4d3024a3f8094bdd2c" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "parity-scale-codec", + "parity-scale-codec 2.1.1", "serde", "sp-core", "sp-io", @@ -6552,12 +7223,11 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0f1c69966c192d1dee8521f0b29ece2b14db07b9b44d801a94e295234761645" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "integer-sqrt", "num-traits", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "serde", "sp-debug-derive", "sp-std", @@ -6566,10 +7236,9 @@ dependencies = [ [[package]] name = "sp-authorship" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ec68fb8e5a37548b06c14ee91a9c574cc330324c86d37810ec29dd4f8bc68d7" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "parity-scale-codec", + "parity-scale-codec 2.1.1", "sp-inherents", "sp-runtime", "sp-std", @@ -6578,10 +7247,9 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0adc979dbe619f56d664ebd1293dce13fcad6b8a47bcdd620ed53a454d330d12" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "parity-scale-codec", + "parity-scale-codec 2.1.1", "sp-api", "sp-inherents", "sp-runtime", @@ -6591,13 +7259,12 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8007c1ad8e9fb6cd8eed4e0fc91504a9ca4b228e1315302a2fbb0ac7f509f1b" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "futures 0.3.12", + "futures 0.3.15", "log", "lru", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "parking_lot 0.11.1", "sp-api", "sp-consensus", @@ -6610,8 +7277,7 @@ dependencies = [ [[package]] name = "sp-chain-spec" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a24beb11980d0c755ead0c05f3f966c490e4a3730785c04c03855fada65d697" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "serde", "serde_json", @@ -6620,14 +7286,13 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "884db6c4b03f0f2fb2993127a2db95fc740fcd3496746dcaa6829c9868e7dc75" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "futures 0.3.12", + "futures 0.3.15", "futures-timer 3.0.2", "libp2p", "log", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "parking_lot 0.11.1", "serde", "sp-api", @@ -6647,10 +7312,9 @@ dependencies = [ [[package]] name = "sp-consensus-aura" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bd00fc95b26393522be1394fb67cc536736cc5a902dec0d3e2827909b7c1118" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "parity-scale-codec", + "parity-scale-codec 2.1.1", "sp-api", "sp-application-crypto", "sp-consensus-slots", @@ -6663,11 +7327,11 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a153085b1542b5cbe23686433cd36d1a634964f1b707671d0ffb01d8d9313047" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "merlin", - "parity-scale-codec", + "parity-scale-codec 2.1.1", + "serde", "sp-api", "sp-application-crypto", "sp-consensus", @@ -6684,10 +7348,9 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32bd501ab76c827d74f145063cd8cb993a9f634dac93c9b0d909111cd5900a6a" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "parity-scale-codec", + "parity-scale-codec 2.1.1", "sp-arithmetic", "sp-runtime", ] @@ -6695,10 +7358,9 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "030895d70bf3095c857f4727a7cce7c43af29efe3413bb547ee28700f7d78766" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "parity-scale-codec", + "parity-scale-codec 2.1.1", "schnorrkel", "sp-core", "sp-runtime", @@ -6708,15 +7370,14 @@ dependencies = [ [[package]] name = "sp-core" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abbc8d4e9b8a7d5819ed26f1374017bb32833ef4890e4ff065e1da30669876bc" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "base58", "blake2-rfc", "byteorder", "dyn-clonable", "ed25519-dalek", - "futures 0.3.12", + "futures 0.3.15", "hash-db", "hash256-std-hasher", "hex", @@ -6726,16 +7387,16 @@ dependencies = [ "log", "merlin", "num-traits", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "parity-util-mem", "parking_lot 0.11.1", - "primitive-types", + "primitive-types 0.9.0", "rand 0.7.3", "regex", "schnorrkel", "secrecy", "serde", - "sha2 0.9.3", + "sha2 0.9.5", "sp-debug-derive", "sp-externalities", "sp-runtime-interface", @@ -6753,8 +7414,7 @@ dependencies = [ [[package]] name = "sp-database" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8c3f018913eef191d95c824657c5759c459d28670e654fa34f5d9bd5e6f0492" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "kvdb", "parking_lot 0.11.1", @@ -6763,8 +7423,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e80275f23b4e7ba8f54dec5f90f016530e7307d2ee9445f617ab986cbe97f31e" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "proc-macro2", "quote", @@ -6774,11 +7433,10 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fdc625f8c7b13b9a136d334888b21b5743d2081cb666cb03efca1dc9b8f74d1" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "environmental", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "sp-std", "sp-storage", ] @@ -6786,12 +7444,11 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "702e0be150e1b557df42326ec9b82c2010366631d03be27c69912d446abbf87a" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "finality-grandpa", "log", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "serde", "sp-api", "sp-application-crypto", @@ -6804,10 +7461,9 @@ dependencies = [ [[package]] name = "sp-inherents" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2542380b535c6941502a0a3069a657eb5abb70fd67b11afa164d4a4b038ba73a" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "parity-scale-codec", + "parity-scale-codec 2.1.1", "parking_lot 0.11.1", "sp-core", "sp-std", @@ -6817,14 +7473,13 @@ dependencies = [ [[package]] name = "sp-io" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33fd69f0a6e91bedc2fb1c5cc3689c212474b6c918274cb4cb14dbbe3c428c14" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "futures 0.3.12", + "futures 0.3.15", "hash-db", "libsecp256k1", "log", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "parking_lot 0.11.1", "sp-core", "sp-externalities", @@ -6842,8 +7497,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b59f2b0e94b2048d4984aa6eb40eef2e4c05d3adf27a083dd3c9b0fce74ef7a" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "lazy_static", "sp-core", @@ -6854,14 +7508,13 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db6ccd2baf189112355338e8b224dc513cd239b974dbd717f12b3dc7a7248c3b" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "async-trait", "derive_more", - "futures 0.3.12", + "futures 0.3.15", "merlin", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "parking_lot 0.11.1", "schnorrkel", "serde", @@ -6872,8 +7525,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bd80eedcedcc8342e77c26d59ad90b6904715a862731fa16616650773570e63" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "sp-api", "sp-core", @@ -6883,8 +7535,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54702e109f1c8a870dd4065a497d2612d42cec5817126e96cc0658c5ea975784" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "backtrace", ] @@ -6892,8 +7543,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2e5b1ed655d11449073b914b048895f45241e02b3919d1d0187f315435fee18" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "serde", "sp-core", @@ -6902,16 +7552,15 @@ dependencies = [ [[package]] name = "sp-runtime" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfa4b353b76f04616dbdb8d269d58dcac47acb31c006d3b70e7b64233e68695e" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "either", "hash256-std-hasher", - "impl-trait-for-tuples", + "impl-trait-for-tuples 0.2.1", "log", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "parity-util-mem", - "paste 1.0.4", + "paste", "rand 0.7.3", "serde", "sp-application-crypto", @@ -6924,12 +7573,11 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2e5c88b4bc8d607e4e2ff767a85db58cf7101f3dd6064f06929342ea67fe8fb" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "impl-trait-for-tuples", - "parity-scale-codec", - "primitive-types", + "impl-trait-for-tuples 0.2.1", + "parity-scale-codec 2.1.1", + "primitive-types 0.9.0", "sp-externalities", "sp-runtime-interface-proc-macro", "sp-std", @@ -6942,11 +7590,10 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19a6c7c2251512c9e533d15db8a863b06ece1cbee778130dd9adbe44b6b39aa9" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "Inflector", - "proc-macro-crate", + "proc-macro-crate 1.0.0", "proc-macro2", "quote", "syn", @@ -6955,10 +7602,9 @@ dependencies = [ [[package]] name = "sp-sandbox" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e92caf4555d676d8f0b67def0041da789f79a5d5f341130496f15a6261926cc" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "parity-scale-codec", + "parity-scale-codec 2.1.1", "sp-core", "sp-io", "sp-std", @@ -6969,8 +7615,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "982d793f01eb9eea9f30ffc63b821170068b9f0d9edf715d8ba77dc4de9c300f" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "serde", "serde_json", @@ -6979,10 +7624,9 @@ dependencies = [ [[package]] name = "sp-session" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c7cf161533725a78083b04f3269effe4c3b4b6ce5f655019b3eec3e729ba4d4" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "parity-scale-codec", + "parity-scale-codec 2.1.1", "sp-api", "sp-core", "sp-runtime", @@ -6993,10 +7637,9 @@ dependencies = [ [[package]] name = "sp-staking" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc729eb10f8809c61a1fe439ac118a4413de004aaf863003ee8752ac0b596e73" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "parity-scale-codec", + "parity-scale-codec 2.1.1", "sp-runtime", "sp-std", ] @@ -7004,13 +7647,12 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46fa4143e58e9130f726d4e8a9b86f3530a8bd19a2eedcdcf4af205f4b5a6d4f" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "hash-db", "log", "num-traits", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "parking_lot 0.11.1", "rand 0.7.3", "smallvec 1.6.1", @@ -7027,17 +7669,15 @@ dependencies = [ [[package]] name = "sp-std" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35391ea974fa5ee869cb094d5b437688fbf3d8127d64d1b9fed5822a1ed39b12" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" [[package]] name = "sp-storage" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86af458d4a0251c490cdde9dcaaccb88d398f3b97ac6694cdd49ed9337e6b961" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "impl-serde", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "ref-cast", "serde", "sp-debug-derive", @@ -7047,8 +7687,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c585340cbee96c53a9b43fd07d81edf6cebeb80e4ca7c0ee79b856c0b1883a0e" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "log", "sp-core", @@ -7061,11 +7700,9 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27387c541197b9f47f3d9ddcab5649a3ecdca582d2f2ea2b511af24a3d3cbf83" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "impl-trait-for-tuples", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "sp-api", "sp-inherents", "sp-runtime", @@ -7076,11 +7713,10 @@ dependencies = [ [[package]] name = "sp-tracing" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567382d8d4e14fb572752863b5cd57a78f9e9a6583332b590b726f061f3ea957" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "log", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "sp-std", "tracing", "tracing-core", @@ -7090,13 +7726,12 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3264d3b7ea31483eddffa2cc7f28c4d9c022598e456a985fd1cb5879a4609853" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "derive_more", - "futures 0.3.12", + "futures 0.3.15", "log", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "serde", "sp-api", "sp-blockchain", @@ -7107,12 +7742,11 @@ dependencies = [ [[package]] name = "sp-trie" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b85b7f745da41ef825c6f7b93f1fdc897b03df94a4884adfbb70fbcd0aed1298" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "hash-db", "memory-db", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "sp-core", "sp-std", "trie-db", @@ -7122,10 +7756,9 @@ dependencies = [ [[package]] name = "sp-utils" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4ec2a5f924f7affd1e959f8f3c02bd87cdfa0e11c71a4cbc075f955ead8c1a1" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "futures 0.3.12", + "futures 0.3.15", "futures-core", "futures-timer 3.0.2", "lazy_static", @@ -7135,11 +7768,10 @@ dependencies = [ [[package]] name = "sp-version" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbeffa538a13d715d30e01d57a2636ba32845b737a29a3ea32403576588222e7" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "impl-serde", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "serde", "sp-runtime", "sp-std", @@ -7148,11 +7780,10 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b214e125666a6416cf30a70cc6a5dacd34a4e5197f8a3d479f714af7e1dc7a47" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "impl-trait-for-tuples", - "parity-scale-codec", + "impl-trait-for-tuples 0.2.1", + "parity-scale-codec 2.1.1", "sp-std", "wasmi", ] @@ -7177,10 +7808,11 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "statrs" -version = "0.12.0" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cce16f6de653e88beca7bd13780d08e09d4489dbca1f9210e041bc4852481382" +checksum = "1e34b58a8f9b7462b6922e0b4e3c83d1b3c2075f7f996a56d6c66afa81590064" dependencies = [ + "nalgebra 0.19.0", "rand 0.7.3", ] @@ -7209,6 +7841,12 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + [[package]] name = "structopt" version = "0.3.21" @@ -7279,16 +7917,15 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e46123ec4a690d91967de07cd6af4dde90d14519a1a8d43f61bd3f78dd3d0ef" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "frame-system-rpc-runtime-api", - "futures 0.3.12", - "jsonrpc-core", - "jsonrpc-core-client", - "jsonrpc-derive", + "futures 0.3.15", + "jsonrpc-core 15.1.0", + "jsonrpc-core-client 15.1.0", + "jsonrpc-derive 15.1.0", "log", - "parity-scale-codec", + "parity-scale-codec 2.1.1", "sc-client-api", "sc-rpc-api", "serde", @@ -7303,8 +7940,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eb561c19a121e1c89daa79dbfa67a55080f813caa47fd231833a0669696d508" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "async-std", "derive_more", @@ -7345,9 +7981,9 @@ checksum = "1e81da0851ada1f3e9d4312c704aa4f8806f0f9d69faaf8df2f3464b4a9437c2" [[package]] name = "syn" -version = "1.0.60" +version = "1.0.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c700597eca8a5a762beb35753ef6b94df201c81cca676604f547495a0d7f0081" +checksum = "a1e8cdbefb79a9a5a65e0db8b47b723ee907b7c7f8496c76a1770b5c310bab82" dependencies = [ "proc-macro2", "quote", @@ -7393,7 +8029,7 @@ dependencies = [ "cfg-if 1.0.0", "libc", "rand 0.8.3", - "redox_syscall 0.2.5", + "redox_syscall 0.2.8", "remove_dir_all", "winapi 0.3.9", ] @@ -7418,18 +8054,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76cc616c6abf8c8928e2fdcc0dbfab37175edd8fb49a4641066ad1364fdab146" +checksum = "e0f4a65597094d4483ddaed134f409b2cb7c1beccf25201a9f73c719254fa98e" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9be73a2caec27583d0046ef3796c3794f868a5bc813db689eed00c7631275cd1" +checksum = "7765189610d8241a44529806d6fd1f2e0a08734313a35d5b3a556f92b381f3c0" dependencies = [ "proc-macro2", "quote", @@ -7477,7 +8113,7 @@ dependencies = [ "pbkdf2 0.4.0", "rand 0.7.3", "rustc-hash", - "sha2 0.9.3", + "sha2 0.9.5", "thiserror", "unicode-normalization", "zeroize", @@ -7494,9 +8130,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.1.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317cca572a0e89c3ce0ca1f1bdc9369547fe318a683418e42ac8f59d14701023" +checksum = "5b5220f05bb7de7f3f53c7c065e1199b3172696fe2db9f9c4d8ad9b4ee74c342" dependencies = [ "tinyvec_macros", ] @@ -7514,7 +8150,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a09c0b5bb588872ab2f09afa13ee6e9dac11e10a0ec9e8e3ba39a5a5d530af6" dependencies = [ "bytes 0.4.12", - "futures 0.1.30", + "futures 0.1.31", "mio", "num_cpus", "tokio-codec", @@ -7547,7 +8183,7 @@ dependencies = [ "mio", "mio-uds", "num_cpus", - "pin-project-lite 0.1.11", + "pin-project-lite 0.1.12", "signal-hook-registry", "slab", "winapi 0.3.9", @@ -7561,7 +8197,7 @@ checksum = "8fb220f46c53859a4b7ec083e41dec9778ff0b1851c0942b211edb89e0ccdc46" dependencies = [ "bytes 0.4.12", "either", - "futures 0.1.30", + "futures 0.1.31", ] [[package]] @@ -7571,7 +8207,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25b2998660ba0e70d18684de5d06b70b70a3a747469af9dea7618cc59e75976b" dependencies = [ "bytes 0.4.12", - "futures 0.1.30", + "futures 0.1.31", "tokio-io", ] @@ -7581,7 +8217,7 @@ version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1de0e32a83f131e002238d7ccde18211c0a5397f60cbfffcb112868c2e0e20e" dependencies = [ - "futures 0.1.30", + "futures 0.1.31", "tokio-executor", ] @@ -7592,7 +8228,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fb2d1b8f4548dbf5e1f7818512e9c406860678f29c300cdf0ebac72d1a3a1671" dependencies = [ "crossbeam-utils 0.7.2", - "futures 0.1.30", + "futures 0.1.31", ] [[package]] @@ -7601,7 +8237,7 @@ version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "297a1206e0ca6302a0eed35b700d292b275256f596e2f3fea7729d5e629b6ff4" dependencies = [ - "futures 0.1.30", + "futures 0.1.31", "tokio-io", "tokio-threadpool", ] @@ -7613,7 +8249,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57fc868aae093479e3131e3d165c93b1c7474109d13c90ec0dda2a1bbfff0674" dependencies = [ "bytes 0.4.12", - "futures 0.1.30", + "futures 0.1.31", "log", ] @@ -7624,7 +8260,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d282d483052288b2308ba5ee795f5673b159c9bdf63c385a05609da782a5eae" dependencies = [ "bytes 0.4.12", - "futures 0.1.30", + "futures 0.1.31", "mio", "mio-named-pipes", "tokio 0.1.22", @@ -7637,7 +8273,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09bc590ec4ba8ba87652da2068d150dcada2cfa2e07faae270a5e0409aa51351" dependencies = [ "crossbeam-utils 0.7.2", - "futures 0.1.30", + "futures 0.1.31", "lazy_static", "log", "mio", @@ -7667,7 +8303,7 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24da22d077e0f15f55162bdbdc661228c1581892f52074fb242678d015b45162" dependencies = [ - "futures 0.1.30", + "futures 0.1.31", ] [[package]] @@ -7677,7 +8313,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edfe50152bc8164fcc456dab7891fa9bf8beaf01c5ee7e1dd43a397c3cf87dee" dependencies = [ "fnv", - "futures 0.1.30", + "futures 0.1.31", ] [[package]] @@ -7687,7 +8323,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "98df18ed66e3b72e742f185882a9e201892407957e45fbff8da17ae7a7c51f72" dependencies = [ "bytes 0.4.12", - "futures 0.1.30", + "futures 0.1.31", "iovec", "mio", "tokio-io", @@ -7703,7 +8339,7 @@ dependencies = [ "crossbeam-deque 0.7.3", "crossbeam-queue", "crossbeam-utils 0.7.2", - "futures 0.1.30", + "futures 0.1.31", "lazy_static", "log", "num_cpus", @@ -7718,7 +8354,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "93044f2d313c95ff1cb7809ce9a7a05735b012288a888b62d4434fd58c94f296" dependencies = [ "crossbeam-utils 0.7.2", - "futures 0.1.30", + "futures 0.1.31", "slab", "tokio-executor", ] @@ -7730,7 +8366,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2a0b10e610b39c38b031a2fcab08e4b82f16ece36504988dcbd81dbba650d82" dependencies = [ "bytes 0.4.12", - "futures 0.1.30", + "futures 0.1.31", "log", "mio", "tokio-codec", @@ -7745,7 +8381,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab57a4ac4111c8c9dbcf70779f6fc8bc35ae4b2454809febac840ad19bd7e4e0" dependencies = [ "bytes 0.4.12", - "futures 0.1.30", + "futures 0.1.31", "iovec", "libc", "log", @@ -7766,7 +8402,7 @@ dependencies = [ "futures-core", "futures-sink", "log", - "pin-project-lite 0.1.11", + "pin-project-lite 0.1.12", "tokio 0.2.25", ] @@ -7787,22 +8423,22 @@ checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" [[package]] name = "tracing" -version = "0.1.23" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d40a22fd029e33300d8d89a5cc8ffce18bb7c587662f54629e94c9de5487f3" +checksum = "09adeb8c97449311ccd28a427f96fb563e7fd31aabf994189879d9da2394b89d" dependencies = [ "cfg-if 1.0.0", "log", - "pin-project-lite 0.2.4", + "pin-project-lite 0.2.6", "tracing-attributes", "tracing-core", ] [[package]] name = "tracing-attributes" -version = "0.1.12" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43f080ea7e4107844ef4766459426fa2d5c1ada2e47edba05dc7fa99d9629f47" +checksum = "c42e6fa53307c8a17e4ccd4dc81cf5ec38db9209f59b222210375b54ee40d1e2" dependencies = [ "proc-macro2", "quote", @@ -7811,28 +8447,28 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.17" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f50de3927f93d202783f4513cda820ab47ef17f624b03c096e86ef00c67e6b5f" +checksum = "a9ff14f98b1a4b289c6248a023c1c2fa1491062964e9fed67ab29c4e4da4a052" dependencies = [ "lazy_static", ] [[package]] name = "tracing-futures" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab7bb6f14721aa00656086e9335d363c5c8747bae02ebe32ea2c7dece5689b4c" +checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" dependencies = [ - "pin-project 0.4.27", + "pin-project 1.0.7", "tracing", ] [[package]] name = "tracing-log" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e0f8c7178e13481ff6765bd169b33e8d554c5d2bbede5e32c356194be02b9b9" +checksum = "a6923477a48e41c1951f1999ef8bb5a3023eb723ceadafe78ffb65dc366761e3" dependencies = [ "lazy_static", "log", @@ -7851,9 +8487,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.2.15" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1fa8f0c8f4c594e4fc9debc1990deab13238077271ba84dd853d54902ee3401" +checksum = "aa5553bf0883ba7c9cbe493b085c29926bd41b66afc31ff72cf17ff4fb60dcd5" dependencies = [ "ansi_term 0.12.1", "chrono", @@ -7893,6 +8529,16 @@ dependencies = [ "hash-db", ] +[[package]] +name = "triehash" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1631b201eb031b563d2e85ca18ec8092508e262a3196ce9bd10a67ec87b9f5c" +dependencies = [ + "hash-db", + "rlp 0.5.0", +] + [[package]] name = "try-lock" version = "0.2.3" @@ -7906,15 +8552,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04f8ab788026715fa63b31960869617cba39117e520eb415b0139543e325ab59" dependencies = [ "cfg-if 0.1.10", - "rand 0.7.3", + "rand 0.3.23", "static_assertions", ] [[package]] name = "typenum" -version = "1.12.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "373c8a200f9e67a0c95e62a4f52fbf80c23b4381c05a17845531982fa99e6b33" +checksum = "879f6906492a7cd215bfa4cf595b600146ccfac0c79bcbd1f3000162af5e8b06" [[package]] name = "ucd-trie" @@ -7922,6 +8568,18 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c" +[[package]] +name = "uint" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9db035e67dfaf7edd9aebfe8676afcd63eed53c8a4044fed514c8cccf1835177" +dependencies = [ + "byteorder", + "crunchy", + "rustc-hex", + "static_assertions", +] + [[package]] name = "uint" version = "0.9.0" @@ -7945,9 +8603,9 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" +checksum = "eeb8be209bb1c96b7c177c7420d26e04eccacb0eeae6b980e35fcb74678107e0" dependencies = [ "matches", ] @@ -7975,9 +8633,9 @@ checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3" [[package]] name = "unicode-xid" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" +checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" [[package]] name = "universal-hash" @@ -8038,36 +8696,31 @@ dependencies = [ [[package]] name = "url" -version = "2.2.0" +version = "2.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5909f2b0817350449ed73e8bcd81c8c3c8d9a7a5d8acba4b27db277f1868976e" +checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" dependencies = [ "form_urlencoded", - "idna 0.2.1", + "idna 0.2.3", "matches", "percent-encoding 2.1.0", ] [[package]] name = "value-bag" -version = "1.0.0-alpha.6" +version = "1.0.0-alpha.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b676010e055c99033117c2343b33a40a30b91fecd6c49055ac9cd2d6c305ab1" +checksum = "dd320e1520f94261153e96f7534476ad869c14022aee1e59af7c778075d840ae" dependencies = [ "ctor", + "version_check", ] [[package]] name = "vcpkg" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b00bca6106a5e23f3eee943593759b7fcddb00554332e856d990c893966879fb" - -[[package]] -name = "vec-arena" -version = "1.0.0" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eafc1b9b2dfc6f5529177b62cf806484db55b32dc7c9658a118e11bbeb33061d" +checksum = "cbdbff6266a24120518560b5dc983096efb98462e51d0d68169895b237be3e5d" [[package]] name = "vec_map" @@ -8077,9 +8730,9 @@ checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" [[package]] name = "version_check" -version = "0.9.2" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed" +checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" [[package]] name = "void" @@ -8095,9 +8748,9 @@ checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" [[package]] name = "walkdir" -version = "2.3.1" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "777182bc735b6424e1a57516d35ed72cb8019d85c8c9bf536dccb3445c1a2f7d" +checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" dependencies = [ "same-file", "winapi 0.3.9", @@ -8110,7 +8763,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6395efa4784b027708f7451087e647ec73cc74f5d9bc2e418404248d679a230" dependencies = [ - "futures 0.1.30", + "futures 0.1.31", "log", "try-lock", ] @@ -8139,9 +8792,9 @@ checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" [[package]] name = "wasm-bindgen" -version = "0.2.70" +version = "0.2.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55c0f7123de74f0dab9b7d00fd614e7b19349cd1e2f5252bbe9b1754b59433be" +checksum = "d54ee1d4ed486f78874278e63e4069fc1ab9f6a18ca492076ffb90c5eb2997fd" dependencies = [ "cfg-if 1.0.0", "wasm-bindgen-macro", @@ -8149,9 +8802,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.70" +version = "0.2.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bc45447f0d4573f3d65720f636bbcc3dd6ce920ed704670118650bcd47764c7" +checksum = "3b33f6a0694ccfea53d94db8b2ed1c3a8a4c86dd936b13b9f0a15ec4a451b900" dependencies = [ "bumpalo", "lazy_static", @@ -8164,9 +8817,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.20" +version = "0.4.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3de431a2910c86679c34283a33f66f4e4abd7e0aec27b6669060148872aadf94" +checksum = "5fba7978c679d53ce2d0ac80c8c175840feb849a161664365d1287b41f2e67f1" dependencies = [ "cfg-if 1.0.0", "js-sys", @@ -8176,9 +8829,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.70" +version = "0.2.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b8853882eef39593ad4174dd26fc9865a64e84026d223f63bb2c42affcbba2c" +checksum = "088169ca61430fe1e58b8096c24975251700e7b1f6fd91cc9d59b04fb9b18bd4" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -8186,9 +8839,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.70" +version = "0.2.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4133b5e7f2a531fa413b3a1695e925038a05a71cf67e87dafa295cb645a01385" +checksum = "be2241542ff3d9f241f5e2cb6dd09b37efe786df8851c54957683a49f0987a97" dependencies = [ "proc-macro2", "quote", @@ -8199,9 +8852,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.70" +version = "0.2.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd4945e4943ae02d15c13962b38a5b1e81eadd4b71214eee75af64a4d6a4fd64" +checksum = "d7cff876b8f18eed75a66cf49b65e7f967cb354a7aa16003fb55dbfd25b44b4f" [[package]] name = "wasm-gc-api" @@ -8220,7 +8873,7 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f" dependencies = [ - "futures 0.3.12", + "futures 0.3.15", "js-sys", "parking_lot 0.11.1", "pin-utils", @@ -8237,7 +8890,7 @@ checksum = "bf617d864d25af3587aa745529f7aaa541066c876d57e050c0d0c85c61c92aff" dependencies = [ "libc", "memory_units", - "num-rational", + "num-rational 0.2.4", "num-traits", "parity-wasm 0.41.0", "wasmi-validation", @@ -8302,7 +8955,7 @@ dependencies = [ "libc", "log", "serde", - "sha2 0.9.3", + "sha2 0.9.5", "toml", "winapi 0.3.9", "zstd", @@ -8328,7 +8981,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e91fa931df6dd8af2b02606307674d3bad23f55473d5f4c809dddf7e4c4dc411" dependencies = [ "anyhow", - "gimli", + "gimli 0.23.0", "more-asserts", "object 0.22.0", "target-lexicon", @@ -8348,7 +9001,7 @@ dependencies = [ "cranelift-codegen", "cranelift-entity", "cranelift-wasm", - "gimli", + "gimli 0.23.0", "indexmap", "log", "more-asserts", @@ -8363,7 +9016,7 @@ version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "738bfcd1561ede8bb174215776fd7d9a95d5f0a47ca3deabe0282c55f9a89f68" dependencies = [ - "addr2line", + "addr2line 0.14.1", "anyhow", "cfg-if 1.0.0", "cranelift-codegen", @@ -8371,7 +9024,7 @@ dependencies = [ "cranelift-frontend", "cranelift-native", "cranelift-wasm", - "gimli", + "gimli 0.23.0", "log", "more-asserts", "object 0.22.0", @@ -8412,7 +9065,7 @@ checksum = "60bb672c9d894776d7b9250dd9b4fe890f8760201ee4f53e5f2da772b6c4debb" dependencies = [ "anyhow", "cfg-if 1.0.0", - "gimli", + "gimli 0.23.0", "lazy_static", "libc", "object 0.22.0", @@ -8436,7 +9089,7 @@ dependencies = [ "lazy_static", "libc", "log", - "memoffset 0.6.1", + "memoffset 0.6.3", "more-asserts", "psm", "region", @@ -8447,27 +9100,27 @@ dependencies = [ [[package]] name = "wast" -version = "33.0.0" +version = "35.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d04fe175c7f78214971293e7d8875673804e736092206a3a4544dbc12811c1b" +checksum = "2ef140f1b49946586078353a453a1d28ba90adfc54dde75710bc1931de204d68" dependencies = [ "leb128", ] [[package]] name = "wat" -version = "1.0.34" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ec9c6ee01ae07a26adadcdfed22c7a97e0b8cbee9c06e0e96076ece5aeb5cfe" +checksum = "8ec280a739b69173e0ffd12c1658507996836ba4e992ed9bc1e5385a0bd72a02" dependencies = [ "wast", ] [[package]] name = "web-sys" -version = "0.3.47" +version = "0.3.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c40dc691fc48003eba817c38da7113c15698142da971298003cac3ef175680b3" +checksum = "e828417b379f3df7111d3a2a9e5753706cae29c41f7c4029ee9fd77f3e09e582" dependencies = [ "js-sys", "wasm-bindgen", @@ -8485,9 +9138,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.21.0" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82015b7e0b8bad8185994674a13a93306bea76cf5a16c5a181382fd3a5ec2376" +checksum = "aabe153544e473b775453675851ecc86863d2a81d786d741f6b76778f2a48940" dependencies = [ "webpki", ] @@ -8503,21 +9156,12 @@ dependencies = [ [[package]] name = "which" -version = "3.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d011071ae14a2f6671d0b74080ae0cd8ebf3a6f8c9589a2cd45f23126fe29724" -dependencies = [ - "libc", -] - -[[package]] -name = "which" -version = "4.0.2" +version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87c14ef7e1b8b8ecfc75d5eca37949410046e66f15d185c01d70824f1f8111ef" +checksum = "b55551e42cbdf2ce2bedd2203d0cc08dba002c27510f86dab6d0ce304cba3dfe" dependencies = [ + "either", "libc", - "thiserror", ] [[package]] @@ -8581,22 +9225,22 @@ checksum = "85e60b0d1b5f99db2556934e21937020776a5d31520bf169e851ac44e6420214" [[package]] name = "x25519-dalek" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc614d95359fd7afc321b66d2107ede58b246b844cf5d8a0adcca413e439f088" +checksum = "5a0c105152107e3b96f6a00a65e86ce82d9b125230e1c4302940eca58ff71f4f" dependencies = [ - "curve25519-dalek 3.0.2", + "curve25519-dalek 3.1.0", "rand_core 0.5.1", "zeroize", ] [[package]] name = "yamux" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aeb8c4043cac71c3c299dff107171c220d179492350ea198e109a414981b83c" +checksum = "1cc7bd8c983209ed5d527f44b01c41b7dc146fd960c61cf9e1d25399841dc271" dependencies = [ - "futures 0.3.12", + "futures 0.3.15", "log", "nohash-hasher", "parking_lot 0.11.1", @@ -8612,18 +9256,18 @@ checksum = "9fc79f4a1e39857fc00c3f662cbf2651c771f00e9c15fe2abc341806bd46bd71" [[package]] name = "zeroize" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81a974bcdd357f0dca4d41677db03436324d45a4c9ed2d0b873a5a360ce41c36" +checksum = "4756f7db3f7b5574938c3eb1c117038b8e07f95ee6718c0efad4ac21508f1efd" dependencies = [ "zeroize_derive", ] [[package]] name = "zeroize_derive" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3f369ddb18862aba61aa49bf31e74d29f0f162dec753063200e1dc084345d16" +checksum = "a2c1e130bebaeab2f23886bf9acbaca14b092408c452543c857f66399cd6dab1" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index 68fa042216..9772016e8a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,8 +1,11 @@ [workspace] +resolver = "2" members = [ 'node', 'pallets/nft', 'runtime', + 'crates/evm-coder', + 'crates/evm-coder-macros', ] [profile.release] panic = 'unwind' diff --git a/crates/evm-coder-macros/Cargo.toml b/crates/evm-coder-macros/Cargo.toml new file mode 100644 index 0000000000..a1414d7a96 --- /dev/null +++ b/crates/evm-coder-macros/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "evm-coder-macros" +version = "0.1.0" +edition = "2018" + +[lib] +proc-macro = true + +[dependencies] +sha3 = "0.9.1" +quote = "1.0" +proc-macro2 = "1.0" +syn = { version = "1.0", features = ["full"] } +hex = "0.4.3" +Inflector = "0.11.4" +darling = "0.13.0" \ No newline at end of file diff --git a/crates/evm-coder-macros/src/lib.rs b/crates/evm-coder-macros/src/lib.rs new file mode 100644 index 0000000000..65508176ee --- /dev/null +++ b/crates/evm-coder-macros/src/lib.rs @@ -0,0 +1,224 @@ +use darling::FromMeta; +use inflector::cases; +use proc_macro::TokenStream; +use quote::quote; +use sha3::{Digest, Keccak256}; +use syn::{ + AttributeArgs, DeriveInput, GenericArgument, Ident, ItemTrait, Pat, Path, PathArguments, + PathSegment, Type, parse_macro_input, spanned::Spanned, +}; + +mod solidity_interface; +mod to_log; + +fn fn_selector_str(input: &str) -> u32 { + let mut hasher = Keccak256::new(); + hasher.update(input.as_bytes()); + let result = hasher.finalize(); + + let mut selector_bytes = [0; 4]; + selector_bytes.copy_from_slice(&result[0..4]); + + u32::from_be_bytes(selector_bytes) +} + +/// Returns solidity function selector (first 4 bytes of hash) by its +/// textual representation +/// +/// ```rs +/// use evm_coder_macros::fn_selector; +/// +/// assert_eq!(fn_selector!(transfer(address, uint256)), 0xa9059cbb); +/// ``` +#[proc_macro] +pub fn fn_selector(input: TokenStream) -> TokenStream { + let input = input.to_string().replace(' ', ""); + let selector = fn_selector_str(&input); + + (quote! { + #selector + }) + .into() +} + +fn event_selector_str(input: &str) -> [u8; 32] { + let mut hasher = Keccak256::new(); + hasher.update(input.as_bytes()); + let result = hasher.finalize(); + + let mut selector_bytes = [0; 32]; + selector_bytes.copy_from_slice(&result[0..32]); + selector_bytes +} + +/// Returns solidity topic (hash) by its textual representation +/// +/// ```rs +/// use evm_coder_macros::event_topic; +/// +/// assert_eq!( +/// format!("{:x}", event_topic!(Transfer(address, address, uint256))), +/// "ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", +/// ); +/// ``` +#[proc_macro] +pub fn event_topic(stream: TokenStream) -> TokenStream { + let input = stream.to_string().replace(' ', ""); + let selector_bytes = event_selector_str(&input); + + (quote! { + ::primitive_types::H256([#( + #selector_bytes, + )*]) + }) + .into() +} + +fn parse_path(ty: &Type) -> syn::Result<&Path> { + match &ty { + syn::Type::Path(pat) => { + if let Some(qself) = &pat.qself { + return Err(syn::Error::new(qself.ty.span(), "no receiver expected")); + } + Ok(&pat.path) + } + _ => Err(syn::Error::new(ty.span(), "expected ty to be path")), + } +} + +fn parse_path_segment(path: &Path) -> syn::Result<&PathSegment> { + if path.segments.len() != 1 { + return Err(syn::Error::new( + path.span(), + "expected path to have only segment", + )); + } + let last_segment = &path.segments.last().unwrap(); + Ok(last_segment) +} + +fn parse_ident_from_pat(pat: &Pat) -> syn::Result<&Ident> { + match pat { + Pat::Ident(i) => Ok(&i.ident), + _ => Err(syn::Error::new(pat.span(), "expected pat ident")), + } +} + +fn parse_ident_from_segment(segment: &PathSegment) -> syn::Result<&Ident> { + if segment.arguments != PathArguments::None { + return Err(syn::Error::new( + segment.arguments.span(), + "unexpected generic type", + )); + } + Ok(&segment.ident) +} + +fn parse_ident_from_path(path: &Path) -> syn::Result<&Ident> { + let segment = parse_path_segment(path)?; + parse_ident_from_segment(segment) +} + +fn parse_ident_from_type(ty: &Type) -> syn::Result<&Ident> { + let path = parse_path(ty)?; + parse_ident_from_path(path) +} + +// Gets T out of Result +fn parse_result_ok(ty: &Type) -> syn::Result<&Ident> { + let path = parse_path(ty)?; + let segment = parse_path_segment(path)?; + + if segment.ident != "Result" { + return Err(syn::Error::new( + ty.span(), + "expected Result as return type (no renamed aliases allowed)", + )); + } + let args = match &segment.arguments { + PathArguments::AngleBracketed(e) => e, + _ => { + return Err(syn::Error::new( + segment.arguments.span(), + "missing Result generics", + )) + } + }; + + let args = &args.args; + let arg = args.first().unwrap(); + + let ty = match arg { + GenericArgument::Type(ty) => ty, + _ => { + return Err(syn::Error::new( + arg.span(), + "expected first generic to be type", + )) + } + }; + + parse_ident_from_type(ty) +} + +fn pascal_ident_to_call(ident: &Ident) -> Ident { + let name = format!("{}Call", ident); + Ident::new(&name, ident.span()) +} +fn snake_ident_to_pascal(ident: &Ident) -> Ident { + let name = ident.to_string(); + let name = cases::pascalcase::to_pascal_case(&name); + Ident::new(&name, ident.span()) +} +fn snake_ident_to_screaming(ident: &Ident) -> Ident { + let name = ident.to_string(); + let name = cases::screamingsnakecase::to_screaming_snake_case(&name); + Ident::new(&name, ident.span()) +} +fn pascal_ident_to_snake_call(ident: &Ident) -> Ident { + let name = ident.to_string(); + let name = cases::snakecase::to_snake_case(&name); + let name = format!("call_{}", name); + Ident::new(&name, ident.span()) +} + +fn format_ty(ty: &Ident) -> String { + if ty == "string" { + format!("{} memory", ty) + } else { + ty.to_string() + } +} + +#[proc_macro_attribute] +pub fn solidity_interface(args: TokenStream, stream: TokenStream) -> TokenStream { + let args = parse_macro_input!(args as AttributeArgs); + let args = solidity_interface::InterfaceInfo::from_list(&args).unwrap(); + + let input: ItemTrait = match syn::parse(stream) { + Ok(t) => t, + Err(e) => return e.to_compile_error().into(), + }; + + match solidity_interface::SolidityInterface::try_from(args, &input) { + Ok(v) => v.expand(), + Err(e) => e.to_compile_error(), + } + .into() +} + +#[proc_macro_attribute] +pub fn solidity(_args: TokenStream, stream: TokenStream) -> TokenStream { + stream +} + +#[proc_macro_derive(ToLog, attributes(indexed))] +pub fn to_log(value: TokenStream) -> TokenStream { + let input = parse_macro_input!(value as DeriveInput); + + match to_log::Events::try_from(&input) { + Ok(e) => e.expand(), + Err(e) => e.to_compile_error(), + } + .into() +} diff --git a/crates/evm-coder-macros/src/solidity_interface.rs b/crates/evm-coder-macros/src/solidity_interface.rs new file mode 100644 index 0000000000..d9a4e9d9a6 --- /dev/null +++ b/crates/evm-coder-macros/src/solidity_interface.rs @@ -0,0 +1,569 @@ +use quote::quote; +use darling::FromMeta; +use inflector::cases; +use std::fmt::Write; +use syn::{ + FnArg, Ident, ItemTrait, Meta, NestedMeta, PatType, Path, ReturnType, TraitItem, + TraitItemMethod, Visibility, spanned::Spanned, +}; + +use crate::{ + fn_selector_str, format_ty, parse_ident_from_pat, parse_ident_from_path, parse_ident_from_type, + parse_result_ok, pascal_ident_to_call, pascal_ident_to_snake_call, snake_ident_to_pascal, + snake_ident_to_screaming, +}; + +struct Is { + name: Ident, + pascal_call_name: Ident, + snake_call_name: Ident, +} +impl Is { + fn try_from(path: &Path) -> syn::Result { + let name = parse_ident_from_path(path)?.clone(); + Ok(Self { + pascal_call_name: pascal_ident_to_call(&name), + snake_call_name: pascal_ident_to_snake_call(&name), + name, + }) + } + + fn expand_call_def(&self) -> proc_macro2::TokenStream { + let name = &self.name; + let pascal_call_name = &self.pascal_call_name; + quote! { + #name(#pascal_call_name) + } + } + + fn expand_interface_id(&self) -> proc_macro2::TokenStream { + let pascal_call_name = &self.pascal_call_name; + quote! { + interface_id ^= #pascal_call_name::interface_id(); + } + } + + fn expand_supports_interface(&self) -> proc_macro2::TokenStream { + let pascal_call_name = &self.pascal_call_name; + quote! { + #pascal_call_name::supports_interface(interface_id) + } + } + + fn expand_variant_call(&self) -> proc_macro2::TokenStream { + let name = &self.name; + let snake_call_name = &self.snake_call_name; + quote! { + InternalCall::#name(call) => return self.#snake_call_name(Msg { + call, + caller: c.caller, + value: c.value, + }) + } + } + + fn expand_call_inner(&self) -> proc_macro2::TokenStream { + let snake_call_name = &self.snake_call_name; + let pascal_call_name = &self.pascal_call_name; + quote! { + fn #snake_call_name(&mut self, c: Msg<#pascal_call_name>) -> ::core::result::Result<::evm_coder::abi::AbiWriter, Self::Error>; + } + } + + fn expand_parse(&self) -> proc_macro2::TokenStream { + let name = &self.name; + let pascal_call_name = &self.pascal_call_name; + quote! { + if let Some(parsed_call) = #pascal_call_name::parse(method_id, reader)? { + return Ok(Some(Self::#name(parsed_call))) + } + } + } +} + +#[derive(Default)] +struct IsList(Vec); +impl FromMeta for IsList { + fn from_list(items: &[NestedMeta]) -> darling::Result { + let mut out = Vec::new(); + for item in items { + match item { + NestedMeta::Meta(Meta::Path(path)) => out.push(Is::try_from(path)?), + _ => return Err(syn::Error::new(item.span(), "expected path").into()), + } + } + Ok(Self(out)) + } +} + +#[derive(FromMeta)] +pub struct InterfaceInfo { + #[darling(default)] + is: IsList, + #[darling(default)] + inline_is: IsList, + #[darling(default)] + events: IsList, +} + +#[derive(FromMeta)] +struct MethodInfo { + #[darling(default)] + rename_selector: Option, +} + +struct MethodArg { + name: Ident, + ty: Ident, +} +impl MethodArg { + fn try_from(value: &PatType) -> syn::Result { + Ok(Self { + name: parse_ident_from_pat(&value.pat)?.clone(), + ty: parse_ident_from_type(&value.ty)?.clone(), + }) + } + fn is_value(&self) -> bool { + self.ty == "value" + } + fn is_caller(&self) -> bool { + self.ty == "caller" + } + fn is_special(&self) -> bool { + self.is_value() || self.is_caller() + } + fn selector_ty(&self) -> &Ident { + assert!(!self.is_special()); + &self.ty + } + + fn expand_call_def(&self) -> proc_macro2::TokenStream { + assert!(!self.is_special()); + let name = &self.name; + let ty = &self.ty; + + quote! { + #name: #ty + } + } + + fn expand_parse(&self) -> proc_macro2::TokenStream { + assert!(!self.is_special()); + let name = &self.name; + quote! { + #name: reader.abi_read()? + } + } + + fn expand_call_arg(&self) -> proc_macro2::TokenStream { + if self.is_value() { + quote! { + c.value.clone() + } + } else if self.is_caller() { + quote! { + c.caller.clone() + } + } else { + let name = &self.name; + quote! { + #name + } + } + } + + fn solidity_def(&self) -> String { + assert!(!self.is_special()); + format!("{} {}", format_ty(&self.ty), self.name) + } +} + +#[derive(PartialEq)] +enum Mutability { + Mutable, + View, + Pure, +} + +struct Method { + name: Ident, + camel_name: String, + pascal_name: Ident, + screaming_name: Ident, + selector_str: String, + selector: u32, + args: Vec, + has_normal_args: bool, + mutability: Mutability, + result: Ident, +} +impl Method { + fn try_from(value: &TraitItemMethod) -> syn::Result { + let mut info = MethodInfo { + rename_selector: None, + }; + for attr in &value.attrs { + let ident = parse_ident_from_path(&attr.path)?; + if ident == "solidity" { + let args = attr.parse_meta().unwrap(); + info = MethodInfo::from_meta(&args).unwrap(); + } else if ident == "doc" { + // TODO: Add docs to evm interfaces + } + } + let ident = &value.sig.ident; + let ident_str = ident.to_string(); + if !cases::snakecase::is_snake_case(&ident_str) { + return Err(syn::Error::new(ident.span(), "method name should be snake_cased\nif alternative solidity name needs to be set - use #[solidity] attribute")); + } + + let mut mutability = Mutability::Pure; + + if let Some(FnArg::Receiver(receiver)) = value + .sig + .inputs + .iter() + .find(|arg| matches!(arg, FnArg::Receiver(_))) + { + if receiver.reference.is_none() { + return Err(syn::Error::new( + receiver.span(), + "receiver should be by ref", + )); + } + if receiver.mutability.is_some() { + mutability = Mutability::Mutable; + } else { + mutability = Mutability::View; + } + } + let mut args = Vec::new(); + for typ in value + .sig + .inputs + .iter() + .filter(|arg| matches!(arg, FnArg::Typed(_))) + { + let typ = match typ { + FnArg::Typed(typ) => typ, + _ => unreachable!(), + }; + args.push(MethodArg::try_from(typ)?); + } + + if mutability != Mutability::Mutable && args.iter().any(|arg| arg.is_value()) { + return Err(syn::Error::new( + args.iter().find(|arg| arg.is_value()).unwrap().ty.span(), + "payable function should be mutable", + )); + } + + let result = match &value.sig.output { + ReturnType::Type(_, ty) => ty, + _ => return Err(syn::Error::new(value.sig.output.span(), "interface method should return Result\nif there is no value to return - specify void (which is alias to unit)")), + }; + let result = parse_result_ok(&result)?; + + let camel_name = info + .rename_selector + .unwrap_or_else(|| cases::camelcase::to_camel_case(&ident.to_string())); + let mut selector_str = camel_name.clone(); + selector_str.push('('); + let mut has_normal_args = false; + for (i, arg) in args.iter().filter(|arg| !arg.is_special()).enumerate() { + if i != 0 { + selector_str.push(','); + } + write!(selector_str, "{}", arg.selector_ty()).unwrap(); + has_normal_args = true; + } + selector_str.push(')'); + let selector = fn_selector_str(&selector_str); + + Ok(Self { + name: ident.clone(), + camel_name, + pascal_name: snake_ident_to_pascal(&ident), + screaming_name: snake_ident_to_screaming(&ident), + selector_str, + selector, + args, + has_normal_args, + mutability, + result: result.clone(), + }) + } + fn expand_call_def(&self) -> proc_macro2::TokenStream { + let defs = self + .args + .iter() + .filter(|a| !a.is_special()) + .map(|a| a.expand_call_def()); + let pascal_name = &self.pascal_name; + + if self.has_normal_args { + quote! { + #pascal_name { + #( + #defs, + )* + } + } + } else { + quote! {#pascal_name} + } + } + + fn expand_const(&self) -> proc_macro2::TokenStream { + let screaming_name = &self.screaming_name; + let selector = self.selector; + let selector_str = &self.selector_str; + quote! { + #[doc = #selector_str] + const #screaming_name: u32 = #selector; + } + } + + fn expand_interface_id(&self) -> proc_macro2::TokenStream { + let screaming_name = &self.screaming_name; + quote! { + interface_id ^= Self::#screaming_name; + } + } + + fn expand_parse(&self) -> proc_macro2::TokenStream { + let pascal_name = &self.pascal_name; + let screaming_name = &self.screaming_name; + if self.has_normal_args { + let parsers = self + .args + .iter() + .filter(|a| !a.is_special()) + .map(|a| a.expand_parse()); + quote! { + Self::#screaming_name => return Ok(Some(Self::#pascal_name { + #( + #parsers, + )* + })) + } + } else { + quote! { Self::#screaming_name => return Ok(Some(Self::#pascal_name)) } + } + } + + fn expand_variant_call(&self) -> proc_macro2::TokenStream { + let pascal_name = &self.pascal_name; + let name = &self.name; + + let matcher = if self.has_normal_args { + let names = self + .args + .iter() + .filter(|a| !a.is_special()) + .map(|a| &a.name); + + quote! {{ + #( + #names, + )* + }} + } else { + quote! {} + }; + + let receiver = match self.mutability { + Mutability::Mutable | Mutability::View => quote! {self.}, + Mutability::Pure => quote! {Self::}, + }; + let args = self.args.iter().map(|a| a.expand_call_arg()); + + quote! { + InternalCall::#pascal_name #matcher => { + let result = #receiver #name( + #( + #args, + )* + )?; + (&result).abi_write(&mut writer); + } + } + } + + fn solidity_def(&self) -> String { + let mut out = format!("function {}(", self.camel_name); + for (i, arg) in self.args.iter().filter(|a| !a.is_special()).enumerate() { + if i != 0 { + out.push_str(", "); + } + out.push_str(&arg.solidity_def()); + } + out.push(')'); + match self.mutability { + Mutability::Mutable => {} + Mutability::View => write!(out, " view").unwrap(), + Mutability::Pure => write!(out, " pure").unwrap(), + } + if self.result != "void" { + write!(out, " returns ({})", format_ty(&self.result)).unwrap(); + } + out.push(';'); + out + } +} + +pub struct SolidityInterface { + vis: Visibility, + name: Ident, + info: InterfaceInfo, + methods: Vec, + items: Vec, +} +impl SolidityInterface { + pub fn try_from(info: InterfaceInfo, value: &ItemTrait) -> syn::Result { + let mut found_error = false; + let mut methods = Vec::new(); + + for item in &value.items { + match item { + TraitItem::Type(ty) => { + if ty.ident == "Error" { + found_error = true; + } + } + TraitItem::Method(method) => methods.push(Method::try_from(&method)?), + _ => {} + } + } + if !found_error { + return Err(syn::Error::new( + value.span(), + "expected associated type called Error, which should implement From<&str>", + )); + } + Ok(Self { + vis: value.vis.clone(), + name: value.ident.clone(), + info, + methods, + items: value.items.clone(), + }) + } + pub fn expand(self) -> proc_macro2::TokenStream { + let vis = self.vis; + let name = self.name; + let items = self.items; + + let call_name = pascal_ident_to_call(&name); + + let call_sub = self + .info + .inline_is + .0 + .iter() + .chain(self.info.is.0.iter()) + .map(Is::expand_call_def); + let call_inner = self + .info + .inline_is + .0 + .iter() + .chain(self.info.is.0.iter()) + .map(Is::expand_call_inner); + let call_parse = self + .info + .inline_is + .0 + .iter() + .chain(self.info.is.0.iter()) + .map(Is::expand_parse); + let call_variants = self + .info + .inline_is + .0 + .iter() + .chain(self.info.is.0.iter()) + .map(Is::expand_variant_call); + + let inline_interface_id = self.info.inline_is.0.iter().map(Is::expand_interface_id); + let supports_interface = self.info.is.0.iter().map(Is::expand_supports_interface); + + let calls = self.methods.iter().map(Method::expand_call_def); + let consts = self.methods.iter().map(Method::expand_const); + let interface_id = self.methods.iter().map(Method::expand_interface_id); + let parsers = self.methods.iter().map(Method::expand_parse); + let call_variants_this = self.methods.iter().map(Method::expand_variant_call); + + // let methods = self.methods.iter().map(Method::solidity_def); + + quote! { + #[derive(Debug)] + #vis enum #call_name { + #( + #calls, + )* + #( + #call_sub, + )* + } + impl #call_name { + #( + #consts + )* + pub fn parse(method_id: u32, reader: &mut ::evm_coder::abi::AbiReader) -> ::evm_coder::abi::Result> { + use ::evm_coder::abi::AbiRead; + match method_id { + #( + #parsers, + )* + _ => {}, + } + #( + #call_parse + )else* + return Ok(None); + } + pub const fn interface_id() -> u32 { + let mut interface_id = 0; + #(#interface_id)* + #(#inline_interface_id)* + interface_id + } + pub fn supports_interface(interface_id: u32) -> bool { + interface_id != 0xffffff && ( + interface_id == Self::interface_id() + #( + || #supports_interface + )* + ) + } + } + #vis trait #name { + #( + #items + )* + #( + #call_inner + )* + fn call(&mut self, c: Msg<#call_name>) -> ::core::result::Result<::evm_coder::abi::AbiWriter, Self::Error> { + use ::evm_coder::abi::AbiWrite; + type InternalCall = #call_name; + match c.call { + #( + #call_variants, + )* + _ => {}, + } + let mut writer = ::evm_coder::abi::AbiWriter::default(); + match c.call { + #( + #call_variants_this, + )* + _ => unreachable!() + } + Ok(writer) + } + } + } + } +} diff --git a/crates/evm-coder-macros/src/to_log.rs b/crates/evm-coder-macros/src/to_log.rs new file mode 100644 index 0000000000..9e616f6c82 --- /dev/null +++ b/crates/evm-coder-macros/src/to_log.rs @@ -0,0 +1,170 @@ +use syn::{Data, DeriveInput, Field, Fields, Ident, Variant, spanned::Spanned}; +use std::fmt::Write; +use quote::quote; + +use crate::{parse_ident_from_path, parse_ident_from_type, snake_ident_to_screaming}; + +struct EventField { + name: Ident, + ty: Ident, + indexed: bool, +} + +impl EventField { + fn try_from(field: &Field) -> syn::Result { + let name = field.ident.as_ref().unwrap(); + let ty = parse_ident_from_type(&field.ty)?; + let mut indexed = false; + for attr in &field.attrs { + if let Ok(ident) = parse_ident_from_path(&attr.path) { + if ident == "indexed" { + indexed = true; + } + } + } + Ok(Self { + name: name.to_owned(), + ty: ty.to_owned(), + indexed, + }) + } +} + +struct Event { + name: Ident, + name_screaming: Ident, + fields: Vec, + selector: [u8; 32], + selector_str: String, +} + +impl Event { + fn try_from(variant: &Variant) -> syn::Result { + let name = &variant.ident; + let name_screaming = snake_ident_to_screaming(&name); + + let named = match &variant.fields { + Fields::Named(named) => named, + _ => { + return Err(syn::Error::new( + variant.fields.span(), + "expected named fields", + )) + } + }; + let mut fields = Vec::new(); + for field in &named.named { + fields.push(EventField::try_from(&field)?); + } + let mut selector_str = format!("{}(", name); + for (i, arg) in fields.iter().enumerate() { + if i != 0 { + write!(selector_str, ",").unwrap(); + } + write!(selector_str, "{}", arg.ty).unwrap(); + } + selector_str.push(')'); + let selector = crate::event_selector_str(&selector_str); + + Ok(Self { + name: name.to_owned(), + name_screaming, + fields, + selector, + selector_str, + }) + } + + fn expand_serializers(&self) -> proc_macro2::TokenStream { + let name = &self.name; + let name_screaming = &self.name_screaming; + let fields = self.fields.iter().map(|f| &f.name); + + let indexed = self.fields.iter().filter(|f| f.indexed).map(|f| &f.name); + let plain = self.fields.iter().filter(|f| !f.indexed).map(|f| &f.name); + + quote! { + Self::#name {#( + #fields, + )*} => { + topics.push(topic::from(Self::#name_screaming)); + #( + topics.push(#indexed.to_topic()); + )* + #( + #plain.abi_write(&mut writer); + )* + } + } + } + + fn expand_consts(&self) -> proc_macro2::TokenStream { + let name_screaming = &self.name_screaming; + let selector_str = &self.selector_str; + let selector = &self.selector; + + quote! { + #[doc = #selector_str] + const #name_screaming: [u8; 32] = [#( + #selector, + )*]; + } + } +} + +pub struct Events { + name: Ident, + events: Vec, +} + +impl Events { + pub fn try_from(data: &DeriveInput) -> syn::Result { + let name = &data.ident; + let en = match &data.data { + Data::Enum(en) => en, + _ => return Err(syn::Error::new(data.span(), "expected enum")), + }; + let mut events = Vec::new(); + for variant in &en.variants { + events.push(Event::try_from(variant)?); + } + Ok(Self { + name: name.to_owned(), + events, + }) + } + pub fn expand(&self) -> proc_macro2::TokenStream { + let name = &self.name; + + let consts = self.events.iter().map(Event::expand_consts); + let serializers = self.events.iter().map(Event::expand_serializers); + + quote! { + impl #name { + #( + #consts + )* + } + + #[automatically_derived] + impl ::evm_coder::events::ToLog for #name { + fn to_log(&self, contract: address) -> ::ethereum::Log { + use ::evm_coder::events::ToTopic; + use ::evm_coder::abi::AbiWrite; + let mut writer = ::evm_coder::abi::AbiWriter::new(); + let mut topics = Vec::new(); + match self { + #( + #serializers, + )* + } + ::ethereum::Log { + address: contract, + topics, + data: writer.finish(), + } + } + } + } + } +} diff --git a/crates/evm-coder/Cargo.toml b/crates/evm-coder/Cargo.toml new file mode 100644 index 0000000000..5463445a2a --- /dev/null +++ b/crates/evm-coder/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "evm-coder" +version = "0.1.0" +edition = "2018" + +[dependencies] +evm-coder-macros = { path = "../evm-coder-macros" } +primitive-types = { version = "0.9", default-features = false } +hex-literal = "0.3" +ethereum = { version = "0.7.1", default-features = false } + +[dev-dependencies] +hex = "0.4.3" + +[features] +default = ["std"] +std = ["ethereum/std", "primitive-types/std"] \ No newline at end of file diff --git a/crates/evm-coder/src/abi.rs b/crates/evm-coder/src/abi.rs new file mode 100644 index 0000000000..e737367657 --- /dev/null +++ b/crates/evm-coder/src/abi.rs @@ -0,0 +1,311 @@ +//! TODO: I misunterstood therminology, abi IS rlp encoded, so +//! this module should be replaced with rlp crate + +#![allow(dead_code)] + +#[cfg(not(feature = "std"))] +use alloc::{ + string::{String, ToString}, + vec::Vec, +}; +use primitive_types::{H160, U256}; + +use crate::types::string; + +const ABI_ALIGNMENT: usize = 32; + +pub type Result = core::result::Result; + +#[derive(Clone)] +pub struct AbiReader<'i> { + buf: &'i [u8], + offset: usize, +} +impl<'i> AbiReader<'i> { + pub fn new(buf: &'i [u8]) -> Self { + Self { buf, offset: 0 } + } + pub fn new_call(buf: &'i [u8]) -> Result<(u32, Self)> { + if buf.len() < 4 { + return Err("missing method id"); + } + let mut method_id = [0; 4]; + method_id.copy_from_slice(&buf[0..4]); + + Ok((u32::from_be_bytes(method_id), Self { buf, offset: 4 })) + } + + fn read_padleft(&mut self) -> Result<[u8; S]> { + if self.buf.len() - self.offset < 32 { + return Err("missing padding"); + } + let mut block = [0; S]; + // Verify padding is empty + if !self.buf[self.offset..self.offset + ABI_ALIGNMENT - S] + .iter() + .all(|&v| v == 0) + { + return Err("non zero padding (wrong types?)"); + } + block.copy_from_slice( + &self.buf[self.offset + ABI_ALIGNMENT - S..self.offset + ABI_ALIGNMENT], + ); + self.offset += ABI_ALIGNMENT; + Ok(block) + } + + pub fn address(&mut self) -> Result { + Ok(H160(self.read_padleft()?)) + } + + pub fn bool(&mut self) -> Result { + let data: [u8; 1] = self.read_padleft()?; + match data[0] { + 0 => Ok(false), + 1 => Ok(true), + _ => Err("wrong bool value"), + } + } + + pub fn bytes4(&mut self) -> Result<[u8; 4]> { + self.read_padleft() + } + + pub fn bytes(&mut self) -> Result> { + let mut subresult = self.subresult()?; + let length = subresult.read_usize()?; + if subresult.buf.len() <= subresult.offset + length { + return Err("bytes out of bounds"); + } + Ok(subresult.buf[subresult.offset..subresult.offset + length].into()) + } + + pub fn uint32(&mut self) -> Result { + Ok(u32::from_be_bytes(self.read_padleft()?)) + } + + pub fn uint128(&mut self) -> Result { + Ok(u128::from_be_bytes(self.read_padleft()?)) + } + + pub fn uint256(&mut self) -> Result { + let buf: [u8; 32] = self.read_padleft()?; + Ok(U256::from_big_endian(&buf)) + } + + pub fn uint64(&mut self) -> Result { + Ok(u64::from_be_bytes(self.read_padleft()?)) + } + + pub fn read_usize(&mut self) -> Result { + Ok(usize::from_be_bytes(self.read_padleft()?)) + } + + fn subresult(&mut self) -> Result> { + let offset = self.read_usize()?; + Ok(AbiReader { + buf: &self.buf, + offset: offset + self.offset, + }) + } + + pub fn is_finished(&self) -> bool { + self.buf.len() == self.offset + } +} + +#[derive(Default)] +pub struct AbiWriter { + static_part: Vec, + dynamic_part: Vec<(usize, AbiWriter)>, +} +impl AbiWriter { + pub fn new() -> Self { + Self::default() + } + pub fn new_call(method_id: u32) -> Self { + let mut val = Self::new(); + val.static_part.extend(&method_id.to_be_bytes()); + val + } + + fn write_padleft(&mut self, block: &[u8]) { + assert!(block.len() <= ABI_ALIGNMENT); + self.static_part + .extend(&[0; ABI_ALIGNMENT][0..ABI_ALIGNMENT - block.len()]); + self.static_part.extend(block); + } + + fn write_padright(&mut self, bytes: &[u8]) { + assert!(bytes.len() <= ABI_ALIGNMENT); + self.static_part.extend(bytes); + self.static_part + .extend(&[0; ABI_ALIGNMENT][0..ABI_ALIGNMENT - bytes.len()]); + } + + pub fn address(&mut self, address: &H160) { + self.write_padleft(&address.0) + } + + pub fn bool(&mut self, value: &bool) { + self.write_padleft(&[if *value { 1 } else { 0 }]) + } + + pub fn uint8(&mut self, value: &u8) { + self.write_padleft(&[*value]) + } + + pub fn uint32(&mut self, value: &u32) { + self.write_padleft(&u32::to_be_bytes(*value)) + } + + pub fn uint128(&mut self, value: &u128) { + self.write_padleft(&u128::to_be_bytes(*value)) + } + + /// This method writes u128, and exists only for convenience, because there is + /// no u256 support in rust + pub fn uint256(&mut self, value: &U256) { + let mut out = [0; 32]; + value.to_big_endian(&mut out); + self.write_padleft(&out) + } + + pub fn write_usize(&mut self, value: &usize) { + self.write_padleft(&usize::to_be_bytes(*value)) + } + + pub fn write_subresult(&mut self, result: Self) { + self.dynamic_part.push((self.static_part.len(), result)); + // Empty block, to be filled later + self.write_padleft(&[]); + } + + pub fn memory(&mut self, value: &[u8]) { + let mut sub = Self::new(); + sub.write_usize(&value.len()); + for chunk in value.chunks(ABI_ALIGNMENT) { + sub.write_padright(chunk); + } + self.write_subresult(sub); + } + + pub fn string(&mut self, value: &str) { + self.memory(value.as_bytes()) + } + + pub fn finish(mut self) -> Vec { + for (static_offset, part) in self.dynamic_part { + let part_offset = self.static_part.len(); + + let encoded_dynamic_offset = usize::to_be_bytes(part_offset - static_offset); + self.static_part[static_offset + ABI_ALIGNMENT - encoded_dynamic_offset.len() + ..static_offset + ABI_ALIGNMENT] + .copy_from_slice(&encoded_dynamic_offset); + self.static_part.extend(part.finish()) + } + self.static_part + } +} + +pub trait AbiRead { + fn abi_read(&mut self) -> Result; +} + +macro_rules! impl_abi_readable { + ($ty:ty, $method:ident) => { + impl AbiRead<$ty> for AbiReader<'_> { + fn abi_read(&mut self) -> Result<$ty> { + self.$method() + } + } + }; +} + +impl_abi_readable!(u32, uint32); +impl_abi_readable!(u128, uint128); +impl_abi_readable!(U256, uint256); +impl_abi_readable!(H160, address); +impl_abi_readable!(Vec, bytes); +impl_abi_readable!(bool, bool); + +pub trait AbiWrite { + fn abi_write(&self, writer: &mut AbiWriter); +} + +macro_rules! impl_abi_writeable { + ($ty:ty, $method:ident) => { + impl AbiWrite for $ty { + fn abi_write(&self, writer: &mut AbiWriter) { + writer.$method(&self) + } + } + }; +} + +impl_abi_writeable!(u8, uint8); +impl_abi_writeable!(u32, uint32); +impl_abi_writeable!(u128, uint128); +impl_abi_writeable!(U256, uint256); +impl_abi_writeable!(H160, address); +impl_abi_writeable!(bool, bool); +impl_abi_writeable!(&str, string); +impl AbiWrite for &string { + fn abi_write(&self, writer: &mut AbiWriter) { + writer.string(&self) + } +} + +impl AbiWrite for () { + fn abi_write(&self, _writer: &mut AbiWriter) {} +} + +/// Error, which can be constructed from any ToString type +/// Encoded to Abi as Error(string) +#[derive(Debug)] +pub struct StringError(String); + +impl From for StringError +where + E: ToString, +{ + fn from(e: E) -> Self { + Self(e.to_string()) + } +} + +impl From for AbiWriter { + fn from(v: StringError) -> Self { + let mut out = AbiWriter::new_call(crate::fn_selector!(Error(string))); + out.string(&v.0); + out + } +} + +#[macro_export] +macro_rules! abi_decode { + ($reader:expr, $($name:ident: $typ:ident),+ $(,)?) => { + $( + let $name = $reader.$typ()?; + )+ + } +} +#[macro_export] +macro_rules! abi_encode { + ($($typ:ident($value:expr)),* $(,)?) => {{ + #[allow(unused_mut)] + let mut writer = ::evm_coder::abi::AbiWriter::new(); + $( + writer.$typ($value); + )* + writer + }}; + (call $val:expr; $($typ:ident($value:expr)),* $(,)?) => {{ + #[allow(unused_mut)] + let mut writer = ::evm_coder::abi::AbiWriter::new_call($val); + $( + writer.$typ($value); + )* + writer + }} +} diff --git a/crates/evm-coder/src/events.rs b/crates/evm-coder/src/events.rs new file mode 100644 index 0000000000..ca93f43ac3 --- /dev/null +++ b/crates/evm-coder/src/events.rs @@ -0,0 +1,42 @@ +use ethereum::Log; +use primitive_types::{H160, H256}; + +use crate::types::*; + +pub trait ToLog { + fn to_log(&self, contract: H160) -> Log; +} + +pub trait ToTopic { + fn to_topic(&self) -> H256; +} + +impl ToTopic for H256 { + fn to_topic(&self) -> H256 { + *self + } +} + +impl ToTopic for uint256 { + fn to_topic(&self) -> H256 { + let mut out = [0u8; 32]; + self.to_big_endian(&mut out); + H256(out) + } +} + +impl ToTopic for address { + fn to_topic(&self) -> H256 { + let mut out = [0u8; 32]; + out[12..32].copy_from_slice(&self.0); + H256(out) + } +} + +impl ToTopic for uint32 { + fn to_topic(&self) -> H256 { + let mut out = [0u8; 32]; + out[28..32].copy_from_slice(&self.to_be_bytes()); + H256(out) + } +} diff --git a/crates/evm-coder/src/lib.rs b/crates/evm-coder/src/lib.rs new file mode 100644 index 0000000000..55a25e5ed0 --- /dev/null +++ b/crates/evm-coder/src/lib.rs @@ -0,0 +1,69 @@ +#![cfg_attr(not(feature = "std"), no_std)] +#[cfg(not(feature = "std"))] +extern crate alloc; + +pub use evm_coder_macros::{event_topic, fn_selector, solidity_interface, solidity, ToLog}; +pub mod abi; +pub mod events; +pub use events::ToLog; + +/// Solidity type definitions +pub mod types { + #![allow(non_camel_case_types)] + + #[cfg(not(feature = "std"))] + use alloc::{vec::Vec}; + use primitive_types::{U256, H160, H256}; + + pub type address = H160; + + pub type uint8 = u8; + pub type uint16 = u16; + pub type uint32 = u32; + pub type uint64 = u64; + pub type uint128 = u128; + pub type uint256 = U256; + + pub type bytes4 = u32; + + pub type topic = H256; + + #[cfg(not(feature = "std"))] + pub type string = ::alloc::string::String; + #[cfg(feature = "std")] + pub type string = ::std::string::String; + pub type bytes = Vec; + + pub type void = (); + + //#region Special types + /// Makes function payable + pub type value = U256; + /// Makes function caller-sensitive + pub type caller = address; + //#endregion + + pub struct Msg { + pub call: C, + pub caller: H160, + pub value: U256, + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn function_selector_generation() { + assert_eq!(fn_selector!(transfer(address, uint256)), 0xa9059cbb); + } + + #[test] + fn event_topic_generation() { + assert_eq!( + hex::encode(&event_topic!(Transfer(address, address, uint256))[..]), + "ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + ); + } +} diff --git a/crates/evm-coder/tests/a.rs b/crates/evm-coder/tests/a.rs new file mode 100644 index 0000000000..331b4664c1 --- /dev/null +++ b/crates/evm-coder/tests/a.rs @@ -0,0 +1,69 @@ +use evm_coder::{solidity_interface, types::*, ToLog}; +use evm_coder_macros::solidity; + +#[solidity_interface] +trait OurInterface { + type Error; + fn fn_a(&self, input: uint256) -> Result; +} + +#[solidity_interface] +trait OurInterface1 { + type Error; + fn fn_b(&self, input: uint128) -> Result; +} + +#[solidity_interface(is(OurInterface), inline_is(OurInterface1), events(ERC721Log))] +trait OurInterface2 { + type Error; + #[solidity(rename_selector = "fnK")] + fn fn_c(&self, input: uint32) -> Result; + fn fn_d(&self, value: uint32) -> Result; + + fn caller_sensitive(&self, caller: caller) -> Result; + fn payable(&mut self, value: value) -> Result; +} + +#[derive(ToLog)] +enum ERC721Log { + Transfer { + #[indexed] + from: address, + #[indexed] + to: address, + value: uint256, + }, + Eee { + #[indexed] + aaa: address, + bbb: uint256, + }, +} + +#[solidity_interface] +trait ERC20 { + type Error; + + fn decimals(&self) -> Result; + fn balance_of(&self, owner: address) -> Result; + fn transfer( + &mut self, + caller: caller, + to: address, + value: uint256, + ) -> Result; + fn transfer_from( + &mut self, + caller: caller, + from: address, + to: address, + value: uint256, + ) -> Result; + fn approve( + &mut self, + caller: caller, + spender: address, + value: uint256, + ) -> Result; + fn allowance(&self, owner: address, spender: address) -> Result; +} diff --git a/node/Cargo.toml b/node/Cargo.toml index 9bcd2943c7..073a456524 100644 --- a/node/Cargo.toml +++ b/node/Cargo.toml @@ -25,39 +25,49 @@ flexi_logger = "0.15.7" parking_lot = '0.10.0' structopt = '0.3.8' jsonrpc-core = '15.0.0' +jsonrpc-pubsub = "15.0.0" # Substrate dependencies +pallet-nft = { path = '../pallets/nft', version = '3.0.0' } nft-runtime = { path = '../runtime', version = '3.0.0' } -frame-benchmarking = '3.0.0' -frame-benchmarking-cli = '3.0.0' -pallet-transaction-payment-rpc = '3.0.0' -sc-basic-authorship = '0.9.0' -sc-cli = { features = ['wasmtime'], version = '0.9.0' } -sc-client-api = '3.0.0' -sc-consensus = '0.9.0' -sc-consensus-aura = '0.9.0' -sc-executor = { features = ['wasmtime'], version = '0.9.0' } -sc-finality-grandpa = '0.9.0' +frame-benchmarking = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +frame-benchmarking-cli = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +pallet-transaction-payment-rpc = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +fc-rpc-core = { version = "1.1.0-dev", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions" } +fc-consensus = { version = "2.0.0-dev", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions" } +fc-mapping-sync = { version = "2.0.0-dev", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions" } +fc-rpc = { version = "2.0.0-dev", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions" } +fc-db = { version = "1.0.0", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions" } +fp-rpc = { version = "2.0.0", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions" } +sc-basic-authorship = { version = '0.9.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sc-cli = { version = '0.9.0', features = ['wasmtime'], git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sc-client-api = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sc-consensus = { version = '0.9.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sc-consensus-aura = { version = '0.9.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sc-executor = { version = '0.9.0', features = ['wasmtime'], git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sc-finality-grandpa = { version = '0.9.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } -sc-keystore = '3.0.0' -sc-rpc = '3.0.0' -sc-rpc-api = '0.9.0' -sc-service = { features = ['wasmtime'], version = '0.9.0' } -sc-transaction-pool = '3.0.0' -sp-api = '3.0.0' -sp-block-builder = '3.0.0' -sp-blockchain = '3.0.0' -sp-consensus = '0.9.0' -sp-consensus-aura = '0.9.0' -sp-core = '3.0.0' -sp-finality-grandpa = '3.0.0' -sp-inherents = '3.0.0' -sp-runtime = '3.0.0' -sp-transaction-pool = '3.0.0' -substrate-frame-rpc-system = '3.0.0' -sc-network = '0.9.0' -pallet-contracts-rpc = '3.0.0' -sc-telemetry = '3.0.0' +sc-keystore = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sc-rpc = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sc-rpc-api = { version = '0.9.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sc-service = { version = '0.9.0', features = ['wasmtime'], git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sc-transaction-pool = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-api = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-block-builder = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-blockchain = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-consensus = { version = '0.9.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-consensus-aura = { version = '0.9.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-core = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-finality-grandpa = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-inherents = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-runtime = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-timestamp = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-transaction-pool = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +substrate-frame-rpc-system = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sc-network = { version = '0.9.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +pallet-contracts-rpc = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +pallet-ethereum = { version = "2.0.0-dev", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions" } +sc-telemetry = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } serde = { version = "1.0.102", features = ["derive"] } serde_json = "1.0.41" diff --git a/node/src/chain_spec.rs b/node/src/chain_spec.rs index 92e0782777..aea01b4573 100644 --- a/node/src/chain_spec.rs +++ b/node/src/chain_spec.rs @@ -3,19 +3,18 @@ // file 'LICENSE', which is part of this source code package. // -// use nft_runtime::{ -// AccountId, AuraConfig, BalancesConfig, GenesisConfig, GrandpaConfig, Signature, SudoConfig, -// SystemConfig, WASM_BINARY, -// }; -// use nft_runtime::{ContractsConfig, ContractsSchedule, NftConfig, CollectionType}; use nft_runtime::*; -use sc_service::ChainType; +use sp_core::{Pair, Public, sr25519}; +use nft_runtime::{ + AccountId, AuraConfig, BalancesConfig, EVMConfig, EthereumConfig, GenesisConfig, GrandpaConfig, + SudoConfig, SystemConfig, WASM_BINARY, Signature +}; use sp_consensus_aura::sr25519::AuthorityId as AuraId; -use sp_core::{sr25519, Pair, Public}; use sp_finality_grandpa::AuthorityId as GrandpaId; -use sp_runtime::traits::{IdentifyAccount, Verify}; +use sp_runtime::traits::{Verify, IdentifyAccount}; +use sc_service::ChainType; use serde_json::map::Map; -// use crate::chain_spec::api::chain_extension::*; +use std::collections::BTreeMap; // Note this is the URL for the telemetry server //const STAGING_TELEMETRY_URL: &str = "wss://telemetry.polkadot.io/submit/"; @@ -25,9 +24,9 @@ pub type ChainSpec = sc_service::GenericChainSpec; /// Helper function to generate a crypto pair from seed pub fn get_from_seed(seed: &str) -> ::Public { - TPublic::Pair::from_string(&format!("//{}", seed), None) - .expect("static values are valid; qed") - .public() + TPublic::Pair::from_string(&format!("//{}", seed), None) + .expect("static values are valid; qed") + .public() } type AccountPublic = ::Signer; @@ -35,14 +34,14 @@ type AccountPublic = ::Signer; /// Helper function to generate an account ID from seed pub fn get_account_id_from_seed(seed: &str) -> AccountId where - AccountPublic: From<::Public>, + AccountPublic: From<::Public>, { - AccountPublic::from(get_from_seed::(seed)).into_account() + AccountPublic::from(get_from_seed::(seed)).into_account() } /// Helper function to generate an authority key for Aura pub fn authority_keys_from_seed(s: &str) -> (AuraId, GrandpaId) { - (get_from_seed::(s), get_from_seed::(s)) + (get_from_seed::(s), get_from_seed::(s)) } pub fn development_config() -> Result { @@ -138,88 +137,74 @@ pub fn local_testnet_config() -> Result { } fn testnet_genesis( - wasm_binary: &[u8], - initial_authorities: Vec<(AuraId, GrandpaId)>, - root_key: AccountId, - endowed_accounts: Vec, - enable_println: bool, + wasm_binary: &[u8], + initial_authorities: Vec<(AuraId, GrandpaId)>, + root_key: AccountId, + endowed_accounts: Vec, + enable_println: bool, ) -> GenesisConfig { let vested_accounts = vec![ get_account_id_from_seed::("Bob"), ]; - GenesisConfig { - system: Some(SystemConfig { - code: wasm_binary.to_vec(), - changes_trie_config: Default::default(), - }), - pallet_balances: Some(BalancesConfig { - balances: endowed_accounts - .iter() - .cloned() - .map(|k| (k, 1 << 100)) - .collect(), - }), - pallet_aura: Some(AuraConfig { - authorities: initial_authorities.iter().map(|x| (x.0.clone())).collect(), - }), - pallet_grandpa: Some(GrandpaConfig { - authorities: initial_authorities - .iter() - .map(|x| (x.1.clone(), 1)) - .collect(), - }), - pallet_treasury: Some(Default::default()), - pallet_sudo: Some(SudoConfig { key: root_key }), - pallet_vesting: Some(VestingConfig { - vesting: vested_accounts - .iter() - .cloned() - .map(|k| (k, 1000, 100, 1 << 98)) - .collect(), - }), - pallet_nft: Some(NftConfig { - collection_id: vec![( - 1, - Collection { - owner: get_account_id_from_seed::("Alice"), - mode: CollectionMode::NFT, - access: AccessMode::Normal, - decimal_points: 0, - name: vec![], - description: vec![], - token_prefix: vec![], - mint_mode: false, - offchain_schema: vec![], - schema_version: SchemaVersion::default(), - sponsorship: SponsorshipState::Confirmed(get_account_id_from_seed::("Alice")), - const_on_chain_schema: vec![], - variable_on_chain_schema: vec![], - limits: CollectionLimits::default() - }, - )], - nft_item_id: vec![], - fungible_item_id: vec![], - refungible_item_id: vec![], - chain_limit: ChainLimits { - collection_numbers_limit: 100000, - account_token_ownership_limit: 1000000, - collections_admins_limit: 5, - custom_data_limit: 2048, - nft_sponsor_transfer_timeout: 15, - fungible_sponsor_transfer_timeout: 15, + GenesisConfig { + system: SystemConfig { + code: wasm_binary.to_vec(), + changes_trie_config: Default::default(), + }, + pallet_balances: BalancesConfig { + balances: endowed_accounts + .iter() + .cloned() + .map(|k| (k, 1 << 100)) + .collect(), + }, + pallet_aura: AuraConfig { + authorities: initial_authorities.iter().map(|x| (x.0.clone())).collect(), + }, + pallet_grandpa: GrandpaConfig { + authorities: initial_authorities + .iter() + .map(|x| (x.1.clone(), 1)) + .collect(), + }, + pallet_treasury: Default::default(), + pallet_sudo: SudoConfig { key: root_key }, + pallet_vesting: VestingConfig { + vesting: vested_accounts + .iter() + .cloned() + .map(|k| (k, 1000, 100, 1 << 98)) + .collect(), + }, + pallet_nft: NftConfig { + collection_id: vec![], + nft_item_id: vec![], + fungible_item_id: vec![], + refungible_item_id: vec![], + chain_limit: ChainLimits { + collection_numbers_limit: 100000, + account_token_ownership_limit: 1000000, + collections_admins_limit: 5, + custom_data_limit: 2048, + nft_sponsor_transfer_timeout: 15, + fungible_sponsor_transfer_timeout: 15, refungible_sponsor_transfer_timeout: 15, offchain_schema_limit: 1024, variable_on_chain_schema_limit: 1024, const_on_chain_schema_limit: 1024, - }, - }), - pallet_contracts: Some(ContractsConfig { - current_schedule: ContractsSchedule { - enable_println, - ..Default::default() - }, - }), - } + }, + }, + pallet_contracts: ContractsConfig { + current_schedule: ContractsSchedule { + enable_println, + ..Default::default() + }, + }, + pallet_evm: EVMConfig { + accounts: BTreeMap::new(), + }, + pallet_ethereum: EthereumConfig {}, + } } diff --git a/node/src/command.rs b/node/src/command.rs index cbf0bed18c..d7c3f42a6b 100644 --- a/node/src/command.rs +++ b/node/src/command.rs @@ -75,7 +75,7 @@ pub fn run() -> sc_cli::Result<()> { let runner = cli.create_runner(cmd)?; runner.async_run(|config| { let PartialComponents { client, task_manager, import_queue, ..} - = service::new_partial(&config)?; + = service::new_partial(&config, &cli)?; Ok((cmd.run(client, import_queue), task_manager)) }) }, @@ -83,7 +83,7 @@ pub fn run() -> sc_cli::Result<()> { let runner = cli.create_runner(cmd)?; runner.async_run(|config| { let PartialComponents { client, task_manager, ..} - = service::new_partial(&config)?; + = service::new_partial(&config, &cli)?; Ok((cmd.run(client, config.database), task_manager)) }) }, @@ -91,7 +91,7 @@ pub fn run() -> sc_cli::Result<()> { let runner = cli.create_runner(cmd)?; runner.async_run(|config| { let PartialComponents { client, task_manager, ..} - = service::new_partial(&config)?; + = service::new_partial(&config, &cli)?; Ok((cmd.run(client, config.chain_spec), task_manager)) }) }, @@ -99,7 +99,7 @@ pub fn run() -> sc_cli::Result<()> { let runner = cli.create_runner(cmd)?; runner.async_run(|config| { let PartialComponents { client, task_manager, import_queue, ..} - = service::new_partial(&config)?; + = service::new_partial(&config, &cli)?; Ok((cmd.run(client, import_queue), task_manager)) }) }, @@ -111,7 +111,7 @@ pub fn run() -> sc_cli::Result<()> { let runner = cli.create_runner(cmd)?; runner.async_run(|config| { let PartialComponents { client, task_manager, backend, ..} - = service::new_partial(&config)?; + = service::new_partial(&config, &cli)?; Ok((cmd.run(client, backend), task_manager)) }) }, @@ -130,7 +130,7 @@ pub fn run() -> sc_cli::Result<()> { runner.run_node_until_exit(|config| async move { match config.role { Role::Light => service::new_light(config), - _ => service::new_full(config), + _ => service::new_full(config, &cli), }.map_err(sc_cli::Error::Service) }) } diff --git a/node/src/lib.rs b/node/src/lib.rs deleted file mode 100644 index 777c4f0a77..0000000000 --- a/node/src/lib.rs +++ /dev/null @@ -1,3 +0,0 @@ -pub mod chain_spec; -pub mod service; -pub mod rpc; diff --git a/node/src/main.rs b/node/src/main.rs index d9e11e72d8..e0e9bce9cb 100644 --- a/node/src/main.rs +++ b/node/src/main.rs @@ -14,5 +14,5 @@ mod command; mod rpc; fn main() -> sc_cli::Result<()> { - command::run() + command::run() } diff --git a/node/src/rpc.rs b/node/src/rpc.rs index eb8ddaa38b..fa776d30d0 100644 --- a/node/src/rpc.rs +++ b/node/src/rpc.rs @@ -3,17 +3,41 @@ //! used by Substrate nodes. This file extends those RPC definitions with //! capabilities that are specific to this project's runtime configuration. -#![warn(missing_docs)] - use std::sync::Arc; +use core::marker::PhantomData; -use nft_runtime::{opaque::Block, AccountId, Balance, Index, BlockNumber}; +use std::collections::BTreeMap; +use fc_rpc::RuntimeApiStorageOverride; +use fc_rpc::OverrideHandle; +use fc_rpc_core::types::{PendingTransactions, FilterPool}; +use nft_runtime::{Hash, AccountId, Index, opaque::Block, BlockNumber, Balance, NftApi}; use sp_api::ProvideRuntimeApi; use sp_blockchain::{Error as BlockChainError, HeaderMetadata, HeaderBackend}; +use sc_client_api::{ + backend::{StorageProvider, Backend, StateBackend, AuxStore}, + client::BlockchainEvents +}; +use sc_rpc::SubscriptionTaskExecutor; +use sp_runtime::traits::BlakeTwo256; use sp_block_builder::BlockBuilder; -pub use sc_rpc_api::DenyUnsafe; +use sc_rpc_api::DenyUnsafe; use sp_transaction_pool::TransactionPool; -use pallet_contracts_rpc::{Contracts, ContractsApi}; +use sc_network::NetworkService; +use jsonrpc_pubsub::manager::SubscriptionManager; +use pallet_ethereum::EthereumStorageSchema; +use fc_rpc::{StorageOverride, SchemaV1Override}; + +/// Light client extra dependencies. +pub struct LightDeps { + /// The client instance to use. + pub client: Arc, + /// Transaction pool instance. + pub pool: Arc

, + /// Remote access to the blockchain (async). + pub remote_blockchain: Arc>, + /// Fetcher instance. + pub fetcher: Arc, +} /// Full client dependencies. pub struct FullDeps { @@ -23,47 +47,203 @@ pub struct FullDeps { pub pool: Arc

, /// Whether to deny unsafe calls pub deny_unsafe: DenyUnsafe, + /// The Node authority flag + pub is_authority: bool, + /// Whether to enable dev signer + pub enable_dev_signer: bool, + /// Network service + pub network: Arc>, + /// Ethereum pending transactions. + pub pending_transactions: PendingTransactions, + /// EthFilterApi pool. + pub filter_pool: Option, + /// Backend. + pub backend: Arc>, + /// Maximum number of logs in a query. + pub max_past_logs: u32, +} + +struct AccountCodes { + client: Arc, + _marker: PhantomData, +} + +impl AccountCodes +where + Block: sp_api::BlockT, + C: ProvideRuntimeApi, +{ + fn new(client: Arc) -> Self { + Self { + client, + _marker: PhantomData, + } + } +} + +impl fc_rpc::AccountCodeProvider for AccountCodes +where + Block: sp_api::BlockT, + C: ProvideRuntimeApi, + C::Api: pallet_nft::NftApi, +{ + fn code(&self, block: &sp_api::BlockId, account: sp_core::H160) -> Option> { + self.client.runtime_api().eth_contract_code(block, account).ok().flatten() + } } /// Instantiate all full RPC extensions. -pub fn create_full( +pub fn create_full( deps: FullDeps, + subscription_task_executor: SubscriptionTaskExecutor ) -> jsonrpc_core::IoHandler where - C: ProvideRuntimeApi, - C: HeaderBackend + HeaderMetadata + 'static, + BE: Backend + 'static, + BE::State: StateBackend, + C: ProvideRuntimeApi + StorageProvider + AuxStore, + C: BlockchainEvents, + C: HeaderBackend + HeaderMetadata, C: Send + Sync + 'static, C::Api: substrate_frame_rpc_system::AccountNonceApi, - C::Api: pallet_transaction_payment_rpc::TransactionPaymentRuntimeApi, C::Api: BlockBuilder, C::Api: pallet_contracts_rpc::ContractsRuntimeApi, - P: TransactionPool + 'static, + C::Api: pallet_transaction_payment_rpc::TransactionPaymentRuntimeApi, + C::Api: fp_rpc::EthereumRuntimeRPCApi, + C::Api: pallet_nft::NftApi, + P: TransactionPool + 'static, { use substrate_frame_rpc_system::{FullSystem, SystemApi}; use pallet_transaction_payment_rpc::{TransactionPayment, TransactionPaymentApi}; + use fc_rpc::{ + EthApi, EthApiServer, EthFilterApi, EthFilterApiServer, NetApi, NetApiServer, + EthPubSubApi, EthPubSubApiServer, Web3Api, Web3ApiServer, EthDevSigner, EthSigner, + HexEncodedIdProvider, + }; let mut io = jsonrpc_core::IoHandler::default(); let FullDeps { client, pool, deny_unsafe, + is_authority, + network, + pending_transactions, + filter_pool, + backend, + enable_dev_signer, + max_past_logs, } = deps; io.extend_with( - SystemApi::to_delegate(FullSystem::new(client.clone(), pool, deny_unsafe)) + SystemApi::to_delegate(FullSystem::new(client.clone(), pool.clone(), deny_unsafe)) ); io.extend_with( TransactionPaymentApi::to_delegate(TransactionPayment::new(client.clone())) ); - io.extend_with( - ContractsApi::to_delegate(Contracts::new(client.clone())) + io.extend_with( + pallet_contracts_rpc::ContractsApi::to_delegate(pallet_contracts_rpc::Contracts::new(client.clone())) + ); + + let mut signers = Vec::new(); + if enable_dev_signer { + signers.push(Box::new(EthDevSigner::new()) as Box); + } + let mut overrides_map = BTreeMap::new(); + overrides_map.insert( + EthereumStorageSchema::V1, + Box::new(SchemaV1Override::new_with_code_provider( + client.clone(), + Arc::new(AccountCodes::::new(client.clone())) + )) as Box + Send + Sync> + ); + + let overrides = Arc::new(OverrideHandle { + schemas: overrides_map, + fallback: Box::new(RuntimeApiStorageOverride::new(client.clone())), + }); + + io.extend_with( + EthApiServer::to_delegate(EthApi::new( + client.clone(), + pool.clone(), + nft_runtime::TransactionConverter, + network.clone(), + pending_transactions.clone(), + signers, + overrides.clone(), + backend, + is_authority, + max_past_logs, + )) + ); + + if let Some(filter_pool) = filter_pool { + io.extend_with( + EthFilterApiServer::to_delegate(EthFilterApi::new( + client.clone(), + filter_pool.clone(), + 500 as usize, // max stored filters + overrides.clone(), + max_past_logs, + )) + ); + } + + io.extend_with( + NetApiServer::to_delegate(NetApi::new( + client.clone(), + network.clone(), + true, + )) + ); + + io.extend_with( + Web3ApiServer::to_delegate(Web3Api::new( + client.clone(), + )) + ); + + io.extend_with( + EthPubSubApiServer::to_delegate(EthPubSubApi::new( + pool.clone(), + client.clone(), + network.clone(), + SubscriptionManager::::with_id_provider( + HexEncodedIdProvider::default(), + Arc::new(subscription_task_executor) + ), + overrides, + )) + ); + + io +} + +/// Instantiate all Light RPC extensions. +pub fn create_light( + deps: LightDeps, +) -> jsonrpc_core::IoHandler where + C: sp_blockchain::HeaderBackend, + C: Send + Sync + 'static, + F: sc_client_api::light::Fetcher + 'static, + P: TransactionPool + 'static, + M: jsonrpc_core::Metadata + Default, +{ + use substrate_frame_rpc_system::{LightSystem, SystemApi}; + + let LightDeps { + client, + pool, + remote_blockchain, + fetcher + } = deps; + let mut io = jsonrpc_core::IoHandler::default(); + io.extend_with( + SystemApi::::to_delegate( + LightSystem::new(client, remote_blockchain, fetcher, pool) + ) ); - - // Extend this RPC with a custom API by using the following syntax. - // `YourRpcStruct` should have a reference to a client, which is needed - // to call into the runtime. - // `io.extend_with(YourRpcTrait::to_delegate(YourRpcStruct::new(ReferenceToClient, ...)));` io } diff --git a/node/src/service.rs b/node/src/service.rs index 05369ee510..4a24e61c1c 100644 --- a/node/src/service.rs +++ b/node/src/service.rs @@ -5,17 +5,26 @@ // file 'LICENSE', which is part of this source code package. // -use std::sync::Arc; -use std::time::Duration; -use sc_client_api::{ExecutorProvider, RemoteBackend}; -use nft_runtime::{self, opaque::Block, RuntimeApi}; -use sc_service::{error::Error as ServiceError, Configuration, TaskManager}; -use sp_inherents::InherentDataProviders; +use std::{sync::{Arc, Mutex}, cell::RefCell, time::Duration, collections::{HashMap, BTreeMap}}; +use fc_rpc::EthTask; +use fc_rpc_core::types::{FilterPool, PendingTransactions}; +use sc_client_api::{ExecutorProvider, RemoteBackend, BlockchainEvents}; +use fc_consensus::FrontierBlockImport; +use fc_mapping_sync::MappingSyncWorker; +use nft_runtime::{self, opaque::Block, RuntimeApi, SLOT_DURATION}; +use sc_service::{error::Error as ServiceError, Configuration, TaskManager, BasePath}; +use sp_inherents::{InherentDataProviders, ProvideInherentData, InherentIdentifier, InherentData}; use sc_executor::native_executor_instance; pub use sc_executor::NativeExecutor; +use sc_consensus_aura::{ImportQueueParams, StartAuraParams, SlotProportion}; use sp_consensus_aura::sr25519::{AuthorityPair as AuraPair}; use sc_finality_grandpa::SharedVoterState; -use sc_keystore::LocalKeystore; +use sp_timestamp::InherentError; +use sc_telemetry::{Telemetry, TelemetryWorker}; +use sc_cli::SubstrateCli; +use futures::StreamExt; + +use crate::cli::Cli; // Our native executor instance. native_executor_instance!( @@ -29,30 +38,96 @@ type FullClient = sc_service::TFullClient; type FullBackend = sc_service::TFullBackend; type FullSelectChain = sc_consensus::LongestChain; -pub fn new_partial(config: &Configuration) -> Result, - sc_transaction_pool::FullPool, - ( - sc_consensus_aura::AuraBlockImport< +pub type ConsensusResult = ( + sc_consensus_aura::AuraBlockImport< + Block, + FullClient, + FrontierBlockImport< Block, - FullClient, sc_finality_grandpa::GrandpaBlockImport, - AuraPair + FullClient >, - sc_finality_grandpa::LinkHalf, - ) ->, ServiceError> { - if config.keystore_remote.is_some() { - return Err(ServiceError::Other( - format!("Remote Keystores are not supported."))) + AuraPair + >, + sc_finality_grandpa::LinkHalf +); + +/// Provide a mock duration starting at 0 in millisecond for timestamp inherent. +/// Each call will increment timestamp by slot_duration making Aura think time has passed. +pub struct MockTimestampInherentDataProvider; + +pub const INHERENT_IDENTIFIER: InherentIdentifier = *b"timstap0"; + +thread_local!(static TIMESTAMP: RefCell = RefCell::new(0)); + +impl ProvideInherentData for MockTimestampInherentDataProvider { + fn inherent_identifier(&self) -> &'static InherentIdentifier { + &INHERENT_IDENTIFIER } + + fn provide_inherent_data( + &self, + inherent_data: &mut InherentData, + ) -> Result<(), sp_inherents::Error> { + TIMESTAMP.with(|x| { + *x.borrow_mut() += SLOT_DURATION; + inherent_data.put_data(INHERENT_IDENTIFIER, &*x.borrow()) + }) + } + + fn error_to_string(&self, error: &[u8]) -> Option { + InherentError::try_from(&INHERENT_IDENTIFIER, error).map(|e| format!("{:?}", e)) + } +} + +pub fn open_frontier_backend(config: &Configuration) -> Result>, String> { + let config_dir = config.base_path.as_ref() + .map(|base_path| base_path.config_dir(config.chain_spec.id())) + .unwrap_or_else(|| { + BasePath::from_project("", "", &crate::cli::Cli::executable_name()) + .config_dir(config.chain_spec.id()) + }); + let database_dir = config_dir.join("frontier").join("db"); + + Ok(Arc::new(fc_db::Backend::::new(&fc_db::DatabaseSettings { + source: fc_db::DatabaseSettingsSrc::RocksDb { + path: database_dir, + cache_size: 0, + } + })?)) +} + +pub fn new_partial(config: &Configuration, #[allow(unused_variables)] cli: &Cli) -> Result< + sc_service::PartialComponents< + FullClient, FullBackend, FullSelectChain, + sp_consensus::import_queue::BasicQueue>, + sc_transaction_pool::FullPool, + (ConsensusResult, PendingTransactions, Option, Arc>, Option), +>, ServiceError> { let inherent_data_providers = sp_inherents::InherentDataProviders::new(); + let telemetry = config.telemetry_endpoints.clone() + .filter(|x| !x.is_empty()) + .map(|endpoints| -> Result<_, sc_telemetry::Error> { + let worker = TelemetryWorker::new(16)?; + let telemetry = worker.handle().new_telemetry(endpoints); + Ok((worker, telemetry)) + }) + .transpose()?; + let (client, backend, keystore_container, task_manager) = - sc_service::new_full_parts::(&config)?; + sc_service::new_full_parts::( + &config, + telemetry.as_ref().map(|(_, telemetry)| telemetry.handle()), + )?; let client = Arc::new(client); + let telemetry = telemetry + .map(|(worker, telemetry)| { + task_manager.spawn_handle().spawn("telemetry", worker.run()); + telemetry + }); + let select_chain = sc_consensus::LongestChain::new(backend.clone()); let transaction_pool = sc_transaction_pool::BasicPool::new_full( @@ -63,64 +138,77 @@ pub fn new_partial(config: &Configuration) -> Result + = Some(Arc::new(Mutex::new(BTreeMap::new()))); + + let frontier_backend = open_frontier_backend(config)?; + let (grandpa_block_import, grandpa_link) = sc_finality_grandpa::block_import( - client.clone(), &(client.clone() as Arc<_>), select_chain.clone(), + client.clone(), + &(client.clone() as Arc<_>), + select_chain.clone(), + telemetry.as_ref().map(|x| x.handle()), )?; + let frontier_block_import = FrontierBlockImport::new( + grandpa_block_import.clone(), + client.clone(), + frontier_backend.clone(), + ); + let aura_block_import = sc_consensus_aura::AuraBlockImport::<_, _, _, AuraPair>::new( - grandpa_block_import.clone(), client.clone(), + frontier_block_import, client.clone(), ); - let import_queue = sc_consensus_aura::import_queue::<_, _, _, AuraPair, _, _>( - sc_consensus_aura::slot_duration(&*client)?, - aura_block_import.clone(), - Some(Box::new(grandpa_block_import.clone())), - client.clone(), - inherent_data_providers.clone(), - &task_manager.spawn_handle(), - config.prometheus_registry(), - sp_consensus::CanAuthorWithNativeVersion::new(client.executor().clone()), + let import_queue = sc_consensus_aura::import_queue::( + ImportQueueParams { + slot_duration: sc_consensus_aura::slot_duration(&*client)?, + block_import: aura_block_import.clone(), + justification_import: Some(Box::new(grandpa_block_import.clone())), + client: client.clone(), + inherent_data_providers: inherent_data_providers.clone(), + spawner: &task_manager.spawn_essential_handle(), + registry: config.prometheus_registry(), + can_author_with: sp_consensus::CanAuthorWithNativeVersion::new(client.executor().clone()), + check_for_equivocation: Default::default(), + telemetry: telemetry.as_ref().map(|x| x.handle()), + } )?; Ok(sc_service::PartialComponents { - client, backend, task_manager, import_queue, keystore_container, select_chain, transaction_pool, - inherent_data_providers, - other: (aura_block_import, grandpa_link), + client, backend, task_manager, import_queue, keystore_container, + select_chain, transaction_pool, inherent_data_providers, + other: ( + (aura_block_import, grandpa_link), + pending_transactions, + filter_pool, + frontier_backend, + telemetry, + ) }) } -fn remote_keystore(_url: &String) -> Result, &'static str> { - // FIXME: here would the concrete keystore be built, - // must return a concrete type (NOT `LocalKeystore`) that - // implements `CryptoStore` and `SyncCryptoStore` - Err("Remote Keystore not supported.") -} - /// Builds a new service for a full client. -pub fn new_full(mut config: Configuration) -> Result { - let sc_service::PartialComponents { - client, backend, mut task_manager, import_queue, mut keystore_container, select_chain, transaction_pool, - inherent_data_providers, - other: (block_import, grandpa_link), - } = new_partial(&config)?; - - if let Some(url) = &config.keystore_remote { - match remote_keystore(url) { - Ok(k) => keystore_container.set_remote_keystore(k), - Err(e) => { - return Err(ServiceError::Other( - format!("Error hooking up remote keystore for {}: {}", url, e))) - } - }; - } +pub fn new_full( + config: Configuration, + cli: &Cli, +) -> Result { + let enable_dev_signer = cli.run.shared_params.dev; - config.network.extra_sets.push(sc_finality_grandpa::grandpa_peers_set_config()); + let sc_service::PartialComponents { + client, backend, mut task_manager, import_queue, keystore_container, + select_chain, transaction_pool, inherent_data_providers, + other: (consensus_result, pending_transactions, filter_pool, frontier_backend, mut telemetry), + } = new_partial(&config, cli)?; let (network, network_status_sinks, system_rpc_tx, network_starter) = sc_service::build_network(sc_service::BuildNetworkParams { config: &config, - client: client.clone(), - transaction_pool: transaction_pool.clone(), + client: Arc::clone(&client), + transaction_pool: Arc::clone(&transaction_pool), spawn_handle: task_manager.spawn_handle(), import_queue, on_demand: None, @@ -129,7 +217,7 @@ pub fn new_full(mut config: Configuration) -> Result if config.offchain_worker.enabled { sc_service::build_offchain_workers( - &config, backend.clone(), task_manager.spawn_handle(), client.clone(), network.clone(), + &config, task_manager.spawn_handle(), Arc::clone(&client), network.clone(), ); } @@ -139,121 +227,194 @@ pub fn new_full(mut config: Configuration) -> Result let name = config.network.node_name.clone(); let enable_grandpa = !config.disable_grandpa; let prometheus_registry = config.prometheus_registry().cloned(); + let is_authority = role.is_authority(); + let subscription_task_executor = sc_rpc::SubscriptionTaskExecutor::new(task_manager.spawn_handle()); let rpc_extensions_builder = { - let client = client.clone(); - let pool = transaction_pool.clone(); + let client = Arc::clone(&client); + let pool = Arc::clone(&transaction_pool); + let network = network.clone(); + let pending = pending_transactions.clone(); + let filter_pool = filter_pool.clone(); + let frontier_backend = frontier_backend.clone(); + // TODO: Tune + let max_past_logs = 10000; Box::new(move |deny_unsafe, _| { let deps = crate::rpc::FullDeps { - client: client.clone(), - pool: pool.clone(), + client: Arc::clone(&client), + pool: Arc::clone(&pool), deny_unsafe, + is_authority, + enable_dev_signer, + network: network.clone(), + pending_transactions: pending.clone(), + filter_pool: filter_pool.clone(), + backend: frontier_backend.clone(), + max_past_logs, }; - - crate::rpc::create_full(deps) + crate::rpc::create_full( + deps, + subscription_task_executor.clone() + ) }) }; - let (_rpc_handlers, telemetry_connection_notifier) = sc_service::spawn_tasks( - sc_service::SpawnTasksParams { - network: network.clone(), - client: client.clone(), - keystore: keystore_container.sync_keystore(), - task_manager: &mut task_manager, - transaction_pool: transaction_pool.clone(), - rpc_extensions_builder, - on_demand: None, - remote_blockchain: None, - backend, - network_status_sinks, - system_rpc_tx, - config, - }, - )?; + task_manager.spawn_essential_handle().spawn( + "frontier-mapping-sync-worker", + MappingSyncWorker::new( + client.import_notification_stream(), + Duration::new(6, 0), + Arc::clone(&client), + Arc::clone(&backend), + frontier_backend.clone(), + ).for_each(|()| futures::future::ready(())) + ); + + let _rpc_handlers = sc_service::spawn_tasks(sc_service::SpawnTasksParams { + network: network.clone(), + client: Arc::clone(&client), + keystore: keystore_container.sync_keystore(), + task_manager: &mut task_manager, + transaction_pool: Arc::clone(&transaction_pool), + rpc_extensions_builder: rpc_extensions_builder, + on_demand: None, + remote_blockchain: None, + backend, network_status_sinks, system_rpc_tx, config, telemetry: telemetry.as_mut(), + })?; + + // Spawn Frontier EthFilterApi maintenance task. + if let Some(filter_pool) = filter_pool { + // Each filter is allowed to stay in the pool for 100 blocks. + const FILTER_RETAIN_THRESHOLD: u64 = 100; + task_manager.spawn_essential_handle().spawn( + "frontier-filter-pool", + EthTask::filter_pool_task( + Arc::clone(&client), + filter_pool, + FILTER_RETAIN_THRESHOLD, + ) + ); + } + + // Spawn Frontier pending transactions maintenance task (as essential, otherwise we leak). + if let Some(pending_transactions) = pending_transactions { + const TRANSACTION_RETAIN_THRESHOLD: u64 = 5; + task_manager.spawn_essential_handle().spawn( + "frontier-pending-transactions", + EthTask::pending_transaction_task( + Arc::clone(&client), + pending_transactions, + TRANSACTION_RETAIN_THRESHOLD, + ) + ); + } + + let (aura_block_import, grandpa_link) = consensus_result; if role.is_authority() { let proposer = sc_basic_authorship::ProposerFactory::new( task_manager.spawn_handle(), - client.clone(), - transaction_pool, + Arc::clone(&client), + Arc::clone(&transaction_pool), prometheus_registry.as_ref(), + telemetry.as_ref().map(|x| x.handle()), ); let can_author_with = sp_consensus::CanAuthorWithNativeVersion::new(client.executor().clone()); - - let aura = sc_consensus_aura::start_aura::<_, _, _, _, _, AuraPair, _, _, _, _>( - sc_consensus_aura::slot_duration(&*client)?, - client.clone(), - select_chain, - block_import, - proposer, - network.clone(), - inherent_data_providers.clone(), - force_authoring, - backoff_authoring_blocks, - keystore_container.sync_keystore(), - can_author_with, + let aura = sc_consensus_aura::start_aura::( + StartAuraParams { + slot_duration: sc_consensus_aura::slot_duration(&*client)?, + client: Arc::clone(&client), + select_chain, + block_import: aura_block_import, + proposer_factory: proposer, + sync_oracle: network.clone(), + inherent_data_providers: inherent_data_providers.clone(), + force_authoring, + backoff_authoring_blocks, + keystore: keystore_container.sync_keystore(), + can_author_with, + block_proposal_slot_portion: SlotProportion::new(2f32 / 3f32), + telemetry: telemetry.as_ref().map(|x| x.handle()), + } )?; // the AURA authoring task is considered essential, i.e. if it // fails we take down the service with it. task_manager.spawn_essential_handle().spawn_blocking("aura", aura); - } - // if the node isn't actively participating in consensus then it doesn't - // need a keystore, regardless of which protocol we use below. - let keystore = if role.is_authority() { - Some(keystore_container.sync_keystore()) - } else { - None - }; - - let grandpa_config = sc_finality_grandpa::Config { - // FIXME #1578 make this available through chainspec - gossip_duration: Duration::from_millis(333), - justification_period: 512, - name: Some(name), - observer_enabled: false, - keystore, - is_authority: role.is_network_authority(), - }; + // if the node isn't actively participating in consensus then it doesn't + // need a keystore, regardless of which protocol we use below. + let keystore = if role.is_authority() { + Some(keystore_container.sync_keystore()) + } else { + None + }; - if enable_grandpa { - // start the full GRANDPA voter - // NOTE: non-authorities could run the GRANDPA observer protocol, but at - // this point the full voter should provide better guarantees of block - // and vote data availability than the observer. The observer has not - // been tested extensively yet and having most nodes in a network run it - // could lead to finality stalls. - let grandpa_config = sc_finality_grandpa::GrandpaParams { - config: grandpa_config, - link: grandpa_link, - network, - telemetry_on_connect: telemetry_connection_notifier.map(|x| x.on_connect_stream()), - voting_rule: sc_finality_grandpa::VotingRulesBuilder::default().build(), - prometheus_registry, - shared_voter_state: SharedVoterState::empty(), + let grandpa_config = sc_finality_grandpa::Config { + // FIXME #1578 make this available through chainspec + gossip_duration: Duration::from_millis(333), + justification_period: 512, + name: Some(name), + observer_enabled: false, + keystore, + is_authority: role.is_authority(), + telemetry: telemetry.as_ref().map(|x| x.handle()), }; - // the GRANDPA voter task is considered infallible, i.e. - // if it fails we take down the service with it. - task_manager.spawn_essential_handle().spawn_blocking( - "grandpa-voter", - sc_finality_grandpa::run_grandpa_voter(grandpa_config)? - ); + if enable_grandpa { + // start the full GRANDPA voter + // NOTE: non-authorities could run the GRANDPA observer protocol, but at + // this point the full voter should provide better guarantees of block + // and vote data availability than the observer. The observer has not + // been tested extensively yet and having most nodes in a network run it + // could lead to finality stalls. + let grandpa_config = sc_finality_grandpa::GrandpaParams { + config: grandpa_config, + link: grandpa_link, + network, + telemetry: telemetry.as_ref().map(|x| x.handle()), + voting_rule: sc_finality_grandpa::VotingRulesBuilder::default().build(), + prometheus_registry, + shared_voter_state: SharedVoterState::empty(), + }; + + // the GRANDPA voter task is considered infallible, i.e. + // if it fails we take down the service with it. + task_manager.spawn_essential_handle().spawn_blocking( + "grandpa-voter", + sc_finality_grandpa::run_grandpa_voter(grandpa_config)? + ); + } } network_starter.start_network(); Ok(task_manager) } /// Builds a new service for a light client. -pub fn new_light(mut config: Configuration) -> Result { +pub fn new_light(config: Configuration) -> Result { + let telemetry = config.telemetry_endpoints.clone() + .filter(|x| !x.is_empty()) + .map(|endpoints| -> Result<_, sc_telemetry::Error> { + let worker = TelemetryWorker::new(16)?; + let telemetry = worker.handle().new_telemetry(endpoints); + Ok((worker, telemetry)) + }) + .transpose()?; + let (client, backend, keystore_container, mut task_manager, on_demand) = - sc_service::new_light_parts::(&config)?; + sc_service::new_light_parts::( + &config, + telemetry.as_ref().map(|(_, telemetry)| telemetry.handle()), + )?; - config.network.extra_sets.push(sc_finality_grandpa::grandpa_peers_set_config()); + let mut telemetry = telemetry + .map(|(worker, telemetry)| { + task_manager.spawn_handle().spawn("telemetry", worker.run()); + telemetry + }); let select_chain = sc_consensus::LongestChain::new(backend.clone()); @@ -269,24 +430,33 @@ pub fn new_light(mut config: Configuration) -> Result client.clone(), &(client.clone() as Arc<_>), select_chain.clone(), + telemetry.as_ref().map(|x| x.handle()), )?; - let aura_block_import = sc_consensus_aura::AuraBlockImport::<_, _, _, AuraPair>::new( - grandpa_block_import.clone(), - client.clone(), - ); - - let import_queue = sc_consensus_aura::import_queue::<_, _, _, AuraPair, _, _>( - sc_consensus_aura::slot_duration(&*client)?, - aura_block_import, - Some(Box::new(grandpa_block_import)), - client.clone(), - InherentDataProviders::new(), - &task_manager.spawn_handle(), - config.prometheus_registry(), - sp_consensus::NeverCanAuthor, + let import_queue = sc_consensus_aura::import_queue::( + ImportQueueParams { + slot_duration: sc_consensus_aura::slot_duration(&*client)?, + block_import: grandpa_block_import.clone(), + justification_import: Some(Box::new(grandpa_block_import)), + client: client.clone(), + inherent_data_providers: InherentDataProviders::new(), + spawner: &task_manager.spawn_essential_handle(), + registry: config.prometheus_registry(), + can_author_with: sp_consensus::NeverCanAuthor, + check_for_equivocation: Default::default(), + telemetry: telemetry.as_ref().map(|x| x.handle()), + } )?; + let light_deps = crate::rpc::LightDeps { + remote_blockchain: backend.remote_blockchain(), + fetcher: on_demand.clone(), + client: client.clone(), + pool: transaction_pool.clone(), + }; + + let rpc_extensions = crate::rpc::create_light(light_deps); + let (network, network_status_sinks, system_rpc_tx, network_starter) = sc_service::build_network(sc_service::BuildNetworkParams { config: &config, @@ -300,7 +470,7 @@ pub fn new_light(mut config: Configuration) -> Result if config.offchain_worker.enabled { sc_service::build_offchain_workers( - &config, backend.clone(), task_manager.spawn_handle(), client.clone(), network.clone(), + &config, task_manager.spawn_handle(), client.clone(), network.clone(), ); } @@ -309,7 +479,7 @@ pub fn new_light(mut config: Configuration) -> Result transaction_pool, task_manager: &mut task_manager, on_demand: Some(on_demand), - rpc_extensions_builder: Box::new(|_, _| ()), + rpc_extensions_builder: Box::new(sc_service::NoopRpcExtensionBuilder(rpc_extensions)), config, client, keystore: keystore_container.sync_keystore(), @@ -317,6 +487,7 @@ pub fn new_light(mut config: Configuration) -> Result network, network_status_sinks, system_rpc_tx, + telemetry: telemetry.as_mut(), })?; network_starter.start_network(); diff --git a/pallets/inflation/Cargo.toml b/pallets/inflation/Cargo.toml index 1c053b5bdd..9ec5f288d4 100644 --- a/pallets/inflation/Cargo.toml +++ b/pallets/inflation/Cargo.toml @@ -19,17 +19,17 @@ package = 'parity-scale-codec' version = '2.0.0' [dependencies] -serde = { version = "1.0.119" } -frame-support = { default-features = false, version = '3.0.0' } -frame-system = { default-features = false, version = '3.0.0' } -pallet-balances = { default-features = false, version = '3.0.0' } -pallet-timestamp = { default-features = false, version = '3.0.0' } -pallet-randomness-collective-flip = { default-features = false, version = '3.0.0' } -sp-std = { default-features = false, version = '3.0.0' } -frame-benchmarking = { default-features = false, version = "3.0.0", optional = true } -sp-core = { default-features = false, version = '3.0.0' } -sp-io = { default-features = false, version = '3.0.0' } -sp-runtime = { default-features = false, version = '3.0.0' } +serde = { default-features = false, version = "1.0.119", features = ["derive"] } +frame-support = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +frame-system = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +pallet-balances = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +pallet-timestamp = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +pallet-randomness-collective-flip = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-std = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +frame-benchmarking = { default-features = false, version = "3.0.0", optional = true, git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-core = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-io = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-runtime = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } [features] default = ['std'] diff --git a/pallets/inflation/src/lib.rs b/pallets/inflation/src/lib.rs index 80dbeedbeb..164bac8b04 100644 --- a/pallets/inflation/src/lib.rs +++ b/pallets/inflation/src/lib.rs @@ -10,8 +10,7 @@ #[cfg(feature = "std")] pub use std::*; -#[cfg(feature = "std")] -pub use serde::*; +pub use serde::{Serialize, Deserialize}; #[cfg(feature = "runtime-benchmarks")] mod benchmarking; diff --git a/pallets/nft/Cargo.toml b/pallets/nft/Cargo.toml index 0db757b7fc..058d0b3fac 100644 --- a/pallets/nft/Cargo.toml +++ b/pallets/nft/Cargo.toml @@ -19,19 +19,32 @@ package = 'parity-scale-codec' version = '2.0.0' [dependencies] -serde = { version = "1.0.119" } -frame-support = { default-features = false, version = '3.0.0' } -frame-system = { default-features = false, version = '3.0.0' } -pallet-balances = { default-features = false, version = '3.0.0' } -pallet-timestamp = { default-features = false, version = '3.0.0' } -pallet-randomness-collective-flip = { default-features = false, version = '3.0.0' } -sp-std = { default-features = false, version = '3.0.0' } -frame-benchmarking = { default-features = false, version = '3.0.0', optional = true } -sp-core = { default-features = false, version = '3.0.0' } -sp-io = { default-features = false, version = '3.0.0' } -sp-runtime = { default-features = false, version = '3.0.0' } -pallet-contracts = { default-features = false, version = '3.0.0' } -pallet-transaction-payment = { default-features = false, version = "3.0.0" } +serde = { default-features = false, version = "1.0.119", features = ["derive"] } +frame-support = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +frame-system = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +pallet-balances = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +pallet-evm = { default-features = false, version = "4.0.0-dev", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions" } +pallet-ethereum = { default-features = false, version = "2.0.0-dev", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions" } +pallet-timestamp = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +pallet-randomness-collective-flip = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-std = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +frame-benchmarking = { default-features = false, version = '3.0.0', optional = true, git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +fp-evm = { default-features = false, version = '2.0.0', git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions" } +sp-core = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-io = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-api = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-runtime = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +pallet-contracts = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +pallet-transaction-payment = { default-features = false, version = "3.0.0", git = "https://github.com/paritytech/substrate.git", branch = "frontier" } + +ethereum-tx-sign = { version = "3.0.4", optional = true } +ethereum = { default-features = false, version = "0.7.1" } +rlp = { default-features = false, version = "0.5.0" } + +evm-coder = { default-features = false, path = "../../crates/evm-coder" } +primitive-types = { version = "0.9.0", default-features = false, features = ["serde_no_std"] } + +hex-literal = "0.3.1" [features] default = ['std'] @@ -41,12 +54,20 @@ std = [ 'frame-support/std', 'frame-system/std', 'pallet-balances/std', + 'pallet-evm/std', 'pallet-timestamp/std', 'pallet-contracts/std', 'pallet-randomness-collective-flip/std', 'pallet-transaction-payment/std', + 'fp-evm/std', 'sp-std/std', 'sp-runtime/std', 'frame-benchmarking/std', + 'ethereum/std', + 'rlp/std', + + 'ethereum-tx-sign', + 'primitive-types/std', + 'evm-coder/std', ] runtime-benchmarks = ["frame-benchmarking"] diff --git a/pallets/nft/src/eth/account.rs b/pallets/nft/src/eth/account.rs new file mode 100644 index 0000000000..9b26fafd52 --- /dev/null +++ b/pallets/nft/src/eth/account.rs @@ -0,0 +1,135 @@ +use crate::Config; +use codec::{Encode, EncodeLike, Decode}; +use sp_core::crypto::AccountId32; +use primitive_types::H160; +use core::cmp::Ordering; +use serde::{Serialize, Deserialize}; +use pallet_evm::AddressMapping; +use sp_std::vec::Vec; +use sp_std::clone::Clone; + +pub trait CrossAccountId: + Encode + EncodeLike + Decode + + Clone + PartialEq + Ord + core::fmt::Debug // + + // Serialize + Deserialize<'static> +{ + fn as_sub(&self) -> &AccountId; + fn as_eth(&self) -> &H160; + + fn from_sub(account: AccountId) -> Self; + fn from_eth(account: H160) -> Self; +} + +#[derive(Eq)] +#[derive(Serialize, Deserialize)] +pub struct BasicCrossAccountId { + /// If true - then ethereum is canonical encoding + from_ethereum: bool, + substrate: T::AccountId, + ethereum: H160, +} + +impl core::fmt::Debug for BasicCrossAccountId { + fn fmt(&self, fmt: &mut core::fmt::Formatter) -> core::fmt::Result { + if self.from_ethereum { + fmt.debug_tuple("CrossAccountId::Ethereum") + .field(&self.ethereum) + .finish() + } else { + fmt.debug_tuple("CrossAccountId::Substrate") + .field(&self.substrate) + .finish() + } + } +} + +impl PartialOrd for BasicCrossAccountId { + fn partial_cmp(&self, other: &Self) -> Option { + Some(self.substrate.cmp(&other.substrate)) + } +} + +impl Ord for BasicCrossAccountId { + fn cmp(&self, other: &Self) -> Ordering { + self.partial_cmp(other).expect("substrate account is total ordered") + } +} + +impl PartialEq for BasicCrossAccountId { + fn eq(&self, other: &Self) -> bool { + if self.from_ethereum == other.from_ethereum { + self.substrate == other.substrate && self.ethereum == other.ethereum + } else if self.from_ethereum { + // ethereum is canonical encoding, but we need to compare derived address + self.substrate == other.substrate + } else { + self.ethereum == other.ethereum + } + } +} +impl Clone for BasicCrossAccountId { + fn clone(&self) -> Self { + Self { + from_ethereum: self.from_ethereum, + substrate: self.substrate.clone(), + ethereum: self.ethereum, + } + } +} +impl Encode for BasicCrossAccountId { + fn encode(&self) -> Vec { + let as_result = if !self.from_ethereum { + Ok(self.substrate.clone()) + } else { + Err(self.ethereum) + }; + as_result.encode() + } +} +impl EncodeLike for BasicCrossAccountId {} +impl Decode for BasicCrossAccountId { + fn decode(input: &mut I) -> Result + where I: codec::Input + { + Ok(match >::decode(input)? { + Ok(s) => Self::from_sub(s), + Err(e) => Self::from_eth(e), + }) + } +} +impl CrossAccountId for BasicCrossAccountId { + fn as_sub(&self) -> &T::AccountId { + &self.substrate + } + fn as_eth(&self) -> &H160 { + &self.ethereum + } + fn from_sub(substrate: T::AccountId) -> Self { + Self { + ethereum: T::EvmBackwardsAddressMapping::from_account_id(substrate.clone()), + substrate, + from_ethereum: false, + } + } + fn from_eth(ethereum: H160) -> Self { + Self { + ethereum, + substrate: T::EvmAddressMapping::into_account_id(ethereum), + from_ethereum: true, + } + } +} + +pub trait EvmBackwardsAddressMapping { + fn from_account_id(account_id: AccountId) -> H160; +} + +/// Should have same mapping as EnsureAddressTruncated +pub struct MapBackwardsAddressTruncated; +impl EvmBackwardsAddressMapping for MapBackwardsAddressTruncated { + fn from_account_id(account_id: AccountId32) -> H160 { + let mut out = [0; 20]; + out.copy_from_slice(&(account_id.as_ref() as &[u8])[0..20]); + H160(out) + } +} \ No newline at end of file diff --git a/pallets/nft/src/eth/erc.rs b/pallets/nft/src/eth/erc.rs new file mode 100644 index 0000000000..8fc2c8477a --- /dev/null +++ b/pallets/nft/src/eth/erc.rs @@ -0,0 +1,134 @@ +use evm_coder::{solidity_interface, solidity, types::*, ToLog}; +use sp_std::vec::Vec; + +#[solidity_interface] +pub trait InlineNameSymbol { + type Error; + + fn name(&self) -> Result; + fn symbol(&self) -> Result; +} + +#[solidity_interface] +pub trait InlineTotalSupply { + type Error; + + fn total_supply(&self) -> Result; +} + +#[solidity_interface] +pub trait ERC165 { + type Error; + + fn supports_interface(&self, interface_id: bytes4) -> Result; +} + +#[solidity_interface(inline_is(InlineNameSymbol))] +pub trait ERC721Metadata { + type Error; + + #[solidity(rename_selector = "tokenURI")] + fn token_uri(&self, token_id: uint256) -> Result; +} + +#[solidity_interface(inline_is(InlineTotalSupply))] +pub trait ERC721Enumerable { + type Error; + + fn token_by_index(&self, index: uint256) -> Result; + fn token_of_owner_by_index(&self, owner: address, index: uint256) -> Result; +} + + +#[derive(ToLog)] +pub enum ERC721Events { + Transfer { + #[indexed] from: address, + #[indexed] to: address, + #[indexed] token_id: uint256, + }, + Approval { + #[indexed] owner: address, + #[indexed] approved: address, + #[indexed] token_id: uint256, + }, + #[allow(dead_code)] + ApprovalForAll { + #[indexed] owner: address, + #[indexed] operator: address, + approved: bool, + } +} + +#[solidity_interface(is(ERC165), events(ERC721Events))] +pub trait ERC721 { + type Error; + + fn balance_of(&self, owner: address) -> Result; + fn owner_of(&self, token_id: uint256) -> Result; + + #[solidity(rename_selector = "safeTransferFrom")] + fn safe_transfer_from_with_data(&mut self, from: address, to: address, token_id: uint256, data: bytes, value: value) -> Result; + fn safe_transfer_from(&mut self, from: address, to: address, token_id: uint256, value: value) -> Result; + + fn transfer_from(&mut self, caller: caller, from: address, to: address, token_id: uint256, value: value) -> Result; + fn approve(&mut self, caller: caller, approved: address, token_id: uint256, value: value) -> Result; + fn set_approval_for_all(&mut self, caller: caller, operator: address, approved: bool) -> Result; + + fn get_approved(&self, token_id: uint256) -> Result; + fn is_approved_for_all(&self, owner: address, operator: address) -> Result; +} + +#[solidity_interface] +pub trait ERC721UniqueExtensions { + type Error; + + fn transfer(&mut self, caller: caller, to: address, token_id: uint256, value: value) -> Result; +} + +#[solidity_interface(is(ERC165, ERC721, ERC721Metadata, ERC721Enumerable, ERC721UniqueExtensions))] +pub trait UniqueNFT { + type Error; +} + +#[derive(ToLog)] +pub enum ERC20Events { + Transfer { + #[indexed] from: address, + #[indexed] to: address, + value: uint256, + }, + Approval { + #[indexed] owner: address, + #[indexed] spender: address, + value: uint256, + } +} + +#[solidity_interface(inline_is(InlineNameSymbol, InlineTotalSupply), events(ERC20Events))] +pub trait ERC20 { + type Error; + + fn decimals(&self) -> Result; + fn balance_of(&self, owner: address) -> Result; + fn transfer(&mut self, caller: caller, to: address, value: uint256) -> Result; + fn transfer_from(&mut self, caller: caller, from: address, to: address, value: uint256) -> Result; + fn approve(&mut self, caller: caller, spender: address, value: uint256) -> Result; + fn allowance(&self, owner: address, spender: address) -> Result; +} + +#[solidity_interface(is(ERC165, ERC20))] +pub trait UniqueFungible { + type Error; +} + +/// Runtime metadata like helpers for evm +#[solidity_interface] +trait UniqueHelpers { + type Error; + + /// Returns interface for NFT collections + fn nft_interface(&self) -> Result; + /// Returns interface for Fungible collections + fn fungible_interface(&self) -> Result; +} \ No newline at end of file diff --git a/pallets/nft/src/eth/erc_impl.rs b/pallets/nft/src/eth/erc_impl.rs new file mode 100644 index 0000000000..fc6c3527ca --- /dev/null +++ b/pallets/nft/src/eth/erc_impl.rs @@ -0,0 +1,283 @@ +use core::char::{decode_utf16, REPLACEMENT_CHARACTER}; +use evm_coder::{ + abi::{AbiWriter, StringError}, + types::*, +}; +use core::convert::TryInto; +use alloc::format; +use crate::{Allowances, Module, Balance, CollectionHandle, CollectionMode, Config, NftItemList}; +use frame_support::storage::StorageDoubleMap; +use pallet_evm::AddressMapping; +use super::erc::*; +use super::account::CrossAccountId; + +type Result = core::result::Result; + +impl InlineNameSymbol for CollectionHandle { + type Error = StringError; + + fn name(&self) -> Result { + Ok(decode_utf16(self.name.iter().copied()) + .map(|r| r.unwrap_or(REPLACEMENT_CHARACTER)) + .collect::()) + } + + fn symbol(&self) -> Result { + Ok(string::from_utf8_lossy(&self.token_prefix).into()) + } +} + +impl InlineTotalSupply for CollectionHandle { + type Error = StringError; + + fn total_supply(&self) -> Result { + // TODO: we do not track total amount of all tokens + Ok(0.into()) + } +} + +impl ERC721Metadata for CollectionHandle { + type Error = StringError; + + fn token_uri(&self, token_id: uint256) -> Result { + // TODO: We should standartize url prefix, maybe via offchain schema? + Ok(format!("unique.network/{}/{}", self.id, token_id)) + } + + fn call_inline_name_symbol(&mut self, c: Msg) -> Result { + ::call(self, c) + } +} + +impl ERC721Enumerable for CollectionHandle { + type Error = StringError; + + fn token_by_index(&self, index: uint256) -> Result { + Ok(index) + } + + fn token_of_owner_by_index(&self, owner: address, index: uint256) -> Result { + // TODO: Not implemetable + Err("not implemented".into()) + } + + fn call_inline_total_supply(&mut self, c: Msg) -> Result { + ::call(self, c) + } +} + +impl ERC721 for CollectionHandle { + type Error = StringError; + + fn balance_of(&self, owner: address) -> Result { + let owner = T::EvmAddressMapping::into_account_id(owner); + let balance = >::get(self.id, owner); + Ok(balance.into()) + } + fn owner_of(&self, token_id: uint256) -> Result

{ + let token_id: u32 = token_id.try_into().map_err(|_| "token id overflow")?; + let token = >::get(self.id, token_id).ok_or("unknown token")?; + Ok(token.owner.as_eth().clone()) + } + fn safe_transfer_from_with_data( + &mut self, + _from: address, + _to: address, + _token_id: uint256, + _data: bytes, + _value: value, + ) -> Result { + // TODO: Not implemetable + Err("not implemented".into()) + } + fn safe_transfer_from( + &mut self, + _from: address, + _to: address, + _token_id: uint256, + _value: value, + ) -> Result { + // TODO: Not implemetable + Err("not implemented".into()) + } + + fn transfer_from( + &mut self, + caller: caller, + from: address, + to: address, + token_id: uint256, + _value: value, + ) -> Result { + let caller = T::CrossAccountId::from_eth(caller); + let from = T::CrossAccountId::from_eth(from); + let to = T::CrossAccountId::from_eth(to); + let token_id = token_id.try_into().map_err(|_| "token_id overflow")?; + + >::transfer_from_internal(&caller, &from, &to, &self, token_id, 1) + .map_err(|_| "transferFrom error")?; + Ok(()) + } + + fn approve( + &mut self, + caller: caller, + approved: address, + token_id: uint256, + _value: value, + ) -> Result { + let caller = T::CrossAccountId::from_eth(caller); + let approved = T::CrossAccountId::from_eth(approved); + let token_id = token_id.try_into().map_err(|_| "token_id overflow")?; + + >::approve_internal(&caller, &approved, &self, token_id, 1) + .map_err(|_| "approve internal")?; + Ok(()) + } + + fn set_approval_for_all( + &mut self, + _caller: caller, + _operator: address, + _approved: bool, + ) -> Result { + // TODO: Not implemetable + Err("not implemented".into()) + } + + fn get_approved(&self, _token_id: uint256) -> Result
{ + // TODO: Not implemetable + Err("not implemented".into()) + } + + fn is_approved_for_all(&self, _owner: address, _operator: address) -> Result
{ + // TODO: Not implemetable + Err("not implemented".into()) + } + + fn call_erc165(&mut self, c: Msg) -> Result { + let ERC165Call::SupportsInterface { interface_id } = c.call; + Ok(evm_coder::abi_encode!(bool( + &ERC721Call::supports_interface(interface_id) + ))) + } +} + +impl ERC721UniqueExtensions for CollectionHandle { + type Error = StringError; + fn transfer( + &mut self, + caller: caller, + to: address, + token_id: uint256, + value: value, + ) -> Result { + let caller = T::CrossAccountId::from_eth(caller); + let to = T::CrossAccountId::from_eth(to); + let token_id = token_id.try_into().map_err(|_| "amount overflow")?; + + >::transfer_internal(&caller, &to, &self, token_id, 1) + .map_err(|_| "transfer error")?; + Ok(()) + } +} + +impl UniqueNFT for CollectionHandle { + type Error = StringError; + fn call_erc165(&mut self, c: Msg) -> Result { + let ERC165Call::SupportsInterface { interface_id } = c.call; + Ok(evm_coder::abi_encode!(bool( + &UniqueNFTCall::supports_interface(interface_id) + ))) + } + fn call_erc721(&mut self, c: Msg) -> Result { + ::call(self, c) + } + fn call_erc721_metadata(&mut self, c: Msg) -> Result { + ::call(self, c) + } + fn call_erc721_enumerable(&mut self, c: Msg) -> Result { + ::call(self, c) + } + fn call_erc721_unique_extensions( + &mut self, + c: Msg, + ) -> Result { + ::call(self, c) + } +} + +impl ERC20 for CollectionHandle { + type Error = StringError; + fn decimals(&self) -> Result { + Ok(if let CollectionMode::Fungible(decimals) = &self.mode { + *decimals + } else { + unreachable!() + }) + } + fn balance_of(&self, owner: address) -> Result { + let owner = T::EvmAddressMapping::into_account_id(owner); + let balance = >::get(self.id, owner); + Ok(balance.into()) + } + fn transfer(&mut self, caller: caller, to: address, amount: uint256) -> Result { + let caller = T::CrossAccountId::from_eth(caller); + let to = T::CrossAccountId::from_eth(to); + let amount = amount.try_into().map_err(|_| "amount overflow")?; + + >::transfer_internal(&caller, &to, &self, 1, amount) + .map_err(|_| "transfer error")?; + Ok(true) + } + fn transfer_from( + &mut self, + caller: caller, + from: address, + to: address, + amount: uint256, + ) -> Result { + let caller = T::CrossAccountId::from_eth(caller); + let from = T::CrossAccountId::from_eth(from); + let to = T::CrossAccountId::from_eth(to); + let amount = amount.try_into().map_err(|_| "amount overflow")?; + + >::transfer_from_internal(&caller, &from, &to, &self, 1, amount) + .map_err(|_| "transferFrom error")?; + Ok(true) + } + fn approve(&mut self, caller: caller, spender: address, amount: uint256) -> Result { + let caller = T::CrossAccountId::from_eth(caller); + let spender = T::CrossAccountId::from_eth(spender); + let amount = amount.try_into().map_err(|_| "amount overflow")?; + + >::approve_internal(&caller, &spender, &self, 1, amount) + .map_err(|_| "approve internal")?; + Ok(true) + } + fn allowance(&self, owner: address, spender: address) -> Result { + let owner = T::CrossAccountId::from_eth(owner); + let spender = T::CrossAccountId::from_eth(spender); + + Ok(>::get(self.id, (1, owner.as_sub(), spender.as_sub())).into()) + } + fn call_inline_name_symbol(&mut self, c: Msg) -> Result { + ::call(self, c) + } + fn call_inline_total_supply(&mut self, c: Msg) -> Result { + ::call(self, c) + } +} + +impl UniqueFungible for CollectionHandle { + type Error = StringError; + fn call_erc165(&mut self, c: Msg) -> Result { + let ERC165Call::SupportsInterface { interface_id } = c.call; + Ok(evm_coder::abi_encode!(bool( + &UniqueNFTCall::supports_interface(interface_id) + ))) + } + fn call_erc20(&mut self, c: Msg) -> Result { + ::call(self, c) + } +} diff --git a/pallets/nft/src/eth/log.rs b/pallets/nft/src/eth/log.rs new file mode 100644 index 0000000000..ccab25ab77 --- /dev/null +++ b/pallets/nft/src/eth/log.rs @@ -0,0 +1,19 @@ +use sp_std::cell::RefCell; +use sp_std::vec::Vec; +use sp_core::{H160, H256}; +use ethereum::Log; + +#[derive(Default)] +pub struct LogRecorder(RefCell>); + +impl LogRecorder { + pub fn is_empty(&self) -> bool { + self.0.borrow().is_empty() + } + pub fn log(&self, log: Log) { + self.0.borrow_mut().push(log); + } + pub fn retrieve_logs(self) -> Vec { + self.0.into_inner() + } +} diff --git a/pallets/nft/src/eth/mod.rs b/pallets/nft/src/eth/mod.rs new file mode 100644 index 0000000000..04049ae345 --- /dev/null +++ b/pallets/nft/src/eth/mod.rs @@ -0,0 +1,188 @@ +pub mod account; +pub mod erc; +mod erc_impl; +pub mod log; +pub mod sponsoring; + +use evm_coder::abi::AbiWriter; +use evm_coder::abi::StringError; +use sp_std::prelude::*; +use sp_std::borrow::ToOwned; +use sp_std::vec::Vec; + +use pallet_evm::{PrecompileOutput, ExitReason, ExitRevert, ExitSucceed}; +use sp_core::{H160, U256}; +use frame_support::storage::StorageMap; + +use crate::{Config, CollectionById, CollectionHandle, CollectionId, CollectionMode}; + +use erc::{UniqueFungible, UniqueFungibleCall, UniqueNFT, UniqueNFTCall}; +use evm_coder::{types::*, abi::AbiReader}; + +pub struct NftErcSupport(core::marker::PhantomData); + +// 0x17c4e6453Cc49AAAaEACA894e6D9683e00000001 - collection +// TODO: Unhardcode prefix +const ETH_ACCOUNT_PREFIX: [u8; 16] = [ + 0x17, 0xc4, 0xe6, 0x45, 0x3c, 0xc4, 0x9a, 0xaa, 0xae, 0xac, 0xa8, 0x94, 0xe6, 0xd9, 0x68, 0x3e, +]; + +fn map_eth_to_id(eth: &H160) -> Option { + if ð[0..16] != ETH_ACCOUNT_PREFIX { + return None; + } + let mut id_bytes = [0; 4]; + id_bytes.copy_from_slice(ð[16..20]); + Some(u32::from_be_bytes(id_bytes)) +} +pub fn collection_id_to_address(id: u32) -> H160 { + let mut out = [0; 20]; + out[0..16].copy_from_slice(Ð_ACCOUNT_PREFIX); + out[16..20].copy_from_slice(&u32::to_be_bytes(id)); + H160(out) +} + +fn call_internal( + collection: &mut CollectionHandle, + caller: caller, + method_id: u32, + mut input: AbiReader, + value: U256, +) -> Result, evm_coder::abi::StringError> { + match collection.mode.clone() { + CollectionMode::Fungible(_) => { + #[cfg(feature = "std")] + { + println!("Parse fungible call {:x}", method_id); + } + let call = match UniqueFungibleCall::parse(method_id, &mut input)? { + Some(v) => v, + None => { + #[cfg(feature = "std")] + { + println!("Method not found"); + } + return Ok(None); + } + }; + #[cfg(feature = "std")] + { + dbg!(&call); + } + Ok(Some( as UniqueFungible>::call( + collection, + Msg { + call, + caller, + value, + }, + )?)) + } + CollectionMode::NFT => { + let call = match UniqueNFTCall::parse(method_id, &mut input)? { + Some(v) => v, + None => return Ok(None), + }; + Ok(Some( as UniqueNFT>::call( + collection, + Msg { + call, + caller, + value, + }, + )?)) + } + _ => { + return Err(StringError::from( + "erc calls only supported to fungible and nft collections for now", + ) + .into()) + } + } +} + +impl pallet_evm::OnMethodCall for NftErcSupport { + fn is_reserved(target: &H160) -> bool { + map_eth_to_id(target).is_some() + } + fn is_used(target: &H160) -> bool { + map_eth_to_id(target) + .map(>::contains_key) + .unwrap_or(false) + } + fn get_code(target: &H160) -> Option> { + map_eth_to_id(&target) + .and_then(>::get) + .map(|collection| { + match collection.mode { + CollectionMode::NFT => include_bytes!("stubs/ERC721.bin") as &[u8], + CollectionMode::Fungible(_) => include_bytes!("stubs/ERC20.bin") as &[u8], + CollectionMode::ReFungible => include_bytes!("stubs/ERC1633.bin") as &[u8], + CollectionMode::Invalid => include_bytes!("stubs/Invalid.bin") as &[u8], + } + .to_owned() + }) + } + fn call( + source: &H160, + target: &H160, + gas_limit: u64, + input: &[u8], + value: U256, + ) -> Option { + let mut collection = map_eth_to_id(&target) + .and_then(|id| >::get_with_gas_limit(id, gas_limit))?; + let (method_id, input) = AbiReader::new_call(input).unwrap(); + let result = call_internal(&mut collection, *source, method_id, input, value); + let cost = gas_limit - collection.gas_left(); + let logs = collection.logs.retrieve_logs(); + match result { + Ok(Some(v)) => Some(PrecompileOutput { + exit_status: ExitReason::Succeed(ExitSucceed::Returned), + cost, + logs, + output: v.finish(), + }), + Ok(None) => None, + Err(e) => Some(PrecompileOutput { + exit_status: ExitReason::Revert(ExitRevert::Reverted), + cost: 0, + logs: Default::default(), + output: AbiWriter::from(e).finish(), + }), + } + } +} + +// TODO: This function is slow, and output can be memoized +pub fn generate_transaction(collection_id: u32, chain_id: u64) -> ethereum::Transaction { + let contract = collection_id_to_address(collection_id); + + // FIXME: Can be done on wasm runtime with https://github.com/paritytech/substrate/pull/8728 + #[cfg(feature = "std")] + { + let signed = ethereum_tx_sign::RawTransaction { + nonce: 0.into(), + to: Some(contract.0.into()), + value: 0.into(), + gas_price: 0.into(), + gas: 0.into(), + // zero selector, this transaction always have same sender, so all data should be acquired from logs + data: Vec::from([0, 0, 0, 0]), + } + .sign( + // TODO: move to pallet config + // 0xF70631E55faff9f3FD3681545aa6c724226a3853 + // 9dbaef9b3ebc00e53f67c6a77bcfbf2c4f2aebe4d70d94af4f2df01744b7a91a + &hex_literal::hex!("9dbaef9b3ebc00e53f67c6a77bcfbf2c4f2aebe4d70d94af4f2df01744b7a91a") + .into(), + &chain_id, + ); + rlp::decode::(&signed) + .expect("transaction is just created, it can't be broken") + } + #[cfg(not(feature = "std"))] + { + panic!("transaction generation not yet supported by wasm runtime") + } +} diff --git a/pallets/nft/src/eth/sponsoring.rs b/pallets/nft/src/eth/sponsoring.rs new file mode 100644 index 0000000000..ae663c4222 --- /dev/null +++ b/pallets/nft/src/eth/sponsoring.rs @@ -0,0 +1,142 @@ +//! Implements EVM sponsoring logic via OnChargeEVMTransaction + +use crate::{Collection, ChainLimit, CollectionById, Config, NftTransferBasket, FungibleTransferBasket, eth::account::EvmBackwardsAddressMapping}; +use evm_coder::abi::AbiReader; +use frame_support::{storage::{StorageMap, StorageDoubleMap, StorageValue}, traits::Currency}; +use pallet_evm::{EVMCurrencyAdapter, WithdrawReason}; +use sp_core::{H160, U256}; +use sp_std::prelude::*; +use super::{account::CrossAccountId, erc::{UniqueFungibleCall, UniqueNFTCall, ERC721Call, ERC20Call, ERC721UniqueExtensionsCall}}; +use core::convert::TryInto; + +type NegativeImbalanceOf = + ::AccountId>>::NegativeImbalance; + +pub struct ChargeEvmTransaction; +pub struct ChargeEvmLiquidityInfo +where + T: Config, + T: pallet_evm::Config, +{ + who: H160, + negative_imbalance: NegativeImbalanceOf<::Currency, T>, +} + +struct AnyError; + +fn try_sponsor(caller: &H160, collection_id: u32, collection: &Collection, call: &[u8]) -> Result<(), AnyError> { + let (method_id, mut reader) = AbiReader::new_call(call).map_err(|_| AnyError)?; + match &collection.mode { + crate::CollectionMode::NFT => { + let call: UniqueNFTCall = UniqueNFTCall::parse(method_id, &mut reader).map_err(|_| AnyError)?.ok_or(AnyError)?; + match call { + UniqueNFTCall::ERC721UniqueExtensions(ERC721UniqueExtensionsCall::Transfer {token_id, ..}) | UniqueNFTCall::ERC721(ERC721Call::TransferFrom {token_id, ..}) => { + let token_id: u32 = token_id.try_into().map_err(|_| AnyError)?; + let block_number = >::block_number() as T::BlockNumber; + let collection_limits = &collection.limits; + let limit: u32 = if collection_limits.sponsor_transfer_timeout > 0 { + collection_limits.sponsor_transfer_timeout + } else { + ChainLimit::get().nft_sponsor_transfer_timeout + }; + + let mut sponsor = true; + if >::contains_key(collection_id, token_id) { + let last_tx_block = >::get(collection_id, token_id); + let limit_time = last_tx_block + limit.into(); + if block_number <= limit_time { + sponsor = false; + } + } + if sponsor { + >::insert(collection_id, token_id, block_number); + return Ok(()) + } + }, + _ => {}, + } + }, + crate::CollectionMode::Fungible(_) => { + let call: UniqueFungibleCall = UniqueFungibleCall::parse(method_id, &mut reader).map_err(|_| AnyError)?.ok_or(AnyError)?; + match call { + UniqueFungibleCall::ERC20(ERC20Call::Transfer {..}) => { + let who = T::CrossAccountId::from_eth(caller.clone()); + let collection_limits = &collection.limits; + let limit: u32 = if collection_limits.sponsor_transfer_timeout > 0 { + collection_limits.sponsor_transfer_timeout + } else { + ChainLimit::get().fungible_sponsor_transfer_timeout + }; + + let block_number = >::block_number() as T::BlockNumber; + let mut sponsored = true; + if >::contains_key(collection_id, who.as_sub()) { + let last_tx_block = >::get(collection_id, who.as_sub()); + let limit_time = last_tx_block + limit.into(); + if block_number <= limit_time { + sponsored = false; + } + } + if sponsored { + >::insert(collection_id, who.as_sub(), block_number); + return Ok(()) + } + }, + _ => {}, + } + }, + _ => {}, + } + return Err(AnyError) +} + +impl pallet_evm::OnChargeEVMTransaction for ChargeEvmTransaction +where + T: Config, + T: pallet_evm::Config, +{ + type LiquidityInfo = Option>; + + fn withdraw_fee( + who: &H160, + reason: WithdrawReason, + fee: U256, + ) -> Result> { + let mut who_pays_fee = *who; + if let WithdrawReason::Call { target, input } = &reason { + if let Some(collection_id) = crate::eth::map_eth_to_id(&target) { + if let Some(collection) = >::get(collection_id) { + if let Some(sponsor) = collection.sponsorship.sponsor() { + if try_sponsor(who, collection_id, &collection, &input).is_ok() { + who_pays_fee = + T::EvmBackwardsAddressMapping::from_account_id(sponsor.clone()); + } + } + } + } + } + + // TODO: Pay fee from substrate address + let negative_imbalance = EVMCurrencyAdapter::<::Currency, ()>::withdraw_fee( + &who_pays_fee, + reason, + fee, + )?; + Ok(negative_imbalance.map(|i| ChargeEvmLiquidityInfo { + who: who_pays_fee, + negative_imbalance: i, + })) + } + + fn correct_and_deposit_fee( + who: &H160, + corrected_fee: U256, + already_withdrawn: Self::LiquidityInfo, + ) -> Result<(), pallet_evm::Error> { + EVMCurrencyAdapter::<::Currency, ()>::correct_and_deposit_fee( + &already_withdrawn.as_ref().map(|e| e.who).unwrap_or(*who), + corrected_fee, + already_withdrawn.map(|e| e.negative_imbalance), + ) + } +} diff --git a/pallets/nft/src/eth/stubs/ERC1633.bin b/pallets/nft/src/eth/stubs/ERC1633.bin new file mode 100644 index 0000000000..30404ce4c5 --- /dev/null +++ b/pallets/nft/src/eth/stubs/ERC1633.bin @@ -0,0 +1 @@ +TODO \ No newline at end of file diff --git a/pallets/nft/src/eth/stubs/ERC20.bin b/pallets/nft/src/eth/stubs/ERC20.bin new file mode 100644 index 0000000000..f634935c10 Binary files /dev/null and b/pallets/nft/src/eth/stubs/ERC20.bin differ diff --git a/pallets/nft/src/eth/stubs/ERC20.sol b/pallets/nft/src/eth/stubs/ERC20.sol new file mode 100644 index 0000000000..687d4cdbbf --- /dev/null +++ b/pallets/nft/src/eth/stubs/ERC20.sol @@ -0,0 +1,69 @@ +// SPDX-License-Identifier: OTHER + +pragma solidity >=0.8.0 <0.9.0; + +contract ERC20 { + uint8 _dummy = 0; + string stub_error = "this contract does not exists, code for collections is implemented at pallet side"; + + // 0x18160ddd + function totalSupply() external view returns (uint256) { + require(false, stub_error); + _dummy; + return 0; + } + + // 0x70a08231 + function balanceOf(address account) external view returns (uint256) { + require(false, stub_error); + account; + _dummy; + return 0; + } + + // 0xa9059cbb + function transfer(address recipient, uint256 amount) external returns (bool) { + require(false, stub_error); + recipient; + amount; + _dummy = 0; + return false; + } + + // 0xdd62ed3e + function allowance(address owner, address spender) external view returns (uint256) { + require(false, stub_error); + owner; + spender; + return _dummy; + } + + // 0x095ea7b3 + function approve(address spender, uint256 amount) external returns (bool) { + require(false, stub_error); + spender; + amount; + _dummy = 0; + return false; + } + + // 0x23b872dd + function transferFrom(address sender, address recipient, uint256 amount) external returns (bool) { + require(false, stub_error); + sender; + recipient; + amount; + _dummy = 0; + return false; + } + + // While ERC165 is not required by spec of ERC20, better implement it + // 0x01ffc9a7 + function supportsInterface(bytes4 interfaceID) public pure returns (bool) { + return + // ERC20 + interfaceID == 0x36372b07 || + // ERC165 + interfaceID == 0x01ffc9a7; + } +} \ No newline at end of file diff --git a/pallets/nft/src/eth/stubs/ERC721.bin b/pallets/nft/src/eth/stubs/ERC721.bin new file mode 100644 index 0000000000..1bc43f365b --- /dev/null +++ b/pallets/nft/src/eth/stubs/ERC721.bin @@ -0,0 +1 @@ +0x608060405260008060006101000a81548160ff021916908360ff16021790555060008060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180608001604052806051815260200162000cd6605191396001908051906020019061008f9291906100a2565b5034801561009c57600080fd5b506101a6565b8280546100ae90610145565b90600052602060002090601f0160209004810192826100d05760008555610117565b82601f106100e957805160ff1916838001178555610117565b82800160010185558215610117579182015b828111156101165782518255916020019190600101906100fb565b5b5090506101249190610128565b5090565b5b80821115610141576000816000905550600101610129565b5090565b6000600282049050600182168061015d57607f821691505b6020821081141561017157610170610177565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b610b2080620001b66000396000f3fe6080604052600436106100915760003560e01c80636352211e116100595780636352211e1461016457806370a08231146101a1578063a22cb465146101de578063b88d4fde14610207578063e985e9c51461022357610091565b806301ffc9a714610096578063081812fc146100d3578063095ea7b31461011057806323b872dd1461012c57806342842e0e14610148575b600080fd5b3480156100a257600080fd5b506100bd60048036038101906100b89190610821565b610260565b6040516100ca919061093b565b60405180910390f35b3480156100df57600080fd5b506100fa60048036038101906100f5919061084a565b6102c2565b6040516101079190610920565b60405180910390f35b61012a600480360381019061012591906107e5565b610333565b005b610146600480360381019061014191906106da565b61037d565b005b610162600480360381019061015d91906106da565b6103c8565b005b34801561017057600080fd5b5061018b6004803603810190610186919061084a565b610413565b6040516101989190610920565b60405180910390f35b3480156101ad57600080fd5b506101c860048036038101906101c39190610675565b610484565b6040516101d59190610978565b60405180910390f35b3480156101ea57600080fd5b50610205600480360381019061020091906107a9565b6104d4565b005b610221600480360381019061021c9190610729565b610539565b005b34801561022f57600080fd5b5061024a6004803603810190610245919061069e565b610586565b604051610257919061093b565b60405180910390f35b60006380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806102bb57506301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600080600190610308576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102ff9190610956565b60405180910390fd5b50600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600190610378576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161036f9190610956565b60405180910390fd5b505050565b60006001906103c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103b99190610956565b60405180910390fd5b50505050565b600060019061040d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104049190610956565b60405180910390fd5b50505050565b600080600190610459576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104509190610956565b60405180910390fd5b50600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000806001906104ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104c19190610956565b60405180910390fd5b5060009050919050565b6000600190610519576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105109190610956565b60405180910390fd5b5060008060006101000a81548160ff021916908360ff1602179055505050565b600060019061057e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105759190610956565b60405180910390fd5b505050505050565b6000806001906105cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c39190610956565b60405180910390fd5b506000905092915050565b6000813590506105e681610a8e565b92915050565b6000813590506105fb81610aa5565b92915050565b60008135905061061081610abc565b92915050565b60008083601f84011261062857600080fd5b8235905067ffffffffffffffff81111561064157600080fd5b60208301915083600182028301111561065957600080fd5b9250929050565b60008135905061066f81610ad3565b92915050565b60006020828403121561068757600080fd5b6000610695848285016105d7565b91505092915050565b600080604083850312156106b157600080fd5b60006106bf858286016105d7565b92505060206106d0858286016105d7565b9150509250929050565b6000806000606084860312156106ef57600080fd5b60006106fd868287016105d7565b935050602061070e868287016105d7565b925050604061071f86828701610660565b9150509250925092565b60008060008060006080868803121561074157600080fd5b600061074f888289016105d7565b9550506020610760888289016105d7565b945050604061077188828901610660565b935050606086013567ffffffffffffffff81111561078e57600080fd5b61079a88828901610616565b92509250509295509295909350565b600080604083850312156107bc57600080fd5b60006107ca858286016105d7565b92505060206107db858286016105ec565b9150509250929050565b600080604083850312156107f857600080fd5b6000610806858286016105d7565b925050602061081785828601610660565b9150509250929050565b60006020828403121561083357600080fd5b600061084184828501610601565b91505092915050565b60006020828403121561085c57600080fd5b600061086a84828501610660565b91505092915050565b61087c816109b9565b82525050565b61088b816109cb565b82525050565b6000815461089e81610a2d565b6108a881866109a8565b945060018216600081146108c357600181146108d557610908565b60ff1983168652602086019350610908565b6108de85610993565b60005b83811015610900578154818901526001820191506020810190506108e1565b808801955050505b50505092915050565b61091a81610a23565b82525050565b60006020820190506109356000830184610873565b92915050565b60006020820190506109506000830184610882565b92915050565b600060208201905081810360008301526109708184610891565b905092915050565b600060208201905061098d6000830184610911565b92915050565b60008190508160005260206000209050919050565b600082825260208201905092915050565b60006109c482610a03565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006002820490506001821680610a4557607f821691505b60208210811415610a5957610a58610a5f565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b610a97816109b9565b8114610aa257600080fd5b50565b610aae816109cb565b8114610ab957600080fd5b50565b610ac5816109d7565b8114610ad057600080fd5b50565b610adc81610a23565b8114610ae757600080fd5b5056fea26469706673582212206e53fcc41e6b23f5bd49a262462ecf5ff647f480649658ee8b67c91a8f733ba864736f6c634300080100337468697320636f6e747261637420646f6573206e6f74206578697374732c20636f646520666f7220636f6c6c656374696f6e7320697320696d706c656d656e7465642061742070616c6c65742073696465 \ No newline at end of file diff --git a/pallets/nft/src/eth/stubs/ERC721.sol b/pallets/nft/src/eth/stubs/ERC721.sol new file mode 100644 index 0000000000..4136cf5544 --- /dev/null +++ b/pallets/nft/src/eth/stubs/ERC721.sol @@ -0,0 +1,163 @@ +// SPDX-License-Identifier: OTHER + +pragma solidity >=0.8.0 <0.9.0; + +contract ERC721 { + uint8 _dummy = 0; + address _dummy_addr = 0x0000000000000000000000000000000000000000; + string _dummy_string = ""; + string stub_error = + "this contract does not exists, code for collections is implemented at pallet side"; + + event Transfer( + address indexed from, + address indexed to, + uint256 indexed tokenId + ); + + event Approval( + address indexed owner, + address indexed approved, + uint256 indexed tokenId + ); + + event ApprovalForAll( + address indexed owner, + address indexed operator, + bool approved + ); + + // 0x18160ddd + function totalSupply() external view returns (uint256) { + require(false, stub_error); + return 0; + } + + function name() external view returns (string memory res_name) { + require(false, stub_error); + res_name = _dummy_string; + } + + function symbol() external view returns (string memory res_symbol) { + require(false, stub_error); + res_symbol = _dummy_string; + } + + function tokenURI(uint256 tokenId) external view returns (string memory) { + require(false, stub_error); + tokenId; + return _dummy_string; + } + + function tokenByIndex(uint256 index) external view returns (uint256) { + require(false, stub_error); + index; + return 0; + } + + function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256) { + require(false, stub_error); + owner; + index; + return 0; + } + + // 0x70a08231 + function balanceOf(address owner) external view returns (uint256) { + require(false, stub_error); + owner; + return 0; + } + + // 0x6352211e + function ownerOf(uint256 tokenId) external view returns (address) { + require(false, stub_error); + tokenId; + return _dummy_addr; + } + + // 0xb88d4fde + function safeTransferFrom( + address from, + address to, + uint256 tokenId, + bytes calldata data + ) external payable { + require(false, stub_error); + from; + to; + tokenId; + data; + } + + // 0x42842e0e + function safeTransferFrom( + address from, + address to, + uint256 tokenId + ) external payable { + require(false, stub_error); + from; + to; + tokenId; + } + + // 0x23b872dd + function transferFrom( + address from, + address to, + uint256 tokenId + ) external payable { + require(false, stub_error); + from; + to; + tokenId; + } + + // 0x095ea7b3 + function approve(address approved, uint256 tokenId) external payable { + require(false, stub_error); + approved; + tokenId; + } + + // 0xa22cb465 + function setApprovalForAll(address operator, bool approved) external { + require(false, stub_error); + operator; + approved; + _dummy = 0; + } + + // 0x081812fc + function getApproved(uint256 tokenId) external view returns (address) { + require(false, stub_error); + tokenId; + return _dummy_addr; + } + + // 0xe985e9c5 + function isApprovedForAll(address owner, address operator) + external + view + returns (bool) + { + require(false, stub_error); + owner; + operator; + return false; + } + + // 0x01ffc9a7 + function supportsInterface(bytes4 interfaceID) public pure returns (bool) { + return + // ERC721 + interfaceID == 0x80ac58cd || + // ERC721Metadata + interfaceID == 0x5b5e139f || + // ERC721Enumerable + interfaceID == 0x780e9d63 || + // ERC165 + interfaceID == 0x01ffc9a7; + } +} diff --git a/pallets/nft/src/eth/stubs/Invalid.bin b/pallets/nft/src/eth/stubs/Invalid.bin new file mode 100644 index 0000000000..30404ce4c5 --- /dev/null +++ b/pallets/nft/src/eth/stubs/Invalid.bin @@ -0,0 +1 @@ +TODO \ No newline at end of file diff --git a/pallets/nft/src/lib.rs b/pallets/nft/src/lib.rs index 4d8e8a22fc..c03cd27fd4 100644 --- a/pallets/nft/src/lib.rs +++ b/pallets/nft/src/lib.rs @@ -7,13 +7,12 @@ #![cfg_attr(not(feature = "std"), no_std)] -#[cfg(feature = "std")] -pub use std::*; +extern crate alloc; -#[cfg(feature = "std")] -pub use serde::*; +pub use serde::{Serialize, Deserialize}; use core::ops::{Deref, DerefMut}; +use core::cell::RefCell; use codec::{Decode, Encode}; pub use frame_support::{ construct_runtime, decl_event, decl_module, decl_storage, decl_error, @@ -33,6 +32,7 @@ pub use frame_support::{ }; use frame_system::{self as system, ensure_signed, ensure_root}; +use sp_core::H160; use sp_runtime::sp_std::prelude::Vec; use sp_runtime::{ traits::{ @@ -45,6 +45,7 @@ use sp_runtime::{ }; use sp_runtime::traits::StaticLookup; use pallet_contracts::chain_extension::UncheckedFrom; +use pallet_ethereum::EthereumTransactionSender; use pallet_transaction_payment::OnChargeTransaction; #[cfg(test)] @@ -54,6 +55,11 @@ mod mock; mod tests; mod default_weights; +mod eth; + +pub use eth::NftErcSupport; +pub use eth::account::*; +use eth::erc::{ERC20Events, ERC721Events}; pub const MAX_DECIMAL_POINTS: DecimalPoints = 30; pub const MAX_REFUNGIBLE_PIECES: u128 = 1_000_000_000_000_000_000_000; @@ -68,7 +74,7 @@ pub type TokenId = u32; pub type DecimalPoints = u8; #[derive(Encode, Decode, Eq, Debug, Clone, PartialEq)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] pub enum CollectionMode { Invalid, NFT, @@ -183,6 +189,41 @@ pub struct Collection { pub struct CollectionHandle { pub id: CollectionId, collection: Collection, + logs: eth::log::LogRecorder, + evm_address: H160, + gas_limit: RefCell, +} +impl CollectionHandle { + pub fn get_with_gas_limit(id: CollectionId, gas_limit: u64) -> Option { + >::get(id) + .map(|collection| Self { + id, + collection, + logs: eth::log::LogRecorder::default(), + evm_address: eth::collection_id_to_address(id), + gas_limit: RefCell::new(gas_limit), + }) + } + pub fn get(id: CollectionId) -> Option { + Self::get_with_gas_limit(id, u64::MAX) + } + pub fn gas_left(&self) -> u64 { + *self.gas_limit.borrow() + } + pub fn consume_gas(&self, gas: u64) -> DispatchResult { + let mut gas_limit = self.gas_limit.borrow_mut(); + if *gas_limit < gas { + fail!(Error::::OutOfGas); + } + *gas_limit -= gas; + Ok(()) + } + pub fn log(&self, log: impl evm_coder::ToLog) { + self.logs.log(log.to_log(self.evm_address)) + } + pub fn into_inner(self) -> Collection { + self.collection.clone() + } } impl Deref for CollectionHandle { @@ -452,6 +493,8 @@ decl_error! { WrongRefungiblePieces, /// createRefungible should be called with one owner BadCreateRefungibleCall, + /// Gas limit exceeded + OutOfGas, } } @@ -461,9 +504,17 @@ pub trait Config: system::Config + Sized + pallet_transaction_payment::Config + /// Weight information for extrinsics in this pallet. type WeightInfo: WeightInfo; + type EvmAddressMapping: pallet_evm::AddressMapping; + type EvmBackwardsAddressMapping: EvmBackwardsAddressMapping; + type EvmWithdrawOrigin: pallet_evm::EnsureAddressOrigin; + + type CrossAccountId: CrossAccountId; type Currency: Currency; type CollectionCreationPrice: Get<<::Currency as Currency>::Balance>; type TreasuryAccountId: Get; + + type EthereumChainId: Get; + type EthereumTransactionSender: pallet_ethereum::EthereumTransactionSender; } #[cfg(feature = "runtime-benchmarks")] @@ -525,7 +576,7 @@ decl_storage! { pub CollectionById get(fn collection_id) config(): map hasher(blake2_128_concat) CollectionId => Option> = None; /// List of collection admins /// Collection id (controlled?2) - pub AdminList get(fn admin_list_collection): map hasher(blake2_128_concat) CollectionId => Vec; + pub AdminList get(fn admin_list_collection): map hasher(blake2_128_concat) CollectionId => Vec; /// Whitelisted collection users /// Collection id (controlled?2), user id (controlled?3) pub WhiteList get(fn white_list): double_map hasher(blake2_128_concat) CollectionId, hasher(blake2_128_concat) T::AccountId => bool; @@ -542,11 +593,11 @@ decl_storage! { //#region Item collections /// Collection id (controlled?2), token id (controlled?1) - pub NftItemList get(fn nft_item_id) config(): double_map hasher(blake2_128_concat) CollectionId, hasher(blake2_128_concat) TokenId => Option>; + pub NftItemList get(fn nft_item_id) config(): double_map hasher(blake2_128_concat) CollectionId, hasher(blake2_128_concat) TokenId => Option>; /// Collection id (controlled?2), owner (controlled?2) pub FungibleItemList get(fn fungible_item_id) config(): double_map hasher(blake2_128_concat) CollectionId, hasher(blake2_128_concat) T::AccountId => FungibleItemType; /// Collection id (controlled?2), token id (controlled?1) - pub ReFungibleItemList get(fn refungible_item_id) config(): double_map hasher(blake2_128_concat) CollectionId, hasher(blake2_128_concat) TokenId => Option>; + pub ReFungibleItemList get(fn refungible_item_id) config(): double_map hasher(blake2_128_concat) CollectionId, hasher(blake2_128_concat) TokenId => Option>; //#endregion //#region Index list @@ -597,7 +648,7 @@ decl_storage! { } for (collection_id, account_id, fungible_item) in &config.fungible_item_id { - >::init_fungible_token(*collection_id, account_id, fungible_item); + >::init_fungible_token(*collection_id, &T::CrossAccountId::from_sub(account_id.clone()), fungible_item); } for (_num, _c, _i) in &config.refungible_item_id { @@ -610,7 +661,8 @@ decl_storage! { decl_event!( pub enum Event where - AccountId = ::AccountId, + AccountId = ::AccountId, + CrossAccountId = ::CrossAccountId, { /// New collection was created /// @@ -632,7 +684,7 @@ decl_event!( /// * item_id: Id of an item. Unique within the collection. /// /// * recipient: Owner of newly created item - ItemCreated(CollectionId, TokenId, AccountId), + ItemCreated(CollectionId, TokenId, CrossAccountId), /// Collection item was burned. /// @@ -654,7 +706,7 @@ decl_event!( /// * recipient: New owner of item /// /// * amount: Always 1 for NFT - Transfer(CollectionId, TokenId, AccountId, AccountId, u128), + Transfer(CollectionId, TokenId, CrossAccountId, CrossAccountId, u128), /// * collection_id /// @@ -665,7 +717,7 @@ decl_event!( /// * spender /// /// * amount - Approved(CollectionId, TokenId, AccountId, AccountId, u128), + Approved(CollectionId, TokenId, CrossAccountId, CrossAccountId, u128), } ); @@ -774,7 +826,7 @@ decl_module! { >::insert(next_id, new_collection); // call event - Self::deposit_event(RawEvent::CollectionCreated(next_id, mode.into(), who.clone())); + Self::deposit_event(RawEvent::CollectionCreated(next_id, mode.into(), who)); Ok(()) } @@ -794,7 +846,7 @@ decl_module! { let sender = ensure_signed(origin)?; let collection = Self::get_collection(collection_id)?; - Self::check_owner_permissions(&collection, sender)?; + Self::check_owner_permissions(&collection, &sender)?; if !collection.limits.owner_can_destroy { fail!(Error::::NoPermission); } @@ -838,14 +890,18 @@ decl_module! { /// * address. #[weight = ::WeightInfo::add_to_white_list()] #[transactional] - pub fn add_to_white_list(origin, collection_id: CollectionId, address: T::AccountId) -> DispatchResult{ + pub fn add_to_white_list(origin, collection_id: CollectionId, address: T::CrossAccountId) -> DispatchResult{ - let sender = ensure_signed(origin)?; + let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); let collection = Self::get_collection(collection_id)?; - Self::check_owner_or_admin_permissions(&collection, sender)?; - >::insert(collection_id, address, true); - + Self::toggle_white_list_internal( + &sender, + &collection, + &address, + true, + )?; + Ok(()) } @@ -863,13 +919,17 @@ decl_module! { /// * address. #[weight = ::WeightInfo::remove_from_white_list()] #[transactional] - pub fn remove_from_white_list(origin, collection_id: CollectionId, address: T::AccountId) -> DispatchResult{ + pub fn remove_from_white_list(origin, collection_id: CollectionId, address: T::CrossAccountId) -> DispatchResult{ - let sender = ensure_signed(origin)?; + let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); let collection = Self::get_collection(collection_id)?; - Self::check_owner_or_admin_permissions(&collection, sender)?; - >::remove(collection_id, address); + Self::toggle_white_list_internal( + &sender, + &collection, + &address, + false, + )?; Ok(()) } @@ -892,7 +952,7 @@ decl_module! { let sender = ensure_signed(origin)?; let mut target_collection = Self::get_collection(collection_id)?; - Self::check_owner_permissions(&target_collection, sender)?; + Self::check_owner_permissions(&target_collection, &sender)?; target_collection.access = mode; Self::save_collection(target_collection); @@ -919,7 +979,7 @@ decl_module! { let sender = ensure_signed(origin)?; let mut target_collection = Self::get_collection(collection_id)?; - Self::check_owner_permissions(&target_collection, sender)?; + Self::check_owner_permissions(&target_collection, &sender)?; target_collection.mint_mode = mint_permission; Self::save_collection(target_collection); @@ -943,7 +1003,7 @@ decl_module! { let sender = ensure_signed(origin)?; let mut target_collection = Self::get_collection(collection_id)?; - Self::check_owner_permissions(&target_collection, sender)?; + Self::check_owner_permissions(&target_collection, &sender)?; target_collection.owner = new_owner; Self::save_collection(target_collection); @@ -965,11 +1025,10 @@ decl_module! { /// * new_admin_id: Address of new admin to add. #[weight = ::WeightInfo::add_collection_admin()] #[transactional] - pub fn add_collection_admin(origin, collection_id: CollectionId, new_admin_id: T::AccountId) -> DispatchResult { - - let sender = ensure_signed(origin)?; + pub fn add_collection_admin(origin, collection_id: CollectionId, new_admin_id: T::CrossAccountId) -> DispatchResult { + let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); let collection = Self::get_collection(collection_id)?; - Self::check_owner_or_admin_permissions(&collection, sender)?; + Self::check_owner_or_admin_permissions(&collection, &sender)?; let mut admin_arr = >::get(collection_id); match admin_arr.binary_search(&new_admin_id) { @@ -998,11 +1057,10 @@ decl_module! { /// * account_id: Address of admin to remove. #[weight = ::WeightInfo::remove_collection_admin()] #[transactional] - pub fn remove_collection_admin(origin, collection_id: CollectionId, account_id: T::AccountId) -> DispatchResult { - - let sender = ensure_signed(origin)?; + pub fn remove_collection_admin(origin, collection_id: CollectionId, account_id: T::CrossAccountId) -> DispatchResult { + let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); let collection = Self::get_collection(collection_id)?; - Self::check_owner_or_admin_permissions(&collection, sender)?; + Self::check_owner_or_admin_permissions(&collection, &sender)?; let mut admin_arr = >::get(collection_id); match admin_arr.binary_search(&account_id) { @@ -1027,10 +1085,9 @@ decl_module! { #[weight = ::WeightInfo::set_collection_sponsor()] #[transactional] pub fn set_collection_sponsor(origin, collection_id: CollectionId, new_sponsor: T::AccountId) -> DispatchResult { - let sender = ensure_signed(origin)?; let mut target_collection = Self::get_collection(collection_id)?; - Self::check_owner_permissions(&target_collection, sender)?; + Self::check_owner_permissions(&target_collection, &sender)?; target_collection.sponsorship = SponsorshipState::Unconfirmed(new_sponsor); Self::save_collection(target_collection); @@ -1048,7 +1105,6 @@ decl_module! { #[weight = ::WeightInfo::confirm_sponsorship()] #[transactional] pub fn confirm_sponsorship(origin, collection_id: CollectionId) -> DispatchResult { - let sender = ensure_signed(origin)?; let mut target_collection = Self::get_collection(collection_id)?; @@ -1075,11 +1131,10 @@ decl_module! { #[weight = ::WeightInfo::remove_collection_sponsor()] #[transactional] pub fn remove_collection_sponsor(origin, collection_id: CollectionId) -> DispatchResult { - let sender = ensure_signed(origin)?; let mut target_collection = Self::get_collection(collection_id)?; - Self::check_owner_permissions(&target_collection, sender)?; + Self::check_owner_permissions(&target_collection, &sender)?; target_collection.sponsorship = SponsorshipState::Disabled; Self::save_collection(target_collection); @@ -1113,9 +1168,14 @@ decl_module! { #[weight = ::WeightInfo::create_item(data.len())] #[transactional] - pub fn create_item(origin, collection_id: CollectionId, owner: T::AccountId, data: CreateItemData) -> DispatchResult { - let sender = ensure_signed(origin)?; - Self::create_item_internal(sender, collection_id, owner, data) + pub fn create_item(origin, collection_id: CollectionId, owner: T::CrossAccountId, data: CreateItemData) -> DispatchResult { + let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); + let collection = Self::get_collection(collection_id)?; + + Self::create_item_internal(&sender, &collection, &owner, data)?; + + Self::submit_logs(collection)?; + Ok(()) } /// This method creates multiple items in a collection created with CreateCollection method. @@ -1140,22 +1200,15 @@ decl_module! { .map(|data| { data.len() }) .sum())] #[transactional] - pub fn create_multiple_items(origin, collection_id: CollectionId, owner: T::AccountId, items_data: Vec) -> DispatchResult { + pub fn create_multiple_items(origin, collection_id: CollectionId, owner: T::CrossAccountId, items_data: Vec) -> DispatchResult { ensure!(items_data.len() > 0, Error::::EmptyArgument); - let sender = ensure_signed(origin)?; - - let target_collection = Self::get_collection(collection_id)?; - - Self::can_create_items_in_collection(&target_collection, &sender, &owner, items_data.len() as u32)?; + let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); + let collection = Self::get_collection(collection_id)?; - for data in &items_data { - Self::validate_create_item_args(&target_collection, data)?; - } - for data in &items_data { - Self::create_item_no_validation(&target_collection, owner.clone(), data.clone())?; - } + Self::create_multiple_items_internal(&sender, &collection, &owner, items_data)?; + Self::submit_logs(collection)?; Ok(()) } @@ -1176,34 +1229,12 @@ decl_module! { #[transactional] pub fn burn_item(origin, collection_id: CollectionId, item_id: TokenId, value: u128) -> DispatchResult { - let sender = ensure_signed(origin)?; - - // Transfer permissions check + let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); let target_collection = Self::get_collection(collection_id)?; - ensure!( - Self::is_item_owner(sender.clone(), &target_collection, item_id) || - ( - target_collection.limits.owner_can_transfer && - Self::is_owner_or_admin_permissions(&target_collection, sender.clone()) - ), - Error::::NoPermission - ); - - if target_collection.access == AccessMode::WhiteList { - Self::check_white_list(&target_collection, &sender)?; - } - - match target_collection.mode - { - CollectionMode::NFT => Self::burn_nft_item(&target_collection, item_id)?, - CollectionMode::Fungible(_) => Self::burn_fungible_item(&sender, &target_collection, value)?, - CollectionMode::ReFungible => Self::burn_refungible_item(&target_collection, item_id, &sender)?, - _ => () - }; - // call event - Self::deposit_event(RawEvent::ItemDestroyed(target_collection.id, item_id)); + Self::burn_item_internal(&sender, &target_collection, item_id, value)?; + Self::submit_logs(target_collection)?; Ok(()) } @@ -1232,11 +1263,14 @@ decl_module! { /// * Re-Fungible Mode: Must specify transferred portion (between 0 and 1) #[weight = ::WeightInfo::transfer()] #[transactional] - pub fn transfer(origin, recipient: T::AccountId, collection_id: CollectionId, item_id: TokenId, value: u128) -> DispatchResult { - let sender = ensure_signed(origin)?; + pub fn transfer(origin, recipient: T::CrossAccountId, collection_id: CollectionId, item_id: TokenId, value: u128) -> DispatchResult { + let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); let collection = Self::get_collection(collection_id)?; - Self::transfer_internal(sender, recipient, &collection, item_id, value) + Self::transfer_internal(&sender, &recipient, &collection, item_id, value)?; + + Self::submit_logs(collection)?; + Ok(()) } /// Set, change, or remove approved address to transfer the ownership of the NFT. @@ -1256,46 +1290,13 @@ decl_module! { /// * item_id: ID of the item. #[weight = ::WeightInfo::approve()] #[transactional] - pub fn approve(origin, spender: T::AccountId, collection_id: CollectionId, item_id: TokenId, amount: u128) -> DispatchResult { - - let sender = ensure_signed(origin)?; - let target_collection = Self::get_collection(collection_id)?; - - Self::token_exists(&target_collection, item_id)?; - - // Transfer permissions check - let bypasses_limits = target_collection.limits.owner_can_transfer && - Self::is_owner_or_admin_permissions( - &target_collection, - sender.clone(), - ); - - let allowance_limit = if bypasses_limits { - None - } else if let Some(amount) = Self::owned_amount( - sender.clone(), - &target_collection, - item_id, - ) { - Some(amount) - } else { - fail!(Error::::NoPermission); - }; + pub fn approve(origin, spender: T::CrossAccountId, collection_id: CollectionId, item_id: TokenId, amount: u128) -> DispatchResult { + let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); + let collection = Self::get_collection(collection_id)?; - if target_collection.access == AccessMode::WhiteList { - Self::check_white_list(&target_collection, &sender)?; - Self::check_white_list(&target_collection, &spender)?; - } + Self::approve_internal(&sender, &spender, &collection, item_id, amount)?; - let allowance: u128 = amount - .checked_add(>::get(collection_id, (item_id, &sender, &spender))) - .ok_or(Error::::NumOverflow)?; - if let Some(limit) = allowance_limit { - ensure!(limit >= allowance, Error::::TokenValueTooLow); - } - >::insert(collection_id, (item_id, sender.clone(), spender.clone()), allowance); - - Self::deposit_event(RawEvent::Approved(target_collection.id, item_id, sender, spender, allowance)); + Self::submit_logs(collection)?; Ok(()) } @@ -1320,55 +1321,16 @@ decl_module! { /// * value: Amount to transfer. #[weight = ::WeightInfo::transfer_from()] #[transactional] - pub fn transfer_from(origin, from: T::AccountId, recipient: T::AccountId, collection_id: CollectionId, item_id: TokenId, value: u128 ) -> DispatchResult { - - let sender = ensure_signed(origin)?; - let target_collection = Self::get_collection(collection_id)?; - - // Check approval - let approval: u128 = >::get(collection_id, (item_id, &from, &sender)); - - // Limits check - Self::is_correct_transfer(&target_collection, &recipient)?; - - // Transfer permissions check - ensure!( - approval >= value || - ( - target_collection.limits.owner_can_transfer && - Self::is_owner_or_admin_permissions(&target_collection, sender.clone()) - ), - Error::::NoPermission - ); - - if target_collection.access == AccessMode::WhiteList { - Self::check_white_list(&target_collection, &sender)?; - Self::check_white_list(&target_collection, &recipient)?; - } - - // Reduce approval by transferred amount or remove if remaining approval drops to 0 - if approval.saturating_sub(value) > 0 { - >::insert(collection_id, (item_id, &from, &sender), approval - value); - } - else { - >::remove(collection_id, (item_id, &from, &sender)); - } + pub fn transfer_from(origin, from: T::CrossAccountId, recipient: T::CrossAccountId, collection_id: CollectionId, item_id: TokenId, value: u128 ) -> DispatchResult { + let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); + let collection = Self::get_collection(collection_id)?; - match target_collection.mode - { - CollectionMode::NFT => Self::transfer_nft(&target_collection, item_id, from.clone(), recipient.clone())?, - CollectionMode::Fungible(_) => Self::transfer_fungible(&target_collection, value, &from, &recipient)?, - CollectionMode::ReFungible => Self::transfer_refungible(&target_collection, item_id, value, from.clone(), recipient.clone())?, - _ => () - }; + Self::transfer_from_internal(&sender, &from, &recipient, &collection, item_id, value)?; - Self::deposit_event(RawEvent::Transfer(target_collection.id, item_id, from, recipient, value)); + Self::submit_logs(collection)?; Ok(()) } - // #[weight = 0] - // pub fn safe_transfer_from(origin, collection_id: CollectionId, item_id: TokenId, new_owner: T::AccountId) -> DispatchResult { - // // let no_perm_mes = "You do not have permissions to modify this collection"; // // ensure!(>::contains_key((collection_id, item_id)), no_perm_mes); // // let list_itm = >::get((collection_id, item_id)); @@ -1401,25 +1363,11 @@ decl_module! { item_id: TokenId, data: Vec ) -> DispatchResult { - let sender = ensure_signed(origin)?; + let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); - let target_collection = Self::get_collection(collection_id)?; - Self::token_exists(&target_collection, item_id)?; - - ensure!(ChainLimit::get().custom_data_limit >= data.len() as u32, Error::::TokenVariableDataLimitExceeded); - - // Modify permissions check - ensure!(Self::is_item_owner(sender.clone(), &target_collection, item_id) || - Self::is_owner_or_admin_permissions(&target_collection, sender.clone()), - Error::::NoPermission); + let collection = Self::get_collection(collection_id)?; - match target_collection.mode - { - CollectionMode::NFT => Self::set_nft_variable_data(&target_collection, item_id, data)?, - CollectionMode::ReFungible => Self::set_re_fungible_variable_data(&target_collection, item_id, data)?, - CollectionMode::Fungible(_) => fail!(Error::::CantStoreMetadataInFungibleTokens), - _ => fail!(Error::::UnexpectedCollectionType) - }; + Self::set_variable_meta_data_internal(&sender, &collection, item_id, data)?; Ok(()) } @@ -1445,9 +1393,9 @@ decl_module! { collection_id: CollectionId, version: SchemaVersion ) -> DispatchResult { - let sender = ensure_signed(origin)?; + let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); let mut target_collection = Self::get_collection(collection_id)?; - Self::check_owner_or_admin_permissions(&target_collection, sender.clone())?; + Self::check_owner_or_admin_permissions(&target_collection, &sender)?; target_collection.schema_version = version; Self::save_collection(target_collection); @@ -1473,9 +1421,9 @@ decl_module! { collection_id: CollectionId, schema: Vec ) -> DispatchResult { - let sender = ensure_signed(origin)?; + let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); let mut target_collection = Self::get_collection(collection_id)?; - Self::check_owner_or_admin_permissions(&target_collection, sender.clone())?; + Self::check_owner_or_admin_permissions(&target_collection, &sender)?; // check schema limit ensure!(schema.len() as u32 <= ChainLimit::get().offchain_schema_limit, ""); @@ -1505,9 +1453,9 @@ decl_module! { collection_id: CollectionId, schema: Vec ) -> DispatchResult { - let sender = ensure_signed(origin)?; + let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); let mut target_collection = Self::get_collection(collection_id)?; - Self::check_owner_or_admin_permissions(&target_collection, sender.clone())?; + Self::check_owner_or_admin_permissions(&target_collection, &sender)?; // check schema limit ensure!(schema.len() as u32 <= ChainLimit::get().const_on_chain_schema_limit, ""); @@ -1537,9 +1485,9 @@ decl_module! { collection_id: CollectionId, schema: Vec ) -> DispatchResult { - let sender = ensure_signed(origin)?; + let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); let mut target_collection = Self::get_collection(collection_id)?; - Self::check_owner_or_admin_permissions(&target_collection, sender.clone())?; + Self::check_owner_or_admin_permissions(&target_collection, &sender)?; // check schema limit ensure!(schema.len() as u32 <= ChainLimit::get().variable_on_chain_schema_limit, ""); @@ -1724,9 +1672,9 @@ decl_module! { collection_id: u32, new_limits: CollectionLimits, ) -> DispatchResult { - let sender = ensure_signed(origin)?; + let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); let mut target_collection = Self::get_collection(collection_id)?; - Self::check_owner_permissions(&target_collection, sender.clone())?; + Self::check_owner_permissions(&target_collection, &sender.as_sub())?; let old_limits = &target_collection.limits; let chain_limits = ChainLimit::get(); @@ -1755,23 +1703,22 @@ decl_module! { } impl Module { - pub fn create_item_internal(sender: T::AccountId, collection_id: CollectionId, owner: T::AccountId, data: CreateItemData) -> DispatchResult { - let target_collection = Self::get_collection(collection_id)?; - - Self::can_create_items_in_collection(&target_collection, &sender, &owner, 1)?; - Self::validate_create_item_args(&target_collection, &data)?; - Self::create_item_no_validation(&target_collection, owner, data)?; + pub fn create_item_internal(sender: &T::CrossAccountId, collection: &CollectionHandle, owner: &T::CrossAccountId, data: CreateItemData) -> DispatchResult { + Self::can_create_items_in_collection(&collection, &sender, &owner, 1)?; + Self::validate_create_item_args(&collection, &data)?; + Self::create_item_no_validation(&collection, owner, data)?; Ok(()) } - pub fn transfer_internal(sender: T::AccountId, recipient: T::AccountId, target_collection: &CollectionHandle, item_id: TokenId, value: u128) -> DispatchResult { + pub fn transfer_internal(sender: &T::CrossAccountId, recipient: &T::CrossAccountId, target_collection: &CollectionHandle, item_id: TokenId, value: u128) -> DispatchResult { + target_collection.consume_gas(2000000)?; // Limits check Self::is_correct_transfer(target_collection, &recipient)?; // Transfer permissions check - ensure!(Self::is_item_owner(sender.clone(), target_collection, item_id) || - Self::is_owner_or_admin_permissions(target_collection, sender.clone()), + ensure!(Self::is_item_owner(&sender, target_collection, item_id) || + Self::is_owner_or_admin_permissions(target_collection, &sender), Error::::NoPermission); if target_collection.access == AccessMode::WhiteList { @@ -1787,36 +1734,252 @@ impl Module { _ => () }; - Self::deposit_event(RawEvent::Transfer(target_collection.id, item_id, sender, recipient, value)); + Self::deposit_event(RawEvent::Transfer(target_collection.id, item_id, sender.clone(), recipient.clone(), value)); Ok(()) } + pub fn approve_internal( + sender: &T::CrossAccountId, + spender: &T::CrossAccountId, + collection: &CollectionHandle, + item_id: TokenId, + amount: u128 + ) -> DispatchResult { + collection.consume_gas(2000000)?; + Self::token_exists(&collection, item_id)?; + + // Transfer permissions check + let bypasses_limits = collection.limits.owner_can_transfer && + Self::is_owner_or_admin_permissions( + &collection, + &sender, + ); + + let allowance_limit = if bypasses_limits { + None + } else if let Some(amount) = Self::owned_amount( + &sender, + &collection, + item_id, + ) { + Some(amount) + } else { + fail!(Error::::NoPermission); + }; + + if collection.access == AccessMode::WhiteList { + Self::check_white_list(&collection, &sender)?; + Self::check_white_list(&collection, &spender)?; + } + + let allowance: u128 = amount + .checked_add(>::get(collection.id, (item_id, sender.as_sub(), spender.as_sub()))) + .ok_or(Error::::NumOverflow)?; + if let Some(limit) = allowance_limit { + ensure!(limit >= allowance, Error::::TokenValueTooLow); + } + >::insert(collection.id, (item_id, sender.as_sub(), spender.as_sub()), allowance); + + if matches!(collection.mode, CollectionMode::NFT) { + // TODO: NFT: only one owner may exist for token in ERC721 + collection.log(ERC721Events::Approval { + owner: *sender.as_eth(), + approved: *spender.as_eth(), + token_id: item_id.into(), + }); + } + + if matches!(collection.mode, CollectionMode::Fungible(_)) { + // TODO: NFT: only one owner may exist for token in ERC20 + collection.log(ERC20Events::Approval { + owner: *sender.as_eth(), + spender: *spender.as_eth(), + value: allowance.into() + }); + } + + Self::deposit_event(RawEvent::Approved(collection.id, item_id, sender.clone(), spender.clone(), allowance)); + Ok(()) + } + + pub fn transfer_from_internal( + sender: &T::CrossAccountId, + from: &T::CrossAccountId, + recipient: &T::CrossAccountId, + collection: &CollectionHandle, + item_id: TokenId, + amount: u128, + ) -> DispatchResult { + collection.consume_gas(2000000)?; + // Check approval + let approval: u128 = >::get(collection.id, (item_id, from.as_sub(), sender.as_sub())); + + // Limits check + Self::is_correct_transfer(&collection, &recipient)?; + + // Transfer permissions check + ensure!( + approval >= amount || + ( + collection.limits.owner_can_transfer && + Self::is_owner_or_admin_permissions(&collection, &sender) + ), + Error::::NoPermission + ); + + if collection.access == AccessMode::WhiteList { + Self::check_white_list(&collection, &sender)?; + Self::check_white_list(&collection, &recipient)?; + } + + // Reduce approval by transferred amount or remove if remaining approval drops to 0 + let allowance = approval.saturating_sub(amount); + if allowance > 0 { + >::insert(collection.id, (item_id, from.as_sub(), sender.as_sub()), allowance); + } else { + >::remove(collection.id, (item_id, from.as_sub(), sender.as_sub())); + } + + match collection.mode { + CollectionMode::NFT => { + Self::transfer_nft(&collection, item_id, from.clone(), recipient.clone())? + } + CollectionMode::Fungible(_) => { + Self::transfer_fungible(&collection, amount, &from, &recipient)? + } + CollectionMode::ReFungible => { + Self::transfer_refungible(&collection, item_id, amount, from.clone(), recipient.clone())? + } + _ => () + }; + + if matches!(collection.mode, CollectionMode::Fungible(_)) { + collection.log(ERC20Events::Approval { + owner: *from.as_eth(), + spender: *sender.as_eth(), + value: allowance.into() + }); + } - fn is_correct_transfer(collection: &CollectionHandle, recipient: &T::AccountId) -> DispatchResult { + Ok(()) + } + + pub fn set_variable_meta_data_internal( + sender: &T::CrossAccountId, + collection: &CollectionHandle, + item_id: TokenId, + data: Vec, + ) -> DispatchResult { + Self::token_exists(&collection, item_id)?; + + ensure!(ChainLimit::get().custom_data_limit >= data.len() as u32, Error::::TokenVariableDataLimitExceeded); + + // Modify permissions check + ensure!(Self::is_item_owner(&sender, &collection, item_id) || + Self::is_owner_or_admin_permissions(&collection, &sender), + Error::::NoPermission); + + match collection.mode + { + CollectionMode::NFT => Self::set_nft_variable_data(&collection, item_id, data)?, + CollectionMode::ReFungible => Self::set_re_fungible_variable_data(&collection, item_id, data)?, + CollectionMode::Fungible(_) => fail!(Error::::CantStoreMetadataInFungibleTokens), + _ => fail!(Error::::UnexpectedCollectionType) + }; + + Ok(()) + } + + pub fn create_multiple_items_internal( + sender: &T::CrossAccountId, + collection: &CollectionHandle, + owner: &T::CrossAccountId, + items_data: Vec, + ) -> DispatchResult { + Self::can_create_items_in_collection(&collection, &sender, &owner, items_data.len() as u32)?; + + for data in &items_data { + Self::validate_create_item_args(&collection, data)?; + } + for data in &items_data { + Self::create_item_no_validation(&collection, owner, data.clone())?; + } + + Ok(()) + } + + pub fn burn_item_internal( + sender: &T::CrossAccountId, + collection: &CollectionHandle, + item_id: TokenId, + value: u128, + ) -> DispatchResult { + ensure!( + Self::is_item_owner(&sender, &collection, item_id) || + ( + collection.limits.owner_can_transfer && + Self::is_owner_or_admin_permissions(&collection, &sender) + ), + Error::::NoPermission + ); + + if collection.access == AccessMode::WhiteList { + Self::check_white_list(&collection, &sender)?; + } + + match collection.mode + { + CollectionMode::NFT => Self::burn_nft_item(&collection, item_id)?, + CollectionMode::Fungible(_) => Self::burn_fungible_item(&sender, &collection, value)?, + CollectionMode::ReFungible => Self::burn_refungible_item(&collection, item_id, &sender)?, + _ => () + }; + + Ok(()) + } + + pub fn toggle_white_list_internal( + sender: &T::CrossAccountId, + collection: &CollectionHandle, + address: &T::CrossAccountId, + whitelisted: bool, + ) -> DispatchResult { + Self::check_owner_or_admin_permissions(&collection, &sender)?; + + if whitelisted { + >::insert(collection.id, address.as_sub(), true); + } else { + >::remove(collection.id, address.as_sub()); + } + + Ok(()) + } + + fn is_correct_transfer(collection: &CollectionHandle, recipient: &T::CrossAccountId) -> DispatchResult { let collection_id = collection.id; // check token limit and account token limit - let account_items: u32 = >::get(collection_id, recipient).len() as u32; + let account_items: u32 = >::get(collection_id, recipient.as_sub()).len() as u32; ensure!(collection.limits.account_token_ownership_limit > account_items, Error::::AccountTokenLimitExceeded); Ok(()) } - fn can_create_items_in_collection(collection: &CollectionHandle, sender: &T::AccountId, owner: &T::AccountId, amount: u32) -> DispatchResult { + fn can_create_items_in_collection(collection: &CollectionHandle, sender: &T::CrossAccountId, owner: &T::CrossAccountId, amount: u32) -> DispatchResult { let collection_id = collection.id; // check token limit and account token limit let total_items: u32 = ItemListIndex::get(collection_id) .checked_add(amount) .ok_or(Error::::CollectionTokenLimitExceeded)?; - let account_items: u32 = (>::get(collection_id, owner).len() as u32) + let account_items: u32 = (>::get(collection_id, owner.as_sub()).len() as u32) .checked_add(amount) .ok_or(Error::::AccountTokenLimitExceeded)?; ensure!(collection.limits.token_limit >= total_items, Error::::CollectionTokenLimitExceeded); ensure!(collection.limits.account_token_ownership_limit >= account_items, Error::::AccountTokenLimitExceeded); - if !Self::is_owner_or_admin_permissions(collection, sender.clone()) { + if !Self::is_owner_or_admin_permissions(collection, &sender) { ensure!(collection.mint_mode == true, Error::::PublicMintingNotAllowed); Self::check_white_list(collection, owner)?; Self::check_white_list(collection, sender)?; @@ -1863,7 +2026,7 @@ impl Module { Ok(()) } - fn create_item_no_validation(collection: &CollectionHandle, owner: T::AccountId, data: CreateItemData) -> DispatchResult { + fn create_item_no_validation(collection: &CollectionHandle, owner: &T::CrossAccountId, data: CreateItemData) -> DispatchResult { match data { CreateItemData::NFT(data) => { @@ -1895,29 +2058,29 @@ impl Module { Ok(()) } - fn add_fungible_item(collection: &CollectionHandle, owner: &T::AccountId, value: u128) -> DispatchResult { + fn add_fungible_item(collection: &CollectionHandle, owner: &T::CrossAccountId, value: u128) -> DispatchResult { let collection_id = collection.id; // Does new owner already have an account? - let balance: u128 = >::get(collection_id, owner).value; + let balance: u128 = >::get(collection_id, owner.as_sub()).value; // Mint let item = FungibleItemType { value: balance.checked_add(value).ok_or(Error::::NumOverflow)?, }; - >::insert(collection_id, (*owner).clone(), item); + >::insert(collection_id, owner.as_sub(), item); // Update balance - let new_balance = >::get(collection_id, owner) + let new_balance = >::get(collection_id, owner.as_sub()) .checked_add(value) .ok_or(Error::::NumOverflow)?; - >::insert(collection_id, (*owner).clone(), new_balance); + >::insert(collection_id, owner.as_sub(), new_balance); Self::deposit_event(RawEvent::ItemCreated(collection_id, 0, owner.clone())); Ok(()) } - fn add_refungible_item(collection: &CollectionHandle, item: ReFungibleItemType) -> DispatchResult { + fn add_refungible_item(collection: &CollectionHandle, item: ReFungibleItemType) -> DispatchResult { let collection_id = collection.id; let current_index = ::get(collection_id) @@ -1940,16 +2103,16 @@ impl Module { >::insert(collection_id, current_index, itemcopy); // Update balance - let new_balance = >::get(collection_id, &owner) + let new_balance = >::get(collection_id, owner.as_sub()) .checked_add(value) .ok_or(Error::::NumOverflow)?; - >::insert(collection_id, owner.clone(), new_balance); + >::insert(collection_id, owner.as_sub(), new_balance); Self::deposit_event(RawEvent::ItemCreated(collection_id, current_index, owner)); Ok(()) } - fn add_nft_item(collection: &CollectionHandle, item: NftItemType) -> DispatchResult { + fn add_nft_item(collection: &CollectionHandle, item: NftItemType) -> DispatchResult { let collection_id = collection.id; let current_index = ::get(collection_id) @@ -1963,11 +2126,16 @@ impl Module { >::insert(collection_id, current_index, item); // Update balance - let new_balance = >::get(collection_id, item_owner.clone()) + let new_balance = >::get(collection_id, item_owner.as_sub()) .checked_add(1) .ok_or(Error::::NumOverflow)?; - >::insert(collection_id, item_owner.clone(), new_balance); + >::insert(collection_id, item_owner.as_sub(), new_balance); + collection.log(ERC721Events::Transfer { + from: H160::default(), + to: *item_owner.as_eth(), + token_id: current_index.into(), + }); Self::deposit_event(RawEvent::ItemCreated(collection_id, current_index, item_owner)); Ok(()) } @@ -1975,7 +2143,7 @@ impl Module { fn burn_refungible_item( collection: &CollectionHandle, item_id: TokenId, - owner: &T::AccountId, + owner: &T::CrossAccountId, ) -> DispatchResult { let collection_id = collection.id; @@ -1989,10 +2157,10 @@ impl Module { Self::remove_token_index(collection_id, item_id, owner)?; // update balance - let new_balance = >::get(collection_id, rft_balance.owner.clone()) + let new_balance = >::get(collection_id, rft_balance.owner.as_sub()) .checked_sub(rft_balance.fraction) .ok_or(Error::::NumOverflow)?; - >::insert(collection_id, rft_balance.owner.clone(), new_balance); + >::insert(collection_id, rft_balance.owner.as_sub(), new_balance); // Re-create owners list with sender removed let index = token @@ -2023,68 +2191,80 @@ impl Module { Self::remove_token_index(collection_id, item_id, &item.owner)?; // update balance - let new_balance = >::get(collection_id, &item.owner) + let new_balance = >::get(collection_id, item.owner.as_sub()) .checked_sub(1) .ok_or(Error::::NumOverflow)?; - >::insert(collection_id, item.owner.clone(), new_balance); + >::insert(collection_id, item.owner.as_sub(), new_balance); >::remove(collection_id, item_id); >::remove(collection_id, item_id); + Self::deposit_event(RawEvent::ItemDestroyed(collection.id, item_id)); Ok(()) } - fn burn_fungible_item(owner: &T::AccountId, collection: &CollectionHandle, value: u128) -> DispatchResult { + fn burn_fungible_item(owner: &T::CrossAccountId, collection: &CollectionHandle, value: u128) -> DispatchResult { let collection_id = collection.id; - let mut balance = >::get(collection_id, owner); + let mut balance = >::get(collection_id, owner.as_sub()); ensure!(balance.value >= value, Error::::TokenValueNotEnough); // update balance - let new_balance = >::get(collection_id, owner) + let new_balance = >::get(collection_id, owner.as_sub()) .checked_sub(value) .ok_or(Error::::NumOverflow)?; - >::insert(collection_id, (*owner).clone(), new_balance); + >::insert(collection_id, owner.as_sub(), new_balance); if balance.value - value > 0 { balance.value -= value; - >::insert(collection_id, (*owner).clone(), balance); + >::insert(collection_id, owner.as_sub(), balance); } else { - >::remove(collection_id, owner); + >::remove(collection_id, owner.as_sub()); } + collection.log(ERC20Events::Transfer { + from: *owner.as_eth(), + to: H160::default(), + value: value.into(), + }); Ok(()) } pub fn get_collection(collection_id: CollectionId) -> Result, sp_runtime::DispatchError> { - Ok(>::get(collection_id) - .map(|collection| CollectionHandle { - id: collection_id, - collection - }) + Ok(>::get(collection_id) .ok_or(Error::::CollectionNotFound)?) } fn save_collection(collection: CollectionHandle) { - >::insert(collection.id, collection.collection); + >::insert(collection.id, collection.into_inner()); + } + + pub fn submit_logs(collection: CollectionHandle) -> DispatchResult { + if collection.logs.is_empty() { + return Ok(()) + } + T::EthereumTransactionSender::submit_logs_transaction( + eth::generate_transaction(collection.id, T::EthereumChainId::get()), + collection.logs.retrieve_logs(), + ) } - fn check_owner_permissions(target_collection: &CollectionHandle, subject: T::AccountId) -> DispatchResult { + fn check_owner_permissions(target_collection: &CollectionHandle, subject: &T::AccountId) -> DispatchResult { ensure!( - subject == target_collection.owner, + *subject == target_collection.owner, Error::::NoPermission ); Ok(()) } - fn is_owner_or_admin_permissions(collection: &CollectionHandle, subject: T::AccountId) -> bool { - subject == collection.owner || >::get(collection.id).contains(&subject) + fn is_owner_or_admin_permissions(collection: &CollectionHandle, subject: &T::CrossAccountId) -> bool { + *subject.as_sub() == collection.owner || >::get(collection.id).contains(&subject) } fn check_owner_or_admin_permissions( collection: &CollectionHandle, - subject: T::AccountId, + subject: &T::CrossAccountId, ) -> DispatchResult { ensure!(Self::is_owner_or_admin_permissions(collection, subject), Error::::NoPermission); @@ -2092,38 +2272,38 @@ impl Module { } fn owned_amount( - subject: T::AccountId, + subject: &T::CrossAccountId, target_collection: &CollectionHandle, item_id: TokenId, ) -> Option { let collection_id = target_collection.id; match target_collection.mode { - CollectionMode::NFT => (>::get(collection_id, item_id)?.owner == subject) + CollectionMode::NFT => (>::get(collection_id, item_id)?.owner == *subject) .then(|| 1), - CollectionMode::Fungible(_) => Some(>::get(collection_id, &subject) + CollectionMode::Fungible(_) => Some(>::get(collection_id, &subject.as_sub()) .value), CollectionMode::ReFungible => >::get(collection_id, item_id)? .owner .iter() - .find(|i| i.owner == subject) + .find(|i| i.owner == *subject) .map(|i| i.fraction), CollectionMode::Invalid => None, } } - fn is_item_owner(subject: T::AccountId, target_collection: &CollectionHandle, item_id: TokenId) -> bool { + fn is_item_owner(subject: &T::CrossAccountId, target_collection: &CollectionHandle, item_id: TokenId) -> bool { match target_collection.mode { CollectionMode::Fungible(_) => true, - _ => Self::owned_amount(subject, target_collection, item_id).is_some(), + _ => Self::owned_amount(&subject, target_collection, item_id).is_some(), } } - fn check_white_list(collection: &CollectionHandle, address: &T::AccountId) -> DispatchResult { + fn check_white_list(collection: &CollectionHandle, address: &T::CrossAccountId) -> DispatchResult { let collection_id = collection.id; let mes = Error::::AddresNotInWhiteList; - ensure!(>::contains_key(collection_id, address), mes); + ensure!(>::contains_key(collection_id, address.as_sub()), mes); Ok(()) } @@ -2150,29 +2330,36 @@ impl Module { fn transfer_fungible( collection: &CollectionHandle, value: u128, - owner: &T::AccountId, - recipient: &T::AccountId, + owner: &T::CrossAccountId, + recipient: &T::CrossAccountId, ) -> DispatchResult { let collection_id = collection.id; - let mut balance = >::get(collection_id, owner); + let mut balance = >::get(collection_id, owner.as_sub()); ensure!(balance.value >= value, Error::::TokenValueTooLow); // Send balance to recipient (updates balanceOf of recipient) Self::add_fungible_item(collection, recipient, value)?; // update balanceOf of sender - >::insert(collection_id, (*owner).clone(), balance.value - value); + >::insert(collection_id, owner.as_sub(), balance.value - value); // Reduce or remove sender if balance.value == value { - >::remove(collection_id, owner); + >::remove(collection_id, owner.as_sub()); } else { balance.value -= value; - >::insert(collection_id, (*owner).clone(), balance); + >::insert(collection_id, owner.as_sub(), balance); } + collection.log(ERC20Events::Transfer { + from: *owner.as_eth(), + to: *recipient.as_eth(), + value: value.into(), + }); + Self::deposit_event(RawEvent::Transfer(collection.id, 1, owner.clone(), recipient.clone(), value)); + Ok(()) } @@ -2180,8 +2367,8 @@ impl Module { collection: &CollectionHandle, item_id: TokenId, value: u128, - owner: T::AccountId, - new_owner: T::AccountId, + owner: T::CrossAccountId, + new_owner: T::CrossAccountId, ) -> DispatchResult { let collection_id = collection.id; let full_item = >::get(collection_id, item_id) @@ -2198,15 +2385,15 @@ impl Module { ensure!(amount >= value, Error::::TokenValueTooLow); // update balance - let balance_old_owner = >::get(collection_id, item.owner.clone()) + let balance_old_owner = >::get(collection_id, item.owner.as_sub()) .checked_sub(value) .ok_or(Error::::NumOverflow)?; - >::insert(collection_id, item.owner.clone(), balance_old_owner); + >::insert(collection_id, item.owner.as_sub(), balance_old_owner); - let balance_new_owner = >::get(collection_id, new_owner.clone()) + let balance_new_owner = >::get(collection_id, new_owner.as_sub()) .checked_add(value) .ok_or(Error::::NumOverflow)?; - >::insert(collection_id, new_owner.clone(), balance_new_owner); + >::insert(collection_id, new_owner.as_sub(), balance_new_owner); let old_owner = item.owner.clone(); let new_owner_has_account = full_item.owner.iter().any(|i| i.owner == new_owner); @@ -2256,14 +2443,16 @@ impl Module { >::insert(collection_id, item_id, new_full_item); } + Self::deposit_event(RawEvent::Transfer(collection.id, item_id, owner, new_owner, amount)); + Ok(()) } fn transfer_nft( collection: &CollectionHandle, item_id: TokenId, - sender: T::AccountId, - new_owner: T::AccountId, + sender: T::CrossAccountId, + new_owner: T::CrossAccountId, ) -> DispatchResult { let collection_id = collection.id; let mut item = >::get(collection_id, item_id) @@ -2275,15 +2464,15 @@ impl Module { ); // update balance - let balance_old_owner = >::get(collection_id, item.owner.clone()) + let balance_old_owner = >::get(collection_id, item.owner.as_sub()) .checked_sub(1) .ok_or(Error::::NumOverflow)?; - >::insert(collection_id, item.owner.clone(), balance_old_owner); + >::insert(collection_id, item.owner.as_sub(), balance_old_owner); - let balancenew_owner = >::get(collection_id, new_owner.clone()) + let balance_new_owner = >::get(collection_id, new_owner.as_sub()) .checked_add(1) .ok_or(Error::::NumOverflow)?; - >::insert(collection_id, new_owner.clone(), balancenew_owner); + >::insert(collection_id, new_owner.as_sub(), balance_new_owner); // change owner let old_owner = item.owner.clone(); @@ -2293,6 +2482,13 @@ impl Module { // update index collection Self::move_token_index(collection_id, item_id, &old_owner, &new_owner)?; + collection.log(ERC721Events::Transfer { + from: *sender.as_eth(), + to: *new_owner.as_eth(), + token_id: item_id.into(), + }); + Self::deposit_event(RawEvent::Transfer(collection.id, item_id, sender, new_owner, 1)); + Ok(()) } @@ -2355,24 +2551,23 @@ impl Module { CreatedCollectionCount::put(next_id); } - fn init_nft_token(collection_id: CollectionId, item: &NftItemType) { + fn init_nft_token(collection_id: CollectionId, item: &NftItemType) { let current_index = ::get(collection_id) .checked_add(1) .unwrap(); - let item_owner = item.owner.clone(); Self::add_token_index(collection_id, current_index, &item.owner).unwrap(); ::insert(collection_id, current_index); // Update balance - let new_balance = >::get(collection_id, &item_owner) + let new_balance = >::get(collection_id, item.owner.as_sub()) .checked_add(1) .unwrap(); - >::insert(collection_id, item_owner.clone(), new_balance); + >::insert(collection_id, item.owner.as_sub(), new_balance); } - fn init_fungible_token(collection_id: CollectionId, owner: &T::AccountId, item: &FungibleItemType) { + fn init_fungible_token(collection_id: CollectionId, owner: &T::CrossAccountId, item: &FungibleItemType) { let current_index = ::get(collection_id) .checked_add(1) .unwrap(); @@ -2382,13 +2577,13 @@ impl Module { ::insert(collection_id, current_index); // Update balance - let new_balance = >::get(collection_id, owner) + let new_balance = >::get(collection_id, owner.as_sub()) .checked_add(item.value) .unwrap(); - >::insert(collection_id, (*owner).clone(), new_balance); + >::insert(collection_id, owner.as_sub(), new_balance); } - fn init_refungible_token(collection_id: CollectionId, item: &ReFungibleItemType) { + fn init_refungible_token(collection_id: CollectionId, item: &ReFungibleItemType) { let current_index = ::get(collection_id) .checked_add(1) .unwrap(); @@ -2401,42 +2596,42 @@ impl Module { ::insert(collection_id, current_index); // Update balance - let new_balance = >::get(collection_id, &owner) + let new_balance = >::get(collection_id, &owner.as_sub()) .checked_add(value) .unwrap(); - >::insert(collection_id, owner.clone(), new_balance); + >::insert(collection_id, owner.as_sub(), new_balance); } - fn add_token_index(collection_id: CollectionId, item_index: TokenId, owner: &T::AccountId) -> DispatchResult { + fn add_token_index(collection_id: CollectionId, item_index: TokenId, owner: &T::CrossAccountId) -> DispatchResult { // add to account limit - if >::contains_key(owner) { + if >::contains_key(owner.as_sub()) { // bound Owned tokens by a single address - let count = >::get(owner); + let count = >::get(owner.as_sub()); ensure!(count < ChainLimit::get().account_token_ownership_limit, Error::::AddressOwnershipLimitExceeded); - >::insert(owner.clone(), count + >::insert(owner.as_sub(), count .checked_add(1) .ok_or(Error::::NumOverflow)?); } else { - >::insert(owner.clone(), 1); + >::insert(owner.as_sub(), 1); } - let list_exists = >::contains_key(collection_id, owner); + let list_exists = >::contains_key(collection_id, owner.as_sub()); if list_exists { - let mut list = >::get(collection_id, owner); + let mut list = >::get(collection_id, owner.as_sub()); let item_contains = list.contains(&item_index.clone()); if !item_contains { list.push(item_index.clone()); } - >::insert(collection_id, owner.clone(), list); + >::insert(collection_id, owner.as_sub(), list); } else { let mut itm = Vec::new(); itm.push(item_index.clone()); - >::insert(collection_id, owner.clone(), itm); + >::insert(collection_id, owner.as_sub(), itm); } Ok(()) @@ -2445,24 +2640,24 @@ impl Module { fn remove_token_index( collection_id: CollectionId, item_index: TokenId, - owner: &T::AccountId, + owner: &T::CrossAccountId, ) -> DispatchResult { // update counter - >::insert(owner.clone(), - >::get(owner) + >::insert(owner.as_sub(), + >::get(owner.as_sub()) .checked_sub(1) .ok_or(Error::::NumOverflow)?); - let list_exists = >::contains_key(collection_id, owner); + let list_exists = >::contains_key(collection_id, owner.as_sub()); if list_exists { - let mut list = >::get(collection_id, owner); + let mut list = >::get(collection_id, owner.as_sub()); let item_contains = list.contains(&item_index.clone()); if item_contains { list.retain(|&item| item != item_index); - >::insert(collection_id, owner.clone(), list); + >::insert(collection_id, owner.as_sub(), list); } } @@ -2472,8 +2667,8 @@ impl Module { fn move_token_index( collection_id: CollectionId, item_index: TokenId, - old_owner: &T::AccountId, - new_owner: &T::AccountId, + old_owner: &T::CrossAccountId, + new_owner: &T::CrossAccountId, ) -> DispatchResult { Self::remove_token_index(collection_id, item_index, old_owner)?; Self::add_token_index(collection_id, item_index, new_owner)?; @@ -2883,4 +3078,11 @@ where } } -// #endregion \ No newline at end of file +// #endregion + +sp_api::decl_runtime_apis! { + pub trait NftApi { + /// Used for ethereum integration + fn eth_contract_code(account: H160) -> Option>; + } +} diff --git a/pallets/nft/src/types.rs b/pallets/nft/src/types.rs index e54d0c89c8..c2bae445c2 100644 --- a/pallets/nft/src/types.rs +++ b/pallets/nft/src/types.rs @@ -1,8 +1,7 @@ #[cfg(feature = "std")] pub use std::*; -#[cfg(feature = "std")] -pub use serde::*; +pub use serde::{Serealize, Deserialize}; use codec::{Decode, Encode}; diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index 11d533cfb9..f527c34988 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -29,37 +29,40 @@ pallet-nft = { path = '../pallets/nft', default-features = false, version = '3.0 pallet-inflation = { path = '../pallets/inflation', default-features = false, version = '3.0.0' } # Substrate dependencies -frame-benchmarking = { default-features = false, optional = true, version = '3.0.0' } -frame-executive = { default-features = false, version = '3.0.0' } -frame-support = { default-features = false, version = '3.0.0' } -frame-system = { default-features = false, version = '3.0.0' } -frame-system-benchmarking = { default-features = false, optional = true, version = '3.0.0' } -frame-system-rpc-runtime-api = { default-features = false, version = '3.0.0' } -pallet-aura = { default-features = false, version = '3.0.0' } -pallet-balances = { default-features = false, version = '3.0.0' } -pallet-contracts = { default-features = false, version = '3.0.0' } -pallet-contracts-primitives = { default-features = false, version = '3.0.0' } -pallet-contracts-rpc-runtime-api = { default-features = false, version = '3.0.0' } -pallet-grandpa = { default-features = false, version = '3.0.0' } -pallet-randomness-collective-flip = { default-features = false, version = '3.0.0' } -pallet-sudo = { default-features = false, version = '3.0.0' } -pallet-timestamp = { default-features = false, version = '3.0.0' } -pallet-transaction-payment = { default-features = false, version = '3.0.0' } -pallet-transaction-payment-rpc-runtime-api = { default-features = false, version = '3.0.0' } -pallet-treasury = { default-features = false, version = "3.0.0" } -pallet-vesting = { default-features = false, version = "3.0.0" } -sp-arithmetic = { default-features = false, version = '3.0.0' } -sp-api = { default-features = false, version = '3.0.0' } -sp-block-builder = { default-features = false, version = '3.0.0' } -sp-consensus-aura = { default-features = false, version = '0.9.0' } -sp-core = { default-features = false, version = '3.0.0' } -sp-inherents = { default-features = false, version = '3.0.0' } -sp-offchain = { default-features = false, version = '3.0.0' } -sp-runtime = { default-features = false, version = '3.0.0' } -sp-session = { default-features = false, version = '3.0.0' } -sp-std = { default-features = false, version = '3.0.0' } -sp-transaction-pool = { default-features = false, version = '3.0.0' } -sp-version = { default-features = false, version = '3.0.0' } +frame-benchmarking = { default-features = false, optional = true, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +frame-executive = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +frame-support = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +frame-system = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +frame-system-benchmarking = { default-features = false, optional = true, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +frame-system-rpc-runtime-api = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +pallet-aura = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +pallet-balances = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +pallet-contracts = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +pallet-contracts-primitives = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +pallet-contracts-rpc-runtime-api = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +pallet-evm = { default-features = false, version = "4.0.0-dev", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions" } +pallet-ethereum = { default-features = false, version = "2.0.0-dev", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions" } +pallet-grandpa = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +pallet-randomness-collective-flip = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +pallet-sudo = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +pallet-timestamp = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +pallet-transaction-payment = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +pallet-transaction-payment-rpc-runtime-api = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +pallet-treasury = { default-features = false, version = "3.0.0", git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +pallet-vesting = { default-features = false, version = "3.0.0", git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +fp-rpc = { default-features = false, version = "2.0.0", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions" } +sp-arithmetic = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-api = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-block-builder = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-consensus-aura = { default-features = false, version = '0.9.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-core = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-inherents = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-offchain = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-runtime = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-session = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-std = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-transaction-pool = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-version = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } smallvec = "1.4.1" [features] @@ -96,9 +99,12 @@ std = [ 'pallet-transaction-payment-rpc-runtime-api/std', 'pallet-treasury/std', 'pallet-vesting/std', + 'pallet-evm/std', + 'pallet-ethereum/std', 'pallet-inflation/std', 'pallet-nft/std', + 'fp-rpc/std', 'sp-api/std', 'sp-block-builder/std', 'sp-consensus-aura/std', diff --git a/runtime/src/chain_extension.rs b/runtime/src/chain_extension.rs index a84adbcc6a..d6b84a16fc 100644 --- a/runtime/src/chain_extension.rs +++ b/runtime/src/chain_extension.rs @@ -17,8 +17,7 @@ use frame_support::dispatch::DispatchError; extern crate pallet_nft; pub use pallet_nft::*; -use crate::Runtime; -use sp_runtime::AccountId32; +use pallet_nft::CrossAccountId; use crate::Vec; /// Create item parameters @@ -38,13 +37,54 @@ pub struct NFTExtTransfer { pub amount: u128, } +#[derive(Debug, PartialEq, Encode, Decode)] +pub struct NFTExtCreateMultipleItems { + pub owner: ::AccountId, + pub collection_id: u32, + pub data: Vec, +} + +#[derive(Debug, PartialEq, Encode, Decode)] +pub struct NFTExtApprove { + pub spender: ::AccountId, + pub collection_id: u32, + pub item_id: u32, + pub amount: u128, +} + +#[derive(Debug, PartialEq, Encode, Decode)] +pub struct NFTExtTransferFrom { + pub owner: ::AccountId, + pub recipient: ::AccountId, + pub collection_id: u32, + pub item_id: u32, + pub amount: u128, +} + +#[derive(Debug, PartialEq, Encode, Decode)] +pub struct NFTExtSetVariableMetaData { + pub collection_id: u32, + pub item_id: u32, + pub data: Vec, +} + +#[derive(Debug, PartialEq, Encode, Decode)] +pub struct NFTExtToggleWhiteList { + pub collection_id: u32, + pub address: ::AccountId, + pub whitelisted: bool, +} + /// The chain Extension of NFT pallet pub struct NFTExtension; +pub type NftWeightInfoOf = ::WeightInfo; + impl ChainExtension for NFTExtension { fn call(func_id: u32, env: Environment) -> Result where E: Ext, + C: pallet_nft::Config, ::AccountId: UncheckedFrom<::Hash> + AsRef<[u8]>, { // The memory of the vm stores buf in scale-codec @@ -52,37 +92,138 @@ impl ChainExtension for NFTExtension { 0 => { let mut env = env.buf_in_buf_out(); let input: NFTExtTransfer = env.read_as()?; + env.charge_weight(NftWeightInfoOf::::transfer())?; let collection = pallet_nft::Module::::get_collection(input.collection_id)?; - match pallet_nft::Module::::transfer_internal( - env.ext().caller().clone(), - input.recipient, + pallet_nft::Module::::transfer_internal( + &C::CrossAccountId::from_sub(env.ext().address().clone()), + &C::CrossAccountId::from_sub(input.recipient), &collection, input.token_id, input.amount, - ) { - Ok(_) => Ok(RetVal::Converging(func_id)), - _ => Err(DispatchError::Other("Transfer error")) - } + )?; + + pallet_nft::Module::::submit_logs(collection)?; + Ok(RetVal::Converging(0)) }, 1 => { // Create Item let mut env = env.buf_in_buf_out(); let input: NFTExtCreateItem = env.read_as()?; + env.charge_weight(NftWeightInfoOf::::create_item(input.data.len()))?; - match pallet_nft::Module::::create_item_internal( - env.ext().address().clone(), - input.collection_id, - input.owner, + let collection = pallet_nft::Module::::get_collection(input.collection_id)?; + + pallet_nft::Module::::create_item_internal( + &C::CrossAccountId::from_sub(env.ext().address().clone()), + &collection, + &C::CrossAccountId::from_sub(input.owner), input.data, - ) { - Ok(_) => Ok(RetVal::Converging(func_id)), - _ => Err(DispatchError::Other("CreateItem error")) - } + )?; + + pallet_nft::Module::::submit_logs(collection)?; + Ok(RetVal::Converging(0)) }, + 2 => { + // Create multiple items + let mut env = env.buf_in_buf_out(); + let input: NFTExtCreateMultipleItems = env.read_as()?; + env.charge_weight(NftWeightInfoOf::::create_item( + input.data.iter() + .map(|i| i.len()) + .sum() + ))?; + + let collection = pallet_nft::Module::::get_collection(input.collection_id)?; + + pallet_nft::Module::::create_multiple_items_internal( + &C::CrossAccountId::from_sub(env.ext().address().clone()), + &collection, + &C::CrossAccountId::from_sub(input.owner), + input.data, + )?; + + pallet_nft::Module::::submit_logs(collection)?; + Ok(RetVal::Converging(0)) + }, + 3 => { + // Approve + let mut env = env.buf_in_buf_out(); + let input: NFTExtApprove = env.read_as()?; + env.charge_weight(NftWeightInfoOf::::approve())?; + + let collection = pallet_nft::Module::::get_collection(input.collection_id)?; + + pallet_nft::Module::::approve_internal( + &C::CrossAccountId::from_sub(env.ext().address().clone()), + &C::CrossAccountId::from_sub(input.spender), + &collection, + input.item_id, + input.amount, + )?; + + pallet_nft::Module::::submit_logs(collection)?; + Ok(RetVal::Converging(0)) + }, + 4 => { + // Transfer from + let mut env = env.buf_in_buf_out(); + let input: NFTExtTransferFrom = env.read_as()?; + env.charge_weight(NftWeightInfoOf::::transfer_from())?; + + let collection = pallet_nft::Module::::get_collection(input.collection_id)?; + + pallet_nft::Module::::transfer_from_internal( + &C::CrossAccountId::from_sub(env.ext().address().clone()), + &C::CrossAccountId::from_sub(input.owner), + &C::CrossAccountId::from_sub(input.recipient), + &collection, + input.item_id, + input.amount + )?; + + pallet_nft::Module::::submit_logs(collection)?; + Ok(RetVal::Converging(0)) + }, + 5 => { + // Set variable metadata + let mut env = env.buf_in_buf_out(); + let input: NFTExtSetVariableMetaData = env.read_as()?; + env.charge_weight(NftWeightInfoOf::::set_variable_meta_data())?; + + let collection = pallet_nft::Module::::get_collection(input.collection_id)?; + + pallet_nft::Module::::set_variable_meta_data_internal( + &C::CrossAccountId::from_sub(env.ext().address().clone()), + &collection, + input.item_id, + input.data, + )?; + + pallet_nft::Module::::submit_logs(collection)?; + Ok(RetVal::Converging(0)) + }, + 6 => { + // Toggle whitelist + let mut env = env.buf_in_buf_out(); + let input: NFTExtToggleWhiteList = env.read_as()?; + env.charge_weight(NftWeightInfoOf::::add_to_white_list())?; + + let collection = pallet_nft::Module::::get_collection(input.collection_id)?; + + pallet_nft::Module::::toggle_white_list_internal( + &C::CrossAccountId::from_sub(env.ext().address().clone()), + &collection, + &C::CrossAccountId::from_sub(input.address), + input.whitelisted, + )?; + + pallet_nft::Module::::submit_logs(collection)?; + Ok(RetVal::Converging(0)) + } _ => { - panic!("Passed unknown func_id to test chain extension: {}", func_id); + Err(DispatchError::Other("unknown chain_extension func_id")) } } } diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index c205467d21..dcdd613783 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -17,17 +17,17 @@ use pallet_grandpa::fg_primitives; use pallet_grandpa::{AuthorityId as GrandpaId, AuthorityList as GrandpaAuthorityList}; use sp_api::impl_runtime_apis; use sp_consensus_aura::sr25519::AuthorityId as AuraId; -use sp_core::{ crypto::KeyTypeId, crypto::Public, OpaqueMetadata }; +use sp_core::{ crypto::KeyTypeId, crypto::Public, OpaqueMetadata, H160, U256 }; use sp_runtime::{ - Permill, Perbill, Percent, - ModuleId, - create_runtime_str, generic, impl_opaque_keys, - traits::{ - Convert, ConvertInto, BlakeTwo256, Block as BlockT, IdentifyAccount, - IdentityLookup, NumberFor, Verify, AccountIdConversion, - }, - transaction_validity::{TransactionSource, TransactionValidity}, - ApplyExtrinsicResult, MultiSignature, + Permill, Perbill, Percent, + ModuleId, + create_runtime_str, generic, impl_opaque_keys, + traits::{ + Convert, ConvertInto, BlakeTwo256, Block as BlockT, IdentifyAccount, + IdentityLookup, NumberFor, Verify, AccountIdConversion, + }, + transaction_validity::{TransactionSource, TransactionValidity}, + ApplyExtrinsicResult, MultiSignature, }; #[cfg(feature = "std")] use sp_version::NativeVersion; @@ -35,32 +35,38 @@ use sp_version::RuntimeVersion; pub use pallet_transaction_payment::{Multiplier, TargetedFeeAdjustment, CurrencyAdapter, FeeDetails, RuntimeDispatchInfo}; // A few exports that help ease life for downstream crates. pub use pallet_balances::Call as BalancesCall; +pub use pallet_evm::{EnsureAddressTruncated, HashedAddressMapping, Runner}; pub use pallet_contracts::{Schedule as ContractsSchedule }; pub use frame_support::{ - construct_runtime, - dispatch::DispatchResult, - parameter_types, - StorageValue, - traits::{ - Currency, ExistenceRequirement, Get, KeyOwnerProofSystem, OnUnbalanced, Randomness, - LockIdentifier, - }, - weights::{ - constants::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, WEIGHT_PER_SECOND}, - DispatchClass, DispatchInfo, GetDispatchInfo, Pays, PostDispatchInfo, Weight, - WeightToFeePolynomial, WeightToFeeCoefficient, WeightToFeeCoefficients - }, + construct_runtime, + dispatch::DispatchResult, + parameter_types, + StorageValue, + traits::{ + Currency, ExistenceRequirement, Get, KeyOwnerProofSystem, OnUnbalanced, Randomness, + LockIdentifier, FindAuthor, + }, + weights::{ + constants::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, WEIGHT_PER_SECOND}, + DispatchClass, DispatchInfo, GetDispatchInfo, Pays, PostDispatchInfo, Weight, + WeightToFeePolynomial, WeightToFeeCoefficient, WeightToFeeCoefficients + }, + ConsensusEngineId, }; use pallet_contracts::weights::WeightInfo; // #[cfg(any(feature = "std", test))] use frame_system::{ - self as system, - EnsureRoot, + self as system, + EnsureRoot, limits::{BlockWeights, BlockLength}, }; use sp_std::{prelude::*, marker::PhantomData}; use sp_arithmetic::{traits::{BaseArithmetic, Unsigned}}; use smallvec::smallvec; +use codec::{Encode, Decode}; +use pallet_evm::{Account as EVMAccount, FeeCalculator, OnMethodCall}; +use fp_rpc::TransactionStatus; +use sp_core::H256; pub use pallet_timestamp::Call as TimestampCall; @@ -127,34 +133,34 @@ mod nft_weights; /// of data like extrinsics, allowing for them to continue syncing the network through upgrades /// to even the core data structures. pub mod opaque { - use super::*; + use super::*; - pub use sp_runtime::OpaqueExtrinsic as UncheckedExtrinsic; + pub use sp_runtime::OpaqueExtrinsic as UncheckedExtrinsic; - /// Opaque block header type. - pub type Header = generic::Header; - /// Opaque block type. - pub type Block = generic::Block; - /// Opaque block identifier type. - pub type BlockId = generic::BlockId; + /// Opaque block header type. + pub type Header = generic::Header; + /// Opaque block type. + pub type Block = generic::Block; + /// Opaque block identifier type. + pub type BlockId = generic::BlockId; - impl_opaque_keys! { - pub struct SessionKeys { - pub aura: Aura, - pub grandpa: Grandpa, - } - } + impl_opaque_keys! { + pub struct SessionKeys { + pub aura: Aura, + pub grandpa: Grandpa, + } + } } /// This runtime version. pub const VERSION: RuntimeVersion = RuntimeVersion { - spec_name: create_runtime_str!("nft"), - impl_name: create_runtime_str!("nft"), - authoring_version: 1, - spec_version: 3, - impl_version: 1, - apis: RUNTIME_API_VERSIONS, - transaction_version: 1, + spec_name: create_runtime_str!("nft"), + impl_name: create_runtime_str!("nft"), + authoring_version: 1, + spec_version: 3, + impl_version: 1, + apis: RUNTIME_API_VERSIONS, + transaction_version: 1, }; pub const MILLISECS_PER_BLOCK: u64 = 6000; @@ -169,37 +175,37 @@ pub const DAYS: BlockNumber = HOURS * 24; /// The version information used to identify this runtime when compiled natively. #[cfg(feature = "std")] pub fn native_version() -> NativeVersion { - NativeVersion { - runtime_version: VERSION, - can_author_with: Default::default(), - } + NativeVersion { + runtime_version: VERSION, + can_author_with: Default::default(), + } } /// Provides a membership set with only the configured aura users pub struct ValiudatorsOnly(PhantomData); impl frame_support::traits::Contains for ValiudatorsOnly { fn contains(t: &AccountId) -> bool { - let arr: [u8; 32] = *t.as_ref(); - let raw_key: Vec = Vec::from(arr); + let arr: [u8; 32] = *t.as_ref(); + let raw_key: Vec = Vec::from(arr); - match pallet_aura::Module::::authorities().iter().find(|auth| auth.to_raw_vec() == raw_key) { - Some(_) => true, - None => false, - } + match pallet_aura::Module::::authorities().iter().find(|auth| auth.to_raw_vec() == raw_key) { + Some(_) => true, + None => false, + } } fn sorted_members() -> Vec { - let mut members: Vec = Vec::new(); - for auth in pallet_aura::Module::::authorities() { - let mut arr: [u8; 32] = Default::default(); - let bor_arr = auth.clone().to_raw_vec(); - let slice = bor_arr.as_slice(); - arr.copy_from_slice(slice); - members.push(AccountId::from(arr)); - } - members + let mut members: Vec = Vec::new(); + for auth in pallet_aura::Module::::authorities() { + let mut arr: [u8; 32] = Default::default(); + let bor_arr = auth.clone().to_raw_vec(); + let slice = bor_arr.as_slice(); + arr.copy_from_slice(slice); + members.push(AccountId::from(arr)); + } + members } fn count() -> usize { - pallet_aura::Module::::authorities().len() + pallet_aura::Module::::authorities().len() } } @@ -255,11 +261,11 @@ const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); const MAXIMUM_BLOCK_WEIGHT: Weight = 2 * WEIGHT_PER_SECOND; parameter_types! { - pub const BlockHashCount: BlockNumber = 2400; + pub const BlockHashCount: BlockNumber = 2400; pub RuntimeBlockLength: BlockLength = BlockLength::max_with_normal_ratio(5 * 1024 * 1024, NORMAL_DISPATCH_RATIO); - pub const AvailableBlockRatio: Perbill = Perbill::from_percent(75); - pub const MaximumBlockLength: u32 = 5 * 1024 * 1024; + pub const AvailableBlockRatio: Perbill = Perbill::from_percent(75); + pub const MaximumBlockLength: u32 = 5 * 1024 * 1024; pub RuntimeBlockWeights: BlockWeights = BlockWeights::builder() .base_block(BlockExecutionWeight::get()) .for_class(DispatchClass::all(), |weights| { @@ -278,59 +284,104 @@ parameter_types! { }) .avg_block_initialization(AVERAGE_ON_INITIALIZE_RATIO) .build_or_panic(); - pub const Version: RuntimeVersion = VERSION; - pub const SS58Prefix: u8 = 42; + pub const Version: RuntimeVersion = VERSION; + pub const SS58Prefix: u8 = 42; } impl system::Config for Runtime { - /// The basic call filter to use in dispatchable. - type BaseCallFilter = (); - /// The identifier used to distinguish between accounts. - type AccountId = AccountId; - /// The aggregated dispatch type that is available for extrinsics. - type Call = Call; - /// The lookup mechanism to get account ID from whatever is passed in dispatchers. - type Lookup = IdentityLookup; - /// The index type for storing how many extrinsics an account has signed. - type Index = Index; - /// The index type for blocks. - type BlockNumber = BlockNumber; - /// The type for hashing blocks and tries. - type Hash = Hash; - /// The hashing algorithm used. - type Hashing = BlakeTwo256; - /// The header type. - type Header = generic::Header; - /// The ubiquitous event type. - type Event = Event; - /// The ubiquitous origin type. - type Origin = Origin; - /// Maximum number of block number to block hash mappings to keep (oldest pruned first). - type BlockHashCount = BlockHashCount; - /// The weight of database operations that the runtime can invoke. - type DbWeight = RocksDbWeight; - /// The weight of the overhead invoked on the block import process, independent of the - /// extrinsics included in that block. + /// The basic call filter to use in dispatchable. + type BaseCallFilter = (); + /// The identifier used to distinguish between accounts. + type AccountId = AccountId; + /// The aggregated dispatch type that is available for extrinsics. + type Call = Call; + /// The lookup mechanism to get account ID from whatever is passed in dispatchers. + type Lookup = IdentityLookup; + /// The index type for storing how many extrinsics an account has signed. + type Index = Index; + /// The index type for blocks. + type BlockNumber = BlockNumber; + /// The type for hashing blocks and tries. + type Hash = Hash; + /// The hashing algorithm used. + type Hashing = BlakeTwo256; + /// The header type. + type Header = generic::Header; + /// The ubiquitous event type. + type Event = Event; + /// The ubiquitous origin type. + type Origin = Origin; + /// Maximum number of block number to block hash mappings to keep (oldest pruned first). + type BlockHashCount = BlockHashCount; + /// The weight of database operations that the runtime can invoke. + type DbWeight = RocksDbWeight; + /// The weight of the overhead invoked on the block import process, independent of the + /// extrinsics included in that block. type BlockWeights = RuntimeBlockWeights; - /// Version of the runtime. - type Version = Version; + /// Version of the runtime. + type Version = Version; /// This type is being generated by `construct_runtime!`. - type PalletInfo = PalletInfo; - /// What to do if a new account is created. - type OnNewAccount = (); - /// What to do if an account is fully reaped from the system. - type OnKilledAccount = (); - /// The data to be stored in an account. - type AccountData = pallet_balances::AccountData; + type PalletInfo = PalletInfo; + /// What to do if a new account is created. + type OnNewAccount = (); + /// What to do if an account is fully reaped from the system. + type OnKilledAccount = (); + /// The data to be stored in an account. + type AccountData = pallet_balances::AccountData; /// Weight information for the extrinsics of this pallet. - type SystemWeightInfo = system::weights::SubstrateWeight; - + type SystemWeightInfo = system::weights::SubstrateWeight; + type BlockLength = RuntimeBlockLength; type SS58Prefix = SS58Prefix; } impl pallet_aura::Config for Runtime { - type AuthorityId = AuraId; + type AuthorityId = AuraId; +} + +parameter_types! { + pub const ChainId: u64 = 8888; +} + +impl pallet_evm::Config for Runtime { + type BlockGasLimit = BlockGasLimit; + type FeeCalculator = (); + type GasWeightMapping = (); + type CallOrigin = EnsureAddressTruncated; + type WithdrawOrigin = EnsureAddressTruncated; + type AddressMapping = HashedAddressMapping; + type Precompiles = (); + type Currency = Balances; + type Event = Event; + type OnMethodCall = pallet_nft::NftErcSupport; + type ChainId = ChainId; + type Runner = pallet_evm::runner::stack::Runner; + type OnChargeTransaction = (); +} + +pub struct EthereumFindAuthor(PhantomData); +impl> FindAuthor for EthereumFindAuthor +{ + fn find_author<'a, I>(digests: I) -> Option where + I: 'a + IntoIterator + { + if let Some(author_index) = F::find_author(digests) { + let authority_id = Aura::authorities()[author_index as usize].clone(); + return Some(H160::from_slice(&authority_id.to_raw_vec()[4..24])); + } + None + } +} + +parameter_types! { + pub BlockGasLimit: U256 = U256::from(u32::max_value()); +} + +impl pallet_ethereum::Config for Runtime { + type Event = Event; + type FindAuthor = EthereumFindAuthor; + type StateRoot = pallet_ethereum::IntermediateStateRoot; + type EvmSubmitLog = pallet_evm::Module; } impl pallet_grandpa::Config for Runtime { @@ -353,7 +404,7 @@ impl pallet_grandpa::Config for Runtime { } parameter_types! { - pub const MinimumPeriod: u64 = SLOT_DURATION / 2; + pub const MinimumPeriod: u64 = SLOT_DURATION / 2; } impl pallet_timestamp::Config for Runtime { @@ -365,8 +416,8 @@ impl pallet_timestamp::Config for Runtime { } parameter_types! { - // pub const ExistentialDeposit: u128 = 500; - pub const ExistentialDeposit: u128 = 0; + // pub const ExistentialDeposit: u128 = 500; + pub const ExistentialDeposit: u128 = 0; pub const MaxLocks: u32 = 50; } @@ -388,7 +439,7 @@ pub const CENTIUNIQUE: Balance = 10 * MILLIUNIQUE; pub const UNIQUE: Balance = 100 * CENTIUNIQUE; pub const fn deposit(items: u32, bytes: u32) -> Balance { - items as Balance * 15 * CENTIUNIQUE + (bytes as Balance) * 6 * CENTIUNIQUE + items as Balance * 15 * CENTIUNIQUE + (bytes as Balance) * 6 * CENTIUNIQUE } parameter_types! { @@ -399,12 +450,12 @@ parameter_types! { pub const DepositPerContract: Balance = TombstoneDeposit::get(); pub const DepositPerStorageByte: Balance = deposit(0, 1); pub const DepositPerStorageItem: Balance = deposit(1, 0); - pub RentFraction: Perbill = Perbill::from_rational_approximation(1u32, 30 * DAYS); + pub RentFraction: Perbill = Perbill::from_rational(1u32, 30 * DAYS); pub const SurchargeReward: Balance = 150 * MILLIUNIQUE; pub const SignedClaimHandicap: u32 = 2; pub const MaxDepth: u32 = 32; pub const MaxValueSize: u32 = 16 * 1024; - pub const MaxCodeSize: u32 = 1024 * 1024 * 25; // 25 Mb + pub const MaxCodeSize: u32 = 1024 * 1024 * 25; // 25 Mb // The lazy deletion runs inside on_initialize. pub DeletionWeightLimit: Weight = AVERAGE_ON_INITIALIZE_RATIO * RuntimeBlockWeights::get().max_block; @@ -441,10 +492,10 @@ impl pallet_contracts::Config for Runtime { } parameter_types! { - pub const TransactionByteFee: Balance = 501 * MICROUNIQUE; // Targeting 0.1 Unique per NFT transfer + pub const TransactionByteFee: Balance = 501 * MICROUNIQUE; // Targeting 0.1 Unique per NFT transfer } -/// Linear implementor of `WeightToFeePolynomial` +/// Linear implementor of `WeightToFeePolynomial` pub struct LinearFee(sp_std::marker::PhantomData); impl WeightToFeePolynomial for LinearFee where @@ -504,8 +555,8 @@ impl pallet_treasury::Config for Runtime { } impl pallet_sudo::Config for Runtime { - type Event = Event; - type Call = Call; + type Event = Event; + type Call = Call; } parameter_types! { @@ -527,11 +578,20 @@ parameter_types! { /// Used for the pallet nft in `./nft.rs` impl pallet_nft::Config for Runtime { - type Event = Event; - type WeightInfo = nft_weights::WeightInfo; + type Event = Event; + type WeightInfo = nft_weights::WeightInfo; + + type EvmWithdrawOrigin = EnsureAddressTruncated; + type EvmBackwardsAddressMapping = pallet_nft::MapBackwardsAddressTruncated; + type EvmAddressMapping = HashedAddressMapping; + type CrossAccountId = pallet_nft::BasicCrossAccountId; + type Currency = Balances; type CollectionCreationPrice = CollectionCreationPrice; type TreasuryAccountId = TreasuryAccountId; + + type EthereumChainId = ChainId; + type EthereumTransactionSender = pallet_ethereum::Module; } /// Reimport pallet inflation @@ -550,27 +610,45 @@ impl pallet_inflation::Config for Runtime { } construct_runtime!( - pub enum Runtime where - Block = Block, - NodeBlock = opaque::Block, - UncheckedExtrinsic = UncheckedExtrinsic - { - System: system::{Module, Call, Config, Storage, Event}, - RandomnessCollectiveFlip: pallet_randomness_collective_flip::{Module, Call, Storage}, - Contracts: pallet_contracts::{Module, Call, Config, Storage, Event}, - Timestamp: pallet_timestamp::{Module, Call, Storage, Inherent}, - Aura: pallet_aura::{Module, Config }, - Grandpa: pallet_grandpa::{Module, Call, Storage, Config, Event}, - Balances: pallet_balances::{Module, Call, Storage, Config, Event}, - TransactionPayment: pallet_transaction_payment::{Module, Storage}, - Sudo: pallet_sudo::{Module, Call, Config, Storage, Event}, - Inflation: pallet_inflation::{Module, Call, Storage}, - Nft: pallet_nft::{Module, Call, Config, Storage, Event}, - Treasury: pallet_treasury::{Module, Call, Storage, Config, Event}, - Vesting: pallet_vesting::{Module, Call, Config, Storage, Event}, - } + pub enum Runtime where + Block = Block, + NodeBlock = opaque::Block, + UncheckedExtrinsic = UncheckedExtrinsic + { + System: system::{Module, Call, Config, Storage, Event}, + RandomnessCollectiveFlip: pallet_randomness_collective_flip::{Module, Call, Storage}, + Contracts: pallet_contracts::{Module, Call, Config, Storage, Event}, + Timestamp: pallet_timestamp::{Module, Call, Storage, Inherent}, + Aura: pallet_aura::{Module, Config }, + EVM: pallet_evm::{Module, Config, Call, Storage, Event}, + Ethereum: pallet_ethereum::{Module, Config, Call, Storage, Event, ValidateUnsigned}, + Grandpa: pallet_grandpa::{Module, Call, Storage, Config, Event}, + Balances: pallet_balances::{Module, Call, Storage, Config, Event}, + TransactionPayment: pallet_transaction_payment::{Module, Storage}, + Sudo: pallet_sudo::{Module, Call, Config, Storage, Event}, + Inflation: pallet_inflation::{Module, Call, Storage}, + Nft: pallet_nft::{Module, Call, Config, Storage, Event}, + Treasury: pallet_treasury::{Module, Call, Storage, Config, Event}, + Vesting: pallet_vesting::{Module, Call, Config, Storage, Event}, + } ); +pub struct TransactionConverter; + +impl fp_rpc::ConvertTransaction for TransactionConverter { + fn convert_transaction(&self, transaction: pallet_ethereum::Transaction) -> UncheckedExtrinsic { + UncheckedExtrinsic::new_unsigned(pallet_ethereum::Call::::transact(transaction).into()) + } +} + +impl fp_rpc::ConvertTransaction for TransactionConverter { + fn convert_transaction(&self, transaction: pallet_ethereum::Transaction) -> opaque::UncheckedExtrinsic { + let extrinsic = UncheckedExtrinsic::new_unsigned(pallet_ethereum::Call::::transact(transaction).into()); + let encoded = extrinsic.encode(); + opaque::UncheckedExtrinsic::decode(&mut &encoded[..]).expect("Encoded extrinsic is always valid") + } +} + /// The address format for describing accounts. pub type Address = AccountId; /// Block header type as expected by this runtime. @@ -583,13 +661,13 @@ pub type SignedBlock = generic::SignedBlock; pub type BlockId = generic::BlockId; /// The SignedExtension to the basic transaction logic. pub type SignedExtra = ( - system::CheckSpecVersion, - system::CheckTxVersion, - system::CheckGenesis, - system::CheckEra, - system::CheckNonce, - system::CheckWeight, - pallet_nft::ChargeTransactionPayment, + system::CheckSpecVersion, + system::CheckTxVersion, + system::CheckGenesis, + system::CheckEra, + system::CheckNonce, + system::CheckWeight, + pallet_nft::ChargeTransactionPayment, ); /// Unchecked extrinsic type as expected by this runtime. pub type UncheckedExtrinsic = generic::UncheckedExtrinsic; @@ -597,9 +675,16 @@ pub type UncheckedExtrinsic = generic::UncheckedExtrinsic; /// Executive: handles dispatch to the various modules. pub type Executive = - frame_executive::Executive, Runtime, AllModules>; + frame_executive::Executive, Runtime, AllModules>; impl_runtime_apis! { + impl pallet_nft::NftApi + for Runtime + { + fn eth_contract_code(account: H160) -> Option> { + >::get_code(&account) + } + } impl pallet_contracts_rpc_runtime_api::ContractsApi for Runtime @@ -628,87 +713,197 @@ impl_runtime_apis! { } } - impl sp_api::Core for Runtime { - fn version() -> RuntimeVersion { - VERSION - } - - fn execute_block(block: Block) { - Executive::execute_block(block) - } - - fn initialize_block(header: &::Header) { - Executive::initialize_block(header) - } - } - - impl sp_api::Metadata for Runtime { - fn metadata() -> OpaqueMetadata { - Runtime::metadata().into() - } - } - - impl sp_block_builder::BlockBuilder for Runtime { - fn apply_extrinsic(extrinsic: ::Extrinsic) -> ApplyExtrinsicResult { - Executive::apply_extrinsic(extrinsic) - } - - fn finalize_block() -> ::Header { - Executive::finalize_block() - } - - fn inherent_extrinsics(data: sp_inherents::InherentData) -> Vec<::Extrinsic> { - data.create_extrinsics() - } - - fn check_inherents( - block: Block, - data: sp_inherents::InherentData, - ) -> sp_inherents::CheckInherentsResult { - data.check_extrinsics(&block) - } - - fn random_seed() -> ::Hash { - RandomnessCollectiveFlip::random_seed() - } - } - - impl sp_transaction_pool::runtime_api::TaggedTransactionQueue for Runtime { - fn validate_transaction( - source: TransactionSource, - tx: ::Extrinsic, - ) -> TransactionValidity { - Executive::validate_transaction(source, tx) - } - } - - impl sp_offchain::OffchainWorkerApi for Runtime { - fn offchain_worker(header: &::Header) { - Executive::offchain_worker(header) - } - } - - impl sp_consensus_aura::AuraApi for Runtime { - fn slot_duration() -> u64 { - Aura::slot_duration() - } - - fn authorities() -> Vec { - Aura::authorities() - } - } - - impl sp_session::SessionKeys for Runtime { - fn generate_session_keys(seed: Option>) -> Vec { - opaque::SessionKeys::generate(seed) - } - - fn decode_session_keys( - encoded: Vec, - ) -> Option, KeyTypeId)>> { - opaque::SessionKeys::decode_into_raw_public_keys(&encoded) - } - } + impl sp_api::Core for Runtime { + fn version() -> RuntimeVersion { + VERSION + } + + fn execute_block(block: Block) { + Executive::execute_block(block) + } + + fn initialize_block(header: &::Header) { + Executive::initialize_block(header) + } + } + + impl sp_api::Metadata for Runtime { + fn metadata() -> OpaqueMetadata { + Runtime::metadata().into() + } + } + + impl sp_block_builder::BlockBuilder for Runtime { + fn apply_extrinsic(extrinsic: ::Extrinsic) -> ApplyExtrinsicResult { + Executive::apply_extrinsic(extrinsic) + } + + fn finalize_block() -> ::Header { + Executive::finalize_block() + } + + fn inherent_extrinsics(data: sp_inherents::InherentData) -> Vec<::Extrinsic> { + data.create_extrinsics() + } + + fn check_inherents( + block: Block, + data: sp_inherents::InherentData, + ) -> sp_inherents::CheckInherentsResult { + data.check_extrinsics(&block) + } + + fn random_seed() -> ::Hash { + RandomnessCollectiveFlip::random_seed().0 + } + } + + impl sp_transaction_pool::runtime_api::TaggedTransactionQueue for Runtime { + fn validate_transaction( + source: TransactionSource, + tx: ::Extrinsic, + ) -> TransactionValidity { + Executive::validate_transaction(source, tx) + } + } + + impl sp_offchain::OffchainWorkerApi for Runtime { + fn offchain_worker(header: &::Header) { + Executive::offchain_worker(header) + } + } + + impl sp_consensus_aura::AuraApi for Runtime { + fn slot_duration() -> u64 { + Aura::slot_duration() + } + + fn authorities() -> Vec { + Aura::authorities() + } + } + + impl fp_rpc::EthereumRuntimeRPCApi for Runtime { + fn chain_id() -> u64 { + ::ChainId::get() + } + + fn account_basic(address: H160) -> EVMAccount { + EVM::account_basic(&address) + } + + fn gas_price() -> U256 { + ::FeeCalculator::min_gas_price() + } + + fn account_code_at(address: H160) -> Vec { + EVM::account_codes(address) + } + + fn author() -> H160 { + >::find_author() + } + + fn storage_at(address: H160, index: U256) -> H256 { + let mut tmp = [0u8; 32]; + index.to_big_endian(&mut tmp); + EVM::account_storages(address, H256::from_slice(&tmp[..])) + } + + fn call( + from: H160, + to: H160, + data: Vec, + value: U256, + gas_limit: U256, + gas_price: Option, + nonce: Option, + estimate: bool, + ) -> Result { + let config = if estimate { + let mut config = ::config().clone(); + config.estimate = true; + Some(config) + } else { + None + }; + + ::Runner::call( + from, + to, + data, + value, + gas_limit.low_u64(), + gas_price, + nonce, + config.as_ref().unwrap_or(::config()), + ).map_err(|err| err.into()) + } + + fn create( + from: H160, + data: Vec, + value: U256, + gas_limit: U256, + gas_price: Option, + nonce: Option, + estimate: bool, + ) -> Result { + let config = if estimate { + let mut config = ::config().clone(); + config.estimate = true; + Some(config) + } else { + None + }; + + ::Runner::create( + from, + data, + value, + gas_limit.low_u64(), + gas_price, + nonce, + config.as_ref().unwrap_or(::config()), + ).map_err(|err| err.into()) + } + + fn current_transaction_statuses() -> Option> { + Ethereum::current_transaction_statuses() + } + + fn current_block() -> Option { + Ethereum::current_block() + } + + fn current_receipts() -> Option> { + Ethereum::current_receipts() + } + + fn current_all() -> ( + Option, + Option>, + Option> + ) { + ( + Ethereum::current_block(), + Ethereum::current_receipts(), + Ethereum::current_transaction_statuses() + ) + } + } + + impl sp_session::SessionKeys for Runtime { + fn generate_session_keys(seed: Option>) -> Vec { + opaque::SessionKeys::generate(seed) + } + + fn decode_session_keys( + encoded: Vec, + ) -> Option, KeyTypeId)>> { + opaque::SessionKeys::decode_into_raw_public_keys(&encoded) + } + } impl fg_primitives::GrandpaApi for Runtime { fn grandpa_authorities() -> GrandpaAuthorityList { @@ -734,8 +929,8 @@ impl_runtime_apis! { // with no values). None } - } - + } + impl frame_system_rpc_runtime_api::AccountNonceApi for Runtime { fn account_nonce(account: AccountId) -> Index { System::account_nonce(account) @@ -751,7 +946,7 @@ impl_runtime_apis! { } } - #[cfg(feature = "runtime-benchmarks")] + #[cfg(feature = "runtime-benchmarks")] impl frame_benchmarking::Benchmark for Runtime { fn dispatch_benchmark( config: frame_benchmarking::BenchmarkConfig @@ -769,7 +964,7 @@ impl_runtime_apis! { // hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850").to_vec().into(), // // System Events // hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7").to_vec().into(), - ]; + ]; let mut batches = Vec::::new(); let params = (&config, &whitelist); @@ -781,4 +976,4 @@ impl_runtime_apis! { Ok(batches) } } -} \ No newline at end of file +} diff --git a/runtime_types.json b/runtime_types.json index dd8303f3da..55819ffcc9 100644 --- a/runtime_types.json +++ b/runtime_types.json @@ -1,4 +1,10 @@ { + "CrossAccountId": { + "_enum": { + "substrate": "AccountId", + "ethereum": "H160" + } + }, "AccessMode": { "_enum": [ "Normal", @@ -15,27 +21,27 @@ } }, "Ownership": { - "Owner": "AccountId", + "Owner": "CrossAccountId", "Fraction": "u128" }, "FungibleItemType": { "Value": "u128" }, "NftItemType": { - "Owner": "AccountId", + "Owner": "CrossAccountId", "ConstData": "Vec", "VariableData": "Vec" }, "ReFungibleItemType": { - "Owner": "Vec>", + "Owner": "Vec>", "ConstData": "Vec", "VariableData": "Vec" }, "SponsorshipState": { "_enum": { - "Disabled": null, - "Unconfirmed": "AccountId", - "Confirmed": "AccountId" + "disabled": null, + "unconfirmed": "AccountId", + "confirmed": "AccountId" } }, "Collection": { diff --git a/smart_contracs/transfer/Cargo.toml b/smart_contracs/transfer/Cargo.toml index b84e6e241d..aa25aec3d8 100755 --- a/smart_contracs/transfer/Cargo.toml +++ b/smart_contracs/transfer/Cargo.toml @@ -4,15 +4,17 @@ version = "0.1.0" authors = ["[Greg Zaitsev] <[your_email]>"] edition = "2018" +[workspace] + [dependencies] -ink_primitives = { git = "https://github.com/usetech-llc/ink", branch = "unique", default-features = false } -ink_metadata = { git = "https://github.com/usetech-llc/ink", branch = "unique", default-features = false, features = ["derive"], optional = true } -ink_env = { git = "https://github.com/usetech-llc/ink", branch = "unique", default-features = false } -ink_storage = { git = "https://github.com/usetech-llc/ink", branch = "unique", default-features = false } -ink_lang = { git = "https://github.com/usetech-llc/ink", branch = "unique", default-features = false } +ink_primitives = { default-features = false } +ink_metadata = { default-features = false, features = ["derive"], optional = true } +ink_env = { default-features = false } +ink_storage = { default-features = false } +ink_lang = { default-features = false } -scale = { package = "parity-scale-codec", version = "1.3", default-features = false, features = ["derive"] } -scale-info = { version = "0.4.1", default-features = false, features = ["derive"], optional = true } +scale = { package = "parity-scale-codec", version = "2.1.1", default-features = false, features = ["derive"] } +scale-info = { version = "0.6.0", default-features = false, features = ["derive"] } [lib] name = "nft_transfer" @@ -28,6 +30,7 @@ std = [ "ink_metadata/std", "ink_env/std", "ink_storage/std", + "ink_lang/std", "ink_primitives/std", "scale/std", "scale-info/std", diff --git a/smart_contracs/transfer/lib.rs b/smart_contracs/transfer/lib.rs index d848bd7606..1a71fef2ca 100755 --- a/smart_contracs/transfer/lib.rs +++ b/smart_contracs/transfer/lib.rs @@ -1,4 +1,6 @@ #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; +use alloc::vec::Vec; use ink_lang as ink; use ink_env::{Environment, DefaultEnvironment}; @@ -36,6 +38,24 @@ impl ink_env::chain_extension::FromStatusCode for NftErrorCode { } } +#[derive(scale::Encode, scale::Decode, scale_info::TypeInfo)] +pub enum CreateItemData { + Nft { + const_data: Vec, + variable_data: Vec, + }, + Fungible { + value: u128, + }, + ReFungible { + const_data: Vec, + variable_data: Vec, + pieces: u128, + }, +} + +type DefaultAccountId = ::AccountId; + #[ink::chain_extension] pub trait NftChainExtension { type ErrorCode = NftErrorCode; @@ -43,11 +63,26 @@ pub trait NftChainExtension { /// Transfer one NFT token from sender /// #[ink(extension = 0, returns_result = false)] - fn transfer(recipient: ::AccountId, collection_id: u32, token_id: u32, amount: u128); + fn transfer(recipient: DefaultAccountId, collection_id: u32, token_id: u32, amount: u128); + #[ink(extension = 1, returns_result = false)] + fn create_item(owner: DefaultAccountId, collection_id: u32, data: CreateItemData); + #[ink(extension = 2, returns_result = false)] + fn create_multiple_items(owner: DefaultAccountId, collection_id: u32, data: Vec); + #[ink(extension = 3, returns_result = false)] + fn approve(spender: DefaultAccountId, collection_id: u32, item_id: u32, amount: u128); + #[ink(extension = 4, returns_result = false)] + fn transfer_from(owner: DefaultAccountId, recipient: DefaultAccountId, collection_id: u32, item_id: u32, amount: u128); + #[ink(extension = 5, returns_result = false)] + fn set_variable_meta_data(collection_id: u32, item_id: u32, data: Vec); + #[ink(extension = 6, returns_result = false)] + fn toggle_white_list(collection_id: u32, address: DefaultAccountId, whitelisted: bool); } -#[ink::contract(env = crate::NftEnvironment)] +#[ink::contract(env = crate::NftEnvironment, dynamic_storage_allocator = true)] mod nft_transfer { + use alloc::vec::Vec; + // use ink_storage::Vec; + use crate::CreateItemData; #[ink(storage)] pub struct NftTransfer { @@ -69,6 +104,42 @@ mod nft_transfer { .extension() .transfer(recipient, collection_id, token_id, amount); } + #[ink(message)] + pub fn create_item(&mut self, recipient: AccountId, collection_id: u32, data: CreateItemData) { + let _ = self.env() + .extension() + .create_item(recipient, collection_id, data); + } + #[ink(message)] + pub fn create_multiple_items(&mut self, owner: AccountId, collection_id: u32, data: Vec) { + let _ = self.env() + .extension() + .create_multiple_items(owner, collection_id, data); + } + #[ink(message)] + pub fn approve(&mut self, spender: AccountId, collection_id: u32, item_id: u32, amount: u128) { + let _ = self.env() + .extension() + .approve(spender, collection_id, item_id, amount); + } + #[ink(message)] + pub fn transfer_from(&mut self, owner: AccountId, recipient: AccountId, collection_id: u32, item_id: u32, amount: u128) { + let _ = self.env() + .extension() + .transfer_from(owner, recipient, collection_id, item_id, amount); + } + #[ink(message)] + pub fn set_variable_meta_data(&mut self, collection_id: u32, item_id: u32, data: Vec) { + let _ = self.env() + .extension() + .set_variable_meta_data(collection_id, item_id, data); + } + #[ink(message)] + pub fn toggle_white_list(&mut self, collection_id: u32, address: AccountId, whitelisted: bool) { + let _ = self.env() + .extension() + .toggle_white_list(collection_id, address, whitelisted); + } } diff --git a/tests/package.json b/tests/package.json index 7255d17aaf..bd46a21aa8 100644 --- a/tests/package.json +++ b/tests/package.json @@ -4,21 +4,22 @@ "description": "Substrate Nft tests", "main": "", "devDependencies": { - "@polkadot/dev": "^0.61.24", - "@polkadot/ts": "^0.3.59", - "@polkadot/typegen": "^3.6.4", - "@polkadot/util-crypto": "^5.4.4", - "@types/chai": "^4.2.12", + "@polkadot/dev": "^0.62.10", + "@polkadot/ts": "^0.3.63", + "@polkadot/typegen": "^4.7.2", + "@polkadot/util-crypto": "^6.3.1", + "@types/chai": "^4.2.17", "@types/chai-as-promised": "^7.1.3", - "@types/mocha": "^8.0.3", - "chai": "^4.2.0", - "mocha": "^8.1.1", - "ts-node": "^9.0.0", - "tslint": "^5.20.1", - "typescript": "^3.9.7" + "@types/mocha": "^8.2.2", + "chai": "^4.3.4", + "mocha": "^8.3.2", + "ts-node": "^9.1.1", + "tslint": "^6.1.3", + "typescript": "^4.2.4" }, "scripts": { "test": "mocha --timeout 9999999 -r ts-node/register ./**/*.test.ts", + "testEth": "mocha --timeout 9999999 -r ts-node/register ./**/eth/**/*.test.ts", "load": "mocha --timeout 9999999 -r ts-node/register ./**/*.load.ts", "loadTransfer": "ts-node src/transfer.nload.ts", "testCollision": "mocha --timeout 9999999 -r ts-node/register ./src/collision-tests/*.test.ts", @@ -58,11 +59,12 @@ "license": "SEE LICENSE IN ../LICENSE", "homepage": "", "dependencies": { - "@polkadot/api": "3.8.1", - "@polkadot/api-contract": "3.8.1", - "@polkadot/util": "5.6.2", - "bignumber.js": "^9.0.0", - "chai-as-promised": "^7.1.1" + "@polkadot/api": "4.7.2", + "@polkadot/api-contract": "4.7.2", + "@polkadot/util": "6.3.1", + "bignumber.js": "^9.0.1", + "chai-as-promised": "^7.1.1", + "web3": "^1.3.5" }, "standard": { "globals": [ diff --git a/tests/src/addCollectionAdmin.test.ts b/tests/src/addCollectionAdmin.test.ts index b76d0eb0b7..2fe29182da 100644 --- a/tests/src/addCollectionAdmin.test.ts +++ b/tests/src/addCollectionAdmin.test.ts @@ -9,7 +9,7 @@ import chai from 'chai'; import chaiAsPromised from 'chai-as-promised'; import privateKey from './substrate/privateKey'; import { default as usingApi, submitTransactionAsync, submitTransactionExpectFailAsync } from './substrate/substrate-api'; -import {createCollectionExpectSuccess, destroyCollectionExpectSuccess} from './util/helpers'; +import {createCollectionExpectSuccess, destroyCollectionExpectSuccess, normalizeAccountId} from './util/helpers'; chai.use(chaiAsPromised); const expect = chai.expect; @@ -22,13 +22,13 @@ describe('Integration Test addCollectionAdmin(collection_id, new_admin_id):', () const bob = privateKey('//Bob'); const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON(); - expect(collection.Owner.toString()).to.be.eq(alice.address); + expect(collection.Owner).to.be.deep.eq(normalizeAccountId(alice.address)); - const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, bob.address); + const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(bob.address)); await submitTransactionAsync(alice, changeAdminTx); const adminListAfterAddAdmin: any = (await api.query.nft.adminList(collectionId)); - expect(adminListAfterAddAdmin).to.be.contains(bob.address); + expect(adminListAfterAddAdmin).to.be.contains(normalizeAccountId(bob.address)); }); }); @@ -40,19 +40,19 @@ describe('Integration Test addCollectionAdmin(collection_id, new_admin_id):', () const Charlie = privateKey('//CHARLIE'); const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON(); - expect(collection.Owner.toString()).to.be.eq(Alice.address); + expect(collection.Owner).to.be.deep.eq(normalizeAccountId(Alice.address)); - const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, Bob.address); + const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Bob.address)); await submitTransactionAsync(Alice, changeAdminTx); const adminListAfterAddAdmin: any = (await api.query.nft.adminList(collectionId)); - expect(adminListAfterAddAdmin).to.be.contains(Bob.address); + expect(adminListAfterAddAdmin).to.be.contains(normalizeAccountId(Bob.address)); - const changeAdminTxCharlie = api.tx.nft.addCollectionAdmin(collectionId, Charlie.address); + const changeAdminTxCharlie = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Charlie.address)); await submitTransactionAsync(Bob, changeAdminTxCharlie); const adminListAfterAddNewAdmin: any = (await api.query.nft.adminList(collectionId)); - expect(adminListAfterAddNewAdmin).to.be.contains(Bob.address); - expect(adminListAfterAddNewAdmin).to.be.contains(Charlie.address); + expect(adminListAfterAddNewAdmin).to.be.contains(normalizeAccountId(Bob.address)); + expect(adminListAfterAddNewAdmin).to.be.contains(normalizeAccountId(Charlie.address)); }); }); }); @@ -64,11 +64,11 @@ describe('Negative Integration Test addCollectionAdmin(collection_id, new_admin_ const alice = privateKey('//Alice'); const nonOwner = privateKey('//Bob_stash'); - const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, alice.address); + const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(alice.address)); await expect(submitTransactionExpectFailAsync(nonOwner, changeAdminTx)).to.be.rejected; const adminListAfterAddAdmin: any = (await api.query.nft.adminList(collectionId)); - expect(adminListAfterAddAdmin).not.to.be.contains(alice.address); + expect(adminListAfterAddAdmin).not.to.be.contains(normalizeAccountId(alice.address)); // Verifying that nothing bad happened (network is live, new collections can be created, etc.) await createCollectionExpectSuccess(); @@ -81,7 +81,7 @@ describe('Negative Integration Test addCollectionAdmin(collection_id, new_admin_ const alice = privateKey('//Alice'); const bob = privateKey('//Bob'); - const changeOwnerTx = api.tx.nft.addCollectionAdmin(collectionId, bob.address); + const changeOwnerTx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(bob.address)); await expect(submitTransactionExpectFailAsync(alice, changeOwnerTx)).to.be.rejected; // Verifying that nothing bad happened (network is live, new collections can be created, etc.) @@ -95,7 +95,7 @@ describe('Negative Integration Test addCollectionAdmin(collection_id, new_admin_ const Alice = privateKey('//Alice'); const Bob = privateKey('//Bob'); await destroyCollectionExpectSuccess(collectionId); - const changeOwnerTx = api.tx.nft.addCollectionAdmin(collectionId, Bob.address); + const changeOwnerTx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Bob.address)); await expect(submitTransactionExpectFailAsync(Alice, changeOwnerTx)).to.be.rejected; // Verifying that nothing bad happened (network is live, new collections can be created, etc.) @@ -122,13 +122,13 @@ describe('Negative Integration Test addCollectionAdmin(collection_id, new_admin_ expect(chainAdminLimit).to.be.equal(5); for (let i = 0; i < chainAdminLimit; i++) { - const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, accounts[i]); + const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(accounts[i])); await submitTransactionAsync(Alice, changeAdminTx); const adminListAfterAddAdmin: any = (await api.query.nft.adminList(collectionId)); - expect(adminListAfterAddAdmin).to.be.contains(accounts[i]); + expect(adminListAfterAddAdmin).to.be.contains(normalizeAccountId(accounts[i])); } - const tx = api.tx.nft.addCollectionAdmin(collectionId, accounts[chainAdminLimit]); + const tx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(accounts[chainAdminLimit])); await expect(submitTransactionExpectFailAsync(Alice, tx)).to.be.rejected; }); }); diff --git a/tests/src/addToContractWhiteList.test.ts b/tests/src/addToContractWhiteList.test.ts index b17bfdad50..2847375666 100644 --- a/tests/src/addToContractWhiteList.test.ts +++ b/tests/src/addToContractWhiteList.test.ts @@ -11,7 +11,7 @@ import { deployFlipper } from "./util/contracthelpers"; import { - getGenericResult + getGenericResult, normalizeAccountId } from "./util/helpers" chai.use(chaiAsPromised); diff --git a/tests/src/addToWhiteList.test.ts b/tests/src/addToWhiteList.test.ts index 472d93bedb..6bab6577e3 100644 --- a/tests/src/addToWhiteList.test.ts +++ b/tests/src/addToWhiteList.test.ts @@ -15,6 +15,7 @@ import { destroyCollectionExpectSuccess, enablePublicMintingExpectSuccess, enableWhiteListExpectSuccess, + normalizeAccountId, } from './util/helpers'; chai.use(chaiAsPromised); @@ -54,7 +55,7 @@ describe('Negative Integration Test ext. addToWhiteList()', () => { const collectionId = parseInt((await api.query.nft.createdCollectionCount()).toString()) + 1; const Bob = privateKey('//Bob'); - const tx = api.tx.nft.addToWhiteList(collectionId, Bob.address); + const tx = api.tx.nft.addToWhiteList(collectionId, normalizeAccountId(Bob.address)); await expect(submitTransactionExpectFailAsync(Alice, tx)).to.be.rejected; }); }); @@ -66,7 +67,7 @@ describe('Negative Integration Test ext. addToWhiteList()', () => { // tslint:disable-next-line: no-bitwise const collectionId = await createCollectionExpectSuccess(); await destroyCollectionExpectSuccess(collectionId); - const tx = api.tx.nft.addToWhiteList(collectionId, Bob.address); + const tx = api.tx.nft.addToWhiteList(collectionId, normalizeAccountId(Bob.address)); await expect(submitTransactionExpectFailAsync(Alice, tx)).to.be.rejected; }); }); @@ -78,7 +79,7 @@ describe('Negative Integration Test ext. addToWhiteList()', () => { const collectionId = await createCollectionExpectSuccess(); await enableWhiteListExpectSuccess(Alice, collectionId); await enablePublicMintingExpectSuccess(Alice, collectionId); - const tx = api.tx.nft.createItem(collectionId, Ferdie.address, 'NFT'); + const tx = api.tx.nft.createItem(collectionId, normalizeAccountId(Ferdie.address), 'NFT'); await expect(submitTransactionExpectFailAsync(Ferdie, tx)).to.be.rejected; }); }); diff --git a/tests/src/burnItem.test.ts b/tests/src/burnItem.test.ts index 4ffa8cf14e..816288396f 100644 --- a/tests/src/burnItem.test.ts +++ b/tests/src/burnItem.test.ts @@ -10,7 +10,8 @@ import { createCollectionExpectSuccess, createItemExpectSuccess, getGenericResult, - destroyCollectionExpectSuccess + destroyCollectionExpectSuccess, + normalizeAccountId } from './util/helpers'; import { nullPublicKey } from "./accounts"; @@ -99,7 +100,7 @@ describe('integration test: ext. burnItem():', () => { await usingApi(async (api) => { // Transfer 1/100 of the token to Bob - const transfertx = api.tx.nft.transfer(bob.address, collectionId, tokenId, 1); + const transfertx = api.tx.nft.transfer(normalizeAccountId(bob.address), collectionId, tokenId, 1); const events1 = await submitTransactionAsync(alice, transfertx); const result1 = getGenericResult(events1); @@ -119,9 +120,9 @@ describe('integration test: ext. burnItem():', () => { expect(result1.success).to.be.true; expect(balanceBefore).to.be.not.null; expect(balanceBefore.Owner.length).to.be.equal(2); - expect(balanceBefore.Owner[0].Owner).to.be.equal(alice.address); + expect(balanceBefore.Owner[0].Owner).to.be.deep.equal(normalizeAccountId(alice.address)); expect(balanceBefore.Owner[0].Fraction).to.be.equal(99); - expect(balanceBefore.Owner[1].Owner).to.be.equal(bob.address); + expect(balanceBefore.Owner[1].Owner).to.be.deep.equal(normalizeAccountId(bob.address)); expect(balanceBefore.Owner[1].Fraction).to.be.equal(1); // What to expect after burning @@ -129,7 +130,7 @@ describe('integration test: ext. burnItem():', () => { expect(balance).to.be.not.null; expect(balance.Owner.length).to.be.equal(1); expect(balance.Owner[0].Fraction).to.be.equal(99); - expect(balance.Owner[0].Owner).to.be.equal(alice.address); + expect(balance.Owner[0].Owner).to.be.deep.equal(normalizeAccountId(alice.address)); }); }); @@ -203,7 +204,7 @@ describe('Negative integration test: ext. burnItem():', () => { const result1 = getGenericResult(events1); expect(result1.success).to.be.true; - const tx = api.tx.nft.transfer(bob.address, collectionId, tokenId, 0); + const tx = api.tx.nft.transfer(normalizeAccountId(bob.address), collectionId, tokenId, 0); const badTransaction = async function () { await submitTransactionExpectFailAsync(alice, tx); }; diff --git a/tests/src/change-collection-owner.test.ts b/tests/src/change-collection-owner.test.ts index 4c74393690..5814f83830 100644 --- a/tests/src/change-collection-owner.test.ts +++ b/tests/src/change-collection-owner.test.ts @@ -7,7 +7,7 @@ import chai from 'chai'; import chaiAsPromised from 'chai-as-promised'; import privateKey from './substrate/privateKey'; import { default as usingApi, submitTransactionAsync, submitTransactionExpectFailAsync } from "./substrate/substrate-api"; -import { createCollectionExpectSuccess, createCollectionExpectFailure } from "./util/helpers"; +import { createCollectionExpectSuccess, createCollectionExpectFailure, normalizeAccountId } from "./util/helpers"; chai.use(chaiAsPromised); const expect = chai.expect; @@ -20,13 +20,13 @@ describe('Integration Test changeCollectionOwner(collection_id, new_owner):', () const bob = privateKey('//Bob'); const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON(); - expect(collection.Owner.toString()).to.be.eq(alice.address); + expect(collection.Owner).to.be.deep.eq(normalizeAccountId(alice.address)); - const changeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, bob.address); + const changeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, normalizeAccountId(bob.address)); await submitTransactionAsync(alice, changeOwnerTx); const collectionAfterOwnerChange: any = (await api.query.nft.collectionById(collectionId)).toJSON(); - expect(collectionAfterOwnerChange.Owner.toString()).to.be.eq(bob.address); + expect(collectionAfterOwnerChange.Owner).to.be.deep.eq(normalizeAccountId(bob.address)); }); }); }); @@ -38,11 +38,11 @@ describe('Negative Integration Test changeCollectionOwner(collection_id, new_own const alice = privateKey('//Alice'); const bob = privateKey('//Bob'); - const changeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, bob.address); + const changeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, normalizeAccountId(bob.address)); await expect(submitTransactionExpectFailAsync(bob, changeOwnerTx)).to.be.rejected; const collectionAfterOwnerChange: any = (await api.query.nft.collectionById(collectionId)).toJSON(); - expect(collectionAfterOwnerChange.Owner.toString()).to.be.eq(alice.address); + expect(collectionAfterOwnerChange.Owner).to.be.deep.eq(normalizeAccountId(alice.address)); // Verifying that nothing bad happened (network is live, new collections can be created, etc.) await createCollectionExpectSuccess(); @@ -54,7 +54,7 @@ describe('Negative Integration Test changeCollectionOwner(collection_id, new_own const alice = privateKey('//Alice'); const bob = privateKey('//Bob'); - const changeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, bob.address); + const changeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, normalizeAccountId(bob.address)); await expect(submitTransactionExpectFailAsync(alice, changeOwnerTx)).to.be.rejected; // Verifying that nothing bad happened (network is live, new collections can be created, etc.) diff --git a/tests/src/confirmSponsorship.test.ts b/tests/src/confirmSponsorship.test.ts index d034710fad..3bfe740e6a 100644 --- a/tests/src/confirmSponsorship.test.ts +++ b/tests/src/confirmSponsorship.test.ts @@ -19,6 +19,7 @@ import { enableWhiteListExpectSuccess, enablePublicMintingExpectSuccess, addToWhiteListExpectSuccess, + normalizeAccountId, } from "./util/helpers"; import { Keyring } from "@polkadot/api"; import { IKeyringPair } from "@polkadot/types/types"; @@ -76,7 +77,7 @@ describe('integration test: ext. confirmSponsorship():', () => { const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', zeroBalance.address); // Transfer this tokens from unused address to Alice - const zeroToAlice = api.tx.nft.transfer(zeroBalance.address, collectionId, itemId, 0); + const zeroToAlice = api.tx.nft.transfer(normalizeAccountId(zeroBalance.address), collectionId, itemId, 0); const events = await submitTransactionAsync(zeroBalance, zeroToAlice); const result = getGenericResult(events); @@ -103,7 +104,7 @@ describe('integration test: ext. confirmSponsorship():', () => { const itemId = await createItemExpectSuccess(alice, collectionId, 'Fungible', zeroBalance.address); // Transfer this tokens from unused address to Alice - const zeroToAlice = api.tx.nft.transfer(zeroBalance.address, collectionId, itemId, 1); + const zeroToAlice = api.tx.nft.transfer(normalizeAccountId(zeroBalance.address), collectionId, itemId, 1); const events1 = await submitTransactionAsync(zeroBalance, zeroToAlice); const result1 = getGenericResult(events1); @@ -129,7 +130,7 @@ describe('integration test: ext. confirmSponsorship():', () => { const itemId = await createItemExpectSuccess(alice, collectionId, 'ReFungible', zeroBalance.address); // Transfer this tokens from unused address to Alice - const zeroToAlice = api.tx.nft.transfer(zeroBalance.address, collectionId, itemId, 1); + const zeroToAlice = api.tx.nft.transfer(normalizeAccountId(zeroBalance.address), collectionId, itemId, 1); const events1 = await submitTransactionAsync(zeroBalance, zeroToAlice); const result1 = getGenericResult(events1); @@ -184,13 +185,13 @@ describe('integration test: ext. confirmSponsorship():', () => { // Transfer this token from Alice to unused address and back // Alice to Zero gets sponsored - const aliceToZero = api.tx.nft.transfer(zeroBalance.address, collectionId, itemId, 0); + const aliceToZero = api.tx.nft.transfer(normalizeAccountId(zeroBalance.address), collectionId, itemId, 0); const events1 = await submitTransactionAsync(alice, aliceToZero); const result1 = getGenericResult(events1); // Second transfer should fail const AsponsorBalance = new BigNumber((await api.query.system.account(bob.address)).data.free.toString()); - const zeroToAlice = api.tx.nft.transfer(alice.address, collectionId, itemId, 0); + const zeroToAlice = api.tx.nft.transfer(normalizeAccountId(alice.address), collectionId, itemId, 0); const badTransaction = async function () { await submitTransactionExpectFailAsync(zeroBalance, zeroToAlice); }; @@ -222,7 +223,7 @@ describe('integration test: ext. confirmSponsorship():', () => { const itemId = await createItemExpectSuccess(alice, collectionId, 'Fungible', zeroBalance.address); // Transfer this tokens in parts from unused address to Alice - const zeroToAlice = api.tx.nft.transfer(zeroBalance.address, collectionId, itemId, 1); + const zeroToAlice = api.tx.nft.transfer(normalizeAccountId(zeroBalance.address), collectionId, itemId, 1); const events1 = await submitTransactionAsync(zeroBalance, zeroToAlice); const result1 = getGenericResult(events1); @@ -260,13 +261,13 @@ describe('integration test: ext. confirmSponsorship():', () => { // Transfer this token from Alice to unused address and back // Alice to Zero gets sponsored - const aliceToZero = api.tx.nft.transfer(zeroBalance.address, collectionId, itemId, 1); + const aliceToZero = api.tx.nft.transfer(normalizeAccountId(zeroBalance.address), collectionId, itemId, 1); const events1 = await submitTransactionAsync(alice, aliceToZero); const result1 = getGenericResult(events1); // Second transfer should fail const AsponsorBalance = new BigNumber((await api.query.system.account(bob.address)).data.free.toString()); - const zeroToAlice = api.tx.nft.transfer(alice.address, collectionId, itemId, 1); + const zeroToAlice = api.tx.nft.transfer(normalizeAccountId(alice.address), collectionId, itemId, 1); const badTransaction = async function () { await submitTransactionExpectFailAsync(zeroBalance, zeroToAlice); }; diff --git a/tests/src/contracts.test.ts b/tests/src/contracts.test.ts index a1c6398ca0..5733c3285a 100644 --- a/tests/src/contracts.test.ts +++ b/tests/src/contracts.test.ts @@ -16,9 +16,16 @@ import { } from "./util/contracthelpers"; import { + addToWhiteListExpectSuccess, + approveExpectSuccess, createCollectionExpectSuccess, createItemExpectSuccess, - getGenericResult + enablePublicMintingExpectSuccess, + enableWhiteListExpectSuccess, + getGenericResult, + normalizeAccountId, + isWhitelisted, + transferFromExpectSuccess } from "./util/helpers"; @@ -26,7 +33,7 @@ chai.use(chaiAsPromised); const expect = chai.expect; const value = 0; -const gasLimit = 3000n * 1000000n; +const gasLimit = 9000n * 1000000n; const marketContractAddress = '5CYN9j3YvRkqxewoxeSvRbhAym4465C57uMmX5j4yz99L5H6'; describe('Contracts', () => { @@ -53,8 +60,10 @@ describe('Contracts', () => { expect(newContractInstance.address.toString()).to.equal(marketContractAddress); }); }); +}); - it('Can transfer NFT using smart contract.', async () => { +describe.only('Chain extensions', () => { + it('Transfer CE', async () => { await usingApi(async api => { const alice = privateKey("//Alice"); const bob = privateKey("//Bob"); @@ -63,18 +72,182 @@ describe('Contracts', () => { const collectionId = await createCollectionExpectSuccess(); const tokenId = await createItemExpectSuccess(alice, collectionId, 'NFT'); const [contract, deployer] = await deployTransferContract(api); - const tokenBefore: any = (await api.query.nft.nftItemList(collectionId, tokenId) as any).unwrap(); + const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, contract.address); + await submitTransactionAsync(alice, changeAdminTx); + + const tokenBefore: any = (await api.query.nft.nftItemList(collectionId, tokenId) as any).toJSON(); // Transfer const transferTx = contract.tx.transfer(value, gasLimit, bob.address, collectionId, tokenId, 1); const events = await submitTransactionAsync(alice, transferTx); const result = getGenericResult(events); - const tokenAfter: any = (await api.query.nft.nftItemList(collectionId, tokenId) as any).unwrap(); + const tokenAfter: any = (await api.query.nft.nftItemList(collectionId, tokenId) as any).toJSON(); // tslint:disable-next-line:no-unused-expression expect(result.success).to.be.true; - expect(tokenBefore.Owner.toString()).to.be.equal(alice.address); - expect(tokenAfter.Owner.toString()).to.be.equal(bob.address); + expect(tokenBefore.Owner).to.be.deep.equal(normalizeAccountId(alice.address)); + expect(tokenAfter.Owner).to.be.deep.equal(normalizeAccountId(bob.address)); + }); + }); + + it('Mint CE', async () => { + await usingApi(async api => { + const alice = privateKey('//Alice'); + const bob = privateKey('//Bob'); + + const collectionId = await createCollectionExpectSuccess(); + const [contract, deployer] = await deployTransferContract(api); + await enablePublicMintingExpectSuccess(alice, collectionId); + await enableWhiteListExpectSuccess(alice, collectionId); + await addToWhiteListExpectSuccess(alice, collectionId, contract.address); + await addToWhiteListExpectSuccess(alice, collectionId, bob.address); + + const transferTx = contract.tx.createItem(value, gasLimit, bob.address, collectionId, { Nft: {const_data: '0x010203', variable_data: '0x020304' }}); + const events = await submitTransactionAsync(alice, transferTx); + const result = getGenericResult(events); + expect(result.success).to.be.true; + + const tokensAfter: any = (await api.query.nft.nftItemList.entries(collectionId) as any).map((kv: any) => kv[1].toJSON()); + expect(tokensAfter).to.be.deep.equal([ + { + Owner: bob.address, + ConstData: '0x010203', + VariableData: '0x020304', + }, + ]); + }); + }); + + it('Bulk mint CE', async () => { + await usingApi(async api => { + const alice = privateKey('//Alice'); + const bob = privateKey('//Bob'); + + const collectionId = await createCollectionExpectSuccess(); + const [contract, deployer] = await deployTransferContract(api); + await enablePublicMintingExpectSuccess(alice, collectionId); + await enableWhiteListExpectSuccess(alice, collectionId); + await addToWhiteListExpectSuccess(alice, collectionId, contract.address); + await addToWhiteListExpectSuccess(alice, collectionId, bob.address); + + const transferTx = contract.tx.createMultipleItems(value, gasLimit, bob.address, collectionId, [ + { Nft: { const_data: '0x010203', variable_data: '0x020304' } }, + { Nft: { const_data: '0x010204', variable_data: '0x020305' } }, + { Nft: { const_data: '0x010205', variable_data: '0x020306' } } + ]); + const events = await submitTransactionAsync(alice, transferTx); + const result = getGenericResult(events); + expect(result.success).to.be.true; + + const tokensAfter: any = (await api.query.nft.nftItemList.entries(collectionId) as any) + .map((kv: any) => kv[1].toJSON()) + .sort((a: any, b: any) => a.ConstData.localeCompare(b.ConstData)); + expect(tokensAfter).to.be.deep.equal([ + { + Owner: bob.address, + ConstData: '0x010203', + VariableData: '0x020304', + }, + { + Owner: bob.address, + ConstData: '0x010204', + VariableData: '0x020305', + }, + { + Owner: bob.address, + ConstData: '0x010205', + VariableData: '0x020306', + }, + ]); + }); + }); + + it('Approve CE', async () => { + await usingApi(async api => { + const alice = privateKey('//Alice'); + const bob = privateKey('//Bob'); + const charlie = privateKey('//Charlie'); + + const collectionId = await createCollectionExpectSuccess(); + const [contract, deployer] = await deployTransferContract(api); + const tokenId = await createItemExpectSuccess(alice, collectionId, 'NFT', contract.address.toString()); + + const transferTx = contract.tx.approve(value, gasLimit, bob.address, collectionId, tokenId, 1); + const events = await submitTransactionAsync(alice, transferTx); + const result = getGenericResult(events); + expect(result.success).to.be.true; + + await transferFromExpectSuccess(collectionId, tokenId, bob, contract.address.toString(), charlie, 1, 'NFT'); + }); + }); + + it('TransferFrom CE', async () => { + await usingApi(async api => { + const alice = privateKey('//Alice'); + const bob = privateKey('//Bob'); + const charlie = privateKey('//Charlie'); + + const collectionId = await createCollectionExpectSuccess(); + const [contract, deployer] = await deployTransferContract(api); + const tokenId = await createItemExpectSuccess(alice, collectionId, 'NFT', bob.address); + await approveExpectSuccess(collectionId, tokenId, bob, contract.address.toString(), 1); + + const transferTx = contract.tx.transferFrom(value, gasLimit, bob.address, charlie.address, collectionId, tokenId, 1); + const events = await submitTransactionAsync(alice, transferTx); + const result = getGenericResult(events); + expect(result.success).to.be.true; + + const token: any = (await api.query.nft.nftItemList(collectionId, tokenId) as any).unwrap() + expect(token.Owner.toString()).to.be.equal(charlie.address); + }); + }); + + it('SetVariableMetaData CE', async () => { + await usingApi(async api => { + const alice = privateKey('//Alice'); + + const collectionId = await createCollectionExpectSuccess(); + const [contract, deployer] = await deployTransferContract(api); + const tokenId = await createItemExpectSuccess(alice, collectionId, 'NFT', contract.address.toString()); + + const transferTx = contract.tx.setVariableMetaData(value, gasLimit, collectionId, tokenId, '0x121314'); + const events = await submitTransactionAsync(alice, transferTx); + const result = getGenericResult(events); + expect(result.success).to.be.true; + + const token: any = (await api.query.nft.nftItemList(collectionId, tokenId) as any).unwrap() + expect(token.VariableData.toString()).to.be.equal('0x121314'); + }); + }); + + it('ToggleWhiteList CE', async () => { + await usingApi(async api => { + const alice = privateKey('//Alice'); + const bob = privateKey('//Bob'); + + const collectionId = await createCollectionExpectSuccess(); + const [contract, deployer] = await deployTransferContract(api); + const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, contract.address); + await submitTransactionAsync(alice, changeAdminTx); + + expect(await isWhitelisted(collectionId, bob.address)).to.be.false; + + { + const transferTx = contract.tx.toggleWhiteList(value, gasLimit, collectionId, bob.address, true); + const events = await submitTransactionAsync(alice, transferTx); + const result = getGenericResult(events); + expect(result.success).to.be.true; + + expect(await isWhitelisted(collectionId, bob.address)).to.be.true; + } + { + const transferTx = contract.tx.toggleWhiteList(value, gasLimit, collectionId, bob.address, false); + const events = await submitTransactionAsync(alice, transferTx); + const result = getGenericResult(events); + expect(result.success).to.be.true; + + expect(await isWhitelisted(collectionId, bob.address)).to.be.false; + } }); }); }); diff --git a/tests/src/createMultipleItems.test.ts b/tests/src/createMultipleItems.test.ts index bcd5752dee..1edd066681 100644 --- a/tests/src/createMultipleItems.test.ts +++ b/tests/src/createMultipleItems.test.ts @@ -13,6 +13,7 @@ import { destroyCollectionExpectSuccess, getGenericResult, IReFungibleTokenDataType, + normalizeAccountId, setCollectionLimitsExpectSuccess, } from './util/helpers'; @@ -33,8 +34,8 @@ describe('Integration Test createMultipleItems(collection_id, owner, items_data) expect(itemsListIndexBefore.toNumber()).to.be.equal(0); const Alice = privateKey('//Alice'); const args = [{ nft: ['0x31', '0x31'] }, { nft: ['0x32', '0x32'] }, { nft: ['0x33', '0x33'] }]; - const createMultipleItemsTx = await api.tx.nft - .createMultipleItems(collectionId, Alice.address, args); + const createMultipleItemsTx = api.tx.nft + .createMultipleItems(collectionId, normalizeAccountId(Alice.address), args); await submitTransactionAsync(Alice, createMultipleItemsTx); const itemsListIndexAfter = await api.query.nft.itemListIndex(collectionId) as unknown as BN; expect(itemsListIndexAfter.toNumber()).to.be.equal(3); @@ -42,9 +43,9 @@ describe('Integration Test createMultipleItems(collection_id, owner, items_data) const token2Data = (await api.query.nft.nftItemList(collectionId, 2)).toJSON() as unknown as ITokenDataType; const token3Data = (await api.query.nft.nftItemList(collectionId, 3)).toJSON() as unknown as ITokenDataType; - expect(token1Data.Owner.toString()).to.be.equal(Alice.address); - expect(token2Data.Owner.toString()).to.be.equal(Alice.address); - expect(token3Data.Owner.toString()).to.be.equal(Alice.address); + expect(token1Data.Owner).to.be.deep.equal(normalizeAccountId(Alice.address)); + expect(token2Data.Owner).to.be.deep.equal(normalizeAccountId(Alice.address)); + expect(token3Data.Owner).to.be.deep.equal(normalizeAccountId(Alice.address)); expect(token1Data.ConstData.toString()).to.be.equal('0x31'); expect(token2Data.ConstData.toString()).to.be.equal('0x32'); @@ -67,23 +68,23 @@ describe('Integration Test createMultipleItems(collection_id, owner, items_data) {refungible: {const_data: [0x32], variable_data: [0x32], pieces: 1}}, {refungible: {const_data: [0x33], variable_data: [0x33], pieces: 1}}, ]; - const createMultipleItemsTx = await api.tx.nft - .createMultipleItems(collectionId, Alice.address, args); + const createMultipleItemsTx = api.tx.nft + .createMultipleItems(collectionId, normalizeAccountId(Alice.address), args); await submitTransactionAsync(Alice, createMultipleItemsTx); const itemsListIndexAfter = await api.query.nft.itemListIndex(collectionId) as unknown as BN; expect(itemsListIndexAfter.toNumber()).to.be.equal(3); - const token1Data = (await api.query.nft.reFungibleItemList(collectionId, 1) as any).unwrap() as unknown as IReFungibleTokenDataType; - const token2Data = (await api.query.nft.reFungibleItemList(collectionId, 2) as any).unwrap() as unknown as IReFungibleTokenDataType; - const token3Data = (await api.query.nft.reFungibleItemList(collectionId, 3) as any).unwrap() as unknown as IReFungibleTokenDataType; + const token1Data = (await api.query.nft.reFungibleItemList(collectionId, 1) as any).toJSON() as unknown as IReFungibleTokenDataType; + const token2Data = (await api.query.nft.reFungibleItemList(collectionId, 2) as any).toJSON() as unknown as IReFungibleTokenDataType; + const token3Data = (await api.query.nft.reFungibleItemList(collectionId, 3) as any).toJSON() as unknown as IReFungibleTokenDataType; - expect(token1Data.Owner[0].Owner.toString()).to.be.equal(Alice.address); - expect(token1Data.Owner[0].Fraction.toNumber()).to.be.equal(1); + expect(token1Data.Owner[0].Owner).to.be.deep.equal(normalizeAccountId(Alice.address)); + expect(token1Data.Owner[0].Fraction).to.be.equal(1); - expect(token2Data.Owner[0].Owner.toString()).to.be.equal(Alice.address); - expect(token2Data.Owner[0].Fraction.toNumber()).to.be.equal(1); + expect(token2Data.Owner[0].Owner).to.be.deep.equal(normalizeAccountId(Alice.address)); + expect(token2Data.Owner[0].Fraction).to.be.equal(1); - expect(token3Data.Owner[0].Owner.toString()).to.be.equal(Alice.address); - expect(token3Data.Owner[0].Fraction.toNumber()).to.be.equal(1); + expect(token3Data.Owner[0].Owner).to.be.deep.equal(normalizeAccountId(Alice.address)); + expect(token3Data.Owner[0].Fraction).to.be.equal(1); expect(token1Data.ConstData.toString()).to.be.equal('0x31'); expect(token2Data.ConstData.toString()).to.be.equal('0x32'); @@ -107,7 +108,7 @@ describe('Integration Test createMultipleItems(collection_id, owner, items_data) { nft: ['A', 'A'] }, { nft: ['B', 'B'] }, ]; - const createMultipleItemsTx = api.tx.nft.createMultipleItems(collectionId, alice.address, args); + const createMultipleItemsTx = api.tx.nft.createMultipleItems(collectionId, normalizeAccountId(alice.address), args); const events = await submitTransactionAsync(alice, createMultipleItemsTx); const result = getGenericResult(events); expect(result.success).to.be.true; @@ -123,7 +124,7 @@ describe('Negative Integration Test createMultipleItems(collection_id, owner, it try { const args = [{ invalid: null }, { invalid: null }, { invalid: null }]; const createMultipleItemsTx = await api.tx.nft - .createMultipleItems(collectionId, Alice.address, args); + .createMultipleItems(collectionId, normalizeAccountId(Alice.address), args); await expect(submitTransactionExpectFailAsync(Alice, createMultipleItemsTx)).to.be.rejected; } catch (e) { // tslint:disable-next-line:no-unused-expression @@ -136,8 +137,8 @@ describe('Negative Integration Test createMultipleItems(collection_id, owner, it await usingApi(async (api: ApiPromise) => { const collectionId = parseInt((await api.query.nft.createdCollectionCount()).toString()) + 1; const Alice = privateKey('//Alice'); - const createMultipleItemsTx = await api.tx.nft - .createMultipleItems(collectionId, Alice.address, ['NFT', 'NFT', 'NFT']); + const createMultipleItemsTx = api.tx.nft + .createMultipleItems(collectionId, normalizeAccountId(Alice.address), ['NFT', 'NFT', 'NFT']); await expect(submitTransactionExpectFailAsync(Alice, createMultipleItemsTx)).to.be.rejected; }); }); @@ -152,20 +153,20 @@ describe('Negative Integration Test createMultipleItems(collection_id, owner, it { nft: ['B'.repeat(2049), 'B'.repeat(2049)] }, { nft: ['C'.repeat(2049), 'C'.repeat(2049)] }, ]; - const createMultipleItemsTx = await api.tx.nft - .createMultipleItems(collectionId, Alice.address, args); + const createMultipleItemsTx = api.tx.nft + .createMultipleItems(collectionId, normalizeAccountId(Alice.address), args); await expect(submitTransactionExpectFailAsync(Alice, createMultipleItemsTx)).to.be.rejected; // ReFungible const collectionIdReFungible = await createCollectionExpectSuccess({mode: {type: 'ReFungible'}}); const argsReFungible = [ - { ReFungible: ['1'.repeat(2049), '1'.repeat(2049)] }, - { ReFungible: ['2'.repeat(2049), '2'.repeat(2049)] }, - { ReFungible: ['3'.repeat(2049), '3'.repeat(2049)] }, + { ReFungible: ['1'.repeat(2049), '1'.repeat(2049), 10] }, + { ReFungible: ['2'.repeat(2049), '2'.repeat(2049), 10] }, + { ReFungible: ['3'.repeat(2049), '3'.repeat(2049), 10] }, ]; - const createMultipleItemsTxFungible = await api.tx.nft - .createMultipleItems(collectionIdReFungible, Alice.address, argsReFungible); + const createMultipleItemsTxFungible = api.tx.nft + .createMultipleItems(collectionIdReFungible, normalizeAccountId(Alice.address), argsReFungible); await expect(submitTransactionExpectFailAsync(Alice, createMultipleItemsTxFungible)).to.be.rejected; }); }); @@ -174,8 +175,8 @@ describe('Negative Integration Test createMultipleItems(collection_id, owner, it await usingApi(async (api: ApiPromise) => { const collectionId = await createCollectionExpectSuccess(); const Alice = privateKey('//Alice'); - const createMultipleItemsTx = await api.tx.nft - .createMultipleItems(collectionId, Alice.address, ['NFT', 'Fungible', 'ReFungible']); + const createMultipleItemsTx = api.tx.nft + .createMultipleItems(collectionId, normalizeAccountId(Alice.address), ['NFT', 'Fungible', 'ReFungible']); await expect(submitTransactionExpectFailAsync(Alice, createMultipleItemsTx)).to.be.rejected; // garbage collection :-D await destroyCollectionExpectSuccess(collectionId); @@ -192,7 +193,7 @@ describe('Negative Integration Test createMultipleItems(collection_id, owner, it { nft: ['C'.repeat(2049), 'C'] }, ]; const createMultipleItemsTx = await api.tx.nft - .createMultipleItems(collectionId, Alice.address, args); + .createMultipleItems(collectionId, normalizeAccountId(Alice.address), args); await expect(submitTransactionExpectFailAsync(Alice, createMultipleItemsTx)).to.be.rejected; }); }); @@ -209,7 +210,7 @@ describe('Negative Integration Test createMultipleItems(collection_id, owner, it { nft: ['A', 'A'] }, { nft: ['B', 'B'] }, ]; - const createMultipleItemsTx = api.tx.nft.createMultipleItems(collectionId, alice.address, args); + const createMultipleItemsTx = api.tx.nft.createMultipleItems(collectionId, normalizeAccountId(alice.address), args); await expect(submitTransactionExpectFailAsync(alice, createMultipleItemsTx)).to.be.rejected; }); }); diff --git a/tests/src/eth/fungible.test.ts b/tests/src/eth/fungible.test.ts new file mode 100644 index 0000000000..bf780168ea --- /dev/null +++ b/tests/src/eth/fungible.test.ts @@ -0,0 +1,289 @@ +import privateKey from "../substrate/privateKey"; +import { approveExpectSuccess, createCollectionExpectSuccess, createFungibleItemExpectSuccess, transferExpectSuccess, transferFromExpectSuccess } from "../util/helpers"; +import { collectionIdToAddress, createEthAccount, itWeb3, normalizeEvents, recordEvents, subToEth, transferBalanceToEth } from "./util/helpers" +import fungibleAbi from './fungibleAbi.json'; +import { expect } from "chai"; + +describe('Information getting', () => { + itWeb3('totalSupply', async ({ web3 }) => { + const collection = await createCollectionExpectSuccess({ + name: 'token name', + mode: { type: 'Fungible', decimalPoints: 0 } + }); + const alice = privateKey('//Alice'); + + await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }, { substrate: alice.address }); + + const address = collectionIdToAddress(collection); + const contract = new web3.eth.Contract(fungibleAbi as any, address); + const totalSupply = await contract.methods.totalSupply().call(); + + // FIXME: always equals to 0, because this method is not implemented + expect(totalSupply).to.equal('0'); + }); + + itWeb3('balanceOf', async ({ web3 }) => { + const collection = await createCollectionExpectSuccess({ + name: 'token name', + mode: { type: 'Fungible', decimalPoints: 0 } + }); + const alice = privateKey('//Alice'); + + const caller = createEthAccount(web3); + await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }, { ethereum: caller }); + + const address = collectionIdToAddress(collection); + const contract = new web3.eth.Contract(fungibleAbi as any, address); + const balance = await contract.methods.balanceOf(caller).call(); + + expect(balance).to.equal('200'); + }); +}); + +describe('Plain calls', () => { + itWeb3('Can perform approve()', async ({ web3, api }) => { + const collection = await createCollectionExpectSuccess({ + name: 'token name', + mode: { type: 'Fungible', decimalPoints: 0 } + }); + const alice = privateKey('//Alice'); + + const owner = createEthAccount(web3); + await transferBalanceToEth(api, alice, owner, 999999999999999); + + await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }, { ethereum: owner }); + + const spender = createEthAccount(web3); + + const address = collectionIdToAddress(collection); + const contract = new web3.eth.Contract(fungibleAbi as any, address); + + { + const result = await contract.methods.approve(spender, 100).send({ from: owner, gas: '0x1000000', gasPrice: '0x01' }); + const events = normalizeEvents(result.events); + + expect(events).to.be.deep.equal([ + { + address, + event: 'Approval', + args: { + owner, + spender, + value: '100', + } + } + ]); + } + + { + const allowance = await contract.methods.allowance(owner, spender).call(); + expect(+allowance).to.equal(100); + } + }); + + itWeb3('Can perform transferFrom()', async ({ web3, api }) => { + const collection = await createCollectionExpectSuccess({ + name: 'token name', + mode: { type: 'Fungible', decimalPoints: 0 } + }); + const alice = privateKey('//Alice'); + + const owner = createEthAccount(web3); + await transferBalanceToEth(api, alice, owner, 999999999999999); + + await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }, { ethereum: owner }); + + const spender = createEthAccount(web3); + await transferBalanceToEth(api, alice, spender, 999999999999999); + + const receiver = createEthAccount(web3); + + const address = collectionIdToAddress(collection); + const contract = new web3.eth.Contract(fungibleAbi as any, address); + + await contract.methods.approve(spender, 100).send({ from: owner, gas: '0x1000000', gasPrice: '0x01' }); + + { + const result = await contract.methods.transferFrom(owner, receiver, 49).send({ from: spender, gas: '0x1000000', gasPrice: '0x01' }); + const events = normalizeEvents(result.events); + expect(events).to.be.deep.equal([ + { + address, + event: 'Transfer', + args: { + from: owner, + to: receiver, + value: '49', + } + }, + { + address, + event: 'Approval', + args: { + owner, + spender, + value: '51', + } + } + ]); + } + + { + const balance = await contract.methods.balanceOf(receiver).call(); + expect(+balance).to.equal(49); + } + + { + const balance = await contract.methods.balanceOf(owner).call(); + expect(+balance).to.equal(151); + } + }); + + itWeb3('Can perform transfer()', async ({ web3, api }) => { + const collection = await createCollectionExpectSuccess({ + name: 'token name', + mode: { type: 'Fungible', decimalPoints: 0 } + }); + const alice = privateKey('//Alice'); + + const owner = createEthAccount(web3); + await transferBalanceToEth(api, alice, owner, 999999999999999); + + await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }, { ethereum: owner }); + + const receiver = createEthAccount(web3); + await transferBalanceToEth(api, alice, receiver, 999999999999999); + + const address = collectionIdToAddress(collection); + const contract = new web3.eth.Contract(fungibleAbi as any, address); + + { + const result = await contract.methods.transfer(receiver, 50).send({ from: owner, gas: '0x1000000', gasPrice: '0x01' }); + const events = normalizeEvents(result.events); + expect(events).to.be.deep.equal([ + { + address, + event: 'Transfer', + args: { + from: owner, + to: receiver, + value: '50', + } + }, + ]) + } + + { + const balance = await contract.methods.balanceOf(owner).call(); + expect(+balance).to.equal(150); + } + + { + const balance = await contract.methods.balanceOf(receiver).call(); + expect(+balance).to.equal(50); + } + }); +}); + +describe('Substrate calls', () => { + itWeb3('Events emitted for approve()', async ({ web3 }) => { + const collection = await createCollectionExpectSuccess({ + mode: { type: 'Fungible', decimalPoints: 0 } + }); + const alice = privateKey('//Alice'); + + const receiver = createEthAccount(web3); + + await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }); + + const address = collectionIdToAddress(collection); + const contract = new web3.eth.Contract(fungibleAbi as any, address); + + const events = await recordEvents(contract, async () => { + await approveExpectSuccess(collection, 1, alice, { ethereum: receiver }, 100); + }); + + expect(events).to.be.deep.equal([ + { + address, + event: 'Approval', + args: { + owner: subToEth(alice.address), + spender: receiver, + value: '100', + } + } + ]); + }); + + itWeb3('Events emitted for transferFrom()', async ({ web3 }) => { + const collection = await createCollectionExpectSuccess({ + mode: { type: 'Fungible', decimalPoints: 0 } + }); + const alice = privateKey('//Alice'); + const bob = privateKey('//Bob'); + + const receiver = createEthAccount(web3); + + await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }); + await approveExpectSuccess(collection, 1, alice, bob, 100); + + const address = collectionIdToAddress(collection); + const contract = new web3.eth.Contract(fungibleAbi as any, address); + + const events = await recordEvents(contract, async () => { + await transferFromExpectSuccess(collection, 1, bob, alice, { ethereum: receiver }, 51, 'Fungible'); + }); + + expect(events).to.be.deep.equal([ + { + address, + event: 'Transfer', + args: { + from: subToEth(alice.address), + to: receiver, + value: '51', + } + }, + { + address, + event: 'Approval', + args: { + owner: subToEth(alice.address), + spender: subToEth(bob.address), + value: '49', + } + } + ]); + }); + + itWeb3('Events emitted for transfer()', async ({ web3 }) => { + const collection = await createCollectionExpectSuccess({ + mode: { type: 'Fungible', decimalPoints: 0 } + }); + const alice = privateKey('//Alice'); + + const receiver = createEthAccount(web3); + + await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }); + + const address = collectionIdToAddress(collection); + const contract = new web3.eth.Contract(fungibleAbi as any, address); + + const events = await recordEvents(contract, async () => { + await transferExpectSuccess(collection, 1, alice, { ethereum: receiver }, 51, 'Fungible'); + }); + + expect(events).to.be.deep.equal([ + { + address, + event: 'Transfer', + args: { + from: subToEth(alice.address), + to: receiver, + value: '51', + } + }, + ]); + }); +}); \ No newline at end of file diff --git a/tests/src/eth/fungibleAbi.json b/tests/src/eth/fungibleAbi.json new file mode 100644 index 0000000000..6f5c298923 --- /dev/null +++ b/tests/src/eth/fungibleAbi.json @@ -0,0 +1,175 @@ +[ + { + "constant": false, + "inputs": [ + { + "name": "_spender", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_from", + "type": "address" + }, + { + "name": "_to", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "name": "balance", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_to", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_owner", + "type": "address" + }, + { + "name": "_spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "from", + "type": "address" + }, + { + "indexed": true, + "name": "to", + "type": "address" + }, + { + "indexed": false, + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + } +] \ No newline at end of file diff --git a/tests/src/eth/fungibleMetadataAbi.json b/tests/src/eth/fungibleMetadataAbi.json new file mode 100644 index 0000000000..57fe968178 --- /dev/null +++ b/tests/src/eth/fungibleMetadataAbi.json @@ -0,0 +1,41 @@ +[ + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + } +] \ No newline at end of file diff --git a/tests/src/eth/metadata.test.ts b/tests/src/eth/metadata.test.ts new file mode 100644 index 0000000000..ecf81b6a1b --- /dev/null +++ b/tests/src/eth/metadata.test.ts @@ -0,0 +1,53 @@ +import { expect } from "chai"; +import privateKey from "../substrate/privateKey"; +import { createCollectionExpectSuccess } from "../util/helpers"; +import { collectionIdToAddress, createEthAccount, itWeb3, transferBalanceToEth } from "./util/helpers"; +import fungibleMetadataAbi from './fungibleMetadataAbi.json'; + +describe('Common metadata', () => { + itWeb3('Returns collection name', async ({ api, web3 }) => { + const collection = await createCollectionExpectSuccess({ + name: 'token name', + mode: { type: 'NFT' } + }); + const caller = createEthAccount(web3); + await transferBalanceToEth(api, privateKey('//Alice'), caller, 999999); + + const address = collectionIdToAddress(collection); + const contract = new web3.eth.Contract(fungibleMetadataAbi as any, address); + const name = await contract.methods.name().call({ from: caller }); + + expect(name).to.equal('token name'); + }); + + itWeb3('Returns symbol name', async ({ api, web3 }) => { + const collection = await createCollectionExpectSuccess({ + tokenPrefix: 'TOK', + mode: { type: 'NFT' } + }); + const caller = createEthAccount(web3); + await transferBalanceToEth(api, privateKey('//Alice'), caller, 999999); + + const address = collectionIdToAddress(collection); + const contract = new web3.eth.Contract(fungibleMetadataAbi as any, address); + const symbol = await contract.methods.symbol().call({ from: caller }); + + expect(symbol).to.equal('TOK'); + }); +}); + +describe('Fungible metadata', () => { + itWeb3('Returns fungible decimals', async ({ api, web3 }) => { + const collection = await createCollectionExpectSuccess({ + mode: { type: 'Fungible', decimalPoints: 6 } + }); + const caller = createEthAccount(web3); + await transferBalanceToEth(api, privateKey('//Alice'), caller, 999999); + + const address = collectionIdToAddress(collection); + const contract = new web3.eth.Contract(fungibleMetadataAbi as any, address); + const decimals = await contract.methods.decimals().call({ from: caller }); + + expect(+decimals).to.equal(6); + }) +}) \ No newline at end of file diff --git a/tests/src/eth/nonFungible.test.ts b/tests/src/eth/nonFungible.test.ts new file mode 100644 index 0000000000..7aa931d1ab --- /dev/null +++ b/tests/src/eth/nonFungible.test.ts @@ -0,0 +1,280 @@ +import privateKey from "../substrate/privateKey"; +import { approveExpectSuccess, createCollectionExpectSuccess, createFungibleItemExpectSuccess, createItemExpectSuccess, transferExpectSuccess, transferFromExpectSuccess } from "../util/helpers"; +import { collectionIdToAddress, createEthAccount, itWeb3, normalizeEvents, recordEvents, subToEth, transferBalanceToEth } from "./util/helpers" +import nonFungibleAbi from './nonFungibleAbi.json'; +import { expect } from "chai"; + +describe('Information getting', () => { + itWeb3('totalSupply', async ({ web3 }) => { + const collection = await createCollectionExpectSuccess({ + mode: { type: 'NFT' } + }); + const alice = privateKey('//Alice'); + + await createItemExpectSuccess(alice, collection, 'NFT', { substrate: alice.address }); + + const address = collectionIdToAddress(collection); + const contract = new web3.eth.Contract(nonFungibleAbi as any, address); + const totalSupply = await contract.methods.totalSupply().call(); + + // FIXME: always equals to 0, because this method is not implemented + expect(totalSupply).to.equal('0'); + }); + + itWeb3('balanceOf', async ({ web3 }) => { + const collection = await createCollectionExpectSuccess({ + mode: { type: 'NFT' } + }); + const alice = privateKey('//Alice'); + + const caller = createEthAccount(web3); + await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: caller }); + await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: caller }); + await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: caller }); + + const address = collectionIdToAddress(collection); + const contract = new web3.eth.Contract(nonFungibleAbi as any, address); + const balance = await contract.methods.balanceOf(caller).call(); + + expect(balance).to.equal('3'); + }); + + itWeb3('ownerOf', async ({ web3 }) => { + const collection = await createCollectionExpectSuccess({ + mode: { type: 'NFT' } + }); + const alice = privateKey('//Alice'); + + const caller = createEthAccount(web3); + const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: caller }); + + const address = collectionIdToAddress(collection); + const contract = new web3.eth.Contract(nonFungibleAbi as any, address); + const owner = await contract.methods.ownerOf(tokenId).call(); + + expect(owner).to.equal(caller); + }); +}); + +describe.only('Plain calls', () => { + itWeb3('Can perform approve()', async ({ web3, api }) => { + const collection = await createCollectionExpectSuccess({ + mode: { type: 'NFT' } + }); + const alice = privateKey('//Alice'); + + const owner = createEthAccount(web3); + await transferBalanceToEth(api, alice, owner, 999999999999999); + + const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: owner }); + + const spender = createEthAccount(web3); + + const address = collectionIdToAddress(collection); + const contract = new web3.eth.Contract(nonFungibleAbi as any, address); + + { + const result = await contract.methods.approve(spender, tokenId).send({ from: owner, gas: '0x1000000', gasPrice: '0x01' }); + const events = normalizeEvents(result.events); + + expect(events).to.be.deep.equal([ + { + address, + event: 'Approval', + args: { + owner, + approved: spender, + tokenId: tokenId.toString(), + } + } + ]); + } + }); + + itWeb3('Can perform transferFrom()', async ({ web3, api }) => { + const collection = await createCollectionExpectSuccess({ + mode: { type: 'NFT' } + }); + const alice = privateKey('//Alice'); + + const owner = createEthAccount(web3); + await transferBalanceToEth(api, alice, owner, 999999999999999); + + const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: owner }); + + const spender = createEthAccount(web3); + await transferBalanceToEth(api, alice, spender, 999999999999999); + + const receiver = createEthAccount(web3); + + const address = collectionIdToAddress(collection); + const contract = new web3.eth.Contract(nonFungibleAbi as any, address); + + await contract.methods.approve(spender, tokenId).send({ from: owner, gas: '0x1000000', gasPrice: '0x01' }); + + { + const result = await contract.methods.transferFrom(owner, receiver, tokenId).send({ from: spender, gas: '0x1000000', gasPrice: '0x01' }); + const events = normalizeEvents(result.events); + expect(events).to.be.deep.equal([ + { + address, + event: 'Transfer', + args: { + from: owner, + to: receiver, + tokenId: tokenId.toString(), + }, + }, + ]); + } + + { + const balance = await contract.methods.balanceOf(receiver).call(); + expect(+balance).to.equal(1); + } + + { + const balance = await contract.methods.balanceOf(owner).call(); + expect(+balance).to.equal(0); + } + }); + + itWeb3('Can perform transfer()', async ({ web3, api }) => { + const collection = await createCollectionExpectSuccess({ + mode: { type: 'NFT' } + }); + const alice = privateKey('//Alice'); + + const owner = createEthAccount(web3); + await transferBalanceToEth(api, alice, owner, 999999999999999); + + const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: owner }); + + const receiver = createEthAccount(web3); + await transferBalanceToEth(api, alice, receiver, 999999999999999); + + const address = collectionIdToAddress(collection); + const contract = new web3.eth.Contract(nonFungibleAbi as any, address); + + { + const result = await contract.methods.transfer(receiver, tokenId).send({ from: owner, gas: '0x1000000', gasPrice: '0x01' }); + console.log(result); + const events = normalizeEvents(result.events); + expect(events).to.be.deep.equal([ + { + address, + event: 'Transfer', + args: { + from: owner, + to: receiver, + tokenId: tokenId.toString(), + } + }, + ]) + } + + { + const balance = await contract.methods.balanceOf(owner).call(); + expect(+balance).to.equal(0); + } + + { + const balance = await contract.methods.balanceOf(receiver).call(); + expect(+balance).to.equal(1); + } + }); +}); + +describe('Substrate calls', () => { + itWeb3('Events emitted for approve()', async ({ web3 }) => { + const collection = await createCollectionExpectSuccess({ + mode: { type: 'NFT' } + }); + const alice = privateKey('//Alice'); + + const receiver = createEthAccount(web3); + + const tokenId = await createItemExpectSuccess(alice, collection, 'NFT'); + + const address = collectionIdToAddress(collection); + const contract = new web3.eth.Contract(nonFungibleAbi as any, address); + + const events = await recordEvents(contract, async () => { + await approveExpectSuccess(collection, tokenId, alice, { ethereum: receiver }, 1); + }); + + expect(events).to.be.deep.equal([ + { + address, + event: 'Approval', + args: { + owner: subToEth(alice.address), + approved: receiver, + tokenId: tokenId.toString(), + } + } + ]); + }); + + itWeb3('Events emitted for transferFrom()', async ({ web3 }) => { + const collection = await createCollectionExpectSuccess({ + mode: { type: 'NFT' } + }); + const alice = privateKey('//Alice'); + const bob = privateKey('//Bob'); + + const receiver = createEthAccount(web3); + + const tokenId = await createItemExpectSuccess(alice, collection, 'NFT'); + await approveExpectSuccess(collection, tokenId, alice, bob, 1); + + const address = collectionIdToAddress(collection); + const contract = new web3.eth.Contract(nonFungibleAbi as any, address); + + const events = await recordEvents(contract, async () => { + await transferFromExpectSuccess(collection, tokenId, bob, alice, { ethereum: receiver }, 1, 'NFT'); + }); + + expect(events).to.be.deep.equal([ + { + address, + event: 'Transfer', + args: { + from: subToEth(alice.address), + to: receiver, + tokenId: tokenId.toString(), + } + }, + ]); + }); + + itWeb3('Events emitted for transfer()', async ({ web3 }) => { + const collection = await createCollectionExpectSuccess({ + mode: { type: 'NFT' } + }); + const alice = privateKey('//Alice'); + + const receiver = createEthAccount(web3); + + const tokenId = await createItemExpectSuccess(alice, collection, 'NFT'); + + const address = collectionIdToAddress(collection); + const contract = new web3.eth.Contract(nonFungibleAbi as any, address); + + const events = await recordEvents(contract, async () => { + await transferExpectSuccess(collection, tokenId, alice, { ethereum: receiver }, 1, 'NFT'); + }); + + expect(events).to.be.deep.equal([ + { + address, + event: 'Transfer', + args: { + from: subToEth(alice.address), + to: receiver, + tokenId: tokenId.toString(), + } + }, + ]); + }); +}); \ No newline at end of file diff --git a/tests/src/eth/nonFungibleAbi.json b/tests/src/eth/nonFungibleAbi.json new file mode 100644 index 0000000000..384c37aa84 --- /dev/null +++ b/tests/src/eth/nonFungibleAbi.json @@ -0,0 +1,406 @@ +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "approved", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "approved", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getApproved", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "res_name", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "ownerOf", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceID", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "res_symbol", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenOfOwnerByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } +] \ No newline at end of file diff --git a/tests/src/eth/util/helpers.ts b/tests/src/eth/util/helpers.ts new file mode 100644 index 0000000000..ed341bf1dd --- /dev/null +++ b/tests/src/eth/util/helpers.ts @@ -0,0 +1,116 @@ +import { ApiPromise } from "@polkadot/api"; +import { addressToEvm, evmToAddress } from "@polkadot/util-crypto"; +import Web3 from "web3"; +import usingApi, { submitTransactionAsync } from "../../substrate/substrate-api"; +import { IKeyringPair } from '@polkadot/types/types'; +import { expect } from "chai"; +import { getGenericResult } from "../../util/helpers"; + +let web3Connected = false; +export async function usingWeb3(cb: (web3: Web3) => Promise | T): Promise { + if (web3Connected) throw new Error('do not nest usingWeb3 calls'); + web3Connected = true; + + const provider = new Web3.providers.WebsocketProvider("http://localhost:9944"); + const web3 = new Web3(provider); + + try { + return await cb(web3); + } finally { + // provider.disconnect(3000, 'normal disconnect'); + provider.connection.close(); + web3Connected = false; + } +} + +export function collectionIdToAddress(address: number): string { + if (address >= 0xffffffff || address < 0) throw new Error('id overflow'); + const buf = Buffer.from([0x17, 0xc4, 0xe6, 0x45, 0x3c, 0xc4, 0x9a, 0xaa, 0xae, 0xac, 0xa8, 0x94, 0xe6, 0xd9, 0x68, 0x3e, + address >> 24, + (address >> 16) & 0xff, + (address >> 8) & 0xff, + address & 0xff, + ]); + return Web3.utils.toChecksumAddress('0x' + buf.toString('hex')); +} + +export function createEthAccount(web3: Web3) { + const account = web3.eth.accounts.create(); + web3.eth.accounts.wallet.add(account.privateKey); + return account.address; +} + +export async function transferBalanceToEth(api: ApiPromise, source: IKeyringPair, target: string, amount: number) { + const tx = api.tx.balances.transfer(evmToAddress(target), amount); + const events = await submitTransactionAsync(source, tx); + const result = getGenericResult(events); + expect(result.success).to.be.true; +} + +export async function itWeb3(name: string, cb: (apis: { web3: Web3, api: ApiPromise }) => any, opts: { only?: boolean, skip?: boolean } = {}) { + let i: any = it; + if (opts.only) i = i.only; + else if (opts.skip) i = i.skip; + i(name, async () => { + await usingApi(async api => { + await usingWeb3(async web3 => { + await cb({ api, web3 }); + }); + }); + }); +} +itWeb3.only = (name: string, cb: (apis: { web3: Web3, api: ApiPromise }) => any) => itWeb3(name, cb, { only: true }); +itWeb3.skip = (name: string, cb: (apis: { web3: Web3, api: ApiPromise }) => any) => itWeb3(name, cb, { skip: true }); + +export async function generateSubstrateEthPair(web3: Web3) { + let account = web3.eth.accounts.create(); + const evm = evmToAddress(account.address); +} + +type NormalizedEvent = { + address: string, + event: string, + args: { [key: string]: string } +}; + +export function normalizeEvents(events: any): NormalizedEvent[] { + const output = []; + for (let key of Object.keys(events)) { + if (key.match(/^[0-9]+$/)) { + output.push(events[key]); + } else if (Array.isArray(events[key])) { + output.push(...events[key]); + } else { + output.push(events[key]); + } + } + output.sort((a, b) => a.logIndex - b.logIndex); + return output.map(({ address, event, returnValues }) => { + const args: { [key: string]: string } = {}; + for (let key of Object.keys(returnValues)) { + if (!key.match(/^[0-9]+$/)) { + args[key] = returnValues[key]; + } + } + return { + address, + event, + args, + }; + }); +} + +export async function recordEvents(contract: any, action: () => Promise): Promise { + const out: any = []; + contract.events.allEvents((_: any, event: any) => { + out.push(event); + }); + await action(); + return normalizeEvents(out); +} + +export function subToEth(eth: string): string { + const bytes = addressToEvm(eth); + const string = '0x' + Buffer.from(bytes).toString('hex'); + return Web3.utils.toChecksumAddress(string); +} \ No newline at end of file diff --git a/tests/src/pallet-presence.test.ts b/tests/src/pallet-presence.test.ts index 13bc8f4174..09bf0e4c73 100644 --- a/tests/src/pallet-presence.test.ts +++ b/tests/src/pallet-presence.test.ts @@ -13,7 +13,7 @@ function getModuleNames(api: ApiPromise): string[] { // Pallets that must always be present const requiredPallets = [ - 'nft', 'inflation', 'balances', 'contracts', 'randomnesscollectiveflip', 'system', 'timestamp', 'transactionpayment', 'treasury', 'vesting' + 'nft', 'inflation', 'balances', 'contracts', 'randomnesscollectiveflip', 'system', 'timestamp', 'transactionpayment', 'treasury', 'vesting', 'nft', 'ethereum' ]; // Pallets that depend on consensus and governance configuration diff --git a/tests/src/removeCollectionAdmin.test.ts b/tests/src/removeCollectionAdmin.test.ts index a5466639d7..69a8443b39 100644 --- a/tests/src/removeCollectionAdmin.test.ts +++ b/tests/src/removeCollectionAdmin.test.ts @@ -8,7 +8,7 @@ import chai from 'chai'; import chaiAsPromised from 'chai-as-promised'; import privateKey from './substrate/privateKey'; import { default as usingApi, submitTransactionAsync, submitTransactionExpectFailAsync } from './substrate/substrate-api'; -import {createCollectionExpectSuccess, destroyCollectionExpectSuccess} from './util/helpers'; +import {createCollectionExpectSuccess, destroyCollectionExpectSuccess, normalizeAccountId} from './util/helpers'; chai.use(chaiAsPromised); const expect = chai.expect; @@ -20,20 +20,20 @@ describe('Integration Test removeCollectionAdmin(collection_id, account_id):', ( const Alice = privateKey('//Alice'); const Bob = privateKey('//Bob'); const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON(); - expect(collection.Owner.toString()).to.be.eq(Alice.address); + expect(collection.Owner).to.be.deep.eq(normalizeAccountId(Alice.address)); // first - add collection admin Bob - const addAdminTx = api.tx.nft.addCollectionAdmin(collectionId, Bob.address); + const addAdminTx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Bob.address)); await submitTransactionAsync(Alice, addAdminTx); - const adminListAfterAddAdmin: any = (await api.query.nft.adminList(collectionId)); - expect(adminListAfterAddAdmin).to.be.contains(Bob.address); + const adminListAfterAddAdmin: any = (await api.query.nft.adminList(collectionId)).toJSON(); + expect(adminListAfterAddAdmin).to.be.deep.contains(normalizeAccountId(Bob.address)); // then remove bob from admins of collection - const removeAdminTx = api.tx.nft.removeCollectionAdmin(collectionId, Bob.address); + const removeAdminTx = api.tx.nft.removeCollectionAdmin(collectionId, normalizeAccountId(Bob.address)); await submitTransactionAsync(Alice, removeAdminTx); - const adminListAfterRemoveAdmin: any = (await api.query.nft.adminList(collectionId)); - expect(adminListAfterRemoveAdmin).not.to.be.contains(Bob.address); + const adminListAfterRemoveAdmin: any = (await api.query.nft.adminList(collectionId)).toJSON; + expect(adminListAfterRemoveAdmin).not.to.be.deep.contains(normalizeAccountId(Bob.address)); }); }); @@ -45,7 +45,7 @@ describe('Integration Test removeCollectionAdmin(collection_id, account_id):', ( const adminListBeforeAddAdmin: any = (await api.query.nft.adminList(collectionId)); expect(adminListBeforeAddAdmin).to.have.lengthOf(0); - const tx = api.tx.nft.removeCollectionAdmin(collectionId, Alice.address); + const tx = api.tx.nft.removeCollectionAdmin(collectionId, normalizeAccountId(Alice.address)); await submitTransactionAsync(Alice, tx); }); }); @@ -59,7 +59,7 @@ describe('Negative Integration Test removeCollectionAdmin(collection_id, account const alice = privateKey('//Alice'); const bob = privateKey('//Bob'); - const changeOwnerTx = api.tx.nft.removeCollectionAdmin(collectionId, bob.address); + const changeOwnerTx = api.tx.nft.removeCollectionAdmin(collectionId, normalizeAccountId(bob.address)); await expect(submitTransactionExpectFailAsync(alice, changeOwnerTx)).to.be.rejected; // Verifying that nothing bad happened (network is live, new collections can be created, etc.) @@ -76,7 +76,7 @@ describe('Negative Integration Test removeCollectionAdmin(collection_id, account await destroyCollectionExpectSuccess(collectionId); - const changeOwnerTx = api.tx.nft.removeCollectionAdmin(collectionId, Bob.address); + const changeOwnerTx = api.tx.nft.removeCollectionAdmin(collectionId, normalizeAccountId(Bob.address)); await expect(submitTransactionExpectFailAsync(Alice, changeOwnerTx)).to.be.rejected; // Verifying that nothing bad happened (network is live, new collections can be created, etc.) diff --git a/tests/src/removeCollectionSponsor.test.ts b/tests/src/removeCollectionSponsor.test.ts index f83860e442..e18c68a1ee 100644 --- a/tests/src/removeCollectionSponsor.test.ts +++ b/tests/src/removeCollectionSponsor.test.ts @@ -21,6 +21,7 @@ import { addToWhiteListExpectSuccess, removeCollectionSponsorExpectSuccess, removeCollectionSponsorExpectFailure, + normalizeAccountId, } from "./util/helpers"; import { Keyring } from "@polkadot/api"; import { IKeyringPair } from "@polkadot/types/types"; @@ -60,7 +61,7 @@ describe('integration test: ext. removeCollectionSponsor():', () => { // Transfer this tokens from unused address to Alice - should fail const AsponsorBalance = new BigNumber((await api.query.system.account(bob.address)).data.free.toString()); - const zeroToAlice = api.tx.nft.transfer(alice.address, collectionId, itemId, 0); + const zeroToAlice = api.tx.nft.transfer(normalizeAccountId(alice.address), collectionId, itemId, 0); const badTransaction = async function () { await submitTransactionExpectFailAsync(zeroBalance, zeroToAlice); }; diff --git a/tests/src/removeFromContractWhiteList.test.ts b/tests/src/removeFromContractWhiteList.test.ts index d198b55a8e..5c3b1032d3 100644 --- a/tests/src/removeFromContractWhiteList.test.ts +++ b/tests/src/removeFromContractWhiteList.test.ts @@ -23,8 +23,8 @@ describe('Integration Test removeFromContractWhiteList', () => { await usingApi(async (api) => { const [flipper, deployer] = await deployFlipper(api); - await addToContractWhiteListExpectSuccess(deployer, flipper.address, bob.address); - await removeFromContractWhiteListExpectSuccess(deployer, flipper.address, bob.address); + await addToContractWhiteListExpectSuccess(deployer, flipper.address.toString(), bob.address); + await removeFromContractWhiteListExpectSuccess(deployer, flipper.address.toString(), bob.address); expect(await isWhitelistedInContract(flipper.address, bob.address)).to.be.false; }); @@ -33,12 +33,12 @@ describe('Integration Test removeFromContractWhiteList', () => { it('user can\'t execute contract after removal', async () => { await usingApi(async (api) => { const [flipper, deployer] = await deployFlipper(api); - await toggleContractWhitelistExpectSuccess(deployer, flipper.address, true); + await toggleContractWhitelistExpectSuccess(deployer, flipper.address.toString(), true); - await addToContractWhiteListExpectSuccess(deployer, flipper.address, bob.address); + await addToContractWhiteListExpectSuccess(deployer, flipper.address.toString(), bob.address); await toggleFlipValueExpectSuccess(bob, flipper); - await removeFromContractWhiteListExpectSuccess(deployer, flipper.address, bob.address); + await removeFromContractWhiteListExpectSuccess(deployer, flipper.address.toString(), bob.address); await toggleFlipValueExpectFailure(bob, flipper); }); }); @@ -47,9 +47,9 @@ describe('Integration Test removeFromContractWhiteList', () => { await usingApi(async (api) => { const [flipper, deployer] = await deployFlipper(api); - await addToContractWhiteListExpectSuccess(deployer, flipper.address, bob.address); - await removeFromContractWhiteListExpectSuccess(deployer, flipper.address, bob.address); - await removeFromContractWhiteListExpectSuccess(deployer, flipper.address, bob.address); + await addToContractWhiteListExpectSuccess(deployer, flipper.address.toString(), bob.address); + await removeFromContractWhiteListExpectSuccess(deployer, flipper.address.toString(), bob.address); + await removeFromContractWhiteListExpectSuccess(deployer, flipper.address.toString(), bob.address); }); }); }); @@ -75,7 +75,7 @@ describe('Negative Integration Test removeFromContractWhiteList', () => { await usingApi(async (api) => { const [flipper, _] = await deployFlipper(api); - await removeFromContractWhiteListExpectFailure(alice, flipper.address, bob.address); + await removeFromContractWhiteListExpectFailure(alice, flipper.address.toString(), bob.address); }); }); }); diff --git a/tests/src/setConstOnChainSchema.test.ts b/tests/src/setConstOnChainSchema.test.ts index dd2cfb978f..b2defd5d97 100644 --- a/tests/src/setConstOnChainSchema.test.ts +++ b/tests/src/setConstOnChainSchema.test.ts @@ -11,6 +11,7 @@ import { default as usingApi, submitTransactionAsync, submitTransactionExpectFai import { createCollectionExpectSuccess, destroyCollectionExpectSuccess, + normalizeAccountId, } from './util/helpers'; chai.use(chaiAsPromised); @@ -37,7 +38,7 @@ describe('Integration Test ext. setConstOnChainSchema()', () => { await usingApi(async (api) => { const collectionId = await createCollectionExpectSuccess(); const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON(); - expect(collection.Owner.toString()).to.be.eq(Alice.address); + expect(collection.Owner).to.be.deep.eq(normalizeAccountId(Alice.address)); const setShema = api.tx.nft.setConstOnChainSchema(collectionId, Shema); await submitTransactionAsync(Alice, setShema); }); @@ -87,7 +88,7 @@ describe('Negative Integration Test ext. setConstOnChainSchema()', () => { await usingApi(async (api) => { const collectionId = await createCollectionExpectSuccess(); const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON(); - expect(collection.Owner.toString()).to.be.eq(Alice.address); + expect(collection.Owner).to.be.deep.eq(normalizeAccountId(Alice.address)); const setShema = api.tx.nft.setConstOnChainSchema(collectionId, Shema); await expect(submitTransactionExpectFailAsync(Bob, setShema)).to.be.rejected; }); diff --git a/tests/src/setPublicAccessMode.test.ts b/tests/src/setPublicAccessMode.test.ts index 3203eb967a..955a423758 100644 --- a/tests/src/setPublicAccessMode.test.ts +++ b/tests/src/setPublicAccessMode.test.ts @@ -17,6 +17,7 @@ import { destroyCollectionExpectSuccess, enablePublicMintingExpectSuccess, enableWhiteListExpectSuccess, + normalizeAccountId, } from './util/helpers'; import { utf16ToStr } from './util/util'; @@ -49,7 +50,7 @@ describe('Integration Test setPublicAccessMode(): ', () => { const collectionId = await createCollectionExpectSuccess(); await enableWhiteListExpectSuccess(Alice, collectionId); await enablePublicMintingExpectSuccess(Alice, collectionId); - const tx = api.tx.nft.createItem(collectionId, Bob.address, 'NFT'); + const tx = api.tx.nft.createItem(collectionId, normalizeAccountId(Bob.address), 'NFT'); await expect(submitTransactionExpectFailAsync(Bob, tx)).to.be.rejected; }); }); diff --git a/tests/src/setVariableOnChainSchema.test.ts b/tests/src/setVariableOnChainSchema.test.ts index edc7295528..96cb42e5d4 100644 --- a/tests/src/setVariableOnChainSchema.test.ts +++ b/tests/src/setVariableOnChainSchema.test.ts @@ -11,6 +11,7 @@ import { default as usingApi, submitTransactionAsync, submitTransactionExpectFai import { createCollectionExpectSuccess, destroyCollectionExpectSuccess, + normalizeAccountId, } from './util/helpers'; chai.use(chaiAsPromised); @@ -37,7 +38,7 @@ describe('Integration Test ext. setVariableOnChainSchema()', () => { await usingApi(async (api) => { const collectionId = await createCollectionExpectSuccess(); const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON(); - expect(collection.Owner.toString()).to.be.eq(Alice.address); + expect(collection.Owner).to.be.deep.eq(normalizeAccountId(Alice.address)); const setSchema = api.tx.nft.setVariableOnChainSchema(collectionId, Schema); await submitTransactionAsync(Alice, setSchema); }); @@ -87,7 +88,7 @@ describe('Negative Integration Test ext. setVariableOnChainSchema()', () => { await usingApi(async (api) => { const collectionId = await createCollectionExpectSuccess(); const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON(); - expect(collection.Owner.toString()).to.be.eq(Alice.address); + expect(collection.Owner).to.be.deep.eq(normalizeAccountId(Alice.address)); const setSchema = api.tx.nft.setVariableOnChainSchema(collectionId, Schema); await expect(submitTransactionExpectFailAsync(Bob, setSchema)).to.be.rejected; }); diff --git a/tests/src/transfer_contract/metadata.json b/tests/src/transfer_contract/metadata.json index de854c7770..297746fd15 100644 --- a/tests/src/transfer_contract/metadata.json +++ b/tests/src/transfer_contract/metadata.json @@ -1,9 +1,9 @@ { "metadataVersion": "0.1.0", "source": { - "hash": "0xfbbc0729acefed9d99f93f6cbb751d12e317958fd0fe183f5781329b37f1bf6e", - "language": "ink! 3.0.0-rc2", - "compiler": "rustc 1.51.0-nightly" + "hash": "0xc6c3f47adeafe86d1674ed72c7179605787842f2f05a2d7da0dbabf3c4fa1aa8", + "language": "ink! 3.0.0-rc3", + "compiler": "rustc 1.52.0-nightly" }, "contract": { "name": "nft_transfer", @@ -24,7 +24,7 @@ "name": [ "default" ], - "selector": "0x6a3712e2" + "selector": "0xed4b9d1b" } ], "docs": [], @@ -78,7 +78,268 @@ ], "payable": false, "returnType": null, - "selector": "0xfae3a09d" + "selector": "0x84a15da1" + }, + { + "args": [ + { + "name": "recipient", + "type": { + "displayName": [ + "AccountId" + ], + "type": 1 + } + }, + { + "name": "collection_id", + "type": { + "displayName": [ + "u32" + ], + "type": 4 + } + }, + { + "name": "data", + "type": { + "displayName": [ + "CreateItemData" + ], + "type": 6 + } + } + ], + "docs": [], + "mutates": true, + "name": [ + "create_item" + ], + "payable": false, + "returnType": null, + "selector": "0xd7c3f083" + }, + { + "args": [ + { + "name": "owner", + "type": { + "displayName": [ + "AccountId" + ], + "type": 1 + } + }, + { + "name": "collection_id", + "type": { + "displayName": [ + "u32" + ], + "type": 4 + } + }, + { + "name": "data", + "type": { + "displayName": [ + "Vec" + ], + "type": 8 + } + } + ], + "docs": [], + "mutates": true, + "name": [ + "create_multiple_items" + ], + "payable": false, + "returnType": null, + "selector": "0x15f9a1eb" + }, + { + "args": [ + { + "name": "spender", + "type": { + "displayName": [ + "AccountId" + ], + "type": 1 + } + }, + { + "name": "collection_id", + "type": { + "displayName": [ + "u32" + ], + "type": 4 + } + }, + { + "name": "item_id", + "type": { + "displayName": [ + "u32" + ], + "type": 4 + } + }, + { + "name": "amount", + "type": { + "displayName": [ + "u128" + ], + "type": 5 + } + } + ], + "docs": [], + "mutates": true, + "name": [ + "approve" + ], + "payable": false, + "returnType": null, + "selector": "0x681266a0" + }, + { + "args": [ + { + "name": "owner", + "type": { + "displayName": [ + "AccountId" + ], + "type": 1 + } + }, + { + "name": "recipient", + "type": { + "displayName": [ + "AccountId" + ], + "type": 1 + } + }, + { + "name": "collection_id", + "type": { + "displayName": [ + "u32" + ], + "type": 4 + } + }, + { + "name": "item_id", + "type": { + "displayName": [ + "u32" + ], + "type": 4 + } + }, + { + "name": "amount", + "type": { + "displayName": [ + "u128" + ], + "type": 5 + } + } + ], + "docs": [], + "mutates": true, + "name": [ + "transfer_from" + ], + "payable": false, + "returnType": null, + "selector": "0x0b396f18" + }, + { + "args": [ + { + "name": "collection_id", + "type": { + "displayName": [ + "u32" + ], + "type": 4 + } + }, + { + "name": "item_id", + "type": { + "displayName": [ + "u32" + ], + "type": 4 + } + }, + { + "name": "data", + "type": { + "displayName": [ + "Vec" + ], + "type": 7 + } + } + ], + "docs": [], + "mutates": true, + "name": [ + "set_variable_meta_data" + ], + "payable": false, + "returnType": null, + "selector": "0xb0b26da2" + }, + { + "args": [ + { + "name": "collection_id", + "type": { + "displayName": [ + "u32" + ], + "type": 4 + } + }, + { + "name": "address", + "type": { + "displayName": [ + "AccountId" + ], + "type": 1 + } + }, + { + "name": "whitelisted", + "type": { + "displayName": [ + "bool" + ], + "type": 9 + } + } + ], + "docs": [], + "mutates": true, + "name": [ + "toggle_white_list" + ], + "payable": false, + "returnType": null, + "selector": "0x98574dac" } ] }, @@ -93,7 +354,8 @@ "composite": { "fields": [ { - "type": 2 + "type": 2, + "typeName": "[u8; 32]" } ] } @@ -126,6 +388,82 @@ "def": { "primitive": "u128" } + }, + { + "def": { + "variant": { + "variants": [ + { + "fields": [ + { + "name": "const_data", + "type": 7, + "typeName": "Vec" + }, + { + "name": "variable_data", + "type": 7, + "typeName": "Vec" + } + ], + "name": "Nft" + }, + { + "fields": [ + { + "name": "value", + "type": 5, + "typeName": "u128" + } + ], + "name": "Fungible" + }, + { + "fields": [ + { + "name": "const_data", + "type": 7, + "typeName": "Vec" + }, + { + "name": "variable_data", + "type": 7, + "typeName": "Vec" + }, + { + "name": "pieces", + "type": 5, + "typeName": "u128" + } + ], + "name": "ReFungible" + } + ] + } + }, + "path": [ + "nft_transfer", + "CreateItemData" + ] + }, + { + "def": { + "sequence": { + "type": 3 + } + } + }, + { + "def": { + "sequence": { + "type": 6 + } + } + }, + { + "def": { + "primitive": "bool" + } } ] } \ No newline at end of file diff --git a/tests/src/transfer_contract/nft_transfer.wasm b/tests/src/transfer_contract/nft_transfer.wasm index 87e15928b7..fd5eace8c8 100644 Binary files a/tests/src/transfer_contract/nft_transfer.wasm and b/tests/src/transfer_contract/nft_transfer.wasm differ diff --git a/tests/src/util/helpers.ts b/tests/src/util/helpers.ts index bb5281eaa6..83d6cb44a5 100644 --- a/tests/src/util/helpers.ts +++ b/tests/src/util/helpers.ts @@ -4,10 +4,10 @@ // import { ApiPromise, Keyring } from '@polkadot/api'; -import { Enum, Struct } from '@polkadot/types/codec'; import type { AccountId, EventRecord } from '@polkadot/types/interfaces'; import { u128 } from '@polkadot/types/primitive'; import { IKeyringPair } from '@polkadot/types/types'; +import { evmToAddress } from '@polkadot/util-crypto'; import { BigNumber } from 'bignumber.js'; import BN from 'bn.js'; import chai from 'chai'; @@ -21,6 +21,31 @@ import { hexToStr, strToUTF16, utf16ToStr } from './util'; chai.use(chaiAsPromised); const expect = chai.expect; +export type CrossAccountId = { + substrate: string, +} | { + ethereum: string, +}; +export function normalizeAccountId(input: string | CrossAccountId | IKeyringPair): CrossAccountId { + if (typeof input === 'string') + return { substrate: input }; + if ('address' in input) { + return { substrate: input.address }; + } + if ('ethereum' in input) { + input.ethereum = input.ethereum.toLowerCase(); + } + return input; +} +export function toSubstrateAddress(input: string | CrossAccountId | IKeyringPair): string { + input = normalizeAccountId(input); + if ('substrate' in input) { + return input.substrate; + } else { + return evmToAddress(input.ethereum); + } +} + export const U128_MAX = (1n << 128n) - 1n; type GenericResult = { @@ -36,15 +61,15 @@ interface CreateItemResult { success: boolean; collectionId: number; itemId: number; - recipient: string; + recipient?: CrossAccountId; } interface TransferResult { success: boolean; collectionId: number; itemId: number; - sender: string; - recipient: string; + sender?: CrossAccountId; + recipient?: CrossAccountId; value: bigint; } @@ -118,7 +143,7 @@ export function getCreateCollectionResult(events: EventRecord[]): CreateCollecti // console.log(` ${phase}: ${section}.${method}:: ${data}`); if (method == 'ExtrinsicSuccess') { success = true; - } else if ((section == 'nft') && (method == 'CollectionCreated')) { + } else if ((section == 'nft') && (method == 'CollectionCreated')) { collectionId = parseInt(data[0].toString()); } }); @@ -133,7 +158,7 @@ export function getCreateItemResult(events: EventRecord[]): CreateItemResult { let success = false; let collectionId: number = 0; let itemId: number = 0; - let recipient: string = ''; + let recipient; events.forEach(({ phase, event: { data, method, section } }) => { // console.log(` ${phase}: ${section}.${method}:: ${data}`); if (method == 'ExtrinsicSuccess') { @@ -141,7 +166,7 @@ export function getCreateItemResult(events: EventRecord[]): CreateItemResult { } else if ((section == 'nft') && (method == 'ItemCreated')) { collectionId = parseInt(data[0].toString()); itemId = parseInt(data[1].toString()); - recipient = data[2].toString(); + recipient = data[2].toJSON(); } }); const result: CreateItemResult = { @@ -158,19 +183,17 @@ export function getTransferResult(events: EventRecord[]): TransferResult { success: false, collectionId: 0, itemId: 0, - sender: '', - recipient: '', value: 0n, }; - events.forEach(({event: {data, method, section}}) => { + events.forEach(({ event: { data, method, section } }) => { if (method === 'ExtrinsicSuccess') { result.success = true; } else if (section === 'nft' && method === 'Transfer') { result.collectionId = +data[0].toString(); result.itemId = +data[1].toString(); - result.sender = data[2].toString(); - result.recipient = data[3].toString(); + result.sender = data[2].toJSON() as CrossAccountId; + result.recipient = data[3].toJSON() as CrossAccountId; result.value = BigInt(data[4].toString()); } }); @@ -212,7 +235,7 @@ const defaultCreateCollectionParams: CreateCollectionParams = { } export async function createCollectionExpectSuccess(params: Partial = {}): Promise { - const {name, description, mode, tokenPrefix } = {...defaultCreateCollectionParams, ...params}; + const { name, description, mode, tokenPrefix } = { ...defaultCreateCollectionParams, ...params }; let collectionId: number = 0; await usingApi(async (api) => { @@ -224,13 +247,13 @@ export async function createCollectionExpectSuccess(params: Partial = {}) { - const {name, description, mode, tokenPrefix } = {...defaultCreateCollectionParams, ...params}; + const { name, description, mode, tokenPrefix } = { ...defaultCreateCollectionParams, ...params }; let modeprm = {}; if (mode.type === 'NFT') { - modeprm = {nft: null}; + modeprm = { nft: null }; } else if (mode.type === 'Fungible') { - modeprm = {fungible: mode.decimalPoints}; + modeprm = { fungible: mode.decimalPoints }; } else if (mode.type === 'ReFungible') { - modeprm = {refungible: null}; + modeprm = { refungible: null }; } else if (mode.type === 'Invalid') { - modeprm = {invalid: null}; + modeprm = { invalid: null }; } await usingApi(async (api) => { @@ -299,7 +322,7 @@ export async function findUnusedAddress(api: ApiPromise, seedAddition = ''): Pro let bal = new BigNumber(0); let unused; do { - const randomSeed = 'seed' + Math.floor(Math.random() * Math.floor(10000)) + seedAddition; + const randomSeed = 'seed' + Math.floor(Math.random() * Math.floor(10000)) + seedAddition; const keyring = new Keyring({ type: 'sr25519' }); unused = keyring.addFromUri(`//${randomSeed}`); bal = new BigNumber((await api.query.system.account(unused.address)).data.free.toString()); @@ -406,7 +429,7 @@ export async function setCollectionSponsorExpectSuccess(collectionId: number, sp // What to expect expect(result.success).to.be.true; expect(collection.Sponsorship).to.deep.equal({ - Unconfirmed: sponsor.toString(), + unconfirmed: sponsor, }); }); } @@ -425,7 +448,7 @@ export async function removeCollectionSponsorExpectSuccess(collectionId: number) // What to expect expect(result.success).to.be.true; - expect(collection.Sponsorship).to.be.deep.equal({ Disabled: null }); + expect(collection.Sponsorship).to.be.deep.equal({ disabled: null }); }); } @@ -464,7 +487,7 @@ export async function confirmSponsorshipExpectSuccess(collectionId: number, send // What to expect expect(result.success).to.be.true; expect(collection.Sponsorship).to.be.deep.equal({ - Confirmed: sender.address, + confirmed: sender.address, }); }); } @@ -538,9 +561,9 @@ export async function isWhitelistedInContract(contractAddress: AccountId | strin return whitelisted; } -export async function addToContractWhiteListExpectSuccess(sender: IKeyringPair, contractAddress: AccountId | string, user: string) { +export async function addToContractWhiteListExpectSuccess(sender: IKeyringPair, contractAddress: AccountId | string, user: AccountId | string) { await usingApi(async (api) => { - const tx = api.tx.nft.addToContractWhiteList(contractAddress, user); + const tx = api.tx.nft.addToContractWhiteList(contractAddress.toString(), user.toString()); const events = await submitTransactionAsync(sender, tx); const result = getGenericResult(events); @@ -548,9 +571,9 @@ export async function addToContractWhiteListExpectSuccess(sender: IKeyringPair, }); } -export async function removeFromContractWhiteListExpectSuccess(sender: IKeyringPair, contractAddress: AccountId | string, user: string) { +export async function removeFromContractWhiteListExpectSuccess(sender: IKeyringPair, contractAddress: AccountId | string, user: AccountId | string) { await usingApi(async (api) => { - const tx = api.tx.nft.removeFromContractWhiteList(contractAddress, user); + const tx = api.tx.nft.removeFromContractWhiteList(contractAddress.toString(), user.toString()); const events = await submitTransactionAsync(sender, tx); const result = getGenericResult(events); @@ -558,9 +581,9 @@ export async function removeFromContractWhiteListExpectSuccess(sender: IKeyringP }); } -export async function removeFromContractWhiteListExpectFailure(sender: IKeyringPair, contractAddress: AccountId | string, user: string) { +export async function removeFromContractWhiteListExpectFailure(sender: IKeyringPair, contractAddress: AccountId | string, user: AccountId | string) { await usingApi(async (api) => { - const tx = api.tx.nft.removeFromContractWhiteList(contractAddress, user); + const tx = api.tx.nft.removeFromContractWhiteList(contractAddress.toString(), user.toString()); const events = await expect(submitTransactionExpectFailAsync(sender, tx)).to.be.rejected; const result = getGenericResult(events); @@ -633,68 +656,70 @@ export async function burnItemExpectSuccess(owner: IKeyringPair, collectionId: n } export async function -approveExpectSuccess(collectionId: number, - tokenId: number, owner: IKeyringPair, approved: IKeyringPair, amount: number | bigint = 1) { + approveExpectSuccess(collectionId: number, + tokenId: number, owner: IKeyringPair, approved: IKeyringPair | CrossAccountId | string, amount: number | bigint = 1) { await usingApi(async (api: ApiPromise) => { + approved = normalizeAccountId(approved); const allowanceBefore = - await api.query.nft.allowances(collectionId, [tokenId, owner.address, approved.address]) as unknown as BN; - const approveNftTx = await api.tx.nft.approve(approved.address, collectionId, tokenId, amount); + await api.query.nft.allowances(collectionId, [tokenId, owner.address, toSubstrateAddress(approved)]) as unknown as BN; + const approveNftTx = api.tx.nft.approve(approved, collectionId, tokenId, amount); const events = await submitTransactionAsync(owner, approveNftTx); const result = getCreateItemResult(events); // tslint:disable-next-line:no-unused-expression expect(result.success).to.be.true; const allowanceAfter = - await api.query.nft.allowances(collectionId, [tokenId, owner.address, approved.address]) as unknown as BN; + await api.query.nft.allowances(collectionId, [tokenId, owner.address, toSubstrateAddress(approved)]) as unknown as BN; expect(allowanceAfter.sub(allowanceBefore).toString()).to.be.equal(amount.toString()); }); } export async function -transferFromExpectSuccess(collectionId: number, - tokenId: number, - accountApproved: IKeyringPair, - accountFrom: IKeyringPair, - accountTo: IKeyringPair, - value: number | bigint = 1, - type: string = 'NFT') { + transferFromExpectSuccess(collectionId: number, + tokenId: number, + accountApproved: IKeyringPair, + accountFrom: IKeyringPair | CrossAccountId, + accountTo: IKeyringPair | CrossAccountId, + value: number | bigint = 1, + type: string = 'NFT') { await usingApi(async (api: ApiPromise) => { + const to = normalizeAccountId(accountTo); let balanceBefore = new BN(0); if (type === 'Fungible') { - balanceBefore = await api.query.nft.balance(collectionId, accountTo.address) as unknown as BN; + balanceBefore = await api.query.nft.balance(collectionId, toSubstrateAddress(to)) as unknown as BN; } - const transferFromTx = await api.tx.nft.transferFrom( - accountFrom.address, accountTo.address, collectionId, tokenId, value); + const transferFromTx = api.tx.nft.transferFrom( + normalizeAccountId(accountFrom), to, collectionId, tokenId, value); const events = await submitTransactionAsync(accountApproved, transferFromTx); const result = getCreateItemResult(events); // tslint:disable-next-line:no-unused-expression expect(result.success).to.be.true; if (type === 'NFT') { - const nftItemData = (await api.query.nft.nftItemList(collectionId, tokenId) as any).unwrap() as ITokenDataType; - expect(nftItemData.Owner.toString()).to.be.equal(accountTo.address); + const nftItemData = (await api.query.nft.nftItemList(collectionId, tokenId) as any).toJSON() as ITokenDataType; + expect(nftItemData.Owner).to.be.deep.equal(to); } if (type === 'Fungible') { - const balanceAfter = (await api.query.nft.fungibleItemList(collectionId, accountTo.address) as any).Value as unknown as BN; + const balanceAfter = (await api.query.nft.fungibleItemList(collectionId, toSubstrateAddress(to)) as any).Value as unknown as BN; expect(balanceAfter.sub(balanceBefore).toString()).to.be.equal(value.toString()); } if (type === 'ReFungible') { const nftItemData = - (await api.query.nft.reFungibleItemList(collectionId, tokenId) as any).unwrap() as IReFungibleTokenDataType; - expect(nftItemData.Owner[0].Owner.toString()).to.be.equal(accountTo.address); - expect(nftItemData.Owner[0].Fraction.toNumber()).to.be.equal(value); + (await api.query.nft.reFungibleItemList(collectionId, tokenId) as any).toJSON() as IReFungibleTokenDataType; + expect(nftItemData.Owner[0].Owner).to.be.deep.equal(normalizeAccountId(to)); + expect(nftItemData.Owner[0].Fraction).to.be.equal(value); } }); } export async function -transferFromExpectFail(collectionId: number, - tokenId: number, - accountApproved: IKeyringPair, - accountFrom: IKeyringPair, - accountTo: IKeyringPair, - value: number | bigint = 1) { + transferFromExpectFail(collectionId: number, + tokenId: number, + accountApproved: IKeyringPair, + accountFrom: IKeyringPair, + accountTo: IKeyringPair, + value: number | bigint = 1) { await usingApi(async (api: ApiPromise) => { - const transferFromTx = await api.tx.nft.transferFrom( - accountFrom.address, accountTo.address, collectionId, tokenId, value); + const transferFromTx = api.tx.nft.transferFrom( + normalizeAccountId(accountFrom.address), normalizeAccountId(accountTo.address), collectionId, tokenId, value); const events = await expect(submitTransactionExpectFailAsync(accountApproved, transferFromTx)).to.be.rejected; const result = getCreateCollectionResult(events); // tslint:disable-next-line:no-unused-expression @@ -703,53 +728,55 @@ transferFromExpectFail(collectionId: number, } export async function -transferExpectSuccess(collectionId: number, - tokenId: number, - sender: IKeyringPair, - recipient: IKeyringPair, - value: number | bigint = 1, - type: string = 'NFT') { + transferExpectSuccess(collectionId: number, + tokenId: number, + sender: IKeyringPair, + recipient: IKeyringPair | CrossAccountId, + value: number | bigint = 1, + type: string = 'NFT') { await usingApi(async (api: ApiPromise) => { + const to = normalizeAccountId(recipient); + let balanceBefore = new BN(0); if (type === 'Fungible') { - balanceBefore = await api.query.nft.balance(collectionId, recipient.address) as unknown as BN; + balanceBefore = await api.query.nft.balance(collectionId, toSubstrateAddress(to)) as unknown as BN; } - const transferTx = await api.tx.nft.transfer(recipient.address, collectionId, tokenId, value); + const transferTx = api.tx.nft.transfer(to, collectionId, tokenId, value); const events = await submitTransactionAsync(sender, transferTx); const result = getTransferResult(events); // tslint:disable-next-line:no-unused-expression expect(result.success).to.be.true; expect(result.collectionId).to.be.equal(collectionId); expect(result.itemId).to.be.equal(tokenId); - expect(result.sender).to.be.equal(sender.address); - expect(result.recipient).to.be.equal(recipient.address); + expect(result.sender).to.be.deep.equal(normalizeAccountId(sender.address)); + expect(result.recipient).to.be.deep.equal(to); expect(result.value.toString()).to.be.equal(value.toString()); if (type === 'NFT') { const nftItemData = (await api.query.nft.nftItemList(collectionId, tokenId)).toJSON() as unknown as ITokenDataType; - expect(nftItemData.Owner.toString()).to.be.equal(recipient.address); + expect(nftItemData.Owner).to.be.deep.equal(to); } if (type === 'Fungible') { - const balanceAfter = (await api.query.nft.fungibleItemList(collectionId, recipient.address) as any).Value as unknown as BN; + const balanceAfter = (await api.query.nft.fungibleItemList(collectionId, toSubstrateAddress(to)) as any).Value as unknown as BN; expect(balanceAfter.sub(balanceBefore).toString()).to.be.equal(value.toString()); } if (type === 'ReFungible') { const nftItemData = (await api.query.nft.reFungibleItemList(collectionId, tokenId)).toJSON() as unknown as IReFungibleTokenDataType; - expect(nftItemData.Owner[0].Owner.toString()).to.be.equal(recipient.address); + expect(nftItemData.Owner[0].Owner).to.be.deep.equal(to); expect(nftItemData.Owner[0].Fraction.toString()).to.be.equal(value.toString()); } }); } export async function -transferExpectFail(collectionId: number, - tokenId: number, - sender: IKeyringPair, - recipient: IKeyringPair, - value: number | bigint = 1, - type: string = 'NFT') { + transferExpectFail(collectionId: number, + tokenId: number, + sender: IKeyringPair, + recipient: IKeyringPair, + value: number | bigint = 1, + type: string = 'NFT') { await usingApi(async (api: ApiPromise) => { - const transferTx = await api.tx.nft.transfer(recipient.address, collectionId, tokenId, value); + const transferTx = api.tx.nft.transfer(normalizeAccountId(recipient.address), collectionId, tokenId, value); const events = await expect(submitTransactionExpectFailAsync(sender, transferTx)).to.be.rejected; if (events && Array.isArray(events)) { const result = getCreateCollectionResult(events); @@ -760,10 +787,10 @@ transferExpectFail(collectionId: number, } export async function -approveExpectFail(collectionId: number, - tokenId: number, owner: IKeyringPair, approved: IKeyringPair, amount: number | bigint = 1) { + approveExpectFail(collectionId: number, + tokenId: number, owner: IKeyringPair, approved: IKeyringPair, amount: number | bigint = 1) { await usingApi(async (api: ApiPromise) => { - const approveNftTx = await api.tx.nft.approve(approved.address, collectionId, tokenId, amount); + const approveNftTx = api.tx.nft.approve(normalizeAccountId(approved.address), collectionId, tokenId, amount); const events = await expect(submitTransactionExpectFailAsync(owner, approveNftTx)).to.be.rejected; const result = getCreateCollectionResult(events); // tslint:disable-next-line:no-unused-expression @@ -776,7 +803,7 @@ export async function getFungibleBalance( owner: string, ) { return await usingApi(async (api) => { - const response = (await api.query.nft.fungibleItemList(collectionId, owner)).toJSON() as unknown as {Value: string}; + const response = (await api.query.nft.fungibleItemList(collectionId, owner)).toJSON() as unknown as { Value: string }; return BigInt(response.Value); }); } @@ -785,10 +812,10 @@ export async function createFungibleItemExpectSuccess( sender: IKeyringPair, collectionId: number, data: CreateFungibleData, - owner: string = sender.address, + owner: CrossAccountId | string = sender.address, ) { return await usingApi(async (api) => { - const tx = api.tx.nft.createItem(collectionId, owner, { Fungible: data }); + const tx = api.tx.nft.createItem(collectionId, normalizeAccountId(owner), { Fungible: data }); const events = await submitTransactionAsync(sender, tx); const result = getCreateItemResult(events); @@ -799,32 +826,30 @@ export async function createFungibleItemExpectSuccess( } export async function createItemExpectSuccess( - sender: IKeyringPair, collectionId: number, createMode: string, owner: string = '') { + sender: IKeyringPair, collectionId: number, createMode: string, owner: CrossAccountId | string = sender.address) { let newItemId: number = 0; await usingApi(async (api) => { + const to = normalizeAccountId(owner); const AItemCount = parseInt((await api.query.nft.itemListIndex(collectionId)).toString(), 10); - const Aitem: any = (await api.query.nft.fungibleItemList(collectionId, owner)).toJSON(); + const Aitem: any = (await api.query.nft.fungibleItemList(collectionId, toSubstrateAddress(to))).toJSON(); const AItemBalance = new BigNumber(Aitem.Value); - if (owner === '') { - owner = sender.address; - } - let tx; if (createMode === 'Fungible') { - const createData = {fungible: {value: 10}}; - tx = api.tx.nft.createItem(collectionId, owner, createData); + const createData = { fungible: { value: 10 } }; + tx = api.tx.nft.createItem(collectionId, to, createData); } else if (createMode === 'ReFungible') { - const createData = {refungible: {const_data: [], variable_data: [], pieces: 100}}; - tx = api.tx.nft.createItem(collectionId, owner, createData); + const createData = { refungible: { const_data: [], variable_data: [], pieces: 100 } }; + tx = api.tx.nft.createItem(collectionId, to, createData); } else { - tx = api.tx.nft.createItem(collectionId, owner, createMode); + tx = api.tx.nft.createItem(collectionId, to, createMode); } + const events = await submitTransactionAsync(sender, tx); const result = getCreateItemResult(events); const BItemCount = parseInt((await api.query.nft.itemListIndex(collectionId)).toString(), 10); - const Bitem: any = (await api.query.nft.fungibleItemList(collectionId, owner)).toJSON(); + const Bitem: any = (await api.query.nft.fungibleItemList(collectionId, toSubstrateAddress(to))).toJSON(); const BItemBalance = new BigNumber(Bitem.Value); // What to expect @@ -836,8 +861,8 @@ export async function createItemExpectSuccess( expect(BItemCount).to.be.equal(AItemCount + 1); } expect(collectionId).to.be.equal(result.collectionId); - expect(BItemCount).to.be.equal(result.itemId); - expect(owner).to.be.equal(result.recipient); + expect(BItemCount.toString()).to.be.equal(result.itemId.toString()); + expect(to).to.be.deep.equal(result.recipient); newItemId = result.itemId; }); return newItemId; @@ -846,7 +871,8 @@ export async function createItemExpectSuccess( export async function createItemExpectFailure( sender: IKeyringPair, collectionId: number, createMode: string, owner: string = sender.address) { await usingApi(async (api) => { - const tx = api.tx.nft.createItem(collectionId, owner, createMode); + const tx = api.tx.nft.createItem(collectionId, normalizeAccountId(owner), createMode); + const events = await expect(submitTransactionExpectFailAsync(sender, tx)).to.be.rejected; const result = getCreateItemResult(events); @@ -924,13 +950,13 @@ export async function isWhitelisted(collectionId: number, address: string) { return whitelisted; } -export async function addToWhiteListExpectSuccess(sender: IKeyringPair, collectionId: number, address: string) { +export async function addToWhiteListExpectSuccess(sender: IKeyringPair, collectionId: number, address: string | AccountId) { await usingApi(async (api) => { const whiteListedBefore = (await api.query.nft.whiteList(collectionId, address)).toJSON(); // Run the transaction - const tx = api.tx.nft.addToWhiteList(collectionId, address); + const tx = api.tx.nft.addToWhiteList(collectionId, normalizeAccountId(address)); const events = await submitTransactionAsync(sender, tx); const result = getGenericResult(events); @@ -946,10 +972,10 @@ export async function addToWhiteListExpectSuccess(sender: IKeyringPair, collecti }); } -export async function removeFromWhiteListExpectSuccess(sender: IKeyringPair, collectionId: number, address: string) { +export async function removeFromWhiteListExpectSuccess(sender: IKeyringPair, collectionId: number, address: CrossAccountId) { await usingApi(async (api) => { // Run the transaction - const tx = api.tx.nft.removeFromWhiteList(collectionId, address); + const tx = api.tx.nft.removeFromWhiteList(collectionId, normalizeAccountId(address)); const events = await submitTransactionAsync(sender, tx); const result = getGenericResult(events); @@ -959,10 +985,10 @@ export async function removeFromWhiteListExpectSuccess(sender: IKeyringPair, col }); } -export async function removeFromWhiteListExpectFailure(sender: IKeyringPair, collectionId: number, address: string) { +export async function removeFromWhiteListExpectFailure(sender: IKeyringPair, collectionId: number, address: CrossAccountId) { await usingApi(async (api) => { // Run the transaction - const tx = api.tx.nft.removeFromWhiteList(collectionId, address); + const tx = api.tx.nft.removeFromWhiteList(collectionId, normalizeAccountId(address)); const events = await expect(submitTransactionExpectFailAsync(sender, tx)).to.be.rejected; const result = getGenericResult(events); diff --git a/tests/yarn.lock b/tests/yarn.lock index df85b0acdb..a7de5c4587 100644 --- a/tests/yarn.lock +++ b/tests/yarn.lock @@ -2,16 +2,15 @@ # yarn lockfile v1 -"@babel/cli@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.12.13.tgz#ae2c6a75fa43f3db4bca0659799b0dfca3f5212b" - integrity sha512-Zto3HPeE0GRmaxobUl7NvFTo97NKe1zdAuWqTO8oka7nE0IIqZ4CFvuRZe1qf+ZMd7eHMhwqrecjwc10mjXo/g== +"@babel/cli@^7.13.16": + version "7.13.16" + resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.13.16.tgz#9d372e943ced0cc291f068204a9b010fd9cfadbc" + integrity sha512-cL9tllhqvsQ6r1+d9Invf7nNXg/3BlfL1vvvL/AdH9fZ2l5j0CeBcoq6UjsqHpvyN1v5nXSZgqJZoGeK+ZOAbw== dependencies: commander "^4.0.1" convert-source-map "^1.1.0" fs-readdir-recursive "^1.1.0" glob "^7.0.0" - lodash "^4.17.19" make-dir "^2.1.0" slash "^2.0.0" source-map "^0.5.0" @@ -19,6 +18,13 @@ "@nicolo-ribaudo/chokidar-2" "2.1.8-no-fsevents" chokidar "^3.4.0" +"@babel/code-frame@7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" + integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== + dependencies: + "@babel/highlight" "^7.10.4" + "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" @@ -26,38 +32,38 @@ dependencies: "@babel/highlight" "^7.12.13" -"@babel/compat-data@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.12.13.tgz#27e19e0ed3726ccf54067ced4109501765e7e2e8" - integrity sha512-U/hshG5R+SIoW7HVWIdmy1cB7s3ki+r3FpyEZiCgpi4tFgPnX/vynY80ZGSASOIrUM6O7VxOgCZgdt7h97bUGg== +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.13.15", "@babel/compat-data@^7.13.8": + version "7.13.15" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.13.15.tgz#7e8eea42d0b64fda2b375b22d06c605222e848f4" + integrity sha512-ltnibHKR1VnrU4ymHyQ/CXtNXI6yZC0oJThyW78Hft8XndANwi+9H+UIklBDraIjFEJzw8wmcM427oDd9KS5wA== -"@babel/core@^7.1.0", "@babel/core@^7.12.13", "@babel/core@^7.7.5": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.13.tgz#b73a87a3a3e7d142a66248bf6ad88b9ceb093425" - integrity sha512-BQKE9kXkPlXHPeqissfxo0lySWJcYdEP0hdtJOH/iJfDdhOCcgtNCjftCJg3qqauB4h+lz2N6ixM++b9DN1Tcw== +"@babel/core@^7.1.0", "@babel/core@^7.13.16", "@babel/core@^7.7.5": + version "7.13.16" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.13.16.tgz#7756ab24396cc9675f1c3fcd5b79fcce192ea96a" + integrity sha512-sXHpixBiWWFti0AV2Zq7avpTasr6sIAu7Y396c608541qAU2ui4a193m0KSQmfPSKFZLnQ3cvlKDOm3XkuXm3Q== dependencies: "@babel/code-frame" "^7.12.13" - "@babel/generator" "^7.12.13" - "@babel/helper-module-transforms" "^7.12.13" - "@babel/helpers" "^7.12.13" - "@babel/parser" "^7.12.13" + "@babel/generator" "^7.13.16" + "@babel/helper-compilation-targets" "^7.13.16" + "@babel/helper-module-transforms" "^7.13.14" + "@babel/helpers" "^7.13.16" + "@babel/parser" "^7.13.16" "@babel/template" "^7.12.13" - "@babel/traverse" "^7.12.13" - "@babel/types" "^7.12.13" + "@babel/traverse" "^7.13.15" + "@babel/types" "^7.13.16" convert-source-map "^1.7.0" debug "^4.1.0" - gensync "^1.0.0-beta.1" + gensync "^1.0.0-beta.2" json5 "^2.1.2" - lodash "^4.17.19" - semver "^5.4.1" + semver "^6.3.0" source-map "^0.5.0" -"@babel/generator@^7.12.13": - version "7.12.15" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.15.tgz#4617b5d0b25cc572474cc1aafee1edeaf9b5368f" - integrity sha512-6F2xHxBiFXWNSGb7vyCUTBF8RCLY66rS0zEPcP8t/nQyXjha5EuK4z7H5o7fWG8B4M7y6mqVWq1J+1PuwRhecQ== +"@babel/generator@^7.13.16": + version "7.13.16" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.13.16.tgz#0befc287031a201d84cdfc173b46b320ae472d14" + integrity sha512-grBBR75UnKOcUWMp8WoDxNsWCFl//XCK6HWTrBQKTr5SV9f5g0pNOjdyzi/DTBv12S9GnYPInIXQBTky7OXEMg== dependencies: - "@babel/types" "^7.12.13" + "@babel/types" "^7.13.16" jsesc "^2.5.1" source-map "^0.5.0" @@ -76,41 +82,55 @@ "@babel/helper-explode-assignable-expression" "^7.12.13" "@babel/types" "^7.12.13" -"@babel/helper-compilation-targets@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.13.tgz#d689cdef88810aa74e15a7a94186f26a3d773c98" - integrity sha512-dXof20y/6wB5HnLOGyLh/gobsMvDNoekcC+8MCV2iaTd5JemhFkPD73QB+tK3iFC9P0xJC73B6MvKkyUfS9cCw== +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.13.13", "@babel/helper-compilation-targets@^7.13.16", "@babel/helper-compilation-targets@^7.13.8": + version "7.13.16" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz#6e91dccf15e3f43e5556dffe32d860109887563c" + integrity sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA== dependencies: - "@babel/compat-data" "^7.12.13" - "@babel/helper-validator-option" "^7.12.11" + "@babel/compat-data" "^7.13.15" + "@babel/helper-validator-option" "^7.12.17" browserslist "^4.14.5" - semver "^5.5.0" + semver "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.13.tgz#0f1707c2eec1a4604f2a22a6fb209854ef2a399a" - integrity sha512-Vs/e9wv7rakKYeywsmEBSRC9KtmE7Px+YBlESekLeJOF0zbGUicGfXSNi3o+tfXSNS48U/7K9mIOOCR79Cl3+Q== +"@babel/helper-create-class-features-plugin@^7.13.0": + version "7.13.11" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.11.tgz#30d30a005bca2c953f5653fc25091a492177f4f6" + integrity sha512-ays0I7XYq9xbjCSvT+EvysLgfc3tOkwCULHjrnscGT3A9qD4sk3wXnJ3of0MAWsWGjdinFvajHU2smYuqXKMrw== dependencies: "@babel/helper-function-name" "^7.12.13" - "@babel/helper-member-expression-to-functions" "^7.12.13" + "@babel/helper-member-expression-to-functions" "^7.13.0" "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/helper-replace-supers" "^7.12.13" + "@babel/helper-replace-supers" "^7.13.0" "@babel/helper-split-export-declaration" "^7.12.13" "@babel/helper-create-regexp-features-plugin@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.13.tgz#0996d370a92896c612ae41a4215544bd152579c0" - integrity sha512-XC+kiA0J3at6E85dL5UnCYfVOcIZ834QcAY0TIpgUVnz0zDzg+0TtvZTnJ4g9L1dPRGe30Qi03XCIS4tYCLtqw== + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz#a2ac87e9e319269ac655b8d4415e94d38d663cb7" + integrity sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg== dependencies: "@babel/helper-annotate-as-pure" "^7.12.13" regexpu-core "^4.7.1" +"@babel/helper-define-polyfill-provider@^0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.0.tgz#a640051772045fedaaecc6f0c6c69f02bdd34bf1" + integrity sha512-JT8tHuFjKBo8NnaUbblz7mIu1nnvUDiHVjXXkulZULyidvo/7P6TY7+YqpV37IfF+KUFxmlK04elKtGKXaiVgw== + dependencies: + "@babel/helper-compilation-targets" "^7.13.0" + "@babel/helper-module-imports" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/traverse" "^7.13.0" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + semver "^6.1.2" + "@babel/helper-explode-assignable-expression@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.13.tgz#0e46990da9e271502f77507efa4c9918d3d8634a" - integrity sha512-5loeRNvMo9mx1dA/d6yNi+YiKziJZFylZnCo1nmFF4qPU4yJ14abhWESuSMQSlQxWdxdOFzxXjk/PpfudTtYyw== + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz#17b5c59ff473d9f956f40ef570cf3a76ca12657f" + integrity sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA== dependencies: - "@babel/types" "^7.12.13" + "@babel/types" "^7.13.0" "@babel/helper-function-name@^7.12.13": version "7.12.13" @@ -128,41 +148,41 @@ dependencies: "@babel/types" "^7.12.13" -"@babel/helper-hoist-variables@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.12.13.tgz#13aba58b7480b502362316ea02f52cca0e9796cd" - integrity sha512-KSC5XSj5HreRhYQtZ3cnSnQwDzgnbdUDEFsxkN0m6Q3WrCRt72xrnZ8+h+pX7YxM7hr87zIO3a/v5p/H3TrnVw== +"@babel/helper-hoist-variables@^7.13.0": + version "7.13.16" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz#1b1651249e94b51f8f0d33439843e33e39775b30" + integrity sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg== dependencies: - "@babel/types" "^7.12.13" + "@babel/traverse" "^7.13.15" + "@babel/types" "^7.13.16" -"@babel/helper-member-expression-to-functions@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.13.tgz#c5715695b4f8bab32660dbdcdc2341dec7e3df40" - integrity sha512-B+7nN0gIL8FZ8SvMcF+EPyB21KnCcZHQZFczCxbiNGV/O0rsrSBlWGLzmtBJ3GMjSVMIm4lpFhR+VdVBuIsUcQ== +"@babel/helper-member-expression-to-functions@^7.13.0", "@babel/helper-member-expression-to-functions@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz#dfe368f26d426a07299d8d6513821768216e6d72" + integrity sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw== dependencies: - "@babel/types" "^7.12.13" + "@babel/types" "^7.13.12" -"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.13.tgz#ec67e4404f41750463e455cc3203f6a32e93fcb0" - integrity sha512-NGmfvRp9Rqxy0uHSSVP+SRIW1q31a7Ji10cLBcqSDUngGentY4FRiHOFZFE1CLU5eiL0oE8reH7Tg1y99TDM/g== +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz#c6a369a6f3621cb25da014078684da9196b61977" + integrity sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA== dependencies: - "@babel/types" "^7.12.13" + "@babel/types" "^7.13.12" -"@babel/helper-module-transforms@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.12.13.tgz#01afb052dcad2044289b7b20beb3fa8bd0265bea" - integrity sha512-acKF7EjqOR67ASIlDTupwkKM1eUisNAjaSduo5Cz+793ikfnpe7p4Q7B7EWU2PCoSTPWsQkR7hRUWEIZPiVLGA== +"@babel/helper-module-transforms@^7.13.0", "@babel/helper-module-transforms@^7.13.14": + version "7.13.14" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.13.14.tgz#e600652ba48ccb1641775413cb32cfa4e8b495ef" + integrity sha512-QuU/OJ0iAOSIatyVZmfqB0lbkVP0kDRiKj34xy+QNsnVZi/PA6BoSoreeqnxxa9EHFAIL0R9XOaAR/G9WlIy5g== dependencies: - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-replace-supers" "^7.12.13" - "@babel/helper-simple-access" "^7.12.13" + "@babel/helper-module-imports" "^7.13.12" + "@babel/helper-replace-supers" "^7.13.12" + "@babel/helper-simple-access" "^7.13.12" "@babel/helper-split-export-declaration" "^7.12.13" "@babel/helper-validator-identifier" "^7.12.11" "@babel/template" "^7.12.13" - "@babel/traverse" "^7.12.13" - "@babel/types" "^7.12.13" - lodash "^4.17.19" + "@babel/traverse" "^7.13.13" + "@babel/types" "^7.13.14" "@babel/helper-optimise-call-expression@^7.12.13": version "7.12.13" @@ -171,36 +191,36 @@ dependencies: "@babel/types" "^7.12.13" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.12.13.tgz#174254d0f2424d8aefb4dd48057511247b0a9eeb" - integrity sha512-C+10MXCXJLiR6IeG9+Wiejt9jmtFpxUc3MQqCmPY8hfCjyUGl9kT+B2okzEZrtykiwrc4dbCPdDoz0A/HQbDaA== +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz#806526ce125aed03373bc416a828321e3a6a33af" + integrity sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ== -"@babel/helper-remap-async-to-generator@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.13.tgz#170365f4140e2d20e5c88f8ba23c24468c296878" - integrity sha512-Qa6PU9vNcj1NZacZZI1Mvwt+gXDH6CTfgAkSjeRMLE8HxtDK76+YDId6NQR+z7Rgd5arhD2cIbS74r0SxD6PDA== +"@babel/helper-remap-async-to-generator@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz#376a760d9f7b4b2077a9dd05aa9c3927cadb2209" + integrity sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg== dependencies: "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-wrap-function" "^7.12.13" - "@babel/types" "^7.12.13" + "@babel/helper-wrap-function" "^7.13.0" + "@babel/types" "^7.13.0" -"@babel/helper-replace-supers@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.13.tgz#00ec4fb6862546bd3d0aff9aac56074277173121" - integrity sha512-pctAOIAMVStI2TMLhozPKbf5yTEXc0OJa0eENheb4w09SrgOWEs+P4nTOZYJQCqs8JlErGLDPDJTiGIp3ygbLg== +"@babel/helper-replace-supers@^7.12.13", "@babel/helper-replace-supers@^7.13.0", "@babel/helper-replace-supers@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz#6442f4c1ad912502481a564a7386de0c77ff3804" + integrity sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw== dependencies: - "@babel/helper-member-expression-to-functions" "^7.12.13" + "@babel/helper-member-expression-to-functions" "^7.13.12" "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/traverse" "^7.12.13" - "@babel/types" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.12" -"@babel/helper-simple-access@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.13.tgz#8478bcc5cacf6aa1672b251c1d2dde5ccd61a6c4" - integrity sha512-0ski5dyYIHEfwpWGx5GPWhH35j342JaflmCeQmsPWcrOQDtCN6C1zKAVRFVbK53lPW2c9TsuLLSUDf0tIGJ5hA== +"@babel/helper-simple-access@^7.12.13", "@babel/helper-simple-access@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz#dd6c538afb61819d205a012c31792a39c7a5eaf6" + integrity sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA== dependencies: - "@babel/types" "^7.12.13" + "@babel/types" "^7.13.12" "@babel/helper-skip-transparent-expression-wrappers@^7.12.1": version "7.12.1" @@ -221,68 +241,77 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== -"@babel/helper-validator-option@^7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.11.tgz#d66cb8b7a3e7fe4c6962b32020a131ecf0847f4f" - integrity sha512-TBFCyj939mFSdeX7U7DDj32WtzYY7fDcalgq8v3fBZMNOJQNn7nOYzMaUCiPxPYfCup69mtIpqlKgMZLvQ8Xhw== +"@babel/helper-validator-option@^7.12.17": + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831" + integrity sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw== -"@babel/helper-wrap-function@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.12.13.tgz#e3ea8cb3ee0a16911f9c1b50d9e99fe8fe30f9ff" - integrity sha512-t0aZFEmBJ1LojdtJnhOaQEVejnzYhyjWHSsNSNo8vOYRbAJNh6r6GQF7pd36SqG7OKGbn+AewVQ/0IfYfIuGdw== +"@babel/helper-wrap-function@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz#bdb5c66fda8526ec235ab894ad53a1235c79fcc4" + integrity sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA== dependencies: "@babel/helper-function-name" "^7.12.13" "@babel/template" "^7.12.13" - "@babel/traverse" "^7.12.13" - "@babel/types" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.0" -"@babel/helpers@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.13.tgz#3c75e993632e4dadc0274eae219c73eb7645ba47" - integrity sha512-oohVzLRZ3GQEk4Cjhfs9YkJA4TdIDTObdBEZGrd6F/T0GPSnuV6l22eMcxlvcvzVIPH3VTtxbseudM1zIE+rPQ== +"@babel/helpers@^7.13.16": + version "7.13.17" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.13.17.tgz#b497c7a00e9719d5b613b8982bda6ed3ee94caf6" + integrity sha512-Eal4Gce4kGijo1/TGJdqp3WuhllaMLSrW6XcL0ulyUAQOuxHcCafZE8KHg9857gcTehsm/v7RcOx2+jp0Ryjsg== dependencies: "@babel/template" "^7.12.13" - "@babel/traverse" "^7.12.13" - "@babel/types" "^7.12.13" + "@babel/traverse" "^7.13.17" + "@babel/types" "^7.13.17" -"@babel/highlight@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.12.13.tgz#8ab538393e00370b26271b01fa08f7f27f2e795c" - integrity sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww== +"@babel/highlight@^7.10.4", "@babel/highlight@^7.12.13": + version "7.13.10" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.13.10.tgz#a8b2a66148f5b27d666b15d81774347a731d52d1" + integrity sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg== dependencies: "@babel/helper-validator-identifier" "^7.12.11" chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.12.13": - version "7.12.15" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.15.tgz#2b20de7f0b4b332d9b119dd9c33409c538b8aacf" - integrity sha512-AQBOU2Z9kWwSZMd6lNjCX0GUgFonL1wAM1db8L8PMk9UDaGsRCArBkU4Sc+UCM3AE4hjbXx+h58Lb3QT4oRmrA== +"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.12.13", "@babel/parser@^7.13.16": + version "7.13.16" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.16.tgz#0f18179b0448e6939b1f3f5c4c355a3a9bcdfd37" + integrity sha512-6bAg36mCwuqLO0hbR+z7PHuqWiCeP7Dzg73OpQwsAB1Eb8HnGEz5xYBzCfbu+YjoaJsJs+qheDxVAuqbt3ILEw== -"@babel/plugin-proposal-async-generator-functions@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.13.tgz#d1c6d841802ffb88c64a2413e311f7345b9e66b5" - integrity sha512-1KH46Hx4WqP77f978+5Ye/VUbuwQld2hph70yaw2hXS2v7ER2f3nlpNMu909HO2rbvP0NKLlMVDPh9KXklVMhA== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz#a3484d84d0b549f3fc916b99ee4783f26fabad2a" + integrity sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/helper-remap-async-to-generator" "^7.12.13" - "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + "@babel/plugin-proposal-optional-chaining" "^7.13.12" -"@babel/plugin-proposal-class-properties@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.13.tgz#3d2ce350367058033c93c098e348161d6dc0d8c8" - integrity sha512-8SCJ0Ddrpwv4T7Gwb33EmW1V9PY5lggTO+A8WjyIwxrSHDUyBw4MtF96ifn1n8H806YlxbVCoKXbbmzD6RD+cA== +"@babel/plugin-proposal-async-generator-functions@^7.13.15": + version "7.13.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.15.tgz#80e549df273a3b3050431b148c892491df1bcc5b" + integrity sha512-VapibkWzFeoa6ubXy/NgV5U2U4MVnUlvnx6wo1XhlsaTrLYWE0UFpDQsVrmn22q5CzeloqJ8gEMHSKxuee6ZdA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-remap-async-to-generator" "^7.13.0" + "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-proposal-dynamic-import@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz#43eb5c2a3487ecd98c5c8ea8b5fdb69a2749b2dc" - integrity sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ== +"@babel/plugin-proposal-class-properties@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz#146376000b94efd001e57a40a88a525afaab9f37" + integrity sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/helper-create-class-features-plugin" "^7.13.0" + "@babel/helper-plugin-utils" "^7.13.0" + +"@babel/plugin-proposal-dynamic-import@^7.13.8": + version "7.13.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.13.8.tgz#876a1f6966e1dec332e8c9451afda3bebcdf2e1d" + integrity sha512-ONWKj0H6+wIRCkZi9zSbZtE/r73uOhMVHh256ys0UzfM7I3d4n+spZNWjOnJv2gzopumP2Wxi186vI8N0Y2JyQ== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-proposal-export-namespace-from@^7.12.13": version "7.12.13" @@ -292,29 +321,29 @@ "@babel/helper-plugin-utils" "^7.12.13" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-proposal-json-strings@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.13.tgz#ced7888a2db92a3d520a2e35eb421fdb7fcc9b5d" - integrity sha512-v9eEi4GiORDg8x+Dmi5r8ibOe0VXoKDeNPYcTTxdGN4eOWikrJfDJCJrr1l5gKGvsNyGJbrfMftC2dTL6oz7pg== +"@babel/plugin-proposal-json-strings@^7.13.8": + version "7.13.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.13.8.tgz#bf1fb362547075afda3634ed31571c5901afef7b" + integrity sha512-w4zOPKUFPX1mgvTmL/fcEqy34hrQ1CRcGxdphBc6snDnnqJ47EZDIyop6IwXzAC8G916hsIuXB2ZMBCExC5k7Q== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-proposal-logical-assignment-operators@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.13.tgz#575b5d9a08d8299eeb4db6430da6e16e5cf14350" - integrity sha512-fqmiD3Lz7jVdK6kabeSr1PZlWSUVqSitmHEe3Z00dtGTKieWnX9beafvavc32kjORa5Bai4QNHgFDwWJP+WtSQ== +"@babel/plugin-proposal-logical-assignment-operators@^7.13.8": + version "7.13.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.13.8.tgz#93fa78d63857c40ce3c8c3315220fd00bfbb4e1a" + integrity sha512-aul6znYB4N4HGweImqKn59Su9RS8lbUIqxtXTOcAGtNIDczoEFv+l1EhmX8rUBp3G1jMjKJm8m0jXVp63ZpS4A== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.13.tgz#24867307285cee4e1031170efd8a7ac807deefde" - integrity sha512-Qoxpy+OxhDBI5kRqliJFAl4uWXk3Bn24WeFstPH0iLymFehSAUR8MHpqU7njyXv/qbo7oN6yTy5bfCmXdKpo1Q== +"@babel/plugin-proposal-nullish-coalescing-operator@^7.13.8": + version "7.13.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.13.8.tgz#3730a31dafd3c10d8ccd10648ed80a2ac5472ef3" + integrity sha512-iePlDPBn//UhxExyS9KyeYU7RM9WScAG+D3Hhno0PLJebAEpDZMocbDe64eqynhNAnwz/vZoL/q/QB2T1OH39A== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" "@babel/plugin-proposal-numeric-separator@^7.12.13": version "7.12.13" @@ -324,39 +353,41 @@ "@babel/helper-plugin-utils" "^7.12.13" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.13.tgz#f93f3116381ff94bc676fdcb29d71045cd1ec011" - integrity sha512-WvA1okB/0OS/N3Ldb3sziSrXg6sRphsBgqiccfcQq7woEn5wQLNX82Oc4PlaFcdwcWHuQXAtb8ftbS8Fbsg/sg== +"@babel/plugin-proposal-object-rest-spread@^7.13.8": + version "7.13.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.13.8.tgz#5d210a4d727d6ce3b18f9de82cc99a3964eed60a" + integrity sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/plugin-syntax-object-rest-spread" "^7.8.0" - "@babel/plugin-transform-parameters" "^7.12.13" + "@babel/compat-data" "^7.13.8" + "@babel/helper-compilation-targets" "^7.13.8" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.13.0" -"@babel/plugin-proposal-optional-catch-binding@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.13.tgz#4640520afe57728af14b4d1574ba844f263bcae5" - integrity sha512-9+MIm6msl9sHWg58NvqpNpLtuFbmpFYk37x8kgnGzAHvX35E1FyAwSUt5hIkSoWJFSAH+iwU8bJ4fcD1zKXOzg== +"@babel/plugin-proposal-optional-catch-binding@^7.13.8": + version "7.13.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.13.8.tgz#3ad6bd5901506ea996fc31bdcf3ccfa2bed71107" + integrity sha512-0wS/4DUF1CuTmGo+NiaHfHcVSeSLj5S3e6RivPTg/2k3wOv3jO35tZ6/ZWsQhQMvdgI7CwphjQa/ccarLymHVA== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-proposal-optional-chaining@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.13.tgz#63a7d805bc8ce626f3234ee5421a2a7fb23f66d9" - integrity sha512-0ZwjGfTcnZqyV3y9DSD1Yk3ebp+sIUpT2YDqP8hovzaNZnQq2Kd7PEqa6iOIUDBXBt7Jl3P7YAcEIL5Pz8u09Q== +"@babel/plugin-proposal-optional-chaining@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.13.12.tgz#ba9feb601d422e0adea6760c2bd6bbb7bfec4866" + integrity sha512-fcEdKOkIB7Tf4IxrgEVeFC4zeJSTr78no9wTdBuZZbqF64kzllU0ybo2zrzm7gUQfxGhBgq4E39oRs8Zx/RMYQ== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" - "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-proposal-private-methods@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.13.tgz#ea78a12554d784ecf7fc55950b752d469d9c4a71" - integrity sha512-sV0V57uUwpauixvR7s2o75LmwJI6JECwm5oPUY5beZB1nBl2i37hc7CJGqB5G+58fur5Y6ugvl3LRONk5x34rg== +"@babel/plugin-proposal-private-methods@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz#04bd4c6d40f6e6bbfa2f57e2d8094bad900ef787" + integrity sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q== dependencies: - "@babel/helper-create-class-features-plugin" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-create-class-features-plugin" "^7.13.0" + "@babel/helper-plugin-utils" "^7.13.0" "@babel/plugin-proposal-unicode-property-regex@^7.12.13", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": version "7.12.13" @@ -366,7 +397,7 @@ "@babel/helper-create-regexp-features-plugin" "^7.12.13" "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-syntax-async-generators@^7.8.0", "@babel/plugin-syntax-async-generators@^7.8.4": +"@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== @@ -387,7 +418,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-syntax-dynamic-import@^7.8.0", "@babel/plugin-syntax-dynamic-import@^7.8.3": +"@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== @@ -408,7 +439,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-json-strings@^7.8.0", "@babel/plugin-syntax-json-strings@^7.8.3": +"@babel/plugin-syntax-json-strings@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== @@ -429,7 +460,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== @@ -443,21 +474,21 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": +"@babel/plugin-syntax-object-rest-spread@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-optional-catch-binding@^7.8.0", "@babel/plugin-syntax-optional-catch-binding@^7.8.3": +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-optional-chaining@^7.8.0", "@babel/plugin-syntax-optional-chaining@^7.8.3": +"@babel/plugin-syntax-optional-chaining@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== @@ -478,21 +509,21 @@ dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-arrow-functions@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.13.tgz#eda5670b282952100c229f8a3bd49e0f6a72e9fe" - integrity sha512-tBtuN6qtCTd+iHzVZVOMNp+L04iIJBpqkdY42tWbmjIT5wvR2kx7gxMBsyhQtFzHwBbyGi9h8J8r9HgnOpQHxg== +"@babel/plugin-transform-arrow-functions@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz#10a59bebad52d637a027afa692e8d5ceff5e3dae" + integrity sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" -"@babel/plugin-transform-async-to-generator@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.13.tgz#fed8c69eebf187a535bfa4ee97a614009b24f7ae" - integrity sha512-psM9QHcHaDr+HZpRuJcE1PXESuGWSCcbiGFFhhwfzdbTxaGDVzuVtdNYliAwcRo3GFg0Bc8MmI+AvIGYIJG04A== +"@babel/plugin-transform-async-to-generator@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz#8e112bf6771b82bf1e974e5e26806c5c99aa516f" + integrity sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg== dependencies: "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/helper-remap-async-to-generator" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-remap-async-to-generator" "^7.13.0" "@babel/plugin-transform-block-scoped-functions@^7.12.13": version "7.12.13" @@ -502,38 +533,38 @@ "@babel/helper-plugin-utils" "^7.12.13" "@babel/plugin-transform-block-scoping@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.13.tgz#f36e55076d06f41dfd78557ea039c1b581642e61" - integrity sha512-Pxwe0iqWJX4fOOM2kEZeUuAxHMWb9nK+9oh5d11bsLoB0xMg+mkDpt0eYuDZB7ETrY9bbcVlKUGTOGWy7BHsMQ== + version "7.13.16" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.13.16.tgz#a9c0f10794855c63b1d629914c7dcfeddd185892" + integrity sha512-ad3PHUxGnfWF4Efd3qFuznEtZKoBp0spS+DgqzVzRPV7urEBvPLue3y2j80w4Jf2YLzZHj8TOv/Lmvdmh3b2xg== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" -"@babel/plugin-transform-classes@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.13.tgz#9728edc1838b5d62fc93ad830bd523b1fcb0e1f6" - integrity sha512-cqZlMlhCC1rVnxE5ZGMtIb896ijL90xppMiuWXcwcOAuFczynpd3KYemb91XFFPi3wJSe/OcrX9lXoowatkkxA== +"@babel/plugin-transform-classes@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.13.0.tgz#0265155075c42918bf4d3a4053134176ad9b533b" + integrity sha512-9BtHCPUARyVH1oXGcSJD3YpsqRLROJx5ZNP6tN5vnk17N0SVf9WCtf8Nuh1CFmgByKKAIMstitKduoCmsaDK5g== dependencies: "@babel/helper-annotate-as-pure" "^7.12.13" "@babel/helper-function-name" "^7.12.13" "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/helper-replace-supers" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-replace-supers" "^7.13.0" "@babel/helper-split-export-declaration" "^7.12.13" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.13.tgz#6a210647a3d67f21f699cfd2a01333803b27339d" - integrity sha512-dDfuROUPGK1mTtLKyDPUavmj2b6kFu82SmgpztBFEO974KMjJT+Ytj3/oWsTUMBmgPcp9J5Pc1SlcAYRpJ2hRA== +"@babel/plugin-transform-computed-properties@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz#845c6e8b9bb55376b1fa0b92ef0bdc8ea06644ed" + integrity sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" -"@babel/plugin-transform-destructuring@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.13.tgz#fc56c5176940c5b41735c677124d1d20cecc9aeb" - integrity sha512-Dn83KykIFzjhA3FDPA1z4N+yfF3btDGhjnJwxIj0T43tP0flCujnU8fKgEkf0C1biIpSv9NZegPBQ1J6jYkwvQ== +"@babel/plugin-transform-destructuring@^7.13.0": + version "7.13.17" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.17.tgz#678d96576638c19d5b36b332504d3fd6e06dea27" + integrity sha512-UAUqiLv+uRLO+xuBKKMEpC+t7YRNVRqBsWWq1yKXbBZBje/t3IXCiSinZhjn/DC3qzBfICeYd2EFGEbHsh5RLA== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" "@babel/plugin-transform-dotall-regex@^7.12.13", "@babel/plugin-transform-dotall-regex@^7.4.4": version "7.12.13" @@ -558,12 +589,12 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.12.13" "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-for-of@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.13.tgz#561ff6d74d9e1c8879cb12dbaf4a14cd29d15cf6" - integrity sha512-xCbdgSzXYmHGyVX3+BsQjcd4hv4vA/FDy7Kc8eOpzKmBBPEOTurt0w5fCRQaGl+GSBORKgJdstQ1rHl4jbNseQ== +"@babel/plugin-transform-for-of@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz#c799f881a8091ac26b54867a845c3e97d2696062" + integrity sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" "@babel/plugin-transform-function-name@^7.12.13": version "7.12.13" @@ -587,43 +618,43 @@ dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-modules-amd@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.13.tgz#43db16249b274ee2e551e2422090aa1c47692d56" - integrity sha512-JHLOU0o81m5UqG0Ulz/fPC68/v+UTuGTWaZBUwpEk1fYQ1D9LfKV6MPn4ttJKqRo5Lm460fkzjLTL4EHvCprvA== +"@babel/plugin-transform-modules-amd@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.13.0.tgz#19f511d60e3d8753cc5a6d4e775d3a5184866cc3" + integrity sha512-EKy/E2NHhY/6Vw5d1k3rgoobftcNUmp9fGjb9XZwQLtTctsRBOTRO7RHHxfIky1ogMN5BxN7p9uMA3SzPfotMQ== dependencies: - "@babel/helper-module-transforms" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-module-transforms" "^7.13.0" + "@babel/helper-plugin-utils" "^7.13.0" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.13.tgz#5043b870a784a8421fa1fd9136a24f294da13e50" - integrity sha512-OGQoeVXVi1259HjuoDnsQMlMkT9UkZT9TpXAsqWplS/M0N1g3TJAn/ByOCeQu7mfjc5WpSsRU+jV1Hd89ts0kQ== +"@babel/plugin-transform-modules-commonjs@^7.13.8": + version "7.13.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.13.8.tgz#7b01ad7c2dcf2275b06fa1781e00d13d420b3e1b" + integrity sha512-9QiOx4MEGglfYZ4XOnU79OHr6vIWUakIj9b4mioN8eQIoEh+pf5p/zEB36JpDFWA12nNMiRf7bfoRvl9Rn79Bw== dependencies: - "@babel/helper-module-transforms" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-module-transforms" "^7.13.0" + "@babel/helper-plugin-utils" "^7.13.0" "@babel/helper-simple-access" "^7.12.13" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.13.tgz#351937f392c7f07493fc79b2118201d50404a3c5" - integrity sha512-aHfVjhZ8QekaNF/5aNdStCGzwTbU7SI5hUybBKlMzqIMC7w7Ho8hx5a4R/DkTHfRfLwHGGxSpFt9BfxKCoXKoA== +"@babel/plugin-transform-modules-systemjs@^7.13.8": + version "7.13.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz#6d066ee2bff3c7b3d60bf28dec169ad993831ae3" + integrity sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A== dependencies: - "@babel/helper-hoist-variables" "^7.12.13" - "@babel/helper-module-transforms" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-hoist-variables" "^7.13.0" + "@babel/helper-module-transforms" "^7.13.0" + "@babel/helper-plugin-utils" "^7.13.0" "@babel/helper-validator-identifier" "^7.12.11" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-umd@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.13.tgz#26c66f161d3456674e344b4b1255de4d530cfb37" - integrity sha512-BgZndyABRML4z6ibpi7Z98m4EVLFI9tVsZDADC14AElFaNHHBcJIovflJ6wtCqFxwy2YJ1tJhGRsr0yLPKoN+w== +"@babel/plugin-transform-modules-umd@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.13.0.tgz#8a3d96a97d199705b9fd021580082af81c06e70b" + integrity sha512-D/ILzAh6uyvkWjKKyFE/W0FzWwasv6vPTSqPcjxFqn6QpX3u8DjRVliq4F2BamO2Wee/om06Vyy+vPkNrd4wxw== dependencies: - "@babel/helper-module-transforms" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-module-transforms" "^7.13.0" + "@babel/helper-plugin-utils" "^7.13.0" "@babel/plugin-transform-named-capturing-groups-regex@^7.12.13": version "7.12.13" @@ -647,12 +678,12 @@ "@babel/helper-plugin-utils" "^7.12.13" "@babel/helper-replace-supers" "^7.12.13" -"@babel/plugin-transform-parameters@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.13.tgz#461e76dfb63c2dfd327b8a008a9e802818ce9853" - integrity sha512-e7QqwZalNiBRHCpJg/P8s/VJeSRYgmtWySs1JwvfwPqhBbiWfOcHDKdeAi6oAyIimoKWBlwc8oTgbZHdhCoVZA== +"@babel/plugin-transform-parameters@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.13.0.tgz#8fa7603e3097f9c0b7ca1a4821bc2fb52e9e5007" + integrity sha512-Jt8k/h/mIwE2JFEOb3lURoY5C85ETcYPnbuAJ96zRBzh1XHtQZfs62ChZ6EP22QlC8c7Xqr9q+e1SU5qttwwjw== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" "@babel/plugin-transform-property-literals@^7.12.13": version "7.12.13" @@ -668,23 +699,23 @@ dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-react-jsx-development@^7.12.12": - version "7.12.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.12.tgz#bccca33108fe99d95d7f9e82046bfe762e71f4e7" - integrity sha512-i1AxnKxHeMxUaWVXQOSIco4tvVvvCxMSfeBMnMM06mpaJt3g+MpxYQQrDfojUQldP1xxraPSJYSMEljoWM/dCg== +"@babel/plugin-transform-react-jsx-development@^7.12.17": + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.17.tgz#f510c0fa7cd7234153539f9a362ced41a5ca1447" + integrity sha512-BPjYV86SVuOaudFhsJR1zjgxxOhJDt6JHNoD48DxWEIxUCAMjV1ys6DYw4SDYZh0b1QsS2vfIA9t/ZsQGsDOUQ== dependencies: - "@babel/plugin-transform-react-jsx" "^7.12.12" + "@babel/plugin-transform-react-jsx" "^7.12.17" -"@babel/plugin-transform-react-jsx@^7.12.12", "@babel/plugin-transform-react-jsx@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.13.tgz#6c9f993b9f6fb6f0e32a4821ed59349748576a3e" - integrity sha512-hhXZMYR8t9RvduN2uW4sjl6MRtUhzNE726JvoJhpjhxKgRUVkZqTsA0xc49ALZxQM7H26pZ/lLvB2Yrea9dllA== +"@babel/plugin-transform-react-jsx@^7.12.17", "@babel/plugin-transform-react-jsx@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.13.12.tgz#1df5dfaf0f4b784b43e96da6f28d630e775f68b3" + integrity sha512-jcEI2UqIcpCqB5U5DRxIl0tQEProI2gcu+g8VTIqxLO5Iidojb4d77q+fwGseCvd8af/lJ9masp4QWzBXFE2xA== dependencies: "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-module-imports" "^7.13.12" + "@babel/helper-plugin-utils" "^7.13.0" "@babel/plugin-syntax-jsx" "^7.12.13" - "@babel/types" "^7.12.13" + "@babel/types" "^7.13.12" "@babel/plugin-transform-react-pure-annotations@^7.12.1": version "7.12.1" @@ -694,10 +725,10 @@ "@babel/helper-annotate-as-pure" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-regenerator@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.13.tgz#b628bcc9c85260ac1aeb05b45bde25210194a2f5" - integrity sha512-lxb2ZAvSLyJ2PEe47hoGWPmW22v7CtSl9jW8mingV4H2sEX/JOcrAj2nPuGWi56ERUm2bUpjKzONAuT6HCn2EA== +"@babel/plugin-transform-regenerator@^7.13.15": + version "7.13.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz#e5eb28945bf8b6563e7f818945f966a8d2997f39" + integrity sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ== dependencies: regenerator-transform "^0.14.2" @@ -708,14 +739,17 @@ dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-runtime@^7.12.15": - version "7.12.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.15.tgz#4337b2507288007c2b197059301aa0af8d90c085" - integrity sha512-OwptMSRnRWJo+tJ9v9wgAf72ydXWfYSXWhnQjZing8nGZSDFqU1MBleKM3+DriKkcbv7RagA8gVeB0A1PNlNow== +"@babel/plugin-transform-runtime@^7.13.15": + version "7.13.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.13.15.tgz#2eddf585dd066b84102517e10a577f24f76a9cd7" + integrity sha512-d+ezl76gx6Jal08XngJUkXM4lFXK/5Ikl9Mh4HKDxSfGJXmZ9xG64XT2oivBzfxb/eQ62VfvoMkaCZUKJMVrBA== dependencies: - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" - semver "^5.5.1" + "@babel/helper-module-imports" "^7.13.12" + "@babel/helper-plugin-utils" "^7.13.0" + babel-plugin-polyfill-corejs2 "^0.2.0" + babel-plugin-polyfill-corejs3 "^0.2.0" + babel-plugin-polyfill-regenerator "^0.2.0" + semver "^6.3.0" "@babel/plugin-transform-shorthand-properties@^7.12.13": version "7.12.13" @@ -724,12 +758,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-spread@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.13.tgz#ca0d5645abbd560719c354451b849f14df4a7949" - integrity sha512-dUCrqPIowjqk5pXsx1zPftSq4sT0aCeZVAxhdgs3AMgyaDmoUT0G+5h3Dzja27t76aUEIJWlFgPJqJ/d4dbTtg== +"@babel/plugin-transform-spread@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz#84887710e273c1815ace7ae459f6f42a5d31d5fd" + integrity sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" "@babel/plugin-transform-sticky-regex@^7.12.13": @@ -739,12 +773,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-template-literals@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.13.tgz#655037b07ebbddaf3b7752f55d15c2fd6f5aa865" - integrity sha512-arIKlWYUgmNsF28EyfmiQHJLJFlAJNYkuQO10jL46ggjBpeb2re1P9K9YGxNJB45BqTbaslVysXDYm/g3sN/Qg== +"@babel/plugin-transform-template-literals@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz#a36049127977ad94438dee7443598d1cefdf409d" + integrity sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" "@babel/plugin-transform-typeof-symbol@^7.12.13": version "7.12.13" @@ -753,13 +787,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-typescript@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.12.13.tgz#8bcb5dd79cb8bba690d6920e19992d9228dfed48" - integrity sha512-z1VWskPJxK9tfxoYvePWvzSJC+4pxXr8ArmRm5ofqgi+mwpKg6lvtomkIngBYMJVnKhsFYVysCQLDn//v2RHcg== +"@babel/plugin-transform-typescript@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.13.0.tgz#4a498e1f3600342d2a9e61f60131018f55774853" + integrity sha512-elQEwluzaU8R8dbVuW2Q2Y8Nznf7hnjM7+DSCd14Lo5fF63C9qNLbwZYbmZrtV9/ySpSUpkRpQXvJb6xyu4hCQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-create-class-features-plugin" "^7.13.0" + "@babel/helper-plugin-utils" "^7.13.0" "@babel/plugin-syntax-typescript" "^7.12.13" "@babel/plugin-transform-unicode-escapes@^7.12.13": @@ -777,79 +811,82 @@ "@babel/helper-create-regexp-features-plugin" "^7.12.13" "@babel/helper-plugin-utils" "^7.12.13" -"@babel/preset-env@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.13.tgz#3aa2d09cf7d255177538dff292ac9af29ad46525" - integrity sha512-JUVlizG8SoFTz4LmVUL8++aVwzwxcvey3N0j1tRbMAXVEy95uQ/cnEkmEKHN00Bwq4voAV3imQGnQvpkLAxsrw== - dependencies: - "@babel/compat-data" "^7.12.13" - "@babel/helper-compilation-targets" "^7.12.13" - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/helper-validator-option" "^7.12.11" - "@babel/plugin-proposal-async-generator-functions" "^7.12.13" - "@babel/plugin-proposal-class-properties" "^7.12.13" - "@babel/plugin-proposal-dynamic-import" "^7.12.1" +"@babel/preset-env@^7.13.15": + version "7.13.15" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.13.15.tgz#c8a6eb584f96ecba183d3d414a83553a599f478f" + integrity sha512-D4JAPMXcxk69PKe81jRJ21/fP/uYdcTZ3hJDF5QX2HSI9bBxxYw/dumdR6dGumhjxlprHPE4XWoPaqzZUVy2MA== + dependencies: + "@babel/compat-data" "^7.13.15" + "@babel/helper-compilation-targets" "^7.13.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-validator-option" "^7.12.17" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.13.12" + "@babel/plugin-proposal-async-generator-functions" "^7.13.15" + "@babel/plugin-proposal-class-properties" "^7.13.0" + "@babel/plugin-proposal-dynamic-import" "^7.13.8" "@babel/plugin-proposal-export-namespace-from" "^7.12.13" - "@babel/plugin-proposal-json-strings" "^7.12.13" - "@babel/plugin-proposal-logical-assignment-operators" "^7.12.13" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.12.13" + "@babel/plugin-proposal-json-strings" "^7.13.8" + "@babel/plugin-proposal-logical-assignment-operators" "^7.13.8" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.13.8" "@babel/plugin-proposal-numeric-separator" "^7.12.13" - "@babel/plugin-proposal-object-rest-spread" "^7.12.13" - "@babel/plugin-proposal-optional-catch-binding" "^7.12.13" - "@babel/plugin-proposal-optional-chaining" "^7.12.13" - "@babel/plugin-proposal-private-methods" "^7.12.13" + "@babel/plugin-proposal-object-rest-spread" "^7.13.8" + "@babel/plugin-proposal-optional-catch-binding" "^7.13.8" + "@babel/plugin-proposal-optional-chaining" "^7.13.12" + "@babel/plugin-proposal-private-methods" "^7.13.0" "@babel/plugin-proposal-unicode-property-regex" "^7.12.13" - "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" - "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.12.13" - "@babel/plugin-transform-arrow-functions" "^7.12.13" - "@babel/plugin-transform-async-to-generator" "^7.12.13" + "@babel/plugin-transform-arrow-functions" "^7.13.0" + "@babel/plugin-transform-async-to-generator" "^7.13.0" "@babel/plugin-transform-block-scoped-functions" "^7.12.13" "@babel/plugin-transform-block-scoping" "^7.12.13" - "@babel/plugin-transform-classes" "^7.12.13" - "@babel/plugin-transform-computed-properties" "^7.12.13" - "@babel/plugin-transform-destructuring" "^7.12.13" + "@babel/plugin-transform-classes" "^7.13.0" + "@babel/plugin-transform-computed-properties" "^7.13.0" + "@babel/plugin-transform-destructuring" "^7.13.0" "@babel/plugin-transform-dotall-regex" "^7.12.13" "@babel/plugin-transform-duplicate-keys" "^7.12.13" "@babel/plugin-transform-exponentiation-operator" "^7.12.13" - "@babel/plugin-transform-for-of" "^7.12.13" + "@babel/plugin-transform-for-of" "^7.13.0" "@babel/plugin-transform-function-name" "^7.12.13" "@babel/plugin-transform-literals" "^7.12.13" "@babel/plugin-transform-member-expression-literals" "^7.12.13" - "@babel/plugin-transform-modules-amd" "^7.12.13" - "@babel/plugin-transform-modules-commonjs" "^7.12.13" - "@babel/plugin-transform-modules-systemjs" "^7.12.13" - "@babel/plugin-transform-modules-umd" "^7.12.13" + "@babel/plugin-transform-modules-amd" "^7.13.0" + "@babel/plugin-transform-modules-commonjs" "^7.13.8" + "@babel/plugin-transform-modules-systemjs" "^7.13.8" + "@babel/plugin-transform-modules-umd" "^7.13.0" "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.13" "@babel/plugin-transform-new-target" "^7.12.13" "@babel/plugin-transform-object-super" "^7.12.13" - "@babel/plugin-transform-parameters" "^7.12.13" + "@babel/plugin-transform-parameters" "^7.13.0" "@babel/plugin-transform-property-literals" "^7.12.13" - "@babel/plugin-transform-regenerator" "^7.12.13" + "@babel/plugin-transform-regenerator" "^7.13.15" "@babel/plugin-transform-reserved-words" "^7.12.13" "@babel/plugin-transform-shorthand-properties" "^7.12.13" - "@babel/plugin-transform-spread" "^7.12.13" + "@babel/plugin-transform-spread" "^7.13.0" "@babel/plugin-transform-sticky-regex" "^7.12.13" - "@babel/plugin-transform-template-literals" "^7.12.13" + "@babel/plugin-transform-template-literals" "^7.13.0" "@babel/plugin-transform-typeof-symbol" "^7.12.13" "@babel/plugin-transform-unicode-escapes" "^7.12.13" "@babel/plugin-transform-unicode-regex" "^7.12.13" - "@babel/preset-modules" "^0.1.3" - "@babel/types" "^7.12.13" - core-js-compat "^3.8.0" - semver "^5.5.0" + "@babel/preset-modules" "^0.1.4" + "@babel/types" "^7.13.14" + babel-plugin-polyfill-corejs2 "^0.2.0" + babel-plugin-polyfill-corejs3 "^0.2.0" + babel-plugin-polyfill-regenerator "^0.2.0" + core-js-compat "^3.9.0" + semver "^6.3.0" -"@babel/preset-modules@^0.1.3": +"@babel/preset-modules@^0.1.4": version "0.1.4" resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== @@ -860,41 +897,42 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/preset-react@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.12.13.tgz#5f911b2eb24277fa686820d5bd81cad9a0602a0a" - integrity sha512-TYM0V9z6Abb6dj1K7i5NrEhA13oS5ujUYQYDfqIBXYHOc2c2VkFgc+q9kyssIyUfy4/hEwqrgSlJ/Qgv8zJLsA== +"@babel/preset-react@^7.13.13": + version "7.13.13" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.13.13.tgz#fa6895a96c50763fe693f9148568458d5a839761" + integrity sha512-gx+tDLIE06sRjKJkVtpZ/t3mzCDOnPG+ggHZG9lffUbX8+wC739x20YQc9V35Do6ZAxaUc/HhVHIiOzz5MvDmA== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-validator-option" "^7.12.17" "@babel/plugin-transform-react-display-name" "^7.12.13" - "@babel/plugin-transform-react-jsx" "^7.12.13" - "@babel/plugin-transform-react-jsx-development" "^7.12.12" + "@babel/plugin-transform-react-jsx" "^7.13.12" + "@babel/plugin-transform-react-jsx-development" "^7.12.17" "@babel/plugin-transform-react-pure-annotations" "^7.12.1" -"@babel/preset-typescript@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.12.13.tgz#c859c7c075c531d2cc34c2516b214e5d884efe5c" - integrity sha512-gYry7CeXwD2wtw5qHzrtzKaShEhOfTmKb4i0ZxeYBcBosN5VuAudsNbjX7Oj5EAfQ3K4s4HsVMQRRcqGsPvs2A== +"@babel/preset-typescript@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.13.0.tgz#ab107e5f050609d806fbb039bec553b33462c60a" + integrity sha512-LXJwxrHy0N3f6gIJlYbLta1D9BDtHpQeqwzM0LIfjDlr6UE/D5Mc7W4iDiQzaE+ks0sTjT26ArcHWnJVt0QiHw== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/helper-validator-option" "^7.12.11" - "@babel/plugin-transform-typescript" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-validator-option" "^7.12.17" + "@babel/plugin-transform-typescript" "^7.13.0" -"@babel/register@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.12.13.tgz#e9cb57618264f2944634da941ba9755088ef9ec5" - integrity sha512-fnCeRXj970S9seY+973oPALQg61TRvAaW0nRDe1f4ytKqM3fZgsNXewTZWmqZedg74LFIRpg/11dsrPZZvYs2g== +"@babel/register@^7.13.16": + version "7.13.16" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.13.16.tgz#ae3ab0b55c8ec28763877383c454f01521d9a53d" + integrity sha512-dh2t11ysujTwByQjXNgJ48QZ2zcXKQVdV8s0TbeMI0flmtGWCdTwK9tJiACHXPLmncm5+ktNn/diojA45JE4jg== dependencies: + clone-deep "^4.0.1" find-cache-dir "^2.0.0" - lodash "^4.17.19" make-dir "^2.1.0" pirates "^4.0.0" source-map-support "^0.5.16" -"@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.8.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.13.tgz#0a21452352b02542db0ffb928ac2d3ca7cb6d66d" - integrity sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw== +"@babel/runtime@^7.13.17", "@babel/runtime@^7.13.9", "@babel/runtime@^7.8.4": + version "7.13.17" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.13.17.tgz#8966d1fc9593bf848602f0662d6b4d0069e3a7ec" + integrity sha512-NCdgJEelPTSh+FEFylhnP1ylq848l1z9t9N0j1Lfbcw0+KXGjsTvUmkxy+voLLXB5SOKMbLLx4jxYliGrYQseA== dependencies: regenerator-runtime "^0.13.4" @@ -907,28 +945,26 @@ "@babel/parser" "^7.12.13" "@babel/types" "^7.12.13" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.13.tgz#689f0e4b4c08587ad26622832632735fb8c4e0c0" - integrity sha512-3Zb4w7eE/OslI0fTp8c7b286/cQps3+vdLW3UcwC8VSJC6GbKn55aeVVu2QJNuCDoeKyptLOFrPq8WqZZBodyA== +"@babel/traverse@^7.1.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.13.13", "@babel/traverse@^7.13.15", "@babel/traverse@^7.13.17": + version "7.13.17" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.13.17.tgz#c85415e0c7d50ac053d758baec98b28b2ecfeea3" + integrity sha512-BMnZn0R+X6ayqm3C3To7o1j7Q020gWdqdyP50KEoVqaCO2c/Im7sYZSmVgvefp8TTMQ+9CtwuBp0Z1CZ8V3Pvg== dependencies: "@babel/code-frame" "^7.12.13" - "@babel/generator" "^7.12.13" + "@babel/generator" "^7.13.16" "@babel/helper-function-name" "^7.12.13" "@babel/helper-split-export-declaration" "^7.12.13" - "@babel/parser" "^7.12.13" - "@babel/types" "^7.12.13" + "@babel/parser" "^7.13.16" + "@babel/types" "^7.13.17" debug "^4.1.0" globals "^11.1.0" - lodash "^4.17.19" -"@babel/types@^7.0.0", "@babel/types@^7.12.1", "@babel/types@^7.12.13", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.13.tgz#8be1aa8f2c876da11a9cf650c0ecf656913ad611" - integrity sha512-oKrdZTld2im1z8bDwTOQvUbxKwE+854zc16qWZQlcTqMN00pWxHQ4ZeOq0yDMnisOpRykH2/5Qqcrk/OlbAjiQ== +"@babel/types@^7.0.0", "@babel/types@^7.12.1", "@babel/types@^7.12.13", "@babel/types@^7.13.0", "@babel/types@^7.13.12", "@babel/types@^7.13.14", "@babel/types@^7.13.16", "@babel/types@^7.13.17", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.13.17" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.17.tgz#48010a115c9fba7588b4437dd68c9469012b38b4" + integrity sha512-RawydLgxbOPDlTLJNtoIypwdmAy//uQIzlKt2+iBiJaRlVuI6QLUxVAyWGNfOzp8Yu4L4lLIacoCyTNtpb4wiA== dependencies: "@babel/helper-validator-identifier" "^7.12.11" - lodash "^4.17.19" to-fast-properties "^2.0.0" "@bcoe/v8-coverage@^0.2.3": @@ -944,10 +980,10 @@ exec-sh "^0.3.2" minimist "^1.2.0" -"@eslint/eslintrc@^0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.3.0.tgz#d736d6963d7003b6514e6324bec9c602ac340318" - integrity sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg== +"@eslint/eslintrc@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.0.tgz#99cc0a0584d72f1df38b900fb062ba995f395547" + integrity sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog== dependencies: ajv "^6.12.4" debug "^4.1.1" @@ -956,10 +992,184 @@ ignore "^4.0.6" import-fresh "^3.2.1" js-yaml "^3.13.1" - lodash "^4.17.20" minimatch "^3.0.4" strip-json-comments "^3.1.1" +"@ethersproject/abi@5.0.7": + version "5.0.7" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.0.7.tgz#79e52452bd3ca2956d0e1c964207a58ad1a0ee7b" + integrity sha512-Cqktk+hSIckwP/W8O47Eef60VwmoSC/L3lY0+dIBhQPCNn9E4V7rwmm2aFrNRRDJfFlGuZ1khkQUOc3oBX+niw== + dependencies: + "@ethersproject/address" "^5.0.4" + "@ethersproject/bignumber" "^5.0.7" + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/constants" "^5.0.4" + "@ethersproject/hash" "^5.0.4" + "@ethersproject/keccak256" "^5.0.3" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/properties" "^5.0.3" + "@ethersproject/strings" "^5.0.4" + +"@ethersproject/abstract-provider@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.1.0.tgz#1f24c56cda5524ef4ed3cfc562a01d6b6f8eeb0b" + integrity sha512-8dJUnT8VNvPwWhYIau4dwp7qe1g+KgdRm4XTWvjkI9gAT2zZa90WF5ApdZ3vl1r6NDmnn6vUVvyphClRZRteTQ== + dependencies: + "@ethersproject/bignumber" "^5.1.0" + "@ethersproject/bytes" "^5.1.0" + "@ethersproject/logger" "^5.1.0" + "@ethersproject/networks" "^5.1.0" + "@ethersproject/properties" "^5.1.0" + "@ethersproject/transactions" "^5.1.0" + "@ethersproject/web" "^5.1.0" + +"@ethersproject/abstract-signer@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.1.0.tgz#744c7a2d0ebe3cc0bc38294d0f53d5ca3f4e49e3" + integrity sha512-qQDMkjGZSSJSKl6AnfTgmz9FSnzq3iEoEbHTYwjDlEAv+LNP7zd4ixCcVWlWyk+2siud856M5CRhAmPdupeN9w== + dependencies: + "@ethersproject/abstract-provider" "^5.1.0" + "@ethersproject/bignumber" "^5.1.0" + "@ethersproject/bytes" "^5.1.0" + "@ethersproject/logger" "^5.1.0" + "@ethersproject/properties" "^5.1.0" + +"@ethersproject/address@^5.0.4", "@ethersproject/address@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.1.0.tgz#3854fd7ebcb6af7597de66f847c3345dae735b58" + integrity sha512-rfWQR12eHn2cpstCFS4RF7oGjfbkZb0oqep+BfrT+gWEGWG2IowJvIsacPOvzyS1jhNF4MQ4BS59B04Mbovteg== + dependencies: + "@ethersproject/bignumber" "^5.1.0" + "@ethersproject/bytes" "^5.1.0" + "@ethersproject/keccak256" "^5.1.0" + "@ethersproject/logger" "^5.1.0" + "@ethersproject/rlp" "^5.1.0" + +"@ethersproject/base64@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.1.0.tgz#27240c174d0a4e13f6eae87416fd876caf7f42b6" + integrity sha512-npD1bLvK4Bcxz+m4EMkx+F8Rd7CnqS9DYnhNu0/GlQBXhWjvfoAZzk5HJ0f1qeyp8d+A86PTuzLOGOXf4/CN8g== + dependencies: + "@ethersproject/bytes" "^5.1.0" + +"@ethersproject/bignumber@^5.0.7", "@ethersproject/bignumber@^5.1.0": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.1.1.tgz#84812695253ccbc639117f7ac49ee1529b68e637" + integrity sha512-AVz5iqz7+70RIqoQTznsdJ6DOVBYciNlvO+AlQmPTB6ofCvoihI9bQdr6wljsX+d5W7Yc4nyvQvP4JMzg0Agig== + dependencies: + "@ethersproject/bytes" "^5.1.0" + "@ethersproject/logger" "^5.1.0" + bn.js "^4.4.0" + +"@ethersproject/bytes@^5.0.4", "@ethersproject/bytes@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.1.0.tgz#55dfa9c4c21df1b1b538be3accb50fb76d5facfd" + integrity sha512-sGTxb+LVjFxJcJeUswAIK6ncgOrh3D8c192iEJd7mLr95V6du119rRfYT/b87WPkZ5I3gRBUYIYXtdgCWACe8g== + dependencies: + "@ethersproject/logger" "^5.1.0" + +"@ethersproject/constants@^5.0.4", "@ethersproject/constants@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.1.0.tgz#4e7da6367ea0e9be87585d8b09f3fccf384b1452" + integrity sha512-0/SuHrxc8R8k+JiLmJymxHJbojUDWBQqO+b+XFdwaP0jGzqC09YDy/CAlSZB6qHsBifY8X3I89HcK/oMqxRdBw== + dependencies: + "@ethersproject/bignumber" "^5.1.0" + +"@ethersproject/hash@^5.0.4": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.1.0.tgz#40961d64837d57f580b7b055e0d74174876d891e" + integrity sha512-fNwry20yLLPpnRRwm3fBL+2ksgO+KMadxM44WJmRIoTKzy4269+rbq9KFoe2LTqq2CXJM2CE70beGaNrpuqflQ== + dependencies: + "@ethersproject/abstract-signer" "^5.1.0" + "@ethersproject/address" "^5.1.0" + "@ethersproject/bignumber" "^5.1.0" + "@ethersproject/bytes" "^5.1.0" + "@ethersproject/keccak256" "^5.1.0" + "@ethersproject/logger" "^5.1.0" + "@ethersproject/properties" "^5.1.0" + "@ethersproject/strings" "^5.1.0" + +"@ethersproject/keccak256@^5.0.3", "@ethersproject/keccak256@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.1.0.tgz#fdcd88fb13bfef4271b225cdd8dec4d315c8e60e" + integrity sha512-vrTB1W6AEYoadww5c9UyVJ2YcSiyIUTNDRccZIgwTmFFoSHwBtcvG1hqy9RzJ1T0bMdATbM9Hfx2mJ6H0i7Hig== + dependencies: + "@ethersproject/bytes" "^5.1.0" + js-sha3 "0.5.7" + +"@ethersproject/logger@^5.0.5", "@ethersproject/logger@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.1.0.tgz#4cdeeefac029373349d5818f39c31b82cc6d9bbf" + integrity sha512-wtUaD1lBX10HBXjjKV9VHCBnTdUaKQnQ2XSET1ezglqLdPdllNOIlLfhyCRqXm5xwcjExVI5ETokOYfjPtaAlw== + +"@ethersproject/networks@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.1.0.tgz#f537290cb05aa6dc5e81e910926c04cfd5814bca" + integrity sha512-A/NIrIED/G/IgU1XUukOA3WcFRxn2I4O5GxsYGA5nFlIi+UZWdGojs85I1VXkR1gX9eFnDXzjE6OtbgZHjFhIA== + dependencies: + "@ethersproject/logger" "^5.1.0" + +"@ethersproject/properties@^5.0.3", "@ethersproject/properties@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.1.0.tgz#9484bd6def16595fc6e4bdc26f29dff4d3f6ac42" + integrity sha512-519KKTwgmH42AQL3+GFV3SX6khYEfHsvI6v8HYejlkigSDuqttdgVygFTDsGlofNFchhDwuclrxQnD5B0YLNMg== + dependencies: + "@ethersproject/logger" "^5.1.0" + +"@ethersproject/rlp@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.1.0.tgz#700f4f071c27fa298d3c1d637485fefe919dd084" + integrity sha512-vDTyHIwNPrecy55gKGZ47eJZhBm8LLBxihzi5ou+zrSvYTpkSTWRcKUlXFDFQVwfWB+P5PGyERAdiDEI76clxw== + dependencies: + "@ethersproject/bytes" "^5.1.0" + "@ethersproject/logger" "^5.1.0" + +"@ethersproject/signing-key@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.1.0.tgz#6eddfbddb6826b597b9650e01acf817bf8991b9c" + integrity sha512-tE5LFlbmdObG8bY04NpuwPWSRPgEswfxweAI1sH7TbP0ml1elNfqcq7ii/3AvIN05i5U0Pkm3Tf8bramt8MmLw== + dependencies: + "@ethersproject/bytes" "^5.1.0" + "@ethersproject/logger" "^5.1.0" + "@ethersproject/properties" "^5.1.0" + bn.js "^4.4.0" + elliptic "6.5.4" + +"@ethersproject/strings@^5.0.4", "@ethersproject/strings@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.1.0.tgz#0f95a56c3c8c9d5510a06c241d818779750e2da5" + integrity sha512-perBZy0RrmmL0ejiFGUOlBVjMsUceqLut3OBP3zP96LhiJWWbS8u1NqQVgN4/Gyrbziuda66DxiQocXhsvx+Sw== + dependencies: + "@ethersproject/bytes" "^5.1.0" + "@ethersproject/constants" "^5.1.0" + "@ethersproject/logger" "^5.1.0" + +"@ethersproject/transactions@^5.0.0-beta.135", "@ethersproject/transactions@^5.1.0": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.1.1.tgz#5a6bbb25fb062c3cc75eb0db12faefcdd3870813" + integrity sha512-Nwgbp09ttIVN0OoUBatCXaHxR7grWPHbozJN8v7AXDLrl6nnOIBEMDh+yJTnosSQlFhcyjfTGGN+Mx6R8HdvMw== + dependencies: + "@ethersproject/address" "^5.1.0" + "@ethersproject/bignumber" "^5.1.0" + "@ethersproject/bytes" "^5.1.0" + "@ethersproject/constants" "^5.1.0" + "@ethersproject/keccak256" "^5.1.0" + "@ethersproject/logger" "^5.1.0" + "@ethersproject/properties" "^5.1.0" + "@ethersproject/rlp" "^5.1.0" + "@ethersproject/signing-key" "^5.1.0" + +"@ethersproject/web@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.1.0.tgz#ed56bbe4e3d9a8ffe3b2ed882da5c62d3551381b" + integrity sha512-LTeluWgTq04+RNqAkVhpydPcRZK/kKxD2Vy7PYGrAD27ABO9kTqTBKwiOuzTyAHKUQHfnvZbXmxBXJAGViSDcA== + dependencies: + "@ethersproject/base64" "^5.1.0" + "@ethersproject/bytes" "^5.1.0" + "@ethersproject/logger" "^5.1.0" + "@ethersproject/properties" "^5.1.0" + "@ethersproject/strings" "^5.1.0" + "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" @@ -972,9 +1182,9 @@ resolve-from "^5.0.0" "@istanbuljs/schema@^0.1.2": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" - integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== "@jest/console@^26.6.2": version "26.6.2" @@ -1193,15 +1403,16 @@ "@octokit/types" "^6.0.3" "@octokit/core@^3.2.3": - version "3.2.5" - resolved "https://registry.yarnpkg.com/@octokit/core/-/core-3.2.5.tgz#57becbd5fd789b0592b915840855f3a5f233d554" - integrity sha512-+DCtPykGnvXKWWQI0E1XD+CCeWSBhB6kwItXqfFmNBlIlhczuDPbg+P6BtLnVBaRJDAjv+1mrUJuRsFSjktopg== + version "3.4.0" + resolved "https://registry.yarnpkg.com/@octokit/core/-/core-3.4.0.tgz#b48aa27d755b339fe7550548b340dcc2b513b742" + integrity sha512-6/vlKPP8NF17cgYXqucdshWqmMZGXkuvtcrWCgU5NOI0Pl2GjlmZyWgBMrU8zJ3v2MJlM6++CiB45VKYmhiWWg== dependencies: "@octokit/auth-token" "^2.4.4" "@octokit/graphql" "^4.5.8" "@octokit/request" "^5.4.12" + "@octokit/request-error" "^2.0.5" "@octokit/types" "^6.0.3" - before-after-hook "^2.1.0" + before-after-hook "^2.2.0" universal-user-agent "^6.0.0" "@octokit/endpoint@^6.0.1": @@ -1214,40 +1425,40 @@ universal-user-agent "^6.0.0" "@octokit/graphql@^4.5.8": - version "4.6.0" - resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-4.6.0.tgz#f9abca55f82183964a33439d5264674c701c3327" - integrity sha512-CJ6n7izLFXLvPZaWzCQDjU/RP+vHiZmWdOunaCS87v+2jxMsW9FB5ktfIxybRBxZjxuJGRnxk7xJecWTVxFUYQ== + version "4.6.1" + resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-4.6.1.tgz#f975486a46c94b7dbe58a0ca751935edc7e32cc9" + integrity sha512-2lYlvf4YTDgZCTXTW4+OX+9WTLFtEUc6hGm4qM1nlZjzxj+arizM4aHWzBVBCxY9glh7GIs0WEuiSgbVzv8cmA== dependencies: "@octokit/request" "^5.3.0" "@octokit/types" "^6.0.3" universal-user-agent "^6.0.0" -"@octokit/openapi-types@^4.0.2": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-4.0.2.tgz#4b2bb553a16ab9e0fdeb29bd453b1c88cf129929" - integrity sha512-quqmeGTjcVks8YaatVGCpt7QpUTs2PK0D3mW5aEQqmFKOuIZ/CxwWrgnggPjqP3CNp6eALdQRgf0jUpcG8X1/Q== +"@octokit/openapi-types@^6.2.0": + version "6.2.0" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-6.2.0.tgz#6ea796b20c7111b9e422a4d607f796c1179622cd" + integrity sha512-V2vFYuawjpP5KUb8CPYsq20bXT4qnE8sH1QKpYqUlcNOntBiRr/VzGVvY0s+YXGgrVbFUVO4EI0VnHYSVBWfBg== "@octokit/plugin-paginate-rest@^2.6.2": - version "2.9.1" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.9.1.tgz#e9bb34a89b7ed5b801f1c976feeb9b0078ecd201" - integrity sha512-8wnuWGjwDIEobbBet2xAjZwgiMVTgIer5wBsnGXzV3lJ4yqphLU2FEMpkhSrDx7y+WkZDfZ+V+1cFMZ1mAaFag== + version "2.13.3" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.13.3.tgz#f0f1792230805108762d87906fb02d573b9e070a" + integrity sha512-46lptzM9lTeSmIBt/sVP/FLSTPGx6DCzAdSX3PfeJ3mTf4h9sGC26WpaQzMEq/Z44cOcmx8VsOhO+uEgE3cjYg== dependencies: - "@octokit/types" "^6.8.0" + "@octokit/types" "^6.11.0" "@octokit/plugin-request-log@^1.0.2": version "1.0.3" resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.3.tgz#70a62be213e1edc04bb8897ee48c311482f9700d" integrity sha512-4RFU4li238jMJAzLgAwkBAw+4Loile5haQMQr+uhFq27BmyJXcXSKvoQKqh0agsZEiUlW6iSv3FAgvmGkur7OQ== -"@octokit/plugin-rest-endpoint-methods@4.10.1": - version "4.10.1" - resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-4.10.1.tgz#b7a9181d1f52fef70a13945c5b49cffa51862da1" - integrity sha512-YGMiEidTORzgUmYZu0eH4q2k8kgQSHQMuBOBYiKxUYs/nXea4q/Ze6tDzjcRAPmHNJYXrENs1bEMlcdGKT+8ug== +"@octokit/plugin-rest-endpoint-methods@5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.0.1.tgz#631b8d4edc6798b03489911252a25f2a4e58c594" + integrity sha512-vvWbPtPqLyIzJ7A4IPdTl+8IeuKAwMJ4LjvmqWOOdfSuqWQYZXq2CEd0hsnkidff2YfKlguzujHs/reBdAx8Sg== dependencies: - "@octokit/types" "^6.8.2" + "@octokit/types" "^6.13.1" deprecation "^2.3.1" -"@octokit/request-error@^2.0.0": +"@octokit/request-error@^2.0.0", "@octokit/request-error@^2.0.5": version "2.0.5" resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.0.5.tgz#72cc91edc870281ad583a42619256b380c600143" integrity sha512-T/2wcCFyM7SkXzNoyVNWjyVlUwBvW3igM3Btr/eKYiPmucXTtkxt2RBsf6gn3LTzaLSLTQtNmvg+dGsOxQrjZg== @@ -1257,125 +1468,122 @@ once "^1.4.0" "@octokit/request@^5.3.0", "@octokit/request@^5.4.12": - version "5.4.14" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.4.14.tgz#ec5f96f78333bb2af390afa5ff66f114b063bc96" - integrity sha512-VkmtacOIQp9daSnBmDI92xNIeLuSRDOIuplp/CJomkvzt7M18NXgG044Cx/LFKLgjKt9T2tZR6AtJayba9GTSA== + version "5.4.15" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.4.15.tgz#829da413dc7dd3aa5e2cdbb1c7d0ebe1f146a128" + integrity sha512-6UnZfZzLwNhdLRreOtTkT9n57ZwulCve8q3IT/Z477vThu6snfdkBuhxnChpOKNGxcQ71ow561Qoa6uqLdPtag== dependencies: "@octokit/endpoint" "^6.0.1" "@octokit/request-error" "^2.0.0" "@octokit/types" "^6.7.1" - deprecation "^2.0.0" is-plain-object "^5.0.0" node-fetch "^2.6.1" - once "^1.4.0" universal-user-agent "^6.0.0" "@octokit/rest@^18.0.9": - version "18.1.0" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-18.1.0.tgz#9bf72604911a3433165bcc924263c9a706d32804" - integrity sha512-YQfpTzWV3jdzDPyXQVO54f5I2t1zxk/S53Vbe+Aa5vQj6MdTx6sNEWzmUzUO8lSVowbGOnjcQHzW1A8ATr+/7g== + version "18.5.3" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-18.5.3.tgz#6a2e6006a87ebbc34079c419258dd29ec9ff659d" + integrity sha512-KPAsUCr1DOdLVbZJgGNuE/QVLWEaVBpFQwDAz/2Cnya6uW2wJ/P5RVGk0itx7yyN1aGa8uXm2pri4umEqG1JBA== dependencies: "@octokit/core" "^3.2.3" "@octokit/plugin-paginate-rest" "^2.6.2" "@octokit/plugin-request-log" "^1.0.2" - "@octokit/plugin-rest-endpoint-methods" "4.10.1" - -"@octokit/types@^6.0.3", "@octokit/types@^6.7.1", "@octokit/types@^6.8.0", "@octokit/types@^6.8.2": - version "6.8.3" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.8.3.tgz#1960951103c836ab2e55fe47a8da2bf76402824f" - integrity sha512-ZNAy8z77ewKZ5LCX0KaUm4tWdgloWQ6FWJCh06qgahq/MH13sQefIPKSo0dBdPU3bcioltyZUcC0k8oHHfjvnQ== - dependencies: - "@octokit/openapi-types" "^4.0.2" - "@types/node" ">= 8" - -"@polkadot/api-contract@3.8.1": - version "3.8.1" - resolved "https://registry.yarnpkg.com/@polkadot/api-contract/-/api-contract-3.8.1.tgz#63fe75a221793a9ab5708b3a452a2ae8f28f908f" - integrity sha512-vHEgKa8HcmMgHgmpgZZBCmhhc50PY0NvS1bXng8hmjh4gmvak63unpWBrSRn3hWLUvAO4SpBJ+zBrxrjewdsIg== - dependencies: - "@babel/runtime" "^7.12.13" - "@polkadot/api" "3.8.1" - "@polkadot/types" "3.8.1" - "@polkadot/util" "^5.6.1" - "@polkadot/x-rxjs" "^5.6.1" + "@octokit/plugin-rest-endpoint-methods" "5.0.1" + +"@octokit/types@^6.0.3", "@octokit/types@^6.11.0", "@octokit/types@^6.13.1", "@octokit/types@^6.7.1": + version "6.14.0" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.14.0.tgz#587529b4a461d8b7621b99845718dc5c79281f52" + integrity sha512-43qHvDsPsKgNt4W4al3dyU6s2XZ7ZMsiiIw8rQcM9CyEo7g9W8/6m1W4xHuRqmEjTfG1U4qsE/E4Jftw1/Ak1g== + dependencies: + "@octokit/openapi-types" "^6.2.0" + +"@polkadot/api-contract@4.7.2": + version "4.7.2" + resolved "https://registry.yarnpkg.com/@polkadot/api-contract/-/api-contract-4.7.2.tgz#9db4c16e78c182e0a51c4abb1e3286d3152dd361" + integrity sha512-AxQvORHn/cTZj/6njKsuGc+9ECd+ghC3ESdeJKg419Bh7MpoUcf4f0NyYa4POZY9lzT5160K7d+dYz7j9Jy/8g== + dependencies: + "@babel/runtime" "^7.13.17" + "@polkadot/api" "4.7.2" + "@polkadot/types" "4.7.2" + "@polkadot/util" "^6.3.1" + "@polkadot/x-rxjs" "^6.3.1" bn.js "^4.11.9" -"@polkadot/api-derive@3.8.1": - version "3.8.1" - resolved "https://registry.yarnpkg.com/@polkadot/api-derive/-/api-derive-3.8.1.tgz#24dbbed16e016d8d6cc58b6e16495dd4c1f6871a" - integrity sha512-F9HAPNz7MtK5EPhn/2nI3Gu4xQuLDX0rnv+v5K6LZybCPxh9ei3na56PCeCkG5kruoILtSnXecTuSrPyE1EWJA== - dependencies: - "@babel/runtime" "^7.12.13" - "@polkadot/api" "3.8.1" - "@polkadot/rpc-core" "3.8.1" - "@polkadot/types" "3.8.1" - "@polkadot/util" "^5.6.1" - "@polkadot/util-crypto" "^5.6.1" - "@polkadot/x-rxjs" "^5.6.1" +"@polkadot/api-derive@4.7.2": + version "4.7.2" + resolved "https://registry.yarnpkg.com/@polkadot/api-derive/-/api-derive-4.7.2.tgz#94ca16f2e61d1739489da6030cbe5137beee336a" + integrity sha512-TRctRtGFvsso5R/dGwna2QiaQy14NFhrthu/sLh3oYIMNwQ6BeGHhbfjAi0pidc+ID2ia6LDLRw7vl/LVSuHIA== + dependencies: + "@babel/runtime" "^7.13.17" + "@polkadot/api" "4.7.2" + "@polkadot/rpc-core" "4.7.2" + "@polkadot/types" "4.7.2" + "@polkadot/util" "^6.3.1" + "@polkadot/util-crypto" "^6.3.1" + "@polkadot/x-rxjs" "^6.3.1" bn.js "^4.11.9" -"@polkadot/api@3.8.1": - version "3.8.1" - resolved "https://registry.yarnpkg.com/@polkadot/api/-/api-3.8.1.tgz#32d6d4efde1f76b170ba2985f136be4fd52ab1b8" - integrity sha512-5ayXsixyEL7A/ljFBCJReYfn9KAxfTJRTymDVf4S3aOwll0WRtvb0Vhy8nQa9H9RQleQ2Bk5JL5zx4EgAy01dg== - dependencies: - "@babel/runtime" "^7.12.13" - "@polkadot/api-derive" "3.8.1" - "@polkadot/keyring" "^5.6.1" - "@polkadot/metadata" "3.8.1" - "@polkadot/rpc-core" "3.8.1" - "@polkadot/rpc-provider" "3.8.1" - "@polkadot/types" "3.8.1" - "@polkadot/types-known" "3.8.1" - "@polkadot/util" "^5.6.1" - "@polkadot/util-crypto" "^5.6.1" - "@polkadot/x-rxjs" "^5.6.1" +"@polkadot/api@4.7.2": + version "4.7.2" + resolved "https://registry.yarnpkg.com/@polkadot/api/-/api-4.7.2.tgz#0e98117fc631f2988ca364881111c05a00e8b701" + integrity sha512-PkWrgx+gICWt5uYjYoP68a8jyCRBkQXn9ecr0ReVr9jiiwvBYZyw3CLXTVRwJ89PpJLtDVz9QGCa4dM6j4a/LA== + dependencies: + "@babel/runtime" "^7.13.17" + "@polkadot/api-derive" "4.7.2" + "@polkadot/keyring" "^6.3.1" + "@polkadot/metadata" "4.7.2" + "@polkadot/rpc-core" "4.7.2" + "@polkadot/rpc-provider" "4.7.2" + "@polkadot/types" "4.7.2" + "@polkadot/types-known" "4.7.2" + "@polkadot/util" "^6.3.1" + "@polkadot/util-crypto" "^6.3.1" + "@polkadot/x-rxjs" "^6.3.1" bn.js "^4.11.9" eventemitter3 "^4.0.7" -"@polkadot/dev@^0.61.24": - version "0.61.25" - resolved "https://registry.yarnpkg.com/@polkadot/dev/-/dev-0.61.25.tgz#360e9b6f5a559eb1fd82a57ed5bb4e61102a0f4d" - integrity sha512-KSwO5OkNID1XQRupilDRL5JTaLleZyl/7hP75oJHxy5iUteNqVHwSr4bDXMM6IBxhFugwKAHE2CgiE38H4nvmA== +"@polkadot/dev@^0.62.10": + version "0.62.10" + resolved "https://registry.yarnpkg.com/@polkadot/dev/-/dev-0.62.10.tgz#364c3956aef53d89ad3b636233141c7016631a97" + integrity sha512-J7LwYBoNWXDXIRMIkTkuOQsuQKlO5rQPFya//zjFndBXP2ClSB1rWnHCD7Hw8JwcQVigxR0V2ZKCGJrZ/ThoSw== dependencies: - "@babel/cli" "^7.12.13" - "@babel/core" "^7.12.13" - "@babel/plugin-proposal-class-properties" "^7.12.13" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.12.13" + "@babel/cli" "^7.13.16" + "@babel/core" "^7.13.16" + "@babel/plugin-proposal-class-properties" "^7.13.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.13.8" "@babel/plugin-proposal-numeric-separator" "^7.12.13" - "@babel/plugin-proposal-object-rest-spread" "^7.12.13" - "@babel/plugin-proposal-optional-chaining" "^7.12.13" - "@babel/plugin-proposal-private-methods" "^7.12.13" + "@babel/plugin-proposal-object-rest-spread" "^7.13.8" + "@babel/plugin-proposal-optional-chaining" "^7.13.12" + "@babel/plugin-proposal-private-methods" "^7.13.0" "@babel/plugin-syntax-bigint" "^7.8.3" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-import-meta" "^7.10.4" "@babel/plugin-syntax-top-level-await" "^7.12.13" - "@babel/plugin-transform-regenerator" "^7.12.13" - "@babel/plugin-transform-runtime" "^7.12.15" - "@babel/preset-env" "^7.12.13" - "@babel/preset-react" "^7.12.13" - "@babel/preset-typescript" "^7.12.13" - "@babel/register" "^7.12.13" - "@babel/runtime" "^7.12.13" + "@babel/plugin-transform-regenerator" "^7.13.15" + "@babel/plugin-transform-runtime" "^7.13.15" + "@babel/preset-env" "^7.13.15" + "@babel/preset-react" "^7.13.13" + "@babel/preset-typescript" "^7.13.0" + "@babel/register" "^7.13.16" + "@babel/runtime" "^7.13.17" "@rushstack/eslint-patch" "^1.0.6" - "@typescript-eslint/eslint-plugin" "4.14.2" - "@typescript-eslint/parser" "4.14.2" + "@typescript-eslint/eslint-plugin" "4.22.0" + "@typescript-eslint/parser" "4.22.0" "@vue/component-compiler-utils" "^3.2.0" babel-jest "^26.6.3" - babel-plugin-module-extension-resolver "^1.0.0-rc.1" + babel-plugin-module-extension-resolver "^1.0.0-rc.2" babel-plugin-module-resolver "^4.1.0" babel-plugin-styled-components "^1.12.0" - browserslist "^4.16.3" - chalk "^4.1.0" + browserslist "^4.16.5" + chalk "^4.1.1" coveralls "^3.1.0" - eslint "^7.19.0" + eslint "^7.25.0" eslint-config-standard "^16.0.2" eslint-import-resolver-node "^0.3.4" eslint-plugin-header "^3.1.1" eslint-plugin-import "^2.22.1" eslint-plugin-node "^11.1.0" - eslint-plugin-promise "^4.2.1" - eslint-plugin-react "^7.22.0" + eslint-plugin-promise "^5.1.0" + eslint-plugin-react "^7.23.2" eslint-plugin-react-hooks "^4.2.0" eslint-plugin-simple-import-sort "^7.0.0" eslint-plugin-sort-destructure-keys "^1.3.5" @@ -1389,131 +1597,129 @@ jest-config "^26.6.3" jest-haste-map "^26.6.2" jest-resolve "^26.6.2" - madge "^4.0.0" + madge "^4.0.2" minimatch "^3.0.4" mkdirp "^1.0.4" prettier "^2.2.1" rimraf "^3.0.2" - typedoc "^0.20.23" - typedoc-plugin-markdown "^3.4.5" - typedoc-plugin-no-inherit "^1.2.0" - typescript "^4.1.3" + typescript "^4.2.4" yargs "^16.2.0" -"@polkadot/keyring@^5.6.1": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/keyring/-/keyring-5.6.2.tgz#9335d7cf21df10ad99580d8f070bfaa63327f797" - integrity sha512-LqN/ziJ3Nbpn1hiaGVc5DRKDxfbdY1kjTO9W8P4XENrGQmKzr+iBucNv/8KoFgKcwqksbVAQdvoiUhBkcQLtiw== - dependencies: - "@babel/runtime" "^7.12.13" - "@polkadot/util" "5.6.2" - "@polkadot/util-crypto" "5.6.2" - -"@polkadot/metadata@3.8.1": - version "3.8.1" - resolved "https://registry.yarnpkg.com/@polkadot/metadata/-/metadata-3.8.1.tgz#bfef0381b79166dc84f673ff86e3baec4344aa28" - integrity sha512-bx+cg/BsjkRzuPEOdvhO62/2+mLJPGxohZL/Uuf1W4hgv/dBYvV/48wSCcpFNIeiJr40Zy2QPD5uiOXfncOtqA== - dependencies: - "@babel/runtime" "^7.12.13" - "@polkadot/types" "3.8.1" - "@polkadot/types-known" "3.8.1" - "@polkadot/util" "^5.6.1" - "@polkadot/util-crypto" "^5.6.1" +"@polkadot/keyring@^6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@polkadot/keyring/-/keyring-6.3.1.tgz#434847cc4fb134116691c07e05750e8388cbb2b7" + integrity sha512-uVWhdd4TVtLc4R2OtiKHJE5jgJZnuEognbgjl5RT2uKrCJYTsYnq0IeRTvMmtdPJAJvGeD3JTsX2ekgt3tJpuw== + dependencies: + "@babel/runtime" "^7.13.17" + "@polkadot/util" "6.3.1" + "@polkadot/util-crypto" "6.3.1" + +"@polkadot/metadata@4.7.2": + version "4.7.2" + resolved "https://registry.yarnpkg.com/@polkadot/metadata/-/metadata-4.7.2.tgz#91076a1c1158494574a1965ec1fe124fb4d1b848" + integrity sha512-+YWeD828cpIpD31epoSZfK5kmtJsBcgTTyYsQ4bBO4NBJceLTipmHgyLXs7fXjU4cC6uvSuBnAV0KGJW7L9nDQ== + dependencies: + "@babel/runtime" "^7.13.17" + "@polkadot/types" "4.7.2" + "@polkadot/types-known" "4.7.2" + "@polkadot/util" "^6.3.1" + "@polkadot/util-crypto" "^6.3.1" bn.js "^4.11.9" -"@polkadot/networks@5.6.2", "@polkadot/networks@^5.6.1": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/networks/-/networks-5.6.2.tgz#acc62fb581adaa606908207fc8d0585112e513d1" - integrity sha512-DI70uSFLUmiVhn8LvoXSfMIbI2/+ikVQydD567QtIsH9uDF2VE4XtdSvykCv5Em3WKs1Wlu1/ylPukKk+2ZEhw== - dependencies: - "@babel/runtime" "^7.12.13" - -"@polkadot/rpc-core@3.8.1": - version "3.8.1" - resolved "https://registry.yarnpkg.com/@polkadot/rpc-core/-/rpc-core-3.8.1.tgz#bcd1bc1d287d6f25ff5a7cf02b970a41e0ccfef2" - integrity sha512-QBOZKjOMO6FM0xF4SKwPRk3rOSVM9+h7VoJa4BRdoiFjlgLfbIFl7g4mfNQVHqHjpAIR9ZeE5T6zU9bWIr3uog== - dependencies: - "@babel/runtime" "^7.12.13" - "@polkadot/metadata" "3.8.1" - "@polkadot/rpc-provider" "3.8.1" - "@polkadot/types" "3.8.1" - "@polkadot/util" "^5.6.1" - "@polkadot/x-rxjs" "^5.6.1" - -"@polkadot/rpc-provider@3.8.1": - version "3.8.1" - resolved "https://registry.yarnpkg.com/@polkadot/rpc-provider/-/rpc-provider-3.8.1.tgz#ebe51ddc0db4b20d8852bf1425f994f83836461d" - integrity sha512-1U0A9OxQ2B2ABNFWaporuIaNxMrHqVbWJgpOoRSf8lbnwuHWQClRIljlxBp9TT3S7RKC3XXegQi8zpl22ZEorQ== - dependencies: - "@babel/runtime" "^7.12.13" - "@polkadot/types" "3.8.1" - "@polkadot/util" "^5.6.1" - "@polkadot/util-crypto" "^5.6.1" - "@polkadot/x-fetch" "^5.6.1" - "@polkadot/x-global" "^5.6.1" - "@polkadot/x-ws" "^5.6.1" +"@polkadot/networks@6.3.1", "@polkadot/networks@^6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@polkadot/networks/-/networks-6.3.1.tgz#c5063681ea73f8b579f418d57d0eba2d4bb72292" + integrity sha512-oANup0CLGt75CPbE3gz2HUWUlqQKucImdb1TtStLXMUH+Aj8ZOnQFA2lwixzaRdx+ymPfmEL7GkF36i96OqQVw== + dependencies: + "@babel/runtime" "^7.13.17" + +"@polkadot/rpc-core@4.7.2": + version "4.7.2" + resolved "https://registry.yarnpkg.com/@polkadot/rpc-core/-/rpc-core-4.7.2.tgz#d79c42bb9fafc84a5c3b90959a86fe97b4a21fb5" + integrity sha512-LxpI8TVdjL99nfnLQog1tL0STdiYIUSLzdN+2PKvaO0YoBPAau945PVfz6GeN7wqQZKxR6N/1SKhAVfYcP7ctA== + dependencies: + "@babel/runtime" "^7.13.17" + "@polkadot/metadata" "4.7.2" + "@polkadot/rpc-provider" "4.7.2" + "@polkadot/types" "4.7.2" + "@polkadot/util" "^6.3.1" + "@polkadot/x-rxjs" "^6.3.1" + +"@polkadot/rpc-provider@4.7.2": + version "4.7.2" + resolved "https://registry.yarnpkg.com/@polkadot/rpc-provider/-/rpc-provider-4.7.2.tgz#71340ec6a109a2652502aee8d24e06f0322663b8" + integrity sha512-nvKScoPTzi7PFA5XnVI1lbebLjdwF6OcvWC0QvaEUrbwoG3NPFtoAGF6r2HloX0Q/Qo6FEHowrX0nY4gTM+QCw== + dependencies: + "@babel/runtime" "^7.13.17" + "@polkadot/types" "4.7.2" + "@polkadot/util" "^6.3.1" + "@polkadot/util-crypto" "^6.3.1" + "@polkadot/x-fetch" "^6.3.1" + "@polkadot/x-global" "^6.3.1" + "@polkadot/x-ws" "^6.3.1" bn.js "^4.11.9" eventemitter3 "^4.0.7" -"@polkadot/ts@^0.3.59": - version "0.3.59" - resolved "https://registry.yarnpkg.com/@polkadot/ts/-/ts-0.3.59.tgz#2000016f4bdd93f6a50b31a8f05e37b0e3078d26" - integrity sha512-opTBp1r2UpvTKl2ZbxodnYIUZMjsR6wjnXV87s7VUl+cyUiJhNRh2wpeZ5jXbeUAdYPXGh/8h/hu1WfyKvnROA== - dependencies: - "@types/chrome" "^0.0.127" - -"@polkadot/typegen@^3.6.4": - version "3.8.1" - resolved "https://registry.yarnpkg.com/@polkadot/typegen/-/typegen-3.8.1.tgz#f4f5c2e79d001396f72f8fda04e3611c4f03497a" - integrity sha512-mWnTpBBgnq79K5yIwtX5Vxx51RRSnic4dasy6xlgulGuYyO7E+M2kVOdVHEYhld5oU3zTAVZb+EWstvmBUOvNQ== - dependencies: - "@babel/core" "^7.12.13" - "@babel/register" "^7.12.13" - "@babel/runtime" "^7.12.13" - "@polkadot/api" "3.8.1" - "@polkadot/metadata" "3.8.1" - "@polkadot/rpc-provider" "3.8.1" - "@polkadot/types" "3.8.1" - "@polkadot/util" "^5.6.1" - handlebars "^4.7.6" - websocket "^1.0.33" +"@polkadot/ts@^0.3.63": + version "0.3.63" + resolved "https://registry.yarnpkg.com/@polkadot/ts/-/ts-0.3.63.tgz#184014eaeca5fb0fdbf93375f95d2a3b32f7907f" + integrity sha512-P69/Q5Hs54ynvVZ/xTVu/FWBdXGPWtW/KxNeVymXBe5PAGNoofEB8FGO+jA6Qd5qIgnjU4+k0r63UQRwwqJH4w== + dependencies: + "@types/chrome" "^0.0.135" + +"@polkadot/typegen@^4.7.2": + version "4.7.2" + resolved "https://registry.yarnpkg.com/@polkadot/typegen/-/typegen-4.7.2.tgz#22cc04bfee8bb3a9c596402504022089d4685749" + integrity sha512-GjkJa9fgU4HZPT+trr6rrBmroRv39uEUVGc7f2474UrzGWyO8X9034at165heMlOb0VhFoxTHAyZcIQX3Ub/IA== + dependencies: + "@babel/core" "^7.13.16" + "@babel/register" "^7.13.16" + "@babel/runtime" "^7.13.17" + "@polkadot/api" "4.7.2" + "@polkadot/metadata" "4.7.2" + "@polkadot/rpc-provider" "4.7.2" + "@polkadot/types" "4.7.2" + "@polkadot/util" "^6.3.1" + handlebars "^4.7.7" + websocket "^1.0.34" yargs "^16.2.0" -"@polkadot/types-known@3.8.1": - version "3.8.1" - resolved "https://registry.yarnpkg.com/@polkadot/types-known/-/types-known-3.8.1.tgz#408e6165a1ddff484689fb0b252ef62960297b7e" - integrity sha512-mGQNaFzMImMwU5ahT6QEySkREy++Dt6c2VAf+CuvYKqORQWODM/95cveJdVdypi36iohW0SJc4UCXupicVey7Q== +"@polkadot/types-known@4.7.2": + version "4.7.2" + resolved "https://registry.yarnpkg.com/@polkadot/types-known/-/types-known-4.7.2.tgz#d6b55c75a9461a09490167a679b6ed783eab6350" + integrity sha512-vlIMBtBdVYHyjWqonQ39PCdZJ9WeTsA5h5zr2mEpkCSoopby5pZ6eOR8CPqjc1uYbdDHT72Dbtx8Wr9L7z8HXg== dependencies: - "@babel/runtime" "^7.12.13" - "@polkadot/networks" "^5.6.1" - "@polkadot/types" "3.8.1" - "@polkadot/util" "^5.6.1" + "@babel/runtime" "^7.13.17" + "@polkadot/networks" "^6.3.1" + "@polkadot/types" "4.7.2" + "@polkadot/util" "^6.3.1" bn.js "^4.11.9" -"@polkadot/types@3.8.1": - version "3.8.1" - resolved "https://registry.yarnpkg.com/@polkadot/types/-/types-3.8.1.tgz#e1c59016bc91c3b25d925837f3781811aff616a1" - integrity sha512-ONqae9KD2N/HsSfPB6ZmRh6cuUvrfmhHORNl7ciTzM4Q6MnK1r+66N5wg1wZpadkCIl8eeMzRre065aTKGrm3Q== +"@polkadot/types@4.7.2": + version "4.7.2" + resolved "https://registry.yarnpkg.com/@polkadot/types/-/types-4.7.2.tgz#6b3e8c16999951e040459d5e338e259543bfec16" + integrity sha512-8qj/f6YAv5XCDLej60uWlX+cjuz2qt6AJKemi+lozA4vYZ9XTXIODYLv/XfjimbVABzeLdIAwWX1OQO9+F0Gng== dependencies: - "@babel/runtime" "^7.12.13" - "@polkadot/metadata" "3.8.1" - "@polkadot/util" "^5.6.1" - "@polkadot/util-crypto" "^5.6.1" - "@polkadot/x-rxjs" "^5.6.1" + "@babel/runtime" "^7.13.17" + "@polkadot/metadata" "4.7.2" + "@polkadot/util" "^6.3.1" + "@polkadot/util-crypto" "^6.3.1" + "@polkadot/x-rxjs" "^6.3.1" "@types/bn.js" "^4.11.6" bn.js "^4.11.9" -"@polkadot/util-crypto@5.6.2", "@polkadot/util-crypto@^5.4.4", "@polkadot/util-crypto@^5.6.1": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/util-crypto/-/util-crypto-5.6.2.tgz#5703afdfe93d15cd16b90b47ffc1a83625c176ec" - integrity sha512-cdwyPrfqYWJP2A4/jUnQIlCkMYl6saZR9jlke4PmCva0oYKdJjVCEu2g/caOoLH+wb+w29ulHzKzNRlyswSl0A== +"@polkadot/util-crypto@6.3.1", "@polkadot/util-crypto@^6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@polkadot/util-crypto/-/util-crypto-6.3.1.tgz#5328da77bdee5064bc41f9dec0a76cc634690b88" + integrity sha512-fwH4t6EN2XACwJB2Z5xUyNo4mQ1RXJj0MgVaaLua8PbG0qq9tt4eaEbdVzrm7A6igIfsTntDoZISTfVjBcRtkQ== dependencies: - "@babel/runtime" "^7.12.13" - "@polkadot/networks" "5.6.2" - "@polkadot/util" "5.6.2" - "@polkadot/wasm-crypto" "^3.2.2" - "@polkadot/x-randomvalues" "5.6.2" + "@babel/runtime" "^7.13.17" + "@polkadot/networks" "6.3.1" + "@polkadot/util" "6.3.1" + "@polkadot/wasm-crypto" "^4.0.2" + "@polkadot/x-randomvalues" "6.3.1" base-x "^3.0.8" + base64-js "^1.5.1" blakejs "^1.1.0" bn.js "^4.11.9" create-hash "^1.2.0" @@ -1524,102 +1730,102 @@ tweetnacl "^1.0.3" xxhashjs "^0.2.2" -"@polkadot/util@5.6.2", "@polkadot/util@^5.6.1": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/util/-/util-5.6.2.tgz#c85ee096a8137d7005c16a26b242f932dcd9f242" - integrity sha512-SgwSmLf6YgLFwLUsVYHiqeheGWRtSBwD76zX+H6rj+qb31V+idtKpa0mxODrZ06x9fRg1erJbxvffya34KuYAQ== +"@polkadot/util@6.3.1", "@polkadot/util@^6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@polkadot/util/-/util-6.3.1.tgz#410ee362ddb37f9c67af8f5897d977a7fd950ebf" + integrity sha512-M9pGaXSB67DZPckdNQU29wq5W7BUOh6qeu5LonzxpUek+riJfbiF9JOgZQ2Q/aEFYbd1hqLbOMsLRZLhSmlbYw== dependencies: - "@babel/runtime" "^7.12.13" - "@polkadot/x-textdecoder" "5.6.2" - "@polkadot/x-textencoder" "5.6.2" + "@babel/runtime" "^7.13.17" + "@polkadot/x-textdecoder" "6.3.1" + "@polkadot/x-textencoder" "6.3.1" "@types/bn.js" "^4.11.6" bn.js "^4.11.9" camelcase "^5.3.1" ip-regex "^4.3.0" -"@polkadot/wasm-crypto-asmjs@^3.2.2": - version "3.2.2" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-3.2.2.tgz#b18af677764d6943cba3c225ba28e9626760704c" - integrity sha512-OD6Ejzq0II+VuMLbs7nvGILO9b7PbK8F74uglDXQIaAl2YXuSEWbpE4S3RY7mRp+1Xg0igeNBhgMdRRUg5vDVg== +"@polkadot/wasm-crypto-asmjs@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-4.0.2.tgz#f42c353a64e1243841daf90e4bd54eff01a4e3cf" + integrity sha512-hlebqtGvfjg2ZNm4scwBGVHwOwfUhy2yw5RBHmPwkccUif3sIy4SAzstpcVBIVMdAEvo746bPWEInA8zJRcgJA== dependencies: - "@babel/runtime" "^7.12.5" + "@babel/runtime" "^7.13.9" -"@polkadot/wasm-crypto-wasm@^3.2.2": - version "3.2.2" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-3.2.2.tgz#44f8713d1db19efe13ea4c598f13a8495b24b49f" - integrity sha512-kU0m5X68NA8g7OKu0f0C+M1TmTy+hBEmGZ+7jbGBdDqkogc01sUR6qNtmPiT9g9Qsi1bhCoYVaVqtetpiD+CUw== +"@polkadot/wasm-crypto-wasm@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-4.0.2.tgz#89f9e0a1e4d076784d4a42bea37fc8b06bdd8bb6" + integrity sha512-de/AfNPZ0uDKFWzOZ1rJCtaUbakGN29ks6IRYu6HZTRg7+RtqvE1rIkxabBvYgQVHIesmNwvEA9DlIkS6hYRFQ== dependencies: - "@babel/runtime" "^7.12.5" + "@babel/runtime" "^7.13.9" -"@polkadot/wasm-crypto@^3.2.2": - version "3.2.2" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto/-/wasm-crypto-3.2.2.tgz#732d36f2dcd4c327696d078ad2efc64b70ca8586" - integrity sha512-dffdBQvFHbP0WLvpCf2fJ5mEWavXj75ykuFR16WIduhTRnI7fVYqYRaiJioUHWvPR34ik/VKlATWG7WPYiF5ZQ== +"@polkadot/wasm-crypto@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto/-/wasm-crypto-4.0.2.tgz#9649057adee8383cc86433d107ba526b718c5a3b" + integrity sha512-2h9FuQFkBc+B3TwSapt6LtyPvgtd0Hq9QsHW8g8FrmKBFRiiFKYRpfJKHCk0aCZzuRf9h95bQl/X6IXAIWF2ng== dependencies: - "@babel/runtime" "^7.12.5" - "@polkadot/wasm-crypto-asmjs" "^3.2.2" - "@polkadot/wasm-crypto-wasm" "^3.2.2" + "@babel/runtime" "^7.13.9" + "@polkadot/wasm-crypto-asmjs" "^4.0.2" + "@polkadot/wasm-crypto-wasm" "^4.0.2" -"@polkadot/x-fetch@^5.6.1": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-fetch/-/x-fetch-5.6.2.tgz#36052a0c5a5308c4c0ac14889725584996b22556" - integrity sha512-pAOaD24opprqIKfYdnRsf5aJ7XEnz1ryk2nQ67Ypv4BXQt+pih4kI9mVhZeAoK+yWpX3S6JjZkkkEYQ2lcqbZQ== +"@polkadot/x-fetch@^6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@polkadot/x-fetch/-/x-fetch-6.3.1.tgz#ac1737f57a2a03b6666aec6abe3c8a2e147c2696" + integrity sha512-goBtKZarq5sXV2G98inj2v1ivVNF9gif8sg6IqsGRbljca6K6pZWTVd0yGWe7OABnCkFQotk283nly9nkr9+1g== dependencies: - "@babel/runtime" "^7.12.13" - "@polkadot/x-global" "5.6.2" - "@types/node-fetch" "^2.5.8" + "@babel/runtime" "^7.13.17" + "@polkadot/x-global" "6.3.1" + "@types/node-fetch" "^2.5.10" node-fetch "^2.6.1" -"@polkadot/x-global@5.6.2", "@polkadot/x-global@^5.6.1": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-global/-/x-global-5.6.2.tgz#14a0f0422232899d3b03e9668b014792b5460506" - integrity sha512-oAj0gf3HtWrxMEpjQPKZ1hlTKw4qMrMXB6lCls+jCK+TfLrwcMLOsYJsqt/RJoNIXyTxnWRgCktOt5UYgWLTGQ== +"@polkadot/x-global@6.3.1", "@polkadot/x-global@^6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@polkadot/x-global/-/x-global-6.3.1.tgz#cdb4883fa20e23411bdd5f50a5d5c92814a3106f" + integrity sha512-eFooGQdxJpiOsm3AKTSMInaecBKaQ/tqOUJNm/CpdJalCqTDMp/qzgj64Uflk9eUqGgk7jB7Q5FaQdyWsC0Mtg== dependencies: - "@babel/runtime" "^7.12.13" - "@types/node-fetch" "^2.5.8" + "@babel/runtime" "^7.13.17" + "@types/node-fetch" "^2.5.10" node-fetch "^2.6.1" -"@polkadot/x-randomvalues@5.6.2": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-randomvalues/-/x-randomvalues-5.6.2.tgz#2a7092811992b95a0090332681d986d2e6996f85" - integrity sha512-+DjkwgmKFTfM8IOY1YvBI0duwuKzOeG/CWR8XuLyE3PnSnTn7eHXUGhtx6LHJPyMg9vHMs34ircYEVmhBKBvbA== +"@polkadot/x-randomvalues@6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@polkadot/x-randomvalues/-/x-randomvalues-6.3.1.tgz#e2b91223277d7d7978c39e9d280fbc6526217d46" + integrity sha512-SZ5MUYm1fd1fgGFexMWbbG8zZgCS7b9QNKaIcnv1Dwlfp2meDoDlgoedn+1pCJ6VEa1adswqLHX4WbYA4D9ynA== dependencies: - "@babel/runtime" "^7.12.13" - "@polkadot/x-global" "5.6.2" + "@babel/runtime" "^7.13.17" + "@polkadot/x-global" "6.3.1" -"@polkadot/x-rxjs@^5.6.1": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-rxjs/-/x-rxjs-5.6.2.tgz#8a1770af2cf7abb9bcc4f4173f4f4a3e1c694130" - integrity sha512-PNifEC0N8e8bxNY/aWkHnWESjvWt8zepavo3xoG/rJ4hTAHRKjtpG9Gv16RCG1QQPiaX38VKHVxeUVqcp5Grcw== +"@polkadot/x-rxjs@^6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@polkadot/x-rxjs/-/x-rxjs-6.3.1.tgz#5627f9601df6db22a65512a3eab0af4a22a58830" + integrity sha512-Z9mbvpixr0fopQh049tFlR8r/RItOyYRL4P7YqwnfeROqxU4R8UTmmB8As9y/zy0O5Jlkjzy9MdyQgwzhGQOcQ== dependencies: - "@babel/runtime" "^7.12.13" - rxjs "^6.6.3" + "@babel/runtime" "^7.13.17" + rxjs "^6.6.7" -"@polkadot/x-textdecoder@5.6.2": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-textdecoder/-/x-textdecoder-5.6.2.tgz#64ce45f9e2ced992785ac909da16d7db759630aa" - integrity sha512-kgZM+HwQSPVXjEJyOZulACHiPctCLsClgOrzsismm6UPPrsoweXFOlLIkK1K7VjloJFzi0uw0TCJxLtjzd24Jw== +"@polkadot/x-textdecoder@6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@polkadot/x-textdecoder/-/x-textdecoder-6.3.1.tgz#ab0eec87d5df2d119480fa7a3657d8d72f583af8" + integrity sha512-lLb11yaAmyx2STw7ZmdgPtV7LI26U/5h1K527cM7QnxgTQgYggtAt4f9aLHiWsmOCvnT0U0PWsWSUbAJrLHLBA== dependencies: - "@babel/runtime" "^7.12.13" - "@polkadot/x-global" "5.6.2" + "@babel/runtime" "^7.13.17" + "@polkadot/x-global" "6.3.1" -"@polkadot/x-textencoder@5.6.2": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-textencoder/-/x-textencoder-5.6.2.tgz#71b4f94aedd17e1ef64e1cf2d5fc6f148b02e06a" - integrity sha512-3ln2vwzRi0qH1zHl+MltfX9f3zuQVaYLFHSyfr7FvlJ4mXIXslCjqsgIvmGuyyY50naD2nOd1IWg1uGlNhZLJA== +"@polkadot/x-textencoder@6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@polkadot/x-textencoder/-/x-textencoder-6.3.1.tgz#2277770650f5637698d7d8cd7ac0cfd5ca0dace2" + integrity sha512-7V5OuT43JPTm7rrwdBEMzXAF5nLg+t6q24ntZHNcFUH1pdkP/+2f3vGM3e9BK5k4wkQLoepod5gyY6Qbw9bsYQ== dependencies: - "@babel/runtime" "^7.12.13" - "@polkadot/x-global" "5.6.2" + "@babel/runtime" "^7.13.17" + "@polkadot/x-global" "6.3.1" -"@polkadot/x-ws@^5.6.1": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-ws/-/x-ws-5.6.2.tgz#18620e71c41eb6b69992a46916bea3283ac7e33f" - integrity sha512-HihaUsxceC6KH5PGErugKs/V5sSzGDnmOrCTQ6g8XJ8Ob2CLixyzgF0L7+SUL1PbuvIRsVOJY/jcy2ThHk4OXg== +"@polkadot/x-ws@^6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@polkadot/x-ws/-/x-ws-6.3.1.tgz#1534f8d1cd03dbf497410725d14313e5554a2ffd" + integrity sha512-bDb9a+bxoaNOza0EeLp9M6FKYz9ogJcFQzRP+YR6ND7oQ0QcQG06XloRKTU0wtcZRKP8AzkYYN+FAc/6bnIqTw== dependencies: - "@babel/runtime" "^7.12.13" - "@polkadot/x-global" "5.6.2" - "@types/websocket" "^1.0.1" - websocket "^1.0.33" + "@babel/runtime" "^7.13.17" + "@polkadot/x-global" "6.3.1" + "@types/websocket" "^1.0.2" + websocket "^1.0.34" "@rushstack/eslint-patch@^1.0.6": version "1.0.6" @@ -1632,9 +1838,9 @@ integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== "@sinonjs/commons@^1.7.0": - version "1.8.2" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.2.tgz#858f5c4b48d80778fde4b9d541f27edc0d56488b" - integrity sha512-sruwd86RJHdsVf/AtBoijDmUqJp3B6hF/DGC23C+JaegnDHaZyewCjoVGTdg3J0uz3Zs7NnIT05OBOmML72lQw== + version "1.8.3" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" + integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== dependencies: type-detect "4.0.8" @@ -1653,9 +1859,9 @@ defer-to-connect "^1.0.1" "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": - version "7.1.12" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.12.tgz#4d8e9e51eb265552a7e4f1ff2219ab6133bdfb2d" - integrity sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ== + version "7.1.14" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.14.tgz#faaeefc4185ec71c389f4501ee5ec84b170cc402" + integrity sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" @@ -1679,13 +1885,13 @@ "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.11.0.tgz#b9a1efa635201ba9bc850323a8793ee2d36c04a0" - integrity sha512-kSjgDMZONiIfSH1Nxcr5JIRMwUetDki63FSQfpTCz8ogF3Ulqm8+mr5f78dUYs6vMiB6gBusQqfQmBvHZj/lwg== + version "7.11.1" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.11.1.tgz#654f6c4f67568e24c23b367e947098c6206fa639" + integrity sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw== dependencies: "@babel/types" "^7.3.0" -"@types/bn.js@^4.11.6": +"@types/bn.js@^4.11.3", "@types/bn.js@^4.11.5", "@types/bn.js@^4.11.6": version "4.11.6" resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== @@ -1699,35 +1905,35 @@ dependencies: "@types/chai" "*" -"@types/chai@*", "@types/chai@^4.2.12": - version "4.2.15" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.15.tgz#b7a6d263c2cecf44b6de9a051cf496249b154553" - integrity sha512-rYff6FI+ZTKAPkJUoyz7Udq3GaoDZnxYDEvdEdFZASiA7PoErltHezDishqQiSDWrGxvxmplH304jyzQmjp0AQ== +"@types/chai@*", "@types/chai@^4.2.17": + version "4.2.17" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.17.tgz#85f9f0610f514b22a94125d441f73eef65bde5cc" + integrity sha512-LaiwWNnYuL8xJlQcE91QB2JoswWZckq9A4b+nMPq8dt8AP96727Nb3X4e74u+E3tm4NLTILNI9MYFsyVc30wSA== -"@types/chrome@^0.0.127": - version "0.0.127" - resolved "https://registry.yarnpkg.com/@types/chrome/-/chrome-0.0.127.tgz#9e29f351d558f60e95326ceadc586fdcc824151b" - integrity sha512-hBB9EApLYKKn2GvklVkTxVP6vZvxsH9okyIRUinNtMzZHIgIKWQk/ESbX+O5g4Bihfy38+aFGn7Kl7Cxou5JUg== +"@types/chrome@^0.0.135": + version "0.0.135" + resolved "https://registry.yarnpkg.com/@types/chrome/-/chrome-0.0.135.tgz#a4dc6dbdc68b3f7d04b24f04d0ca5c803392b72f" + integrity sha512-SczB5P5mIgQWHAeiimlYg5VFvuQKCw4Q5cAzVD7II1Czf4U0222jb3mTHUd1qM0BRJ/kPtzybBde+Zy2sdx/LA== dependencies: "@types/filesystem" "*" "@types/har-format" "*" "@types/filesystem@*": - version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/filesystem/-/filesystem-0.0.29.tgz#ee3748eb5be140dcf980c3bd35f11aec5f7a3748" - integrity sha512-85/1KfRedmfPGsbK8YzeaQUyV1FQAvMPMTuWFQ5EkLd2w7szhNO96bk3Rh/SKmOfd9co2rCLf0Voy4o7ECBOvw== + version "0.0.30" + resolved "https://registry.yarnpkg.com/@types/filesystem/-/filesystem-0.0.30.tgz#a7373a2edf34d13e298baf7ee1101f738b2efb7e" + integrity sha512-NCoRgmGmLpTT9VFL6Bb6z0jQuqI3d0E5FGl7M0JOv/J5RQYo9s5aOItPYnpckx9MbYQk1APLXcF8f20Vqnf2yA== dependencies: "@types/filewriter" "*" "@types/filewriter@*": - version "0.0.28" - resolved "https://registry.yarnpkg.com/@types/filewriter/-/filewriter-0.0.28.tgz#c054e8af4d9dd75db4e63abc76f885168714d4b3" - integrity sha1-wFTor02d11205jq8dviFFocU1LM= + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/filewriter/-/filewriter-0.0.29.tgz#a48795ecadf957f6c0d10e0c34af86c098fa5bee" + integrity sha512-BsPXH/irW0ht0Ji6iw/jJaK8Lj3FJemon2gvEqHKpCdDCeemHa+rI3WBGq5z7cDMZgoLjY40oninGxqk+8NzNQ== "@types/graceful-fs@^4.1.2": - version "4.1.4" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.4.tgz#4ff9f641a7c6d1a3508ff88bc3141b152772e753" - integrity sha512-mWA/4zFQhfvOA8zWkXobwJvBD7vzcxgrOQ0J5CH1votGqdq9m7+FwtGaqyCZqC3NyyBkc9z4m+iry4LlqcMWJg== + version "4.1.5" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" + integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== dependencies: "@types/node" "*" @@ -1765,43 +1971,62 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= -"@types/mocha@^8.0.3": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-8.2.0.tgz#3eb56d13a1de1d347ecb1957c6860c911704bc44" - integrity sha512-/Sge3BymXo4lKc31C8OINJgXLaw+7vL1/L1pGiBNpGrBiT8FQiaFpSYV0uhTaG4y78vcMBTMFsWaHDvuD+xGzQ== +"@types/mocha@^8.2.2": + version "8.2.2" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-8.2.2.tgz#91daa226eb8c2ff261e6a8cbf8c7304641e095e0" + integrity sha512-Lwh0lzzqT5Pqh6z61P3c3P5nm6fzQK/MMHl9UKeneAeInVflBSz1O2EkX6gM6xfJd7FBXBY5purtLx7fUiZ7Hw== -"@types/node-fetch@^2.5.8": - version "2.5.8" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.8.tgz#e199c835d234c7eb0846f6618012e558544ee2fb" - integrity sha512-fbjI6ja0N5ZA8TV53RUqzsKNkl9fv8Oj3T7zxW7FGv1GSH7gwJaNF8dzCjrqKaxKeUpTz4yT1DaJFq/omNpGfw== +"@types/node-fetch@^2.5.10": + version "2.5.10" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.10.tgz#9b4d4a0425562f9fcea70b12cb3fcdd946ca8132" + integrity sha512-IpkX0AasN44hgEad0gEF/V6EgR5n69VEqPEgnmoM8GsIGro3PowbWs4tR6IhxUTyPLpOn+fiGG6nrQhcmoCuIQ== dependencies: "@types/node" "*" form-data "^3.0.0" -"@types/node@*", "@types/node@>= 8": - version "14.14.25" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.25.tgz#15967a7b577ff81383f9b888aa6705d43fbbae93" - integrity sha512-EPpXLOVqDvisVxtlbvzfyqSsFeQxltFbluZNRndIb8tr9KiBnYNLzrc1N3pyKUCww2RNrfHDViqDWWE1LCJQtQ== +"@types/node@*": + version "15.0.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-15.0.1.tgz#ef34dea0881028d11398be5bf4e856743e3dc35a" + integrity sha512-TMkXt0Ck1y0KKsGr9gJtWGjttxlZnnvDtphxUOSd0bfaR6Q1jle+sPvrzNR1urqYTWMinoKvjKfXUGsumaO1PA== + +"@types/node@^12.12.6": + version "12.20.11" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.11.tgz#980832cd56efafff8c18aa148c4085eb02a483f4" + integrity sha512-gema+apZ6qLQK7k7F0dGkGCWQYsL0qqKORWOQO6tq46q+x+1C0vbOiOqOwRVlh4RAdbQwV/j/ryr3u5NOG1fPQ== "@types/normalize-package-data@^2.4.0": version "2.4.0" resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== +"@types/pbkdf2@^3.0.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.0.tgz#039a0e9b67da0cdc4ee5dab865caa6b267bb66b1" + integrity sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ== + dependencies: + "@types/node" "*" + "@types/prettier@^2.0.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.2.0.tgz#a4e8205a4955690eef712a6d0394a1d2e121e721" - integrity sha512-O3SQC6+6AySHwrspYn2UvC6tjo6jCTMMmylxZUFhE1CulVu5l3AxU6ca9lrJDTQDVllF62LIxVSx5fuYL6LiZg== + version "2.2.3" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.2.3.tgz#ef65165aea2924c9359205bf748865b8881753c0" + integrity sha512-PijRCG/K3s3w1We6ynUKdxEc5AcuuH3NBmMDP8uvKVp6X43UY7NQlTzczakXP3DJR0F4dfNQIGjU2cUeRYs2AA== + +"@types/secp256k1@^4.0.1": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.2.tgz#20c29a87149d980f64464e56539bf4810fdb5d1d" + integrity sha512-QMg+9v0bbNJ2peLuHRWxzmy0HRJIG6gFZNhaRSp7S3ggSbCCxiqQB2/ybvhXyhHOCequpNkrx7OavNhrWOsW0A== + dependencies: + "@types/node" "*" "@types/stack-utils@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.0.tgz#7036640b4e21cc2f259ae826ce843d277dad8cff" integrity sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw== -"@types/websocket@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/websocket/-/websocket-1.0.1.tgz#039272c196c2c0e4868a0d8a1a27bbb86e9e9138" - integrity sha512-f5WLMpezwVxCLm1xQe/kdPpQIOmL0TXYx2O15VYfYzc7hTIdxiOoOvez+McSIw3b7z/1zGovew9YSL7+h4h7/Q== +"@types/websocket@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@types/websocket/-/websocket-1.0.2.tgz#d2855c6a312b7da73ed16ba6781815bf30c6187a" + integrity sha512-B5m9aq7cbbD/5/jThEr33nUY8WEfVi6A2YKCTOvw5Ldy7mtsOkqRvGjnzy6g7iMMDsgu7xREuCzqATLDLQVKcQ== dependencies: "@types/node" "*" @@ -1817,13 +2042,13 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.14.2.tgz#47a15803cfab89580b96933d348c2721f3d2f6fe" - integrity sha512-uMGfG7GFYK/nYutK/iqYJv6K/Xuog/vrRRZX9aEP4Zv1jsYXuvFUMDFLhUnc8WFv3D2R5QhNQL3VYKmvLS5zsQ== +"@typescript-eslint/eslint-plugin@4.22.0": + version "4.22.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.22.0.tgz#3d5f29bb59e61a9dba1513d491b059e536e16dbc" + integrity sha512-U8SP9VOs275iDXaL08Ln1Fa/wLXfj5aTr/1c0t0j6CdbOnxh+TruXu1p4I0NAvdPBQgoPjHsgKn28mOi0FzfoA== dependencies: - "@typescript-eslint/experimental-utils" "4.14.2" - "@typescript-eslint/scope-manager" "4.14.2" + "@typescript-eslint/experimental-utils" "4.22.0" + "@typescript-eslint/scope-manager" "4.22.0" debug "^4.1.1" functional-red-black-tree "^1.0.1" lodash "^4.17.15" @@ -1831,87 +2056,60 @@ semver "^7.3.2" tsutils "^3.17.1" -"@typescript-eslint/experimental-utils@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.14.2.tgz#9df35049d1d36b6cbaba534d703648b9e1f05cbb" - integrity sha512-mV9pmET4C2y2WlyHmD+Iun8SAEqkLahHGBkGqDVslHkmoj3VnxnGP4ANlwuxxfq1BsKdl/MPieDbohCEQgKrwA== +"@typescript-eslint/experimental-utils@4.22.0": + version "4.22.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.22.0.tgz#68765167cca531178e7b650a53456e6e0bef3b1f" + integrity sha512-xJXHHl6TuAxB5AWiVrGhvbGL8/hbiCQ8FiWwObO3r0fnvBdrbWEDy1hlvGQOAWc6qsCWuWMKdVWlLAEMpxnddg== dependencies: "@types/json-schema" "^7.0.3" - "@typescript-eslint/scope-manager" "4.14.2" - "@typescript-eslint/types" "4.14.2" - "@typescript-eslint/typescript-estree" "4.14.2" + "@typescript-eslint/scope-manager" "4.22.0" + "@typescript-eslint/types" "4.22.0" + "@typescript-eslint/typescript-estree" "4.22.0" eslint-scope "^5.0.0" eslint-utils "^2.0.0" -"@typescript-eslint/parser@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.14.2.tgz#31e216e4baab678a56e539f9db9862e2542c98d0" - integrity sha512-ipqSP6EuUsMu3E10EZIApOJgWSpcNXeKZaFeNKQyzqxnQl8eQCbV+TSNsl+s2GViX2d18m1rq3CWgnpOxDPgHg== +"@typescript-eslint/parser@4.22.0": + version "4.22.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.22.0.tgz#e1637327fcf796c641fe55f73530e90b16ac8fe8" + integrity sha512-z/bGdBJJZJN76nvAY9DkJANYgK3nlRstRRi74WHm3jjgf2I8AglrSY+6l7ogxOmn55YJ6oKZCLLy+6PW70z15Q== dependencies: - "@typescript-eslint/scope-manager" "4.14.2" - "@typescript-eslint/types" "4.14.2" - "@typescript-eslint/typescript-estree" "4.14.2" + "@typescript-eslint/scope-manager" "4.22.0" + "@typescript-eslint/types" "4.22.0" + "@typescript-eslint/typescript-estree" "4.22.0" debug "^4.1.1" -"@typescript-eslint/scope-manager@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.14.2.tgz#64cbc9ca64b60069aae0c060b2bf81163243b266" - integrity sha512-cuV9wMrzKm6yIuV48aTPfIeqErt5xceTheAgk70N1V4/2Ecj+fhl34iro/vIssJlb7XtzcaD07hWk7Jk0nKghg== +"@typescript-eslint/scope-manager@4.22.0": + version "4.22.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.22.0.tgz#ed411545e61161a8d702e703a4b7d96ec065b09a" + integrity sha512-OcCO7LTdk6ukawUM40wo61WdeoA7NM/zaoq1/2cs13M7GyiF+T4rxuA4xM+6LeHWjWbss7hkGXjFDRcKD4O04Q== dependencies: - "@typescript-eslint/types" "4.14.2" - "@typescript-eslint/visitor-keys" "4.14.2" - -"@typescript-eslint/types@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.14.2.tgz#d96da62be22dc9dc6a06647f3633815350fb3174" - integrity sha512-LltxawRW6wXy4Gck6ZKlBD05tCHQUj4KLn4iR69IyRiDHX3d3NCAhO+ix5OR2Q+q9bjCrHE/HKt+riZkd1At8Q== + "@typescript-eslint/types" "4.22.0" + "@typescript-eslint/visitor-keys" "4.22.0" -"@typescript-eslint/types@4.15.0": - version "4.15.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.15.0.tgz#3011ae1ac3299bb9a5ac56bdd297cccf679d3662" - integrity sha512-su4RHkJhS+iFwyqyXHcS8EGPlUVoC+XREfy5daivjLur9JP8GhvTmDipuRpcujtGC4M+GYhUOJCPDE3rC5NJrg== - -"@typescript-eslint/typescript-estree@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.14.2.tgz#9c5ebd8cae4d7b014f890acd81e8e17f309c9df9" - integrity sha512-ESiFl8afXxt1dNj8ENEZT12p+jl9PqRur+Y19m0Z/SPikGL6rqq4e7Me60SU9a2M28uz48/8yct97VQYaGl0Vg== - dependencies: - "@typescript-eslint/types" "4.14.2" - "@typescript-eslint/visitor-keys" "4.14.2" - debug "^4.1.1" - globby "^11.0.1" - is-glob "^4.0.1" - lodash "^4.17.15" - semver "^7.3.2" - tsutils "^3.17.1" +"@typescript-eslint/types@4.22.0": + version "4.22.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.22.0.tgz#0ca6fde5b68daf6dba133f30959cc0688c8dd0b6" + integrity sha512-sW/BiXmmyMqDPO2kpOhSy2Py5w6KvRRsKZnV0c4+0nr4GIcedJwXAq+RHNK4lLVEZAJYFltnnk1tJSlbeS9lYA== -"@typescript-eslint/typescript-estree@^4.8.2": - version "4.15.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.15.0.tgz#402c86a7d2111c1f7a2513022f22a38a395b7f93" - integrity sha512-jG6xTmcNbi6xzZq0SdWh7wQ9cMb2pqXaUp6bUZOMsIlu5aOlxGxgE/t6L/gPybybQGvdguajXGkZKSndZJpksA== +"@typescript-eslint/typescript-estree@4.22.0", "@typescript-eslint/typescript-estree@^4.8.2": + version "4.22.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.22.0.tgz#b5d95d6d366ff3b72f5168c75775a3e46250d05c" + integrity sha512-TkIFeu5JEeSs5ze/4NID+PIcVjgoU3cUQUIZnH3Sb1cEn1lBo7StSV5bwPuJQuoxKXlzAObjYTilOEKRuhR5yg== dependencies: - "@typescript-eslint/types" "4.15.0" - "@typescript-eslint/visitor-keys" "4.15.0" + "@typescript-eslint/types" "4.22.0" + "@typescript-eslint/visitor-keys" "4.22.0" debug "^4.1.1" globby "^11.0.1" is-glob "^4.0.1" semver "^7.3.2" tsutils "^3.17.1" -"@typescript-eslint/visitor-keys@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.14.2.tgz#997cbe2cb0690e1f384a833f64794e98727c70c6" - integrity sha512-KBB+xLBxnBdTENs/rUgeUKO0UkPBRs2vD09oMRRIkj5BEN8PX1ToXV532desXfpQnZsYTyLLviS7JrPhdL154w== - dependencies: - "@typescript-eslint/types" "4.14.2" - eslint-visitor-keys "^2.0.0" - -"@typescript-eslint/visitor-keys@4.15.0": - version "4.15.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.15.0.tgz#2a07768df30c8a5673f1bce406338a07fdec38ca" - integrity sha512-RnDtJwOwFucWFAMjG3ghCG/ikImFJFEg20DI7mn4pHEx3vC48lIAoyjhffvfHmErRDboUPC7p9Z2il4CLb7qxA== +"@typescript-eslint/visitor-keys@4.22.0": + version "4.22.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.22.0.tgz#169dae26d3c122935da7528c839f42a8a42f6e47" + integrity sha512-nnMu4F+s4o0sll6cBSsTeVsT4cwxB7zECK3dFxzEjPBii9xLpq4yqqsy/FU5zMfan6G60DKZSCXAa3sHJZrcYw== dependencies: - "@typescript-eslint/types" "4.15.0" + "@typescript-eslint/types" "4.22.0" eslint-visitor-keys "^2.0.0" "@ungap/promise-all-settled@1.1.2": @@ -1935,11 +2133,19 @@ optionalDependencies: prettier "^1.18.2" -abab@^2.0.3: +abab@^2.0.3, abab@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== +accepts@~1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + acorn-globals@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" @@ -1963,6 +2169,11 @@ acorn@^7.1.1, acorn@^7.4.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== +acorn@^8.1.0: + version "8.2.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.2.1.tgz#0d36af126fb6755095879c1dc6fd7edf7d60a5fb" + integrity sha512-z716cpm5TX4uzOzILx8PavOE6C6DKshHDw1aQN52M/yNSqE9s5O8SMfyhCCfCJ3HmTL0NkVOi+8a/55T7YB3bg== + ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" @@ -1973,10 +2184,10 @@ ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^7.0.2: - version "7.1.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-7.1.0.tgz#f982ea7933dc7f1012eae9eec5a86687d805421b" - integrity sha512-svS9uILze/cXbH0z2myCK2Brqprx/+JJYK5pHicT/GQiBfzzhUVAIT6MwqJg8y4xV/zoGsUeuPuwtoiKSGE15g== +ajv@^8.0.1: + version "8.2.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.2.0.tgz#c89d3380a784ce81b2085f48811c4c101df4c602" + integrity sha512-WSNGFuyWd//XO8n/m/EaOlNLtO0yL8EXT/74LqT4khdhpZjP7lkj/kT5uwRmGitKEVp/Oj7ZUHeGfPtgHhQ5CA== dependencies: fast-deep-equal "^3.1.1" json-schema-traverse "^1.0.0" @@ -1996,11 +2207,11 @@ ansi-colors@4.1.1, ansi-colors@^4.1.1: integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== ansi-escapes@^4.2.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" - integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== dependencies: - type-fest "^0.11.0" + type-fest "^0.21.3" ansi-regex@^2.0.0: version "2.1.1" @@ -2022,7 +2233,7 @@ ansi-regex@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== -ansi-styles@^3.2.0, ansi-styles@^3.2.1: +ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== @@ -2045,9 +2256,9 @@ anymatch@^2.0.0: normalize-path "^2.1.1" anymatch@^3.0.3, anymatch@~3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" - integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" @@ -2088,6 +2299,11 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" @@ -2103,15 +2319,25 @@ arr-union@^3.1.0: resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= -array-includes@^3.1.1, array-includes@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.2.tgz#a8db03e0b88c8c6aeddc49cb132f9bcab4ebf9c8" - integrity sha512-w2GspexNQpx+PutG3QpT437/BenZBj0M/MZGn5mzv/MofYqo0xmRHzn4lFsoDlWJ+THYsGJmFlW68WlDFx7VRw== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" - get-intrinsic "^1.0.1" +array-filter@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-1.0.0.tgz#baf79e62e6ef4c2a4c0b831232daffec251f9d83" + integrity sha1-uveeYubvTCpMC4MSMtr/7CUfnYM= + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + +array-includes@^3.1.1, array-includes@^3.1.2, array-includes@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.3.tgz#c7f619b382ad2afaf5326cddfdc0afc61af7690a" + integrity sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.2" + get-intrinsic "^1.1.1" is-string "^1.0.5" array-union@^1.0.1: @@ -2145,7 +2371,7 @@ array.prototype.flat@^1.2.3: define-properties "^1.1.3" es-abstract "^1.18.0-next.1" -array.prototype.flatmap@^1.2.3: +array.prototype.flatmap@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz#94cfd47cc1556ec0747d97f7c7738c58122004c9" integrity sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q== @@ -2155,6 +2381,16 @@ array.prototype.flatmap@^1.2.3: es-abstract "^1.18.0-next.1" function-bind "^1.1.1" +asn1.js@^5.2.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" + integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + safer-buffer "^2.1.0" + asn1@~0.2.3: version "0.2.4" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" @@ -2192,6 +2428,11 @@ async-each@^1.0.1: resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + async@^2.6.1: version "2.6.3" resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" @@ -2219,6 +2460,13 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== +available-typed-arrays@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz#6b098ca9d8039079ee3f77f7b783c4480ba513f5" + integrity sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ== + dependencies: + array-filter "^1.0.0" + aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" @@ -2271,7 +2519,7 @@ babel-plugin-jest-hoist@^26.6.2: "@types/babel__core" "^7.0.0" "@types/babel__traverse" "^7.0.6" -babel-plugin-module-extension-resolver@^1.0.0-rc.1: +babel-plugin-module-extension-resolver@^1.0.0-rc.2: version "1.0.0-rc.2" resolved "https://registry.yarnpkg.com/babel-plugin-module-extension-resolver/-/babel-plugin-module-extension-resolver-1.0.0-rc.2.tgz#c12a5bc29c478cc87cdf9359188bf500db53eae9" integrity sha512-nSvCi7Eq079snAYgWbq+VM8eci7OER9MAhDchuxpdimuyJr06x/Stsmc2b6zP5CDv4XR54Etkpf7jOo5NfzgVg== @@ -2287,6 +2535,30 @@ babel-plugin-module-resolver@^4.1.0: reselect "^4.0.0" resolve "^1.13.1" +babel-plugin-polyfill-corejs2@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.0.tgz#686775bf9a5aa757e10520903675e3889caeedc4" + integrity sha512-9bNwiR0dS881c5SHnzCmmGlMkJLl0OUZvxrxHo9w/iNoRuqaPjqlvBf4HrovXtQs/au5yKkpcdgfT1cC5PAZwg== + dependencies: + "@babel/compat-data" "^7.13.11" + "@babel/helper-define-polyfill-provider" "^0.2.0" + semver "^6.1.1" + +babel-plugin-polyfill-corejs3@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.0.tgz#f4b4bb7b19329827df36ff56f6e6d367026cb7a2" + integrity sha512-zZyi7p3BCUyzNxLx8KV61zTINkkV65zVkDAFNZmrTCRVhjo1jAS+YLvDJ9Jgd/w2tsAviCwFHReYfxO3Iql8Yg== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.2.0" + core-js-compat "^3.9.1" + +babel-plugin-polyfill-regenerator@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.0.tgz#853f5f5716f4691d98c84f8069c7636ea8da7ab8" + integrity sha512-J7vKbCuD2Xi/eEHxquHN14bXAW9CXtecwuLrOIDJtcZzTaPzV1VdEfoUf9AzcRBMolKUQKM9/GVojeh0hFiqMg== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.2.0" + babel-plugin-styled-components@^1.12.0: version "1.12.0" resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-1.12.0.tgz#1dec1676512177de6b827211e9eda5a30db4f9b9" @@ -2329,18 +2601,18 @@ babel-preset-jest@^26.6.2: babel-preset-current-node-syntax "^1.0.0" balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base-x@^3.0.8: +base-x@^3.0.2, base-x@^3.0.8: version "3.0.8" resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.8.tgz#1e1106c2537f0162e8b52474a557ebb09000018d" integrity sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA== dependencies: safe-buffer "^5.0.1" -base64-js@^1.3.1: +base64-js@^1.3.1, base64-js@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== @@ -2365,12 +2637,12 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" -before-after-hook@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.1.1.tgz#99ae36992b5cfab4a83f6bee74ab27835f28f405" - integrity sha512-5ekuQOvO04MDj7kYZJaMab2S8SPjGJbotVNyv7QYFCOAwrGZs/YnoDNlh1U+m5hl7H2D/+n0taaAV/tfyd3KMA== +before-after-hook@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.1.tgz#73540563558687586b52ed217dad6a802ab1549c" + integrity sha512-/6FKxSTWoJdbsLDF8tdIjaRiFXiE6UHsEHE3OPI/cwPURCVi1ukP0gmLn7XWEiFk5TcwQjjY5PWsU+j+tgXgmw== -bignumber.js@^9.0.0: +bignumber.js@^9.0.0, bignumber.js@^9.0.1: version "9.0.1" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.1.tgz#8d7ba124c882bfd8e43260c67475518d0689e4e5" integrity sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA== @@ -2385,7 +2657,7 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== -bl@^4.0.3: +bl@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== @@ -2399,20 +2671,46 @@ blakejs@^1.1.0: resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.1.0.tgz#69df92ef953aa88ca51a32df6ab1c54a155fc7a5" integrity sha1-ad+S75U6qIylGjLfarHFShVfx6U= -bluebird@^3.1.1: +bluebird@^3.1.1, bluebird@^3.5.0: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== -bn.js@^4.11.9: - version "4.11.9" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" - integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== +bn.js@4.11.6: + version "4.11.6" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" + integrity sha1-UzRK2xRhehP26N0s4okF0cC6MhU= + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.0, bn.js@^4.11.1, bn.js@^4.11.6, bn.js@^4.11.9, bn.js@^4.4.0: + version "4.12.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + +bn.js@^5.0.0, bn.js@^5.1.1: + version "5.2.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" + integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== + +body-parser@1.19.0, body-parser@^1.16.0: + version "1.19.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== + dependencies: + bytes "3.1.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.7.2" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" boxen@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.0.0.tgz#64fe9b16066af815f51057adcc800c3730120854" - integrity sha512-5bvsqw+hhgUi3oYGK0Vf4WpIkyemp60WBInn7+WNfoISzAqk/HX4L7WNROq38E6UR/y3YADpv6pEm4BfkeEAdA== + version "5.0.1" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.0.1.tgz#657528bdd3f59a772b8279b831f27ec2c744664b" + integrity sha512-49VBlw+PrWEF51aCmy7QIteYPIFZxSpvqBdP/2itCPPlJ49kj9zg/XPRFrdkne2W+CfwXUls8exMvu1RysZpKA== dependencies: ansi-align "^3.0.0" camelcase "^6.2.0" @@ -2454,7 +2752,7 @@ braces@^3.0.1, braces@~3.0.2: dependencies: fill-range "^7.0.1" -brorand@^1.1.0: +brorand@^1.0.1, brorand@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= @@ -2469,16 +2767,86 @@ browser-stdout@1.3.1: resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== -browserslist@^4.14.5, browserslist@^4.16.1, browserslist@^4.16.3: - version "4.16.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.3.tgz#340aa46940d7db878748567c5dea24a48ddf3717" - integrity sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw== +browserify-aes@^1.0.0, browserify-aes@^1.0.4, browserify-aes@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" + integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== + dependencies: + bn.js "^5.0.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" + integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== + dependencies: + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.3" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +browserslist@^4.14.5, browserslist@^4.16.4, browserslist@^4.16.5: + version "4.16.5" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.5.tgz#952825440bca8913c62d0021334cbe928ef062ae" + integrity sha512-C2HAjrM1AI/djrpAUU/tr4pml1DqLIzJKSLDBXBrNErl9ZCCTXdhwxdJjYc16953+mBWf7Lw+uUJgpgb8cN71A== dependencies: - caniuse-lite "^1.0.30001181" - colorette "^1.2.1" - electron-to-chromium "^1.3.649" + caniuse-lite "^1.0.30001214" + colorette "^1.2.2" + electron-to-chromium "^1.3.719" escalade "^3.1.1" - node-releases "^1.1.70" + node-releases "^1.1.71" + +bs58@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" + integrity sha1-vhYedsNU9veIrkBx9j806MTwpCo= + dependencies: + base-x "^3.0.2" + +bs58check@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" + integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== + dependencies: + bs58 "^4.0.0" + create-hash "^1.1.0" + safe-buffer "^5.1.2" bser@2.1.1: version "2.1.1" @@ -2492,7 +2860,17 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== -buffer@^5.5.0: +buffer-to-arraybuffer@^0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz#6064a40fa76eb43c723aba9ef8f6e1216d10511a" + integrity sha1-YGSkD6dutDxyOrqe+PbhIW0QURo= + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + +buffer@^5.0.5, buffer@^5.5.0, buffer@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== @@ -2512,6 +2890,11 @@ builtin-modules@^1.1.1: resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -2563,10 +2946,10 @@ camelcase@^6.0.0, camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== -caniuse-lite@^1.0.30001181: - version "1.0.30001185" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001185.tgz#3482a407d261da04393e2f0d61eefbc53be43b95" - integrity sha512-Fpi4kVNtNvJ15H0F6vwmXtb3tukv3Zg3qhKkOGUq7KJ1J6b9kf4dnNgtEAFXhRsJo0gNj9W60+wBvn0JcTvdTg== +caniuse-lite@^1.0.30001214: + version "1.0.30001219" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001219.tgz#5bfa5d0519f41f993618bd318f606a4c4c16156b" + integrity sha512-c0yixVG4v9KBc/tQ2rlbB3A/bgBFRvl8h8M4IeUbqCca4gsiCfvtaheUssbnux/Mb66Vjz7x8yYjDgYcNQOhyQ== capture-exit@^2.0.0: version "2.0.0" @@ -2587,16 +2970,16 @@ chai-as-promised@^7.1.1: dependencies: check-error "^1.0.2" -chai@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.0.tgz#5523a5faf7f819c8a92480d70a8cccbadacfc25f" - integrity sha512-/BFd2J30EcOwmdOgXvVsmM48l0Br0nmZPlO0uOW4XKh6kpsUumRXBgPV+IlaqFaqr9cYbeoZAM1Npx0i4A+aiA== +chai@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.4.tgz#b55e655b31e1eac7099be4c08c21964fce2e6c49" + integrity sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA== dependencies: assertion-error "^1.1.0" check-error "^1.0.2" deep-eql "^3.0.1" get-func-name "^2.0.0" - pathval "^1.1.0" + pathval "^1.1.1" type-detect "^4.0.5" chalk@^2.0.0, chalk@^2.3.0, chalk@^2.4.2: @@ -2616,10 +2999,10 @@ chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^4.0.0, chalk@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" - integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" + integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== dependencies: ansi-styles "^4.1.0" supports-color "^7.1.0" @@ -2647,22 +3030,7 @@ check-error@^1.0.2: resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= -chokidar@3.4.3: - version "3.4.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.3.tgz#c1df38231448e45ca4ac588e6c79573ba6a57d5b" - integrity sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ== - dependencies: - anymatch "~3.1.1" - braces "~3.0.2" - glob-parent "~5.1.0" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.5.0" - optionalDependencies: - fsevents "~2.1.2" - -chokidar@^3.4.0: +chokidar@3.5.1, chokidar@^3.4.0: version "3.5.1" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== @@ -2677,12 +3045,28 @@ chokidar@^3.4.0: optionalDependencies: fsevents "~2.3.1" +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + ci-info@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== -cipher-base@^1.0.1: +cids@^0.7.1: + version "0.7.5" + resolved "https://registry.yarnpkg.com/cids/-/cids-0.7.5.tgz#60a08138a99bfb69b6be4ceb63bfef7a396b28b2" + integrity sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA== + dependencies: + buffer "^5.5.0" + class-is "^1.1.0" + multibase "~0.6.0" + multicodec "^1.0.0" + multihashes "~0.4.15" + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== @@ -2695,6 +3079,11 @@ cjs-module-lexer@^0.6.0: resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz#4186fcca0eae175970aee870b9fe2d6cf8d5655f" integrity sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw== +class-is@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/class-is/-/class-is-1.1.0.tgz#9d3c0fba0440d211d843cec3dedfa48055005825" + integrity sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw== + class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" @@ -2718,24 +3107,15 @@ cli-cursor@^3.1.0: restore-cursor "^3.1.0" cli-spinners@^2.2.0, cli-spinners@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.5.0.tgz#12763e47251bf951cb75c201dfa58ff1bcb2d047" - integrity sha512-PC+AmIuK04E6aeSs/pUccSujsTzBhu4HzC2dL+CfJB/Jcc2qTRbEwZQDfIUpt2Xl8BodYBEq8w4fc0kU2I9DjQ== + version "2.6.0" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.0.tgz#36c7dc98fb6a9a76bd6238ec3f77e2425627e939" + integrity sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q== cli-width@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" - integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== - dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" - cliui@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" @@ -2754,6 +3134,15 @@ cliui@^7.0.2: strip-ansi "^6.0.0" wrap-ansi "^7.0.0" +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + clone-response@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" @@ -2813,15 +3202,10 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -colorette@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" - integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== - -colors@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" - integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== +colorette@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" + integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: version "1.0.8" @@ -2889,6 +3273,27 @@ contains-path@^0.1.0: resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= +content-disposition@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + dependencies: + safe-buffer "5.1.2" + +content-hash@^2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/content-hash/-/content-hash-2.5.2.tgz#bbc2655e7c21f14fd3bfc7b7d4bfe6e454c9e211" + integrity sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw== + dependencies: + cids "^0.7.1" + multicodec "^0.5.5" + multihashes "^0.4.15" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" @@ -2896,17 +3301,32 @@ convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.6.0, dependencies: safe-buffer "~5.1.1" +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + +cookie@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" + integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== + +cookiejar@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.2.tgz#dd8a235530752f988f9a0844f3fc589e3111125c" + integrity sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA== + copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -core-js-compat@^3.8.0: - version "3.8.3" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.8.3.tgz#9123fb6b9cad30f0651332dc77deba48ef9b0b3f" - integrity sha512-1sCb0wBXnBIL16pfFG1Gkvei6UzvKyTNYpiC41yrdjEv0UoJoq9E/abTMzyYJ6JpTkAj15dLjbqifIzEBDVvog== +core-js-compat@^3.9.0, core-js-compat@^3.9.1: + version "3.11.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.11.0.tgz#635683f43480a0b41e3f6be3b1c648dadb8b4390" + integrity sha512-3wsN9YZJohOSDCjVB0GequOyHax8zFiogSX3XWLE28M1Ew7dTU57tgHjIylSBKSIouwmLBp3g61sKMz/q3xEGA== dependencies: - browserslist "^4.16.1" + browserslist "^4.16.4" semver "7.0.0" core-util-is@1.0.2, core-util-is@~1.0.0: @@ -2914,6 +3334,14 @@ core-util-is@1.0.2, core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= +cors@^2.8.1: + version "2.8.5" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== + dependencies: + object-assign "^4" + vary "^1" + coveralls@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-3.1.0.tgz#13c754d5e7a2dd8b44fe5269e21ca394fb4d615b" @@ -2925,7 +3353,15 @@ coveralls@^3.1.0: minimist "^1.2.5" request "^2.88.2" -create-hash@^1.2.0: +create-ecdh@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" + integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== + dependencies: + bn.js "^4.1.0" + elliptic "^6.5.3" + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== @@ -2936,6 +3372,18 @@ create-hash@^1.2.0: ripemd160 "^2.0.1" sha.js "^2.4.0" +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + create-require@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" @@ -2961,6 +3409,23 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2: shebang-command "^2.0.0" which "^2.0.1" +crypto-browserify@3.12.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + crypto-random-string@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" @@ -2981,7 +3446,7 @@ cssom@~0.3.6: resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== -cssstyle@^2.2.0: +cssstyle@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== @@ -3017,21 +3482,14 @@ data-urls@^2.0.0: whatwg-mimetype "^2.3.0" whatwg-url "^8.0.0" -debug@4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1" - integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg== - dependencies: - ms "2.1.2" - -debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1: +debug@4.3.1, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== @@ -3048,7 +3506,7 @@ decamelize@^4.0.0: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== -decimal.js@^10.2.0: +decimal.js@^10.2.1: version "10.2.1" resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.1.tgz#238ae7b0f0c793d3e3cea410108b35a2c01426a3" integrity sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw== @@ -3059,13 +3517,13 @@ decode-uri-component@^0.2.0: integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= decomment@^0.9.3: - version "0.9.3" - resolved "https://registry.yarnpkg.com/decomment/-/decomment-0.9.3.tgz#b913f32e5fe1113848f516caa5c7afefa9544d38" - integrity sha512-5skH5BfUL3n09RDmMVaHS1QGCiZRnl2nArUwmsE9JRY93Ueh3tihYl5wIrDdAuXnoFhxVis/DmRWREO2c6DG3w== + version "0.9.4" + resolved "https://registry.yarnpkg.com/decomment/-/decomment-0.9.4.tgz#fa40335bd90e3826d5c1984276e390525ff856d5" + integrity sha512-8eNlhyI5cSU4UbBlrtagWpR03dqXcE5IR9zpe7PnO6UzReXDskucsD8usgrzUmQ6qJ3N82aws/p/mu/jqbURWw== dependencies: esprima "4.0.1" -decompress-response@^3.3.0: +decompress-response@^3.2.0, decompress-response@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= @@ -3147,10 +3605,15 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + dependency-tree@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/dependency-tree/-/dependency-tree-8.0.0.tgz#59d141bcb53ca59f54e7f7b94013820ddd49b7d7" - integrity sha512-zagnV3jgizudEWY3FIFkGCrRr3+GukSMLlw1snIWAOL2beceC22hBXdeNjCnnfPZvbHIPB9DvacSCfD+IoOG3w== + version "8.1.0" + resolved "https://registry.yarnpkg.com/dependency-tree/-/dependency-tree-8.1.0.tgz#1b896a0418bd7ba3e6d55c39bb664452a001579f" + integrity sha512-YKFK+1KXJOqVpsW6MkrIl/DyiW+KVG25V8NfRs27ANe+oSeCkQx2ROW1mBpp1bcm++5zj3Xv8wyFxHgX6TbM1w== dependencies: commander "^2.20.3" debug "^4.3.1" @@ -3163,6 +3626,19 @@ deprecation@^2.0.0, deprecation@^2.3.1: resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== +des.js@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + detect-indent@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.0.0.tgz#0abd0f549f69fc6659a254fe96786186b6f528fd" @@ -3174,12 +3650,12 @@ detect-newline@^3.0.0: integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== detective-amd@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/detective-amd/-/detective-amd-3.0.1.tgz#aca8eddb1f405821953faf4a893d9b9e0430b09e" - integrity sha512-vJgluSKkPyo+/McW9hzwmZwY1VPA3BS0VS1agdpPAWAhr65HwC1ox4Ig82rVfGYDYCa4GcKQON5JWBk++2Kf1Q== + version "3.1.0" + resolved "https://registry.yarnpkg.com/detective-amd/-/detective-amd-3.1.0.tgz#92daee3214a0ca4522646cf333cac90a3fca6373" + integrity sha512-G7wGWT6f0VErjUkE2utCm7IUshT7nBh7aBBH2VBOiY9Dqy2DMens5iiOvYCuhstoIxRKLrnOvVAz4/EyPIAjnw== dependencies: ast-module-types "^2.7.0" - escodegen "^1.8.0" + escodegen "^2.0.0" get-amd-module-type "^3.0.0" node-source-walk "^4.0.0" @@ -3250,16 +3726,40 @@ detective-typescript@^6.0.0: node-source-walk "^4.2.0" typescript "^3.9.7" +detective-typescript@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/detective-typescript/-/detective-typescript-7.0.0.tgz#8c8917f2e51d9e4ee49821abf759ff512dd897f2" + integrity sha512-y/Ev98AleGvl43YKTNcA2Q+lyFmsmCfTTNWy4cjEJxoLkbobcXtRS0Kvx06daCgr2GdtlwLfNzL553BkktfJoA== + dependencies: + "@typescript-eslint/typescript-estree" "^4.8.2" + ast-module-types "^2.7.1" + node-source-walk "^4.2.0" + typescript "^3.9.7" + diff-sequences@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== -diff@4.0.2, diff@^4.0.1: +diff@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== + +diff@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -3289,6 +3789,11 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" +dom-walk@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" + integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== + domexception@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" @@ -3326,12 +3831,17 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" -electron-to-chromium@^1.3.649: - version "1.3.662" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.662.tgz#43305bcf88a3340feb553b815d6fd7466659d5ee" - integrity sha512-IGBXmTGwdVGUVTnZ8ISEvkhDfhhD+CDFndG4//BhvDcEtPYiVrzoB+rzT/Y12OQCf5bvRCrVmrUbGrS9P7a6FQ== +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + +electron-to-chromium@^1.3.719: + version "1.3.723" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.723.tgz#52769a75635342a4db29af5f1e40bd3dad02c877" + integrity sha512-L+WXyXI7c7+G1V8ANzRsPI5giiimLAUDC6Zs1ojHHPhYXb3k/iTABFmWjivEtsWrRQymjnO66/rO2ZTABGdmWg== -elliptic@^6.5.4: +elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3, elliptic@^6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== @@ -3364,6 +3874,11 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" @@ -3372,9 +3887,9 @@ end-of-stream@^1.1.0, end-of-stream@^1.4.1: once "^1.4.0" enhanced-resolve@^5.3.2: - version "5.7.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.7.0.tgz#525c5d856680fbd5052de453ac83e32049958b5c" - integrity sha512-6njwt/NsZFUKhM6j9U8hzVyD4E4r0x7NQzhTCbcWOJ0IQjNSAoalWmb0AE51Wn+fwan5qVESWi7t2ToBxs9vrw== + version "5.8.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.8.0.tgz#d9deae58f9d3773b6a111a5a46831da5be5c9ac0" + integrity sha512-Sl3KRpJA8OpprrtaIswVki3cWPiPKxXuFxJXBp+zNb6s6VwNWwFRUdtmzd2ReUut8n+sCPx7QCtQ7w5wfJhSgQ== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" @@ -3393,25 +3908,27 @@ error-ex@^1.2.0, error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.18.0-next.1: - version "1.18.0-next.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.2.tgz#088101a55f0541f595e7e057199e27ddc8f3a5c2" - integrity sha512-Ih4ZMFHEtZupnUh6497zEL4y2+w8+1ljnCyaTa+adcoafI1GOvMwFlDjBLfWR7y9VLfrjRJe9ocuHY1PSR9jjw== +es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2: + version "1.18.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0.tgz#ab80b359eecb7ede4c298000390bc5ac3ec7b5a4" + integrity sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw== dependencies: call-bind "^1.0.2" es-to-primitive "^1.2.1" function-bind "^1.1.1" - get-intrinsic "^1.0.2" + get-intrinsic "^1.1.1" has "^1.0.3" - has-symbols "^1.0.1" - is-callable "^1.2.2" + has-symbols "^1.0.2" + is-callable "^1.2.3" is-negative-zero "^2.0.1" - is-regex "^1.1.1" + is-regex "^1.1.2" + is-string "^1.0.5" object-inspect "^1.9.0" object-keys "^1.1.1" object.assign "^4.1.2" - string.prototype.trimend "^1.0.3" - string.prototype.trimstart "^1.0.3" + string.prototype.trimend "^1.0.4" + string.prototype.trimstart "^1.0.4" + unbox-primitive "^1.0.0" es-to-primitive@^1.2.1: version "1.2.1" @@ -3458,6 +3975,11 @@ escape-goat@^2.0.0: resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + escape-string-regexp@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" @@ -3473,13 +3995,13 @@ escape-string-regexp@^2.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== -escodegen@^1.14.1, escodegen@^1.8.0: - version "1.14.3" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" - integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== +escodegen@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" + integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== dependencies: esprima "^4.0.1" - estraverse "^4.2.0" + estraverse "^5.2.0" esutils "^2.0.2" optionator "^0.8.1" optionalDependencies: @@ -3550,32 +4072,33 @@ eslint-plugin-node@^11.1.0: resolve "^1.10.1" semver "^6.1.0" -eslint-plugin-promise@^4.2.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.3.1.tgz#61485df2a359e03149fdafc0a68b0e030ad2ac45" - integrity sha512-bY2sGqyptzFBDLh/GMbAxfdJC+b0f23ME63FOE4+Jao0oZ3E1LEwFtWJX/1pGMJLiTtrSSern2CRM/g+dfc0eQ== +eslint-plugin-promise@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-5.1.0.tgz#fb2188fb734e4557993733b41aa1a688f46c6f24" + integrity sha512-NGmI6BH5L12pl7ScQHbg7tvtk4wPxxj8yPHH47NvSmMtFneC077PSeY3huFj06ZWZvtbfxSPt3RuOQD5XcR4ng== eslint-plugin-react-hooks@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz#8c229c268d468956334c943bb45fc860280f5556" integrity sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ== -eslint-plugin-react@^7.22.0: - version "7.22.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.22.0.tgz#3d1c542d1d3169c45421c1215d9470e341707269" - integrity sha512-p30tuX3VS+NWv9nQot9xIGAHBXR0+xJVaZriEsHoJrASGCJZDJ8JLNM0YqKqI0AKm6Uxaa1VUHoNEibxRCMQHA== +eslint-plugin-react@^7.23.2: + version "7.23.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.23.2.tgz#2d2291b0f95c03728b55869f01102290e792d494" + integrity sha512-AfjgFQB+nYszudkxRkTFu0UR1zEQig0ArVMPloKhxwlwkzaw/fBiH0QWcBBhZONlXqQC51+nfqFrkn4EzHcGBw== dependencies: - array-includes "^3.1.1" - array.prototype.flatmap "^1.2.3" + array-includes "^3.1.3" + array.prototype.flatmap "^1.2.4" doctrine "^2.1.0" has "^1.0.3" jsx-ast-utils "^2.4.1 || ^3.0.0" - object.entries "^1.1.2" - object.fromentries "^2.0.2" - object.values "^1.1.1" + minimatch "^3.0.4" + object.entries "^1.1.3" + object.fromentries "^2.0.4" + object.values "^1.1.3" prop-types "^15.7.2" - resolve "^1.18.1" - string.prototype.matchall "^4.0.2" + resolve "^2.0.0-next.3" + string.prototype.matchall "^4.0.4" eslint-plugin-simple-import-sort@^7.0.0: version "7.0.0" @@ -3614,13 +4137,13 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== -eslint@^7.19.0: - version "7.19.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.19.0.tgz#6719621b196b5fad72e43387981314e5d0dc3f41" - integrity sha512-CGlMgJY56JZ9ZSYhJuhow61lMPPjUzWmChFya71Z/jilVos7mR/jPgaEfVGgMBY5DshbKdG8Ezb8FDCHcoMEMg== +eslint@^7.25.0: + version "7.25.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.25.0.tgz#1309e4404d94e676e3e831b3a3ad2b050031eb67" + integrity sha512-TVpSovpvCNpLURIScDRB6g5CYu/ZFq9GfX2hLNIV4dSBKxIWojeDODvYl3t0k0VtMxYeR8OXPCFE5+oHMlGfhw== dependencies: - "@babel/code-frame" "^7.0.0" - "@eslint/eslintrc" "^0.3.0" + "@babel/code-frame" "7.12.11" + "@eslint/eslintrc" "^0.4.0" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" @@ -3631,12 +4154,12 @@ eslint@^7.19.0: eslint-utils "^2.1.0" eslint-visitor-keys "^2.0.0" espree "^7.3.1" - esquery "^1.2.0" + esquery "^1.4.0" esutils "^2.0.2" - file-entry-cache "^6.0.0" + file-entry-cache "^6.0.1" functional-red-black-tree "^1.0.1" glob-parent "^5.0.0" - globals "^12.1.0" + globals "^13.6.0" ignore "^4.0.6" import-fresh "^3.0.0" imurmurhash "^0.1.4" @@ -3644,7 +4167,7 @@ eslint@^7.19.0: js-yaml "^3.13.1" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" - lodash "^4.17.20" + lodash "^4.17.21" minimatch "^3.0.4" natural-compare "^1.4.0" optionator "^0.9.1" @@ -3671,7 +4194,7 @@ esprima@4.0.1, esprima@^4.0.0, esprima@^4.0.1: resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.2.0: +esquery@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== @@ -3685,7 +4208,7 @@ esrecurse@^4.3.0: dependencies: estraverse "^5.2.0" -estraverse@^4.1.1, estraverse@^4.2.0: +estraverse@^4.1.1: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== @@ -3700,15 +4223,132 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + +eth-ens-namehash@2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz#229ac46eca86d52e0c991e7cb2aef83ff0f68bcf" + integrity sha1-IprEbsqG1S4MmR58sq74P/D2i88= + dependencies: + idna-uts46-hx "^2.3.1" + js-sha3 "^0.5.7" + +eth-lib@0.2.8: + version "0.2.8" + resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.2.8.tgz#b194058bef4b220ad12ea497431d6cb6aa0623c8" + integrity sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw== + dependencies: + bn.js "^4.11.6" + elliptic "^6.4.0" + xhr-request-promise "^0.1.2" + +eth-lib@^0.1.26: + version "0.1.29" + resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.1.29.tgz#0c11f5060d42da9f931eab6199084734f4dbd1d9" + integrity sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ== + dependencies: + bn.js "^4.11.6" + elliptic "^6.4.0" + nano-json-stream-parser "^0.1.2" + servify "^0.1.12" + ws "^3.0.0" + xhr-request-promise "^0.1.2" + +ethereum-bloom-filters@^1.0.6: + version "1.0.9" + resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.9.tgz#4a59dead803af0c9e33834170bd7695df67061ec" + integrity sha512-GiK/RQkAkcVaEdxKVkPcG07PQ5vD7v2MFSHgZmBJSfMzNRHimntdBithsHAT89tAXnIpzVDWt8iaCD1DvkaxGg== + dependencies: + js-sha3 "^0.8.0" + +ethereum-cryptography@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" + integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ== + dependencies: + "@types/pbkdf2" "^3.0.0" + "@types/secp256k1" "^4.0.1" + blakejs "^1.1.0" + browserify-aes "^1.2.0" + bs58check "^2.1.2" + create-hash "^1.2.0" + create-hmac "^1.1.7" + hash.js "^1.1.7" + keccak "^3.0.0" + pbkdf2 "^3.0.17" + randombytes "^2.1.0" + safe-buffer "^5.1.2" + scrypt-js "^3.0.0" + secp256k1 "^4.0.1" + setimmediate "^1.0.5" + +ethereumjs-common@^1.3.2, ethereumjs-common@^1.5.0: + version "1.5.2" + resolved "https://registry.yarnpkg.com/ethereumjs-common/-/ethereumjs-common-1.5.2.tgz#2065dbe9214e850f2e955a80e650cb6999066979" + integrity sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA== + +ethereumjs-tx@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz#5dfe7688bf177b45c9a23f86cf9104d47ea35fed" + integrity sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw== + dependencies: + ethereumjs-common "^1.5.0" + ethereumjs-util "^6.0.0" + +ethereumjs-util@^6.0.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" + integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== + dependencies: + "@types/bn.js" "^4.11.3" + bn.js "^4.11.0" + create-hash "^1.1.2" + elliptic "^6.5.2" + ethereum-cryptography "^0.1.3" + ethjs-util "0.1.6" + rlp "^2.2.3" + +ethjs-unit@0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" + integrity sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk= + dependencies: + bn.js "4.11.6" + number-to-bn "1.7.0" + +ethjs-util@0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536" + integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w== + dependencies: + is-hex-prefixed "1.0.0" + strip-hex-prefix "1.0.0" + +eventemitter3@4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" + integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== + eventemitter3@^4.0.7: version "4.0.7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + exec-sh@^0.3.2: - version "0.3.4" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5" - integrity sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A== + version "0.3.6" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" + integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== execa@^1.0.0: version "1.0.0" @@ -3768,6 +4408,42 @@ expect@^26.6.2: jest-message-util "^26.6.2" jest-regex-util "^26.0.0" +express@^4.14.0: + version "4.17.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== + dependencies: + accepts "~1.3.7" + array-flatten "1.1.1" + body-parser "1.19.0" + content-disposition "0.5.3" + content-type "~1.0.4" + cookie "0.4.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "~1.1.2" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.5" + qs "6.7.0" + range-parser "~1.2.1" + safe-buffer "5.1.2" + send "0.17.1" + serve-static "1.14.1" + setprototypeof "1.1.1" + statuses "~1.5.0" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + ext@^1.1.2: version "1.4.0" resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244" @@ -3856,9 +4532,9 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= fastq@^1.6.0: - version "1.10.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.10.1.tgz#8b8f2ac8bf3632d67afcd65dac248d5fdc45385e" - integrity sha512-AWuv6Ery3pM+dY7LYS8YIaCiQvUaos9OB1RyNgaOWnaX+Tik7Onvcsf8x8c+YtDeT0maYLniBip2hox5KtEXXA== + version "1.11.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858" + integrity sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g== dependencies: reusify "^1.0.4" @@ -3876,10 +4552,10 @@ figures@^3.0.0: dependencies: escape-string-regexp "^1.0.5" -file-entry-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.0.tgz#7921a89c391c6d93efec2169ac6bf300c527ea0a" - integrity sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA== +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== dependencies: flat-cache "^3.0.4" @@ -3941,6 +4617,19 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" +finalhandler@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + find-babel-config@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-1.2.0.tgz#a9b7b317eb5b9860cda9d54740a8c8337a2283a2" @@ -4030,15 +4719,20 @@ for-in@^1.0.2: resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= +foreach@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= + forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= form-data@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.0.tgz#31b7e39c85f1355b7139ee0c647cf0de7f83c682" - integrity sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg== + version "3.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" + integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" @@ -4053,6 +4747,11 @@ form-data@~2.3.2: combined-stream "^1.0.6" mime-types "^2.1.12" +forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= + fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" @@ -4060,6 +4759,20 @@ fragment-cache@^0.2.1: dependencies: map-cache "^0.2.2" +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + +fs-extra@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" + integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" @@ -4079,6 +4792,13 @@ fs-extra@^9.1.0: jsonfile "^6.0.1" universalify "^2.0.0" +fs-minipass@^1.2.5: + version "1.2.7" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== + dependencies: + minipass "^2.6.0" + fs-readdir-recursive@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" @@ -4094,11 +4814,6 @@ fsevents@^2.1.2, fsevents@~2.3.1: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== -fsevents@~2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" - integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== - function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -4123,7 +4838,7 @@ gauge@^v2.7.4: strip-ansi "^3.0.1" wide-align "^1.1.0" -gensync@^1.0.0-beta.1: +gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== @@ -4146,7 +4861,7 @@ get-func-name@^2.0.0: resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= -get-intrinsic@^1.0.1, get-intrinsic@^1.0.2, get-intrinsic@^1.1.0: +get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== @@ -4165,6 +4880,11 @@ get-package-type@^0.1.0: resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= + get-stream@^4.0.0, get-stream@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" @@ -4245,9 +4965,9 @@ ghauth@^5.0.0: read "^1.0.7" github-url-to-object@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/github-url-to-object/-/github-url-to-object-4.0.4.tgz#a9797b7026e18d53b50b07f45b7e169b55fd90ee" - integrity sha512-1Ri1pR8XTfzLpbtPz5MlW/amGNdNReuExPsbF9rxLsBfO1GH9RtDBamhJikd0knMWq3RTTQDbTtw0GGvvEAJEA== + version "4.0.6" + resolved "https://registry.yarnpkg.com/github-url-to-object/-/github-url-to-object-4.0.6.tgz#5ea8701dc8c336b8d582dc3fa5bf964165c3b365" + integrity sha512-NaqbYHMUAlPcmWFdrAB7bcxrNIiiJWJe8s/2+iOc9vlcHlwHqSGrPk+Yi3nu6ebTwgsZEa7igz+NH2vEq3gYwQ== dependencies: is-url "^1.1.0" @@ -4260,9 +4980,9 @@ glob-parent@^3.1.0: path-dirname "^1.0.0" glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" - integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" @@ -4292,6 +5012,14 @@ global-dirs@^3.0.0: dependencies: ini "2.0.0" +global@~4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" + integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== + dependencies: + min-document "^2.19.0" + process "^0.11.10" + globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" @@ -4304,10 +5032,17 @@ globals@^12.1.0: dependencies: type-fest "^0.8.1" +globals@^13.6.0: + version "13.8.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.8.0.tgz#3e20f504810ce87a8d72e55aecf8435b50f4c1b3" + integrity sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q== + dependencies: + type-fest "^0.20.2" + globby@^11.0.1: - version "11.0.2" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.2.tgz#1af538b766a3b540ebfb58a32b2e2d5897321d83" - integrity sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og== + version "11.0.3" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.3.tgz#9b1f0cb523e171dd1ad8c7b2a9fb4b644b9593cb" + integrity sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg== dependencies: array-union "^2.1.0" dir-glob "^3.0.1" @@ -4334,7 +5069,7 @@ gonzales-pe@^4.2.3: dependencies: minimist "^1.2.5" -got@^9.6.0: +got@9.6.0, got@^9.6.0: version "9.6.0" resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== @@ -4351,9 +5086,29 @@ got@^9.6.0: to-readable-stream "^1.0.0" url-parse-lax "^3.0.0" -graceful-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: - version "4.2.6" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" +got@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/got/-/got-7.1.0.tgz#05450fd84094e6bbea56f451a43a9c289166385a" + integrity sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw== + dependencies: + decompress-response "^3.2.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + is-plain-obj "^1.1.0" + is-retry-allowed "^1.0.0" + is-stream "^1.0.0" + isurl "^1.0.0-alpha5" + lowercase-keys "^1.0.0" + p-cancelable "^0.3.0" + p-timeout "^1.1.1" + safe-buffer "^5.0.1" + timed-out "^4.0.0" + url-parse-lax "^1.0.0" + url-to-options "^1.0.1" + +graceful-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: + version "4.2.6" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== graphviz@0.0.9: @@ -4373,10 +5128,10 @@ growly@^1.3.0: resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= -handlebars@^4.7.6: - version "4.7.6" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.6.tgz#d4c05c1baf90e9945f77aa68a7a219aa4a7df74e" - integrity sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA== +handlebars@^4.7.7: + version "4.7.7" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" + integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== dependencies: minimist "^1.2.5" neo-async "^2.6.0" @@ -4398,6 +5153,11 @@ har-validator@~5.1.3: ajv "^6.12.3" har-schema "^2.0.0" +has-bigints@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" + integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -4408,10 +5168,22 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-symbols@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" - integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== +has-symbol-support-x@^1.4.1: + version "1.4.2" + resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" + integrity sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw== + +has-symbols@^1.0.1, has-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" + integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== + +has-to-string-tag-x@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" + integrity sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw== + dependencies: + has-symbol-support-x "^1.4.1" has-unicode@^2.0.0: version "2.0.1" @@ -4498,9 +5270,9 @@ hmac-drbg@^1.0.1: minimalistic-crypto-utils "^1.0.1" hosted-git-info@^2.1.4: - version "2.8.8" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" - integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== html-encoding-sniffer@^2.0.1: version "2.0.1" @@ -4519,6 +5291,33 @@ http-cache-semantics@^4.0.0: resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== +http-errors@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-https@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/http-https/-/http-https-1.0.0.tgz#2f908dd5f1db4068c058cd6e6d4ce392c913389b" + integrity sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs= + http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" @@ -4548,6 +5347,13 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" +idna-uts46-hx@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz#a1dc5c4df37eee522bf66d969cc980e00e8711f9" + integrity sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA== + dependencies: + punycode "2.1.0" + ieee754@^1.1.13: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" @@ -4602,11 +5408,16 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + ini@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" @@ -4636,7 +5447,7 @@ inquirer@^7.3.3: strip-ansi "^6.0.0" through "^2.3.6" -internal-slot@^1.0.2: +internal-slot@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== @@ -4650,16 +5461,16 @@ interpret@^1.0.0: resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== -ip-regex@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" - integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= - ip-regex@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.3.0.tgz#687275ab0f57fa76978ff8f4dddc8a23d5990db5" integrity sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q== +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" @@ -4674,11 +5485,23 @@ is-accessor-descriptor@^1.0.0: dependencies: kind-of "^6.0.0" +is-arguments@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9" + integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg== + dependencies: + call-bind "^1.0.0" + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= +is-bigint@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.1.tgz#6923051dfcbc764278540b9ce0e6b3213aa5ebc2" + integrity sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg== + is-binary-path@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" @@ -4693,12 +5516,19 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" +is-boolean-object@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.0.tgz#e2aaad3a3a8fca34c28f6eee135b156ed2587ff0" + integrity sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA== + dependencies: + call-bind "^1.0.0" + is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-callable@^1.1.4, is-callable@^1.2.2: +is-callable@^1.1.4, is-callable@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== @@ -4711,9 +5541,9 @@ is-ci@^2.0.0: ci-info "^2.0.0" is-core-module@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" - integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== + version "2.3.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.3.0.tgz#d341652e3408bca69c4671b79a0954a3d349f887" + integrity sha512-xSphU2KG9867tsYdLD4RWQ1VqdFl4HTO9Thf3I/3dLEfr0dbPTWKsuCKrgqMljg4nPE+Gq0VCnzT3gr0CyBmsw== dependencies: has "^1.0.3" @@ -4755,9 +5585,9 @@ is-descriptor@^1.0.0, is-descriptor@^1.0.2: kind-of "^6.0.2" is-docker@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.1.1.tgz#4125a88e44e450d384e09047ede71adc2d144156" - integrity sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw== + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" @@ -4793,11 +5623,21 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== +is-function@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08" + integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== + is-generator-fn@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== +is-generator-function@^1.0.7: + version "1.0.8" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.8.tgz#dfb5c2b120e02b0a8d9d2c6806cd5621aa922f7b" + integrity sha512-2Omr/twNtufVZFr1GhxjOMFPAj2sjc/dKaIqBhvo4qciXfJmITGH6ZGd8eZYNHza8t1y0e01AuqRhJwfWp26WQ== + is-glob@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" @@ -4812,6 +5652,11 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" +is-hex-prefixed@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" + integrity sha1-fY035q135dEnFIkTxXPggtd39VQ= + is-installed-globally@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" @@ -4835,6 +5680,11 @@ is-npm@^5.0.0: resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-5.0.0.tgz#43e8d65cc56e1b67f8d47262cf667099193f45a8" integrity sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA== +is-number-object@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197" + integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw== + is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -4857,12 +5707,17 @@ is-obj@^2.0.0: resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== +is-object@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.2.tgz#a56552e1c665c9e950b4a025461da87e72f86fcf" + integrity sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA== + is-path-inside@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.2.tgz#f5220fc82a3e233757291dddc9c5877f2a1f3017" - integrity sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg== + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== -is-plain-obj@^1.0.0: +is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= @@ -4885,11 +5740,11 @@ is-plain-object@^5.0.0: integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== is-potential-custom-element-name@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz#0c52e54bcca391bb2c494b21e8626d7336c6e397" - integrity sha1-DFLlS8yjkbssSUsh6GJtczbG45c= + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== -is-regex@^1.1.1: +is-regex@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.2.tgz#81c8ebde4db142f2cf1c53fc86d6a45788266251" integrity sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg== @@ -4907,7 +5762,12 @@ is-relative-path@^1.0.2: resolved "https://registry.yarnpkg.com/is-relative-path/-/is-relative-path-1.0.2.tgz#091b46a0d67c1ed0fe85f1f8cfdde006bb251d46" integrity sha1-CRtGoNZ8HtD+hfH4z93gBrslHUY= -is-stream@^1.1.0: +is-retry-allowed@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" + integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== + +is-stream@^1.0.0, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= @@ -4922,18 +5782,34 @@ is-string@^1.0.5: resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== -is-symbol@^1.0.2: +is-symbol@^1.0.2, is-symbol@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== dependencies: has-symbols "^1.0.1" +is-typed-array@^1.1.3: + version "1.1.5" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.5.tgz#f32e6e096455e329eb7b423862456aa213f0eb4e" + integrity sha512-S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug== + dependencies: + available-typed-arrays "^1.0.2" + call-bind "^1.0.2" + es-abstract "^1.18.0-next.2" + foreach "^2.0.5" + has-symbols "^1.0.1" + is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + is-url@^1.1.0, is-url@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52" @@ -5024,6 +5900,14 @@ istanbul-reports@^3.0.2: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" +isurl@^1.0.0-alpha5: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" + integrity sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w== + dependencies: + has-to-string-tag-x "^1.2.0" + is-object "^1.0.1" + jest-changed-files@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.6.2.tgz#f6198479e1cc66f22f9ae1e22acaa0b429c042d0" @@ -5397,6 +6281,11 @@ jest@^26.6.3: import-local "^3.0.2" jest-cli "^26.6.3" +js-sha3@0.5.7, js-sha3@^0.5.7: + version "0.5.7" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.7.tgz#0d4ffd8002d5333aabaf4a23eed2f6374c9f28e7" + integrity sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc= + js-sha3@^0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" @@ -5407,13 +6296,12 @@ js-sha3@^0.8.0: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@3.14.0: - version "3.14.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" - integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== +js-yaml@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.0.0.tgz#f426bc0ff4b4051926cd588c71113183409a121f" + integrity sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q== dependencies: - argparse "^1.0.7" - esprima "^4.0.0" + argparse "^2.0.1" js-yaml@^3.13.1: version "3.14.1" @@ -5429,35 +6317,35 @@ jsbn@~0.1.0: integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= jsdom@^16.4.0: - version "16.4.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.4.0.tgz#36005bde2d136f73eee1a830c6d45e55408edddb" - integrity sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w== + version "16.5.3" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.5.3.tgz#13a755b3950eb938b4482c407238ddf16f0d2136" + integrity sha512-Qj1H+PEvUsOtdPJ056ewXM4UJPCi4hhLA8wpiz9F2YvsRBhuFsXxtrIFAgGBDynQA9isAMGE91PfUYbdMPXuTA== dependencies: - abab "^2.0.3" - acorn "^7.1.1" + abab "^2.0.5" + acorn "^8.1.0" acorn-globals "^6.0.0" cssom "^0.4.4" - cssstyle "^2.2.0" + cssstyle "^2.3.0" data-urls "^2.0.0" - decimal.js "^10.2.0" + decimal.js "^10.2.1" domexception "^2.0.1" - escodegen "^1.14.1" + escodegen "^2.0.0" html-encoding-sniffer "^2.0.1" is-potential-custom-element-name "^1.0.0" nwsapi "^2.2.0" - parse5 "5.1.1" + parse5 "6.0.1" request "^2.88.2" - request-promise-native "^1.0.8" - saxes "^5.0.0" + request-promise-native "^1.0.9" + saxes "^5.0.1" symbol-tree "^3.2.4" - tough-cookie "^3.0.1" + tough-cookie "^4.0.0" w3c-hr-time "^1.0.2" w3c-xmlserializer "^2.0.0" webidl-conversions "^6.1.0" whatwg-encoding "^1.0.5" whatwg-mimetype "^2.3.0" - whatwg-url "^8.0.0" - ws "^7.2.3" + whatwg-url "^8.5.0" + ws "^7.4.4" xml-name-validator "^3.0.0" jsesc@^2.5.1: @@ -5558,6 +6446,14 @@ jsprim@^1.2.2: array-includes "^3.1.2" object.assign "^4.1.2" +keccak@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.1.tgz#ae30a0e94dbe43414f741375cff6d64c8bea0bff" + integrity sha512-epq90L9jlFWCW7+pQa6JOnKn2Xgl2mtI664seYR6MHskvI9agt7AnDqmAlp9TqU4/caMYbA08Hi5DMZAl5zdkA== + dependencies: + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + keyv@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" @@ -5687,22 +6583,37 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" -lodash.sortby@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" - integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= + +lodash.flatten@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= -lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20: - version "4.17.20" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" - integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= + +lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21, lodash@^4.7.0: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== log-driver@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8" integrity sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg== -log-symbols@4.0.0, log-symbols@^4.0.0: +log-symbols@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.0.0.tgz#69b3cc46d20f448eccdb75ea1fa733d9e821c920" integrity sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA== @@ -5716,6 +6627,14 @@ log-symbols@^3.0.0: dependencies: chalk "^2.4.2" +log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -5741,13 +6660,6 @@ lru-cache@^4.1.2: pseudomap "^1.0.2" yallist "^2.1.2" -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -5755,15 +6667,10 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -lunr@^2.3.9: - version "2.3.9" - resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1" - integrity sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow== - -madge@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/madge/-/madge-4.0.0.tgz#8930e0e0310451b049a43b3a86253aea6cf7d03e" - integrity sha512-BQbYl2HTFnTqOTJQQwVGJPBuD7ScafYvWa2GGGIt+qBFQ2ZpYhSWQJp2rk3EdazthyAOhFvpeuIEOXTBVB50hw== +madge@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/madge/-/madge-4.0.2.tgz#56a3aff8021a5844f8713e0789f6ee94095f2f41" + integrity sha512-l5bnA2dvyk0azLKDbOTCI+wDZ6nB007PhvPdmiYlPmqwVi49JPbhQrH/t4u8E6Akp3gwji1GZuA+v/F5q6yoWQ== dependencies: chalk "^4.1.0" commander "^6.2.1" @@ -5778,7 +6685,7 @@ madge@^4.0.0: detective-sass "^3.0.1" detective-scss "^2.0.1" detective-stylus "^1.0.0" - detective-typescript "^6.0.0" + detective-typescript "^7.0.0" graphviz "0.0.9" ora "^5.1.0" pluralize "^8.0.0" @@ -5827,11 +6734,6 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" -marked@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/marked/-/marked-2.0.0.tgz#9662bbcb77ebbded0662a7be66ff929a8611cee5" - integrity sha512-NqRSh2+LlN2NInpqTQnS614Y/3NkVMFFU6sJlRFEpxJ/LHuK/qJECH7/fXZjk4VZstPW/Pevjil/VtSONsLc7Q== - md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -5841,6 +6743,16 @@ md5.js@^1.3.4: inherits "^2.0.1" safe-buffer "^5.1.2" +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + merge-source-map@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646" @@ -5858,6 +6770,11 @@ merge2@^1.3.0: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" @@ -5878,29 +6795,42 @@ micromatch@^3.1.10, micromatch@^3.1.4: to-regex "^3.0.2" micromatch@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" - integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== + version "4.0.4" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" + integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== dependencies: braces "^3.0.1" - picomatch "^2.0.5" + picomatch "^2.2.3" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" -mime-db@1.45.0: - version "1.45.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea" - integrity sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w== +mime-db@1.47.0: + version "1.47.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.47.0.tgz#8cb313e59965d3c05cfbf898915a267af46a335c" + integrity sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw== -mime-types@^2.1.12, mime-types@~2.1.19: - version "2.1.28" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.28.tgz#1160c4757eab2c5363888e005273ecf79d2a0ecd" - integrity sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ== +mime-types@^2.1.12, mime-types@^2.1.16, mime-types@~2.1.19, mime-types@~2.1.24: + version "2.1.30" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.30.tgz#6e7be8b4c479825f85ed6326695db73f9305d62d" + integrity sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg== dependencies: - mime-db "1.45.0" + mime-db "1.47.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== mime@^2.4.6: - version "2.5.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.0.tgz#2b4af934401779806ee98026bb42e8c1ae1876b1" - integrity sha512-ft3WayFSFUVBuJj7BMLKAQcSlItKtfjsKDDsii3rqFDAZ7t11zRe8ASw/GlmivGwVUYtwkQrxiGGpL6gFvB0ag== + version "2.5.2" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" + integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== mimic-fn@^2.1.0: version "2.1.0" @@ -5917,6 +6847,13 @@ mimic-response@^3.1.0: resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== +min-document@^2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" + integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU= + dependencies: + dom-walk "^0.1.0" + minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" @@ -5927,7 +6864,7 @@ minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= -minimatch@3.0.4, minimatch@^3.0.0, minimatch@^3.0.4: +minimatch@3.0.4, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== @@ -5939,6 +6876,21 @@ minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== +minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.2.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== + dependencies: + minipass "^2.9.0" + mixin-deep@^1.2.0: version "1.3.2" resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" @@ -5947,49 +6899,61 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@^0.5.1: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== +mkdirp-promise@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" + integrity sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE= dependencies: - minimist "^1.2.5" + mkdirp "*" -mkdirp@^1.0.4: +mkdirp@*, mkdirp@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -mocha@^8.1.1: - version "8.2.1" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-8.2.1.tgz#f2fa68817ed0e53343d989df65ccd358bc3a4b39" - integrity sha512-cuLBVfyFfFqbNR0uUKbDGXKGk+UDFe6aR4os78XIrMQpZl/nv7JYHcvP5MFIAb374b2zFXsdgEGwmzMtP0Xg8w== +mkdirp@^0.5.0, mkdirp@^0.5.3: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +mocha@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-8.3.2.tgz#53406f195fa86fbdebe71f8b1c6fb23221d69fcc" + integrity sha512-UdmISwr/5w+uXLPKspgoV7/RXZwKRTiTjJ2/AC5ZiEztIoOYdfKb19+9jNmEInzx5pBsCyJQzarAxqIGBNYJhg== dependencies: "@ungap/promise-all-settled" "1.1.2" ansi-colors "4.1.1" browser-stdout "1.3.1" - chokidar "3.4.3" - debug "4.2.0" - diff "4.0.2" + chokidar "3.5.1" + debug "4.3.1" + diff "5.0.0" escape-string-regexp "4.0.0" find-up "5.0.0" glob "7.1.6" growl "1.10.5" he "1.2.0" - js-yaml "3.14.0" + js-yaml "4.0.0" log-symbols "4.0.0" minimatch "3.0.4" - ms "2.1.2" - nanoid "3.1.12" + ms "2.1.3" + nanoid "3.1.20" serialize-javascript "5.0.1" strip-json-comments "3.1.1" - supports-color "7.2.0" + supports-color "8.1.1" which "2.0.2" wide-align "1.1.3" - workerpool "6.0.2" - yargs "13.3.2" - yargs-parser "13.1.2" + workerpool "6.1.0" + yargs "16.2.0" + yargs-parser "20.2.4" yargs-unparser "2.0.0" +mock-fs@^4.1.0: + version "4.14.0" + resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.14.0.tgz#ce5124d2c601421255985e6e94da80a7357b1b18" + integrity sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw== + module-definition@^3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/module-definition/-/module-definition-3.3.1.tgz#fedef71667713e36988b93d0626a4fe7b35aebfc" @@ -6014,26 +6978,81 @@ ms@2.0.0: resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= +ms@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +ms@2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multibase@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.7.0.tgz#1adfc1c50abe05eefeb5091ac0c2728d6b84581b" + integrity sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg== + dependencies: + base-x "^3.0.8" + buffer "^5.5.0" + +multibase@~0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.6.1.tgz#b76df6298536cc17b9f6a6db53ec88f85f8cc12b" + integrity sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw== + dependencies: + base-x "^3.0.8" + buffer "^5.5.0" + +multicodec@^0.5.5: + version "0.5.7" + resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-0.5.7.tgz#1fb3f9dd866a10a55d226e194abba2dcc1ee9ffd" + integrity sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA== + dependencies: + varint "^5.0.0" + +multicodec@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-1.0.4.tgz#46ac064657c40380c28367c90304d8ed175a714f" + integrity sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg== + dependencies: + buffer "^5.6.0" + varint "^5.0.0" + +multihashes@^0.4.15, multihashes@~0.4.15: + version "0.4.21" + resolved "https://registry.yarnpkg.com/multihashes/-/multihashes-0.4.21.tgz#dc02d525579f334a7909ade8a122dabb58ccfcb5" + integrity sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw== + dependencies: + buffer "^5.5.0" + multibase "^0.7.0" + varint "^5.0.0" + mute-stream@0.0.8, mute-stream@~0.0.4: version "0.0.8" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -nanoid@3.1.12: - version "3.1.12" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.12.tgz#6f7736c62e8d39421601e4a0c77623a97ea69654" - integrity sha512-1qstj9z5+x491jfiC4Nelk+f8XBad7LN20PmyWINJEMRSf3wcAjAWysw1qaA8z6NSKe2sjq1hRSDpBH5paCb6A== +nano-json-stream-parser@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz#0cc8f6d0e2b622b479c40d499c46d64b755c6f5f" + integrity sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18= -nanoid@^3.1.20: +nanoid@3.1.20: version "3.1.20" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.20.tgz#badc263c6b1dcf14b71efaa85f6ab4c1d6cfc788" integrity sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw== +nanoid@^3.1.22: + version "3.1.22" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.22.tgz#b35f8fb7d151990a8aebd5aa5015c03cf726f844" + integrity sha512-/2ZUaJX2ANuLtTvqTlgqBQNJoQO398KyJgZloL0PZkC0dpysjncRUPsFe3DUPzz/y3h+u7C46np8RMuvF3jsSQ== + nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" @@ -6061,6 +7080,11 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + neo-async@^2.6.0: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" @@ -6076,6 +7100,11 @@ nice-try@^1.0.4: resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== +node-addon-api@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" + integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== + node-fetch@^2.6.0, node-fetch@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" @@ -6097,9 +7126,9 @@ node-modules-regexp@^1.0.0: integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= node-notifier@^8.0.0: - version "8.0.1" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.1.tgz#f86e89bbc925f2b068784b31f382afdc6ca56be1" - integrity sha512-BvEXF+UmsnAfYfoapKM9nGxnP+Wn7P91YfXmrKnfcYCx6VBeoN5Ez5Ogck6I8Bi5k4RlpqRYaw75pAwzX9OphA== + version "8.0.2" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.2.tgz#f3167a38ef0d2c8a866a83e318c1ba0efeb702c5" + integrity sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg== dependencies: growly "^1.3.0" is-wsl "^2.2.0" @@ -6108,10 +7137,10 @@ node-notifier@^8.0.0: uuid "^8.3.0" which "^2.0.2" -node-releases@^1.1.70: - version "1.1.70" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.70.tgz#66e0ed0273aa65666d7fe78febe7634875426a08" - integrity sha512-Slf2s69+2/uAD79pVVQo8uSiC34+g8GWY8UH2Qtqv34ZfhYrxpYpfzs9Js9d6O0mbDmALuxaTlplnBTnSELcrw== +node-releases@^1.1.71: + version "1.1.71" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb" + integrity sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg== node-source-walk@^4.0.0, node-source-walk@^4.2.0: version "4.2.0" @@ -6176,6 +7205,14 @@ number-is-nan@^1.0.0: resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= +number-to-bn@1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" + integrity sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA= + dependencies: + bn.js "4.11.6" + strip-hex-prefix "1.0.0" + nwsapi@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" @@ -6186,7 +7223,7 @@ oauth-sign@~0.9.0: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: +object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= @@ -6201,9 +7238,9 @@ object-copy@^0.1.0: kind-of "^3.0.3" object-inspect@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" - integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== + version "1.10.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.10.2.tgz#b6385a3e2b7cae0b5eafcf90cddf85d128767f30" + integrity sha512-gz58rdPpadwztRrPjZE9DZLOABUpTGdcANUgOwBFO1C+HZZhePoP83M65WGDmbpwFYJSWqavbl4SgDn4k8RYTA== object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" @@ -6227,7 +7264,7 @@ object.assign@^4.1.0, object.assign@^4.1.2: has-symbols "^1.0.1" object-keys "^1.1.1" -object.entries@^1.1.2: +object.entries@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.3.tgz#c601c7f168b62374541a07ddbd3e2d5e4f7711a6" integrity sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg== @@ -6237,14 +7274,14 @@ object.entries@^1.1.2: es-abstract "^1.18.0-next.1" has "^1.0.3" -object.fromentries@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.3.tgz#13cefcffa702dc67750314a3305e8cb3fad1d072" - integrity sha512-IDUSMXs6LOSJBWE++L0lzIbSqHl9KDCfff2x/JSEIDtEUavUnyMYC2ZGay/04Zq4UT8lvd4xNhU4/YHKibAOlw== +object.fromentries@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.4.tgz#26e1ba5c4571c5c6f0890cef4473066456a120b8" + integrity sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ== dependencies: - call-bind "^1.0.0" + call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" + es-abstract "^1.18.0-next.2" has "^1.0.3" object.pick@^1.3.0: @@ -6254,16 +7291,30 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" -object.values@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.2.tgz#7a2015e06fcb0f546bd652486ce8583a4731c731" - integrity sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag== +object.values@^1.1.1, object.values@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.3.tgz#eaa8b1e17589f02f698db093f7c62ee1699742ee" + integrity sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw== dependencies: - call-bind "^1.0.0" + call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" + es-abstract "^1.18.0-next.2" has "^1.0.3" +oboe@2.1.5: + version "2.1.5" + resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.5.tgz#5554284c543a2266d7a38f17e073821fbde393cd" + integrity sha1-VVQoTFQ6ImbXo48X4HOCH73jk80= + dependencies: + http-https "^1.0.0" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -6278,13 +7329,6 @@ onetime@^5.1.0: dependencies: mimic-fn "^2.1.0" -onigasm@^2.2.5: - version "2.2.5" - resolved "https://registry.yarnpkg.com/onigasm/-/onigasm-2.2.5.tgz#cc4d2a79a0fa0b64caec1f4c7ea367585a676892" - integrity sha512-F+th54mPc0l1lp1ZcFMyL/jTs2Tlq4SqIHKIXGZOR/VkHkF9A7Fr5rRr5+ZG/lWeRsyrClLYRq7s/yFQ/XhWCA== - dependencies: - lru-cache "^5.1.1" - optionator@^0.8.1: version "0.8.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" @@ -6324,16 +7368,17 @@ ora@^4.0.5: wcwidth "^1.0.1" ora@^5.1.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/ora/-/ora-5.3.0.tgz#fb832899d3a1372fe71c8b2c534bbfe74961bb6f" - integrity sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g== + version "5.4.0" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.0.tgz#42eda4855835b9cd14d33864c97a3c95a3f56bf4" + integrity sha512-1StwyXQGoU6gdjYkyVcqOLnVlbKj+6yPNNOxJVgpt9t4eksKjiriiHuxktLYkgllwk+D6MbC4ihH84L1udRXPg== dependencies: - bl "^4.0.3" + bl "^4.1.0" chalk "^4.1.0" cli-cursor "^3.1.0" cli-spinners "^2.5.0" is-interactive "^1.0.0" - log-symbols "^4.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" strip-ansi "^6.0.0" wcwidth "^1.0.1" @@ -6342,6 +7387,11 @@ os-tmpdir@~1.0.2: resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= +p-cancelable@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa" + integrity sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw== + p-cancelable@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" @@ -6406,6 +7456,13 @@ p-locate@^5.0.0: dependencies: p-limit "^3.0.2" +p-timeout@^1.1.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-1.2.1.tgz#5eb3b353b7fce99f101a1038880bb054ebbea386" + integrity sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y= + dependencies: + p-finally "^1.0.0" + p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" @@ -6433,6 +7490,22 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" +parse-asn1@^5.0.0, parse-asn1@^5.1.5: + version "5.1.6" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" + integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== + dependencies: + asn1.js "^5.2.0" + browserify-aes "^1.0.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + +parse-headers@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.3.tgz#5e8e7512383d140ba02f0c7aa9f49b4399c92515" + integrity sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA== + parse-json@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" @@ -6455,10 +7528,15 @@ parse-ms@^2.1.0: resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-2.1.0.tgz#348565a753d4391fa524029956b172cb7753097d" integrity sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA== -parse5@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" - integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== +parse5@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== pascalcase@^0.1.1: version "0.1.1" @@ -6500,6 +7578,11 @@ path-parse@^1.0.6: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + path-type@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" @@ -6512,20 +7595,31 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -pathval@^1.1.0: +pathval@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== +pbkdf2@^3.0.17, pbkdf2@^3.0.3: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" + integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: - version "2.2.2" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" - integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.3.tgz#465547f359ccc206d3c48e46a1bcb89bf7ee619d" + integrity sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg== pify@^2.0.0: version "2.3.0" @@ -6595,13 +7689,11 @@ posix-character-classes@^0.1.0: integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= postcss-selector-parser@^6.0.2: - version "6.0.4" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz#56075a1380a04604c38b063ea7767a129af5c2b3" - integrity sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw== + version "6.0.5" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.5.tgz#042d74e137db83e6f294712096cb413f5aa612c4" + integrity sha512-aFYPoYmXbZ1V6HZaSvat08M97A8HqO6Pjz+PiNpw/DhuRrC72XWAdp3hL6wusDCN31sSmcZyMGa2hZEuX+Xfhg== dependencies: cssesc "^3.0.0" - indexes-of "^1.0.1" - uniq "^1.0.1" util-deprecate "^1.0.2" postcss-values-parser@^2.0.1: @@ -6623,18 +7715,18 @@ postcss@^7.0.14: supports-color "^6.1.0" postcss@^8.1.7: - version "8.2.6" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.6.tgz#5d69a974543b45f87e464bc4c3e392a97d6be9fe" - integrity sha512-xpB8qYxgPuly166AGlpRjUdEYtmOWx2iCwGmrv4vqZL9YPVviDVPZPRXxnXr6xPZOdxQ9lp3ZBFCRgWJ7LE3Sg== + version "8.2.13" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.13.tgz#dbe043e26e3c068e45113b1ed6375d2d37e2129f" + integrity sha512-FCE5xLH+hjbzRdpbRb1IMCvPv9yZx2QnDarBEYSN0N0HYk+TcXsEhwdFcFb+SRWOKzKGErhIEbBK2ogyLdTtfQ== dependencies: - colorette "^1.2.1" - nanoid "^3.1.20" + colorette "^1.2.2" + nanoid "^3.1.22" source-map "^0.6.1" precinct@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/precinct/-/precinct-7.0.0.tgz#37334165dee5d28f469202a910787cb2fb6a9186" - integrity sha512-ayTxq+fdaoowk4HvdfBs7bChg4ToqdRxjZqy3611dppelGF8UHQZrLta3GolRLoHSJQtKfBGA35IvW8K3tRR7A== + version "7.1.0" + resolved "https://registry.yarnpkg.com/precinct/-/precinct-7.1.0.tgz#a0311e0b59029647eaf57c2d30b8efa9c85d129a" + integrity sha512-I1RkW5PX51/q6Xl39//D7x9NgaKNGHpR5DCNaoxP/b2+KbzzXDNhauJUMV17KSYkJA41CSpwYUPRtRoNxbshWA== dependencies: commander "^2.20.3" debug "^4.3.1" @@ -6660,7 +7752,7 @@ prelude-ls@~1.1.2: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= -prepend-http@^1.0.0: +prepend-http@^1.0.0, prepend-http@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= @@ -6702,6 +7794,11 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + progress-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/progress-stream/-/progress-stream-2.0.0.tgz#fac63a0b3d11deacbb0969abcc93b214bce19ed5" @@ -6710,15 +7807,15 @@ progress-stream@^2.0.0: speedometer "~1.0.0" through2 "~2.0.3" -progress@^2.0.0, progress@^2.0.3: +progress@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== prompts@^2.0.1: - version "2.4.0" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.0.tgz#4aa5de0723a231d1ee9121c40fdf663df73f61d7" - integrity sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ== + version "2.4.1" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.1.tgz#befd3b1195ba052f9fd2fde8a486c4e82ee77f61" + integrity sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ== dependencies: kleur "^3.0.3" sisteransi "^1.0.5" @@ -6732,16 +7829,36 @@ prop-types@^15.7.2: object-assign "^4.1.1" react-is "^16.8.1" +proxy-addr@~2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" + integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.9.1" + pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= -psl@^1.1.28: +psl@^1.1.28, psl@^1.1.33: version "1.8.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + pump@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" @@ -6759,6 +7876,11 @@ pumpify@^2.0.1: inherits "^2.0.3" pump "^3.0.0" +punycode@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" + integrity sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0= + punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" @@ -6771,6 +7893,11 @@ pupa@^2.1.1: dependencies: escape-goat "^2.0.0" +qs@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== + qs@~6.5.2: version "6.5.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" @@ -6784,18 +7911,50 @@ query-string@^4.1.0: object-assign "^4.1.0" strict-uri-encode "^1.0.0" +query-string@^5.0.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" + integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== + dependencies: + decode-uri-component "^0.2.0" + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + queue-microtask@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.2.tgz#abf64491e6ecf0f38a6502403d4cda04f372dfd3" - integrity sha512-dB15eXv3p2jDlbOiNLyMabYg1/sXvppd8DP2J3EOCQ0AkuSXCW2tP7mnVouVLJKgUMY6yP0kcQDVpLCN13h4Xg== + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -randombytes@^2.1.0: +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: safe-buffer "^5.1.0" +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== + dependencies: + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" + unpipe "1.0.0" + rc@^1.2.7, rc@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" @@ -6812,9 +7971,9 @@ react-is@^16.8.1: integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== react-is@^17.0.1: - version "17.0.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.1.tgz#5b3531bd76a645a4c9fb6e693ed36419e3301339" - integrity sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA== + version "17.0.2" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" + integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== read-pkg-up@^2.0.0: version "2.0.0" @@ -6936,7 +8095,7 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexp.prototype.flags@^1.3.0: +regexp.prototype.flags@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26" integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA== @@ -6981,9 +8140,9 @@ regjsgen@^0.5.1: integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== regjsparser@^0.6.4: - version "0.6.7" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.7.tgz#c00164e1e6713c2e3ee641f1701c4b7aa0a7f86c" - integrity sha512-ib77G0uxsA2ovgiYbCVGx4Pv3PSttAx2vIwidqQzbL2U5S4Q+j00HdSAneSBuyVcMvEnTXMjiGgB+DlXozVhpQ== + version "0.6.9" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.9.tgz#b489eef7c9a2ce43727627011429cf833a7183e6" + integrity sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ== dependencies: jsesc "~0.5.0" @@ -6998,9 +8157,9 @@ remove-trailing-separator@^1.0.1: integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= repeat-element@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" - integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + version "1.1.4" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" + integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== repeat-string@^1.6.1: version "1.6.1" @@ -7014,7 +8173,7 @@ request-promise-core@1.1.4: dependencies: lodash "^4.17.19" -request-promise-native@^1.0.8: +request-promise-native@^1.0.9: version "1.0.9" resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== @@ -7023,7 +8182,7 @@ request-promise-native@^1.0.8: stealthy-require "^1.1.1" tough-cookie "^2.3.3" -request@^2.88.2: +request@^2.79.0, request@^2.88.2: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== @@ -7109,7 +8268,7 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@^1.1.6, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.13.1, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.19.0, resolve@^1.3.2: +resolve@^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.18.1, resolve@^1.19.0, resolve@^1.3.2: version "1.20.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== @@ -7117,6 +8276,14 @@ resolve@^1.1.6, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.13.1, resolve@^1.17 is-core-module "^2.2.0" path-parse "^1.0.6" +resolve@^2.0.0-next.3: + version "2.0.0-next.3" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.3.tgz#d41016293d4a8586a39ca5d9b5f15cbea1f55e46" + integrity sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q== + dependencies: + is-core-module "^2.2.0" + path-parse "^1.0.6" + responselike@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" @@ -7149,7 +8316,7 @@ rimraf@^3.0.0, rimraf@^3.0.2: dependencies: glob "^7.1.3" -ripemd160@^2.0.1: +ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== @@ -7157,6 +8324,13 @@ ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" +rlp@^2.2.3: + version "2.2.6" + resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.6.tgz#c80ba6266ac7a483ef1e69e8e2f056656de2fb2c" + integrity sha512-HAfAmL6SDYNWPUOJNrM500x4Thn4PZsEy5pijPh40U9WfNk0z15hUYzO9xVIMAdIHdFtD8CBDHd75Td1g36Mjg== + dependencies: + bn.js "^4.11.1" + rsvp@^4.8.4: version "4.8.5" resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" @@ -7174,23 +8348,23 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -rxjs@^6.6.0, rxjs@^6.6.3: - version "6.6.3" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552" - integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ== +rxjs@^6.6.0, rxjs@^6.6.7: + version "6.6.7" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" + integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== dependencies: tslib "^1.9.0" -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" @@ -7225,18 +8399,32 @@ sass-lookup@^3.0.0: dependencies: commander "^2.16.0" -saxes@^5.0.0: +saxes@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== dependencies: xmlchars "^2.2.0" +scrypt-js@^3.0.0, scrypt-js@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" + integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== + scryptsy@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/scryptsy/-/scryptsy-2.1.0.tgz#8d1e8d0c025b58fdd25b6fa9a0dc905ee8faa790" integrity sha512-1CdSqHQowJBnMAFyPEBRfqag/YP9OF394FV+4YREIJX4ljD7OxvQRDayyoyyCk+senRjSkP6VnUNQmVQqB6g7w== +secp256k1@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.2.tgz#15dd57d0f0b9fdb54ac1fa1694f40e5e9a54f4a1" + integrity sha512-UDar4sKvWAksIlfX3xIaQReADn+WFnHvbVujpcbr+9Sf/69odMwy2MUsz5CKLQgX9nsIyrjuxL2imVyoNHa3fg== + dependencies: + elliptic "^6.5.2" + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + semver-diff@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" @@ -7244,7 +8432,7 @@ semver-diff@^3.1.1: dependencies: semver "^6.3.0" -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -7254,18 +8442,37 @@ semver@7.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== -semver@^6.0.0, semver@^6.1.0, semver@^6.2.0, semver@^6.3.0: +semver@^6.0.0, semver@^6.1.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== semver@^7.2.1, semver@^7.3.2, semver@^7.3.4: - version "7.3.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" - integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== + version "7.3.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== dependencies: lru-cache "^6.0.0" +send@0.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" + on-finished "~2.3.0" + range-parser "~1.2.1" + statuses "~1.5.0" + serialize-javascript@5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" @@ -7273,6 +8480,27 @@ serialize-javascript@5.0.1: dependencies: randombytes "^2.1.0" +serve-static@1.14.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.1" + +servify@^0.1.12: + version "0.1.12" + resolved "https://registry.yarnpkg.com/servify/-/servify-0.1.12.tgz#142ab7bee1f1d033b66d0707086085b17c06db95" + integrity sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw== + dependencies: + body-parser "^1.16.0" + cors "^2.8.1" + express "^4.14.0" + request "^2.79.0" + xhr "^2.3.3" + set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -7288,7 +8516,17 @@ set-value@^2.0.0, set-value@^2.0.1: is-plain-object "^2.0.3" split-string "^3.0.1" -sha.js@^2.4.0: +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + +sha.js@^2.4.0, sha.js@^2.4.8: version "2.4.11" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== @@ -7296,6 +8534,13 @@ sha.js@^2.4.0: inherits "^2.0.1" safe-buffer "^5.0.1" +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -7334,15 +8579,7 @@ shellwords@^0.1.1: resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== -shiki@^0.9.2: - version "0.9.2" - resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.9.2.tgz#b9e660b750d38923275765c4dc4c92b23877b115" - integrity sha512-BjUCxVbxMnvjs8jC4b+BQ808vwjJ9Q8NtLqPwXShZ307HdXiDFYP968ORSVfaTNNSWYDBYdMnVKJ0fYNsoZUBA== - dependencies: - onigasm "^2.2.5" - vscode-textmate "^5.2.0" - -side-channel@^1.0.3, side-channel@^1.0.4: +side-channel@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== @@ -7361,6 +8598,15 @@ simple-concat@^1.0.0: resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== +simple-get@^2.7.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.8.1.tgz#0e22e91d4575d87620620bc91308d57a77f44b5d" + integrity sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw== + dependencies: + decompress-response "^3.3.0" + once "^1.3.1" + simple-concat "^1.0.0" + simple-get@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.0.tgz#73fa628278d21de83dadd5512d2cc1f4872bd675" @@ -7550,6 +8796,11 @@ static-extend@^0.1.1: define-property "^0.2.5" object-copy "^0.1.0" +"statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + stealthy-require@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" @@ -7566,9 +8817,9 @@ strict-uri-encode@^1.0.0: integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= string-length@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.1.tgz#4a973bf31ef77c4edbceadd6af2611996985f8a1" - integrity sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw== + version "4.0.2" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== dependencies: char-regex "^1.0.2" strip-ansi "^6.0.0" @@ -7590,7 +8841,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" -string-width@^3.0.0, string-width@^3.1.0: +string-width@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== @@ -7600,41 +8851,41 @@ string-width@^3.0.0, string-width@^3.1.0: strip-ansi "^5.1.0" string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" - integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + version "4.2.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" + integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== dependencies: emoji-regex "^8.0.0" is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" -string.prototype.matchall@^4.0.2: - version "4.0.3" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.3.tgz#24243399bc31b0a49d19e2b74171a15653ec996a" - integrity sha512-OBxYDA2ifZQ2e13cP82dWFMaCV9CGF8GzmN4fljBVw5O5wep0lu4gacm1OL6MjROoUnB8VbkWRThqkV2YFLNxw== +string.prototype.matchall@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.4.tgz#608f255e93e072107f5de066f81a2dfb78cf6b29" + integrity sha512-pknFIWVachNcyqRfaQSeu/FUfpvJTe4uskUSZ9Wc1RijsPuzbZ8TyYT8WCNnntCjUEqQ3vUHMAfVj2+wLAisPQ== dependencies: - call-bind "^1.0.0" + call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" + es-abstract "^1.18.0-next.2" has-symbols "^1.0.1" - internal-slot "^1.0.2" - regexp.prototype.flags "^1.3.0" - side-channel "^1.0.3" + internal-slot "^1.0.3" + regexp.prototype.flags "^1.3.1" + side-channel "^1.0.4" -string.prototype.trimend@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz#a22bd53cca5c7cf44d7c9d5c732118873d6cd18b" - integrity sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw== +string.prototype.trimend@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" + integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== dependencies: - call-bind "^1.0.0" + call-bind "^1.0.2" define-properties "^1.1.3" -string.prototype.trimstart@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz#9b4cb590e123bb36564401d59824298de50fd5aa" - integrity sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg== +string.prototype.trimstart@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" + integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== dependencies: - call-bind "^1.0.0" + call-bind "^1.0.2" define-properties "^1.1.3" string_decoder@^1.1.1: @@ -7674,7 +8925,7 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" -strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: +strip-ansi@^5.1.0: version "5.2.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== @@ -7708,6 +8959,13 @@ strip-final-newline@^2.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== +strip-hex-prefix@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" + integrity sha1-DF8VX+8RUTczd96du1iNoFUA428= + dependencies: + is-hex-prefixed "1.0.0" + strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" @@ -7738,10 +8996,10 @@ stylus-lookup@^3.0.1: commander "^2.8.1" debug "^4.1.0" -supports-color@7.2.0, supports-color@^7.0.0, supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== +supports-color@8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== dependencies: has-flag "^4.0.0" @@ -7759,34 +9017,74 @@ supports-color@^6.1.0: dependencies: has-flag "^3.0.0" +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + supports-hyperlinks@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47" - integrity sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA== + version "2.2.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" + integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== dependencies: has-flag "^4.0.0" supports-color "^7.0.0" +swarm-js@^0.1.40: + version "0.1.40" + resolved "https://registry.yarnpkg.com/swarm-js/-/swarm-js-0.1.40.tgz#b1bc7b6dcc76061f6c772203e004c11997e06b99" + integrity sha512-yqiOCEoA4/IShXkY3WKwP5PvZhmoOOD8clsKA7EEcRILMkTEYHCQ21HDCAcVpmIxZq4LyZvWeRJ6quIyHk1caA== + dependencies: + bluebird "^3.5.0" + buffer "^5.0.5" + eth-lib "^0.1.26" + fs-extra "^4.0.2" + got "^7.1.0" + mime-types "^2.1.16" + mkdirp-promise "^5.0.1" + mock-fs "^4.1.0" + setimmediate "^1.0.5" + tar "^4.0.2" + xhr-request "^1.0.1" + symbol-tree@^3.2.4: version "3.2.4" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== table@^6.0.4: - version "6.0.7" - resolved "https://registry.yarnpkg.com/table/-/table-6.0.7.tgz#e45897ffbcc1bcf9e8a87bf420f2c9e5a7a52a34" - integrity sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g== - dependencies: - ajv "^7.0.2" - lodash "^4.17.20" + version "6.6.0" + resolved "https://registry.yarnpkg.com/table/-/table-6.6.0.tgz#905654b79df98d9e9a973de1dd58682532c40e8e" + integrity sha512-iZMtp5tUvcnAdtHpZTWLPF0M7AgiQsURR2DwmxnJwSy8I3+cY+ozzVvYha3BOLG2TB+L0CqjIz+91htuj6yCXg== + dependencies: + ajv "^8.0.1" + lodash.clonedeep "^4.5.0" + lodash.flatten "^4.4.0" + lodash.truncate "^4.4.2" slice-ansi "^4.0.0" string-width "^4.2.0" + strip-ansi "^6.0.0" tapable@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.0.tgz#5c373d281d9c672848213d0e037d1c4165ab426b" integrity sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw== +tar@^4.0.2: + version "4.4.13" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" + integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== + dependencies: + chownr "^1.1.1" + fs-minipass "^1.2.5" + minipass "^2.8.6" + minizlib "^1.2.1" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.3" + temp@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/temp/-/temp-0.4.0.tgz#671ad63d57be0fe9d7294664b3fc400636678a60" @@ -7832,6 +9130,11 @@ through@^2.3.6: resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= +timed-out@^4.0.0, timed-out@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" + integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= + tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -7886,6 +9189,11 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + tough-cookie@^2.3.3, tough-cookie@~2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" @@ -7894,14 +9202,14 @@ tough-cookie@^2.3.3, tough-cookie@~2.5.0: psl "^1.1.28" punycode "^2.1.1" -tough-cookie@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2" - integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg== +tough-cookie@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" + integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== dependencies: - ip-regex "^2.1.0" - psl "^1.1.28" + psl "^1.1.33" punycode "^2.1.1" + universalify "^0.1.2" tr46@^2.0.2: version "2.0.2" @@ -7917,7 +9225,7 @@ trim-repeated@^1.0.0: dependencies: escape-string-regexp "^1.0.2" -ts-node@^9.0.0: +ts-node@^9.1.1: version "9.1.1" resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-9.1.1.tgz#51a9a450a3e959401bda5f004a72d54b936d376d" integrity sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg== @@ -7939,15 +9247,15 @@ tsconfig-paths@^3.9.0: minimist "^1.2.0" strip-bom "^3.0.0" -tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: +tslib@^1.13.0, tslib@^1.8.1, tslib@^1.9.0: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslint@^5.20.1: - version "5.20.1" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.20.1.tgz#e401e8aeda0152bc44dd07e614034f3f80c67b7d" - integrity sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg== +tslint@^6.1.3: + version "6.1.3" + resolved "https://registry.yarnpkg.com/tslint/-/tslint-6.1.3.tgz#5c23b2eccc32487d5523bd3a470e9aa31789d904" + integrity sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg== dependencies: "@babel/code-frame" "^7.0.0" builtin-modules "^1.1.1" @@ -7957,10 +9265,10 @@ tslint@^5.20.1: glob "^7.1.1" js-yaml "^3.13.1" minimatch "^3.0.4" - mkdirp "^0.5.1" + mkdirp "^0.5.3" resolve "^1.3.2" semver "^5.3.0" - tslib "^1.8.0" + tslib "^1.13.0" tsutils "^2.29.0" tsutils@^2.29.0: @@ -7971,9 +9279,9 @@ tsutils@^2.29.0: tslib "^1.8.1" tsutils@^3.17.1: - version "3.20.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.20.0.tgz#ea03ea45462e146b53d70ce0893de453ff24f698" - integrity sha512-RYbuQuvkhuqVeXweWT3tJLKOEJ/UUw9GjNEZGWdrLLlM+611o1gwLHBpxoFJKKl25fLprp2eVthtKs5JOrNeXg== + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== dependencies: tslib "^1.8.1" @@ -8013,16 +9321,16 @@ type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.5: resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== -type-fest@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" - integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== - type-fest@^0.20.2: version "0.20.2" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + type-fest@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" @@ -8033,15 +9341,23 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== +type-is@~1.6.17, type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + type@^1.0.1: version "1.2.0" resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== type@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/type/-/type-2.1.0.tgz#9bdc22c648cf8cf86dd23d32336a41cfb6475e3f" - integrity sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA== + version "2.5.0" + resolved "https://registry.yarnpkg.com/type/-/type-2.5.0.tgz#0a2e78c2e77907b252abe5f298c1b01c63f0db3d" + integrity sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw== typedarray-to-buffer@^3.1.5: version "3.1.5" @@ -8050,54 +9366,40 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -typedoc-default-themes@^0.12.7: - version "0.12.7" - resolved "https://registry.yarnpkg.com/typedoc-default-themes/-/typedoc-default-themes-0.12.7.tgz#d44f68d40a3e90a19b5ea7be4cc6ed949afe768d" - integrity sha512-0XAuGEqID+gon1+fhi4LycOEFM+5Mvm2PjwaiVZNAzU7pn3G2DEpsoXnFOPlLDnHY6ZW0BY0nO7ur9fHOFkBLQ== - -typedoc-plugin-markdown@^3.4.5: - version "3.4.5" - resolved "https://registry.yarnpkg.com/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.4.5.tgz#d32aad06a9b93946a31ea68438cd02620c12e857" - integrity sha512-m24mSCGcEk6tQDCHIG4TM3AS2a7e9NtC/YdO0mefyF+z1/bKYnZ/oQswLZmm2zBngiLIoKX6eNdufdBpQNPtrA== - dependencies: - handlebars "^4.7.6" - -typedoc-plugin-no-inherit@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/typedoc-plugin-no-inherit/-/typedoc-plugin-no-inherit-1.2.0.tgz#7f73809c04cb29c03afe5eea356534968cb717a9" - integrity sha512-jAAslwDbm5sVpA6EQIg5twYctRi/bnT9TgZ5SwbrNpCD5xCIIylPRX9KxIoi1RJliVgCIAxWbSUzzLKGwJCkeA== - -typedoc@^0.20.23: - version "0.20.24" - resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.20.24.tgz#9dd1cb32e44823a5ebbeb54c9b84af85286c5941" - integrity sha512-TadOYtcw8agrk7WTZlXUcct4jLZZcGcYe3xbmARkI+rBpXI6Mw+0P8oUo13+9oFreQvK5zZgMem4YEi7lCXLIw== - dependencies: - colors "^1.4.0" - fs-extra "^9.1.0" - handlebars "^4.7.6" - lodash "^4.17.20" - lunr "^2.3.9" - marked "^2.0.0" - minimatch "^3.0.0" - progress "^2.0.3" - shelljs "^0.8.4" - shiki "^0.9.2" - typedoc-default-themes "^0.12.7" - typescript@^3.9.5, typescript@^3.9.7: version "3.9.9" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.9.tgz#e69905c54bc0681d0518bd4d587cc6f2d0b1a674" integrity sha512-kdMjTiekY+z/ubJCATUPlRDl39vXYiMV9iyeMuEuXZh2we6zz80uovNN2WlAxmmdE/Z/YQe+EbOEXB5RHEED3w== -typescript@^4.1.3: - version "4.1.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.1.5.tgz#123a3b214aaff3be32926f0d8f1f6e704eb89a72" - integrity sha512-6OSu9PTIzmn9TCDiovULTnET6BgXtDYL4Gg4szY+cGsc3JP1dQL8qvE8kShTRx1NIw4Q9IBHlwODjkjWEtMUyA== +typescript@^4.2.4: + version "4.2.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.2.4.tgz#8610b59747de028fda898a8aef0e103f156d0961" + integrity sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg== uglify-js@^3.1.4: - version "3.12.7" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.12.7.tgz#be4f06142a67bd91ef868b4e111dc241e151bff3" - integrity sha512-SIZhkoh+U/wjW+BHGhVwE9nt8tWJspncloBcFapkpGRwNPqcH8pzX36BXe3TPBjzHWPMUZotpCigak/udWNr1Q== + version "3.13.4" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.13.4.tgz#592588bb9f47ae03b24916e2471218d914955574" + integrity sha512-kv7fCkIXyQIilD5/yQy8O+uagsYIOt5cZvs890W40/e/rvjMSzJw81o9Bg0tkURxzZBROtDQhW2LFjOGoK3RZw== + +ultron@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" + integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== + +unbox-primitive@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" + integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== + dependencies: + function-bind "^1.1.1" + has-bigints "^1.0.1" + has-symbols "^1.0.2" + which-boxed-primitive "^1.0.2" + +underscore@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961" + integrity sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg== unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" @@ -8149,7 +9451,7 @@ universal-user-agent@^6.0.0: resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== -universalify@^0.1.0: +universalify@^0.1.0, universalify@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== @@ -8159,6 +9461,11 @@ universalify@^2.0.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" @@ -8204,6 +9511,13 @@ urix@^0.1.0: resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= +url-parse-lax@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" + integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= + dependencies: + prepend-http "^1.0.1" + url-parse-lax@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" @@ -8211,6 +9525,16 @@ url-parse-lax@^3.0.0: dependencies: prepend-http "^2.0.0" +url-set-query@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/url-set-query/-/url-set-query-1.0.0.tgz#016e8cfd7c20ee05cafe7795e892bd0702faa339" + integrity sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk= + +url-to-options@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" + integrity sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k= + use@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" @@ -8223,6 +9547,11 @@ utf-8-validate@^5.0.2: dependencies: node-gyp-build "^4.2.0" +utf8@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" + integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== + util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -8233,6 +9562,28 @@ util-extend@^1.0.1: resolved "https://registry.yarnpkg.com/util-extend/-/util-extend-1.0.3.tgz#a7c216d267545169637b3b6edc6ca9119e2ff93f" integrity sha1-p8IW0mdUUWljeztu3GypEZ4v+T8= +util@^0.12.0: + version "0.12.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.3.tgz#971bb0292d2cc0c892dab7c6a5d37c2bec707888" + integrity sha512-I8XkoQwE+fPQEhy9v012V+TSdH2kp9ts29i20TaaDUXsg7x/onePbhFJUExBfv/2ay1ZOp/Vsm3nDlmnFGSAog== + dependencies: + inherits "^2.0.3" + is-arguments "^1.0.4" + is-generator-function "^1.0.7" + is-typed-array "^1.1.3" + safe-buffer "^5.1.2" + which-typed-array "^1.1.2" + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + +uuid@3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" + integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== + uuid@^3.3.2: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" @@ -8244,14 +9595,14 @@ uuid@^8.3.0: integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== v8-compile-cache@^2.0.3: - version "2.2.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132" - integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q== + version "2.3.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== v8-to-istanbul@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.1.0.tgz#5b95cef45c0f83217ec79f8fc7ee1c8b486aee07" - integrity sha512-uXUVqNUCLa0AH1vuVxzi+MI4RfxEOKt9pBgKwHbgH7st8Kv2P1m+jvWNnektzBh5QShF3ODgKmUFCf38LnVz1g== + version "7.1.1" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.1.1.tgz#04bfd1026ba4577de5472df4f5e89af49de5edda" + integrity sha512-p0BB09E5FRjx0ELN6RgusIPsSPhtgexSRcKETybEs6IGOTXJSZqfwxp7r//55nnu0f1AxltY5VvdVqy2vZf9AA== dependencies: "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^1.6.0" @@ -8265,6 +9616,16 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" +varint@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/varint/-/varint-5.0.2.tgz#5b47f8a947eb668b848e034dcfa87d0ff8a7f7a4" + integrity sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow== + +vary@^1, vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + verror@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" @@ -8274,11 +9635,6 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" -vscode-textmate@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-5.2.0.tgz#01f01760a391e8222fe4f33fbccbd1ad71aed74e" - integrity sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ== - vue-template-es2015-compiler@^1.9.0: version "1.9.1" resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825" @@ -8317,6 +9673,246 @@ wcwidth@^1.0.1: dependencies: defaults "^1.0.3" +web3-bzz@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.3.5.tgz#f181a1319d9f867f4183b147e7aebd21aecff4a0" + integrity sha512-XiEUAbB1uKm/agqfwBsCW8fbw+sma85TfwuDpdcy591vinVk0S9TfWgLxro6v1KJ6nSELySIbKGbAJbh2GSyxw== + dependencies: + "@types/node" "^12.12.6" + got "9.6.0" + swarm-js "^0.1.40" + underscore "1.9.1" + +web3-core-helpers@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.3.5.tgz#9f0ff7ed40befb9f691986e66fd94c828c7b1b13" + integrity sha512-HYh3ix5FjysgT0jyzD8s/X5ym0b4BGU7I2QtuBiydMnE0mQEWy7GcT9XKpTySA8FTOHHIAQYvQS07DN/ky3UzA== + dependencies: + underscore "1.9.1" + web3-eth-iban "1.3.5" + web3-utils "1.3.5" + +web3-core-method@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.3.5.tgz#995fe12f3b364469e5208a88d72736327b231faa" + integrity sha512-hCbmgQ+At6OTuaNGAdjXMsCr4eUCmp9yGKSuaB5HdkNVDpqFso4HHjVxcjNrTyJp3OZnyjKBzQzK1ZWLpLl84Q== + dependencies: + "@ethersproject/transactions" "^5.0.0-beta.135" + underscore "1.9.1" + web3-core-helpers "1.3.5" + web3-core-promievent "1.3.5" + web3-core-subscriptions "1.3.5" + web3-utils "1.3.5" + +web3-core-promievent@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.3.5.tgz#33c34811cc4e2987c56e5192f9a014368c42ca39" + integrity sha512-K0j8x3ZJr0eAyNvyUCxOUsSTd4hco0/9nxxlyOuijcsa6YV8l9NL6eqhniWbSyxCJT8ka5Mb7yAiUZe69EDLBQ== + dependencies: + eventemitter3 "4.0.4" + +web3-core-requestmanager@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.3.5.tgz#c452ea85fcffdf5b82b84c250707b638790d0e75" + integrity sha512-9l294U3Ga8qmvv8E37BqjQREfMs+kFnkU3PY28g9DZGYzKvl3V1dgDYqxyrOBdCFhc7rNSpHdgC4PrVHjouspg== + dependencies: + underscore "1.9.1" + util "^0.12.0" + web3-core-helpers "1.3.5" + web3-providers-http "1.3.5" + web3-providers-ipc "1.3.5" + web3-providers-ws "1.3.5" + +web3-core-subscriptions@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.3.5.tgz#7c4dc9d559e344d852de2cf01bd0cc13c94023cb" + integrity sha512-6mtXdaEB1V1zKLqYBq7RF2W75AK5ZJNGpW6QYC7Zvbku7zq1ZlgaUkJo88JKMWJ7etfaHaYqQ/7VveHk5sQynA== + dependencies: + eventemitter3 "4.0.4" + underscore "1.9.1" + web3-core-helpers "1.3.5" + +web3-core@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.3.5.tgz#1e9335e6c4549dac09aaa07157242ebd6d097226" + integrity sha512-VQjTvnGTqJwDwjKEHSApea3RmgtFGLDSJ6bqrOyHROYNyTyKYjFQ/drG9zs3rjDkND9mgh8foI1ty37Qua3QCQ== + dependencies: + "@types/bn.js" "^4.11.5" + "@types/node" "^12.12.6" + bignumber.js "^9.0.0" + web3-core-helpers "1.3.5" + web3-core-method "1.3.5" + web3-core-requestmanager "1.3.5" + web3-utils "1.3.5" + +web3-eth-abi@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.3.5.tgz#eeffab0a4b318c47b8777de90983ca45614f8173" + integrity sha512-bkbG2v/mOW5DH6rF/SEgqunusjYoEi2IBw+fkmD3rzWDaEY7+/i1xY94AeO257d06QMgld75GtV/N+aEs7A6vQ== + dependencies: + "@ethersproject/abi" "5.0.7" + underscore "1.9.1" + web3-utils "1.3.5" + +web3-eth-accounts@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.3.5.tgz#c23ee748759a6a06d6485a9322b106baa944dcdd" + integrity sha512-r3WOR21rgm6Cd6OFnifr3Tizdm5K+g2TsSOPySwX4FrgLrYDL6ck4zr5VXUPz+llpSExb/JztpE8pqEHr3U2NA== + dependencies: + crypto-browserify "3.12.0" + eth-lib "0.2.8" + ethereumjs-common "^1.3.2" + ethereumjs-tx "^2.1.1" + scrypt-js "^3.0.1" + underscore "1.9.1" + uuid "3.3.2" + web3-core "1.3.5" + web3-core-helpers "1.3.5" + web3-core-method "1.3.5" + web3-utils "1.3.5" + +web3-eth-contract@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.3.5.tgz#b41ecf8612b379c4fb1c614e950135717aa8f919" + integrity sha512-WfGVeQquN3D7Qm+KEIN9EI7yrm/fL2V9Y4+YhDWiKA/ns1pX1LYcEWojTOnBXCnPF3tcvoKKL+KBxXg1iKm38A== + dependencies: + "@types/bn.js" "^4.11.5" + underscore "1.9.1" + web3-core "1.3.5" + web3-core-helpers "1.3.5" + web3-core-method "1.3.5" + web3-core-promievent "1.3.5" + web3-core-subscriptions "1.3.5" + web3-eth-abi "1.3.5" + web3-utils "1.3.5" + +web3-eth-ens@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.3.5.tgz#5a28d23eb402fb1f6964da60ea60641e4d24d366" + integrity sha512-5bkpFTXV18CvaVP8kCbLZZm2r1TWUv9AsXH+80yz8bTZulUGvXsBMRfK6e5nfEr2Yv59xlIXCFoalmmySI9EJw== + dependencies: + content-hash "^2.5.2" + eth-ens-namehash "2.0.8" + underscore "1.9.1" + web3-core "1.3.5" + web3-core-helpers "1.3.5" + web3-core-promievent "1.3.5" + web3-eth-abi "1.3.5" + web3-eth-contract "1.3.5" + web3-utils "1.3.5" + +web3-eth-iban@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.3.5.tgz#dff1e37864e23a3387016ec4db96cdc290a6fbd6" + integrity sha512-x+BI/d2Vt0J1cKK8eFd4W0f1TDjgEOYCwiViTb28lLE+tqrgyPqWDA+l6UlKYLF/yMFX3Dym4ofcCOtgcn4q4g== + dependencies: + bn.js "^4.11.9" + web3-utils "1.3.5" + +web3-eth-personal@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.3.5.tgz#bc5d5b900bc4824139af2ef01eaf8e9855c644ba" + integrity sha512-xELQHNZ8p3VoO1582ghCaq+Bx7pSkOOalc6/ACOCGtHDMelqgVejrmSIZGScYl+k0HzngmQAzURZWQocaoGM1g== + dependencies: + "@types/node" "^12.12.6" + web3-core "1.3.5" + web3-core-helpers "1.3.5" + web3-core-method "1.3.5" + web3-net "1.3.5" + web3-utils "1.3.5" + +web3-eth@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.3.5.tgz#2a3d0db870ef7921942a5d798ba0569175cc4de1" + integrity sha512-5qqDPMMD+D0xRqOV2ePU2G7/uQmhn0FgCEhFzKDMHrssDQJyQLW/VgfA0NLn64lWnuUrGnQStGvNxrWf7MgsfA== + dependencies: + underscore "1.9.1" + web3-core "1.3.5" + web3-core-helpers "1.3.5" + web3-core-method "1.3.5" + web3-core-subscriptions "1.3.5" + web3-eth-abi "1.3.5" + web3-eth-accounts "1.3.5" + web3-eth-contract "1.3.5" + web3-eth-ens "1.3.5" + web3-eth-iban "1.3.5" + web3-eth-personal "1.3.5" + web3-net "1.3.5" + web3-utils "1.3.5" + +web3-net@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.3.5.tgz#06e3465a9fbbeec1240160e2fd66ddb07b6af944" + integrity sha512-usbFbuUpKK8s7jPLGoUzi/WpNnefGFPTj948aJv8BZ04UQA4L/XS5NNkkhk358zNMmhGfEFW8wrWy+0Oy0njtA== + dependencies: + web3-core "1.3.5" + web3-core-method "1.3.5" + web3-utils "1.3.5" + +web3-providers-http@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.3.5.tgz#cdada6fb342e08fd75aea249fceb6eee467beffc" + integrity sha512-ZQOmceFjcajEZdiuqciXjijwIYWNmEJ1oxMtbrwB2eGxHRCMXEH2xGRUZuhOFNF88yQC/VXVi14yvYg5ZlFJlA== + dependencies: + web3-core-helpers "1.3.5" + xhr2-cookies "1.1.0" + +web3-providers-ipc@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.3.5.tgz#2f5536abfe03f3824e00dedc614d8f46db72b57f" + integrity sha512-cbZOeb/sALiHjzMolJjIyHla/J5wdL2JKUtRO66Nh/uLALBCpU8JUgzNvpAdJ1ae3+A33+EdFStdzuDYHKtQew== + dependencies: + oboe "2.1.5" + underscore "1.9.1" + web3-core-helpers "1.3.5" + +web3-providers-ws@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.3.5.tgz#7f841ec79358d90c4a803d1291157b5ffb15aeb7" + integrity sha512-zeZ4LMvKhYaJBDCqA//Bzgp4r/T0tNq5U/xvN0axA4YflzF7yqlsbzGwCkcZYDbrUaK3Ltl2uOmvwjbWALOZ1A== + dependencies: + eventemitter3 "4.0.4" + underscore "1.9.1" + web3-core-helpers "1.3.5" + websocket "^1.0.32" + +web3-shh@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.3.5.tgz#af0b8ebca90a3652dbbb90d351395f36ca91f40b" + integrity sha512-aRwzCduXvuGVslLL/Y15VcOHa70Qr2kxZI7UwOzQVhaaOdxuRRvo3AK/cmyln1Tsd54/n93Yk8I3qg5I2+6alw== + dependencies: + web3-core "1.3.5" + web3-core-method "1.3.5" + web3-core-subscriptions "1.3.5" + web3-net "1.3.5" + +web3-utils@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.3.5.tgz#14ee2ff1a7a226867698d6eaffd21aa97aed422e" + integrity sha512-5apMRm8ElYjI/92GHqijmaLC+s+d5lgjpjHft+rJSs/dsnX8I8tQreqev0dmU+wzU+2EEe4Sx9a/OwGWHhQv3A== + dependencies: + bn.js "^4.11.9" + eth-lib "0.2.8" + ethereum-bloom-filters "^1.0.6" + ethjs-unit "0.1.6" + number-to-bn "1.7.0" + randombytes "^2.1.0" + underscore "1.9.1" + utf8 "3.0.0" + +web3@^1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3/-/web3-1.3.5.tgz#ef4c3a2241fdd74f2f7794e839f30bc6f9814e46" + integrity sha512-UyQW/MT5EIGBrXPCh/FDIaD7RtJTn5/rJUNw2FOglp0qoXnCQHNKvntiR1ylztk05fYxIF6UgsC76IrazlKJjw== + dependencies: + web3-bzz "1.3.5" + web3-core "1.3.5" + web3-eth "1.3.5" + web3-eth-personal "1.3.5" + web3-net "1.3.5" + web3-shh "1.3.5" + web3-utils "1.3.5" + webidl-conversions@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" @@ -8327,10 +9923,10 @@ webidl-conversions@^6.1.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== -websocket@^1.0.33: - version "1.0.33" - resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.33.tgz#407f763fc58e74a3fa41ca3ae5d78d3f5e3b82a5" - integrity sha512-XwNqM2rN5eh3G2CUQE3OHZj+0xfdH42+OFK6LdC2yqiC0YU8e5UK0nYre220T0IyyN031V/XOvtHvXozvJYFWA== +websocket@^1.0.32, websocket@^1.0.34: + version "1.0.34" + resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.34.tgz#2bdc2602c08bf2c82253b730655c0ef7dcab3111" + integrity sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ== dependencies: bufferutil "^4.0.1" debug "^2.2.0" @@ -8351,20 +9947,44 @@ whatwg-mimetype@^2.3.0: resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== -whatwg-url@^8.0.0: - version "8.4.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.4.0.tgz#50fb9615b05469591d2b2bd6dfaed2942ed72837" - integrity sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw== +whatwg-url@^8.0.0, whatwg-url@^8.5.0: + version "8.5.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.5.0.tgz#7752b8464fc0903fec89aa9846fc9efe07351fd3" + integrity sha512-fy+R77xWv0AiqfLl4nuGUlQ3/6b5uNfQ4WAbGQVMYshCTCCPK9psC1nWh3XHuxGVCtlcDDQPQW1csmmIQo+fwg== dependencies: - lodash.sortby "^4.7.0" + lodash "^4.7.0" tr46 "^2.0.2" webidl-conversions "^6.1.0" +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= +which-typed-array@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.4.tgz#8fcb7d3ee5adf2d771066fba7cf37e32fe8711ff" + integrity sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA== + dependencies: + available-typed-arrays "^1.0.2" + call-bind "^1.0.0" + es-abstract "^1.18.0-next.1" + foreach "^2.0.5" + function-bind "^1.1.1" + has-symbols "^1.0.1" + is-typed-array "^1.1.3" + which@2.0.2, which@^2.0.1, which@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" @@ -8403,19 +10023,10 @@ wordwrap@^1.0.0: resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= -workerpool@6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.0.2.tgz#e241b43d8d033f1beb52c7851069456039d1d438" - integrity sha512-DSNyvOpFKrNusaaUwk+ej6cBj1bmhLcBfj80elGk+ZIo5JSkq+unB1dLKEOcNfJDZgjGICfhQ0Q5TbP0PvF4+Q== - -wrap-ansi@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" - integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== - dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" +workerpool@6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.1.0.tgz#a8e038b4c94569596852de7a8ea4228eefdeb37b" + integrity sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg== wrap-ansi@^6.2.0: version "6.2.0" @@ -8462,16 +10073,62 @@ write-json-file@^4.2.0: sort-keys "^4.0.0" write-file-atomic "^3.0.0" -ws@^7.2.3: - version "7.4.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.3.tgz#1f9643de34a543b8edb124bdcbc457ae55a6e5cd" - integrity sha512-hr6vCR76GsossIRsr8OLR9acVVm1jyfEWvhbNjtgPOrfvAlKzvyeg/P6r8RuDjRyrcQoPQT7K0DGEPc7Ae6jzA== +ws@^3.0.0: + version "3.3.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" + integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== + dependencies: + async-limiter "~1.0.0" + safe-buffer "~5.1.0" + ultron "~1.1.0" + +ws@^7.4.4: + version "7.4.5" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.5.tgz#a484dd851e9beb6fdb420027e3885e8ce48986c1" + integrity sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g== xdg-basedir@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== +xhr-request-promise@^0.1.2: + version "0.1.3" + resolved "https://registry.yarnpkg.com/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz#2d5f4b16d8c6c893be97f1a62b0ed4cf3ca5f96c" + integrity sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg== + dependencies: + xhr-request "^1.1.0" + +xhr-request@^1.0.1, xhr-request@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/xhr-request/-/xhr-request-1.1.0.tgz#f4a7c1868b9f198723444d82dcae317643f2e2ed" + integrity sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA== + dependencies: + buffer-to-arraybuffer "^0.0.5" + object-assign "^4.1.1" + query-string "^5.0.1" + simple-get "^2.7.0" + timed-out "^4.0.1" + url-set-query "^1.0.0" + xhr "^2.0.4" + +xhr2-cookies@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz#7d77449d0999197f155cb73b23df72505ed89d48" + integrity sha1-fXdEnQmZGX8VXLc7I99yUF7YnUg= + dependencies: + cookiejar "^2.1.1" + +xhr@^2.0.4, xhr@^2.3.3: + version "2.6.0" + resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.6.0.tgz#b69d4395e792b4173d6b7df077f0fc5e4e2b249d" + integrity sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA== + dependencies: + global "~4.4.0" + is-function "^1.0.1" + parse-headers "^2.0.0" + xtend "^4.0.0" + xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" @@ -8482,7 +10139,7 @@ xmlchars@^2.2.0: resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== -xtend@~4.0.1: +xtend@^4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== @@ -8495,14 +10152,14 @@ xxhashjs@^0.2.2: cuint "^0.2.2" y18n@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" - integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== + version "4.0.3" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" + integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== y18n@^5.0.5: - version "5.0.5" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.5.tgz#8769ec08d03b1ea2df2500acef561743bbb9ab18" - integrity sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg== + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== yaeti@^0.0.6: version "0.0.6" @@ -8514,7 +10171,7 @@ yallist@^2.1.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= -yallist@^3.0.2: +yallist@^3.0.0, yallist@^3.0.3: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== @@ -8524,13 +10181,10 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yargs-parser@13.1.2, yargs-parser@^13.1.2: - version "13.1.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" - integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" +yargs-parser@20.2.4: + version "20.2.4" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== yargs-parser@^18.1.2: version "18.1.3" @@ -8541,9 +10195,9 @@ yargs-parser@^18.1.2: decamelize "^1.2.0" yargs-parser@^20.2.2: - version "20.2.4" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" - integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== + version "20.2.7" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.7.tgz#61df85c113edfb5a7a4e36eb8aa60ef423cbc90a" + integrity sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw== yargs-unparser@2.0.0: version "2.0.0" @@ -8555,21 +10209,18 @@ yargs-unparser@2.0.0: flat "^5.0.2" is-plain-obj "^2.1.0" -yargs@13.3.2: - version "13.3.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" - integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== +yargs@16.2.0, yargs@^16.0.3, yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.2" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" yargs@^15.4.1: version "15.4.1" @@ -8588,19 +10239,6 @@ yargs@^15.4.1: y18n "^4.0.0" yargs-parser "^18.1.2" -yargs@^16.0.3, yargs@^16.2.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - yn@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"