diff --git a/Cargo.lock b/Cargo.lock index 153906cd..af9c97fc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -77,7 +77,7 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" dependencies = [ - "getrandom 0.2.9", + "getrandom 0.2.10", "once_cell", "version_check", ] @@ -91,6 +91,21 @@ dependencies = [ "memchr", ] +[[package]] +name = "aho-corasick" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41" +dependencies = [ + "memchr", +] + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + [[package]] name = "android_system_properties" version = "0.1.5" @@ -111,9 +126,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.3.0" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e579a7752471abc2a8268df8b20005e3eadd975f585398f17efcfd8d4927371" +checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163" dependencies = [ "anstyle", "anstyle-parse", @@ -150,9 +165,9 @@ dependencies = [ [[package]] name = "anstyle-wincon" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bcd8291a340dd8ac70e18878bc4501dd7b4ff970cfa21c207d36ece51ea88fd" +checksum = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188" dependencies = [ "anstyle", "windows-sys 0.48.0", @@ -160,9 +175,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.70" +version = "1.0.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4" +checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8" [[package]] name = "approx" @@ -257,7 +272,7 @@ dependencies = [ "log", "parking", "polling", - "rustix 0.37.13", + "rustix 0.37.19", "slab", "socket2", "waker-fn", @@ -286,7 +301,7 @@ checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.18", ] [[package]] @@ -321,9 +336,9 @@ dependencies = [ [[package]] name = "auto_impl" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a8c1df849285fbacd587de7818cc7d13be6cd2cbcd47a04fb1801b0e2706e33" +checksum = "fee3da8ef1276b0bee5dd1c7258010d8fffd31801447323115a25560e1327b89" dependencies = [ "proc-macro-error", "proc-macro2", @@ -347,7 +362,7 @@ dependencies = [ "cc", "cfg-if", "libc", - "miniz_oxide", + "miniz_oxide 0.6.2", "object 0.30.3", "rustc-demangle", ] @@ -384,9 +399,9 @@ checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] name = "base64" -version = "0.21.0" +version = "0.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" +checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d" [[package]] name = "base64ct" @@ -465,7 +480,7 @@ version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" dependencies = [ - "digest 0.10.6", + "digest 0.10.7", ] [[package]] @@ -557,6 +572,20 @@ dependencies = [ "log", ] +[[package]] +name = "bls12_381" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3c196a77437e7cc2fb515ce413a6401291578b5afc8ecb29a3c7ab957f05941" +dependencies = [ + "digest 0.9.0", + "ff", + "group", + "pairing", + "rand_core 0.6.4", + "subtle", +] + [[package]] name = "bs58" version = "0.4.0" @@ -565,9 +594,9 @@ checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" [[package]] name = "bstr" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d4260bcc2e8fc9df1eac4919a720effeb63a3f0952f5bf4944adfa18897f09" +checksum = "a246e68bb43f6cd9db24bea052a53e40405417c5fb372e3d1a8a7f770a564ef5" dependencies = [ "memchr", "serde", @@ -584,9 +613,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.12.0" +version = "3.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" +checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" [[package]] name = "byte-slice-cast" @@ -984,13 +1013,13 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.24" +version = "0.4.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b" +checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5" dependencies = [ + "android-tzdata", "iana-time-zone", "js-sys", - "num-integer", "num-traits", "time", "wasm-bindgen", @@ -1041,9 +1070,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.2.4" +version = "4.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "956ac1f6381d8d82ab4684768f89c0ea3afe66925ceadb4eeb3fc452ffc55d62" +checksum = "b4ed2379f8603fa2b7509891660e802b88c70a79a6427a70abb5968054de2c28" dependencies = [ "clap_builder", "clap_derive", @@ -1052,9 +1081,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.2.4" +version = "4.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84080e799e54cff944f4b4a4b0e71630b0e0443b25b985175c7dddc1a859b749" +checksum = "72394f3339a76daf211e57d4bcb374410f3965dcc606dd0e03738c7888766980" dependencies = [ "anstream", "anstyle", @@ -1065,21 +1094,21 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.2.0" +version = "4.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9644cd56d6b87dbe899ef8b053e331c0637664e9e21a33dfcdc36093f5c5c4" +checksum = "59e9ef9a08ee1c0e1f2e162121665ac45ac3783b0f897db7244ae75ad9a8f65b" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.18", ] [[package]] name = "clap_lex" -version = "0.4.1" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a2dd5a6fe8c6e3502f568a6353e5273bbb15193ad9a89e457b9970798efbea1" +checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b" [[package]] name = "codespan-reporting" @@ -1099,9 +1128,9 @@ checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" [[package]] name = "comfy-table" -version = "6.1.4" +version = "6.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e7b787b0dc42e8111badfdbe4c3059158ccb2db8780352fa1b01e8ccf45cc4d" +checksum = "7e959d788268e3bf9d35ace83e81b124190378e4c91c9067524675e33394b8ba" dependencies = [ "strum", "strum_macros", @@ -1173,15 +1202,16 @@ dependencies = [ "base64 0.12.3", "cp-cess-common", "frame-support", + "ic-verify-bls-signature", "log", "parity-scale-codec", + "rand 0.8.5", "rsa", "scale-info", "serde_json", "sp-api", "sp-application-crypto", "sp-core", - "sp-io", "sp-std", "webpki 0.21.0", ] @@ -1210,9 +1240,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "280a9f2d8b3a38871a3c8a46fb80db65e5e5ed97da80c4d08bf27fb63e35e181" +checksum = "3e4c1eaa2012c47becbbad2ab175484c2a84d1185b566fb2cc5b8707343dfe58" dependencies = [ "libc", ] @@ -1476,9 +1506,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.94" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f61f1b6389c3fe1c316bf8a4dccc90a38208354b330925bce1f74a6c4756eb93" +checksum = "109308c20e8445959c2792e81871054c6a17e6976489a93d2769641a2ba5839c" dependencies = [ "cc", "cxxbridge-flags", @@ -1488,9 +1518,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.94" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12cee708e8962df2aeb38f594aae5d827c022b6460ac71a7a3e2c3c2aae5a07b" +checksum = "daf4c6755cdf10798b97510e0e2b3edb9573032bd9379de8fffa59d68165494f" dependencies = [ "cc", "codespan-reporting", @@ -1498,37 +1528,37 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn 2.0.15", + "syn 2.0.18", ] [[package]] name = "cxxbridge-flags" -version = "1.0.94" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7944172ae7e4068c533afbb984114a56c46e9ccddda550499caa222902c7f7bb" +checksum = "882074421238e84fe3b4c65d0081de34e5b323bf64555d3e61991f76eb64a7bb" [[package]] name = "cxxbridge-macro" -version = "1.0.94" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5" +checksum = "4a076022ece33e7686fb76513518e219cca4fce5750a8ae6d1ce6c0f48fd1af9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.18", ] [[package]] name = "data-encoding" -version = "2.3.3" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23d8666cb01533c39dde32bcbab8e227b4ed6679b2c925eba05feabea39508fb" +checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308" [[package]] name = "data-encoding-macro" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86927b7cd2fe88fa698b87404b287ab98d1a0063a34071d92e575b72d3029aca" +checksum = "c904b33cc60130e1aeea4956ab803d08a3f4a0ca82d64ed757afac3891f2bb99" dependencies = [ "data-encoding", "data-encoding-macro-internal", @@ -1536,9 +1566,9 @@ dependencies = [ [[package]] name = "data-encoding-macro-internal" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5bbed42daaa95e780b60a50546aa345b8413a1e46f9a40a12907d3598f038db" +checksum = "8fdf3fce3ce863539ec1d7fd1b6dcc3c645663376b43ed376bbf887733e4f772" dependencies = [ "data-encoding", "syn 1.0.109", @@ -1597,9 +1627,9 @@ dependencies = [ [[package]] name = "digest" -version = "0.10.6" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer 0.10.4", "const-oid", @@ -1773,7 +1803,7 @@ dependencies = [ "base16ct", "crypto-bigint", "der", - "digest 0.10.6", + "digest 0.10.7", "ff", "generic-array 0.14.7", "group", @@ -2204,13 +2234,13 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.0.25" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" +checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743" dependencies = [ "crc32fast", "libz-sys", - "miniz_oxide", + "miniz_oxide 0.7.1", ] [[package]] @@ -2238,9 +2268,9 @@ dependencies = [ [[package]] name = "form_urlencoded" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" +checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" dependencies = [ "percent-encoding", ] @@ -2732,7 +2762,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.18", ] [[package]] @@ -2835,9 +2865,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.9" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4" +checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" dependencies = [ "cfg-if", "libc", @@ -2883,7 +2913,7 @@ version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "029d74589adefde59de1a0c4f4732695c32805624aec7b68d91503d4dba79afc" dependencies = [ - "aho-corasick", + "aho-corasick 0.7.20", "bstr", "fnv", "log", @@ -2903,9 +2933,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.18" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17f8a914c2987b688368b5138aa05321db91f4090cf26118185672ad588bce21" +checksum = "d357c7ae988e7d2182f7d7871d0b963962420b0678b0997ce7de72001aeab782" dependencies = [ "bytes", "fnv", @@ -2922,9 +2952,9 @@ dependencies = [ [[package]] name = "handlebars" -version = "4.3.6" +version = "4.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "035ef95d03713f2c347a72547b7cd38cbc9af7cd51e6099fb62d586d4a6dee3a" +checksum = "83c3372087601b532857d332f5957cbae686da52bb7810bf038c3e3c3cc2fa0d" dependencies = [ "log", "pest", @@ -3026,7 +3056,7 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest 0.10.6", + "digest 0.10.7", ] [[package]] @@ -3152,12 +3182,23 @@ dependencies = [ [[package]] name = "iana-time-zone-haiku" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" dependencies = [ - "cxx", - "cxx-build", + "cc", +] + +[[package]] +name = "ic-verify-bls-signature" +version = "0.2.0" +dependencies = [ + "bls12_381", + "getrandom 0.2.10", + "hex", + "lazy_static", + "pairing", + "sha2 0.9.9", ] [[package]] @@ -3173,9 +3214,9 @@ dependencies = [ [[package]] name = "idna" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" +checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" dependencies = [ "unicode-bidi", "unicode-normalization", @@ -3290,9 +3331,9 @@ checksum = "59ce5ef949d49ee85593fc4d3f3f95ad61657076395cbbce23e2121fc5542074" [[package]] name = "io-lifetimes" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" dependencies = [ "hermit-abi 0.3.1", "libc", @@ -3330,8 +3371,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f" dependencies = [ "hermit-abi 0.3.1", - "io-lifetimes 1.0.10", - "rustix 0.37.13", + "io-lifetimes 1.0.11", + "rustix 0.37.19", "windows-sys 0.48.0", ] @@ -3361,9 +3402,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.61" +version = "0.3.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730" +checksum = "2f37a4a5928311ac501dee68b3c7613a1037d0edb30c8e5427bd832d55d1b790" dependencies = [ "wasm-bindgen", ] @@ -3506,9 +3547,9 @@ dependencies = [ [[package]] name = "keccak" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3afef3b6eff9ce9d8ff9b3601125eec7f0c8cbac7abd14f355d053fa56c98768" +checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940" dependencies = [ "cpufeatures", ] @@ -3563,9 +3604,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.141" +version = "0.2.145" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3304a64d199bb964be99741b7a14d26972741915b3649639149b2479bb46f4b5" +checksum = "fc86cde3ff845662b8f4ef6cb50ea0e20c524eb3d29ae048287e06a1b3fa6a81" [[package]] name = "libloading" @@ -3585,9 +3626,9 @@ checksum = "7fc7aa29613bd6a620df431842069224d8bc9011086b1db4c0e0cd47fa03ec9a" [[package]] name = "libm" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb" +checksum = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4" [[package]] name = "libp2p" @@ -3598,7 +3639,7 @@ dependencies = [ "bytes", "futures", "futures-timer", - "getrandom 0.2.9", + "getrandom 0.2.10", "instant", "lazy_static", "libp2p-core", @@ -3986,9 +4027,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.8" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9702761c3935f8cc2f101793272e202c72b99da8f4224a19ddcf1279a6450bbf" +checksum = "56ee889ecc9568871456d42f603d6a0ce59ff328d291063a45cbdf0036baf6db" dependencies = [ "cc", "pkg-config", @@ -4037,9 +4078,9 @@ checksum = "d4d2456c373231a208ad294c33dc5bff30051eafd954cd4caae83a712b12854d" [[package]] name = "linux-raw-sys" -version = "0.3.3" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b085a4f2cde5781fc4b1717f2e86c62f5cda49de7ba99a7c2eae02b61c9064c" +checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" [[package]] name = "lock_api" @@ -4053,12 +4094,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.17" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if", -] +checksum = "518ef76f2f87365916b142844c16d8fefd85039bc5699050210a7778ee1cd1de" [[package]] name = "lru" @@ -4130,10 +4168,11 @@ checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" [[package]] name = "matrixmultiply" -version = "0.3.2" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "add85d4dd35074e6fedc608f8c8f513a3548619a9024b751949ef0e8e45a4d84" +checksum = "090126dc04f95dc0d1c1c91f61bdd474b3930ca064c1edc8a849da2c6cbe1e77" dependencies = [ + "autocfg", "rawpointer", ] @@ -4149,7 +4188,7 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ffc89ccdc6e10d6907450f753537ebc5c5d3460d2e4e62ea74bd571db62c0f9e" dependencies = [ - "rustix 0.37.13", + "rustix 0.37.19", ] [[package]] @@ -4222,16 +4261,24 @@ dependencies = [ "adler", ] +[[package]] +name = "miniz_oxide" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +dependencies = [ + "adler", +] + [[package]] name = "mio" -version = "0.8.6" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" +checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" dependencies = [ "libc", - "log", "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] @@ -4316,7 +4363,7 @@ dependencies = [ "blake2s_simd", "blake3", "core2", - "digest 0.10.6", + "digest 0.10.7", "multihash-derive", "sha2 0.10.6", "sha3", @@ -4527,7 +4574,7 @@ checksum = "2399c9463abc5f909349d8aa9ba080e0b88b3ce2885389b60b993f39b1a56905" dependencies = [ "byteorder", "lazy_static", - "libm 0.2.6", + "libm 0.2.7", "num-integer", "num-iter", "num-traits", @@ -4595,7 +4642,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" dependencies = [ "autocfg", - "libm 0.2.6", + "libm 0.2.7", ] [[package]] @@ -4652,9 +4699,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.17.1" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" [[package]] name = "opaque-debug" @@ -4693,6 +4740,15 @@ dependencies = [ "libm 0.1.4", ] +[[package]] +name = "pairing" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "135590d8bdba2b31346f9cd1fb2a912329f5135e832a4f422942eb6ead8b6b3b" +dependencies = [ + "group", +] + [[package]] name = "pallet-asset-tx-payment" version = "4.0.0-dev" @@ -5492,7 +5548,6 @@ dependencies = [ "serde_json", "sp-application-crypto", "sp-core", - "sp-io", "sp-npos-elections", "sp-runtime", "sp-staking", @@ -5580,9 +5635,9 @@ dependencies = [ [[package]] name = "parity-db" -version = "0.4.6" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00bfb81cf5c90a222db2fb7b3a7cbf8cc7f38dfb6647aca4d98edf8281f56ed5" +checksum = "4890dcb9556136a4ec2b0c51fa4a08c8b733b829506af8fff2e853f3a065985b" dependencies = [ "blake2", "crc32fast", @@ -5600,9 +5655,9 @@ dependencies = [ [[package]] name = "parity-scale-codec" -version = "3.4.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "637935964ff85a605d114591d4d2c13c5d1ba2806dae97cea6bf180238a749ac" +checksum = "5ddb756ca205bd108aee3c62c6d3c994e1df84a59b9d6d4a5ea42ee1fd5a9a28" dependencies = [ "arrayvec 0.7.2", "bitvec", @@ -5723,15 +5778,15 @@ checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" [[package]] name = "percent-encoding" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" +checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" [[package]] name = "pest" -version = "2.5.7" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b1403e8401ad5dedea73c626b99758535b342502f8d1e361f4a2dd952749122" +checksum = "e68e84bfb01f0507134eac1e9b410a12ba379d064eab48c50ba4ce329a527b70" dependencies = [ "thiserror", "ucd-trie", @@ -5739,9 +5794,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.5.7" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be99c4c1d2fc2769b1d00239431d711d08f6efedcecb8b6e30707160aee99c15" +checksum = "6b79d4c71c865a25a4322296122e3924d30bc8ee0834c8bfc8b95f7f054afbfb" dependencies = [ "pest", "pest_generator", @@ -5749,22 +5804,22 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.5.7" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e56094789873daa36164de2e822b3888c6ae4b4f9da555a1103587658c805b1e" +checksum = "6c435bf1076437b851ebc8edc3a18442796b30f1728ffea6262d59bbe28b077e" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.18", ] [[package]] name = "pest_meta" -version = "2.5.7" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6733073c7cff3d8459fda0e42f13a047870242aed8b509fe98000928975f359e" +checksum = "745a452f8eb71e39ffd8ee32b3c5f51d03845f99786fa9b68db6ff509c505411" dependencies = [ "once_cell", "pest", @@ -5783,22 +5838,22 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.0.12" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" +checksum = "c95a7476719eab1e366eaf73d0260af3021184f18177925b07f54b30089ceead" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.0.12" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" +checksum = "39407670928234ebc5e6e580247dd567ad73a3578460c5990f9503df207e8f07" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.18", ] [[package]] @@ -5843,9 +5898,9 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" +checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" [[package]] name = "platforms" @@ -5861,9 +5916,9 @@ checksum = "e3d7ddaed09e0eb771a79ab0fd64609ba0afb0a8366421957936ad14cbd13630" [[package]] name = "polling" -version = "2.7.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4be1c66a6add46bff50935c313dae30a5030cf8385c5206e8a95e9e9def974aa" +checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" dependencies = [ "autocfg", "bitflags", @@ -6006,9 +6061,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.56" +version = "1.0.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435" +checksum = "6aeca18b86b413c660b781aa319e4e2648a3e6f9eadc9b47e9038e6fe9f3451b" dependencies = [ "unicode-ident", ] @@ -6145,9 +6200,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.26" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" +checksum = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488" dependencies = [ "proc-macro2", ] @@ -6218,7 +6273,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.9", + "getrandom 0.2.10", ] [[package]] @@ -6310,7 +6365,7 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" dependencies = [ - "getrandom 0.2.9", + "getrandom 0.2.10", "redox_syscall 0.2.16", "thiserror", ] @@ -6332,7 +6387,7 @@ checksum = "8d2275aab483050ab2a7364c1a46604865ee7d6906684e08db0f090acf74f9e7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.18", ] [[package]] @@ -6349,13 +6404,13 @@ dependencies = [ [[package]] name = "regex" -version = "1.7.3" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b1f693b24f6ac912f4893ef08244d70b6067480d2f1a46e950c9691e6749d1d" +checksum = "81ca098a9821bd52d6b24fd8b10bd081f47d39c22778cafaa75a2857a62c6390" dependencies = [ - "aho-corasick", + "aho-corasick 1.0.2", "memchr", - "regex-syntax", + "regex-syntax 0.7.2", ] [[package]] @@ -6364,7 +6419,7 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" dependencies = [ - "regex-syntax", + "regex-syntax 0.6.29", ] [[package]] @@ -6373,6 +6428,12 @@ version = "0.6.29" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" +[[package]] +name = "regex-syntax" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436b050e76ed2903236f032a59761c1eb99e1b0aead2c257922771dab1fc8c78" + [[package]] name = "resolv-conf" version = "0.7.0" @@ -6427,7 +6488,7 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f" dependencies = [ - "digest 0.10.6", + "digest 0.10.7", ] [[package]] @@ -6480,7 +6541,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55a77d189da1fee555ad95b7e50e7457d91c0e089ec68ca69ad2989413bbdab4" dependencies = [ "byteorder", - "digest 0.10.6", + "digest 0.10.7", "num-bigint-dig", "num-integer", "num-iter", @@ -6570,15 +6631,15 @@ dependencies = [ [[package]] name = "rustix" -version = "0.37.13" +version = "0.37.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f79bef90eb6d984c72722595b5b1348ab39275a5e5123faca6863bf07d75a4e0" +checksum = "acf8729d8542766f1b2cf77eb034d52f40d375bb8b615d0b147089946e16613d" dependencies = [ "bitflags", "errno 0.3.1", - "io-lifetimes 1.0.10", + "io-lifetimes 1.0.11", "libc", - "linux-raw-sys 0.3.3", + "linux-raw-sys 0.3.8", "windows-sys 0.48.0", ] @@ -6612,7 +6673,7 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b" dependencies = [ - "base64 0.21.0", + "base64 0.21.2", ] [[package]] @@ -7626,9 +7687,9 @@ dependencies = [ [[package]] name = "scale-info" -version = "2.5.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cfdffd972d76b22f3d7f81c8be34b2296afd3a25e0a547bd9abe340a4dbbe97" +checksum = "b569c32c806ec3abdf3b5869fb8bf1e0d275a7c1c9b0b05603d9464632649edf" dependencies = [ "bitvec", "cfg-if", @@ -7640,9 +7701,9 @@ dependencies = [ [[package]] name = "scale-info-derive" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61fa974aea2d63dd18a4ec3a49d59af9f34178c73a4f56d2f18205628d00681e" +checksum = "53012eae69e5aa5c14671942a5dd47de59d4cdcff8532a6dd0e081faf1119482" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -7742,9 +7803,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.8.2" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254" +checksum = "1fc758eb7bffce5b308734e9b0c1468893cae9ff70ebf13e7090be8dcbcc83a8" dependencies = [ "bitflags", "core-foundation", @@ -7755,9 +7816,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.8.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4" +checksum = "f51d0c0d83bec45f16480d0ce0058397a69e48fcdc52d1dc8855fb68acbd31a7" dependencies = [ "core-foundation-sys", "libc", @@ -7798,22 +7859,22 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.160" +version = "1.0.163" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb2f3770c8bce3bcda7e149193a069a0f4365bda1fa5cd88e03bca26afc1216c" +checksum = "2113ab51b87a539ae008b5c6c02dc020ffa39afd2d83cffcb3f4eb2722cebec2" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.160" +version = "1.0.163" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291a097c63d8497e00160b166a967a4a79c64f3facdd01cbd7502231688d77df" +checksum = "8c805777e3930c8883389c602315a24224bcc738b63905ef87cd1420353ea93e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.18", ] [[package]] @@ -7882,16 +7943,16 @@ checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.6", + "digest 0.10.7", ] [[package]] name = "sha3" -version = "0.10.7" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54c2bb1a323307527314a36bfb73f24febb08ce2b8a554bf4ffd6f51ad15198c" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" dependencies = [ - "digest 0.10.6", + "digest 0.10.7", "keccak", ] @@ -7925,7 +7986,7 @@ version = "1.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" dependencies = [ - "digest 0.10.6", + "digest 0.10.7", "rand_core 0.6.4", ] @@ -7935,7 +7996,7 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e1788eed21689f9cf370582dfc467ef36ed9c707f073528ddafa8d83e3b8500" dependencies = [ - "digest 0.10.6", + "digest 0.10.7", "rand_core 0.6.4", ] @@ -7968,9 +8029,9 @@ dependencies = [ [[package]] name = "slice-group-by" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec" +checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" [[package]] name = "smallvec" @@ -8239,7 +8300,7 @@ source = "git+https://github.com/CESSProject/substrate.git?branch=cess-polkadot- dependencies = [ "blake2", "byteorder", - "digest 0.10.6", + "digest 0.10.7", "sha2 0.10.6", "sha3", "sp-std", @@ -8720,9 +8781,9 @@ dependencies = [ [[package]] name = "ss58-registry" -version = "1.39.0" +version = "1.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecf0bd63593ef78eca595a7fc25e9a443ca46fe69fd472f8f09f5245cdcd769d" +checksum = "eb47a8ad42e5fc72d5b1eb104a5546937eaf39843499948bb666d6e93c62423b" dependencies = [ "Inflector", "num-format", @@ -8960,9 +9021,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.15" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822" +checksum = "32d41677bcbe24c20c52e7c70b0d8db04134c5d1066bf98662e2871ad200ea3e" dependencies = [ "proc-macro2", "quote", @@ -8983,9 +9044,9 @@ dependencies = [ [[package]] name = "system-configuration" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d75182f12f490e953596550b65ee31bda7c8e043d9386174b353bda50838c3fd" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" dependencies = [ "bitflags", "core-foundation", @@ -9010,9 +9071,9 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "target-lexicon" -version = "0.12.6" +version = "0.12.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae9980cab1db3fceee2f6c6f643d5d8de2997c58ee8d25fb0cc8a9e9e7348e5" +checksum = "fd1ba337640d60c3e96bc6f0638a939b9c9a7f2c316a1598c279828b3d1dc8c5" [[package]] name = "tempfile" @@ -9023,7 +9084,7 @@ dependencies = [ "cfg-if", "fastrand", "redox_syscall 0.3.5", - "rustix 0.37.13", + "rustix 0.37.19", "windows-sys 0.45.0", ] @@ -9059,7 +9120,7 @@ checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.18", ] [[package]] @@ -9153,9 +9214,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.27.0" +version = "1.28.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0de47a4eecbe11f498978a9b29d792f0d2692d1dd003650c24c76510e3bc001" +checksum = "94d7b1cfd2aa4011f2de74c2c4c63665e27a71006b0a192dcd2710272e73dfa2" dependencies = [ "autocfg", "bytes", @@ -9167,18 +9228,18 @@ dependencies = [ "signal-hook-registry", "socket2", "tokio-macros", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] name = "tokio-macros" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61a573bdc87985e9d6ddeed1b3d864e8a302c847e40d647746df2f1de209d1ce" +checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.18", ] [[package]] @@ -9194,9 +9255,9 @@ dependencies = [ [[package]] name = "tokio-stream" -version = "0.1.12" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fb52b74f05dbf495a8fba459fdc331812b96aa086d9eb78101fa0d4569c3313" +checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842" dependencies = [ "futures-core", "pin-project-lite 0.2.9", @@ -9205,9 +9266,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.7" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5427d89453009325de0d8f342c9490009f76e999cb7672d77e46267448f7e6b2" +checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" dependencies = [ "bytes", "futures-core", @@ -9283,20 +9344,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" +checksum = "0f57e3ca2a01450b1a921183a9c9cbfda207fd822cef4ccb00a65402cbba7a74" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.18", ] [[package]] name = "tracing-core" -version = "0.1.30" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" +checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" dependencies = [ "once_cell", "valuable", @@ -9498,7 +9559,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" dependencies = [ "cfg-if", - "digest 0.10.6", + "digest 0.10.7", "rand 0.8.5", "static_assertions", ] @@ -9535,9 +9596,9 @@ checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" [[package]] name = "unicode-ident" -version = "1.0.8" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" +checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0" [[package]] name = "unicode-normalization" @@ -9590,12 +9651,12 @@ checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" [[package]] name = "url" -version = "2.3.1" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" +checksum = "50bff7831e19200a85b17131d085c25d7811bc4e186efdaf54bbd132994a88cb" dependencies = [ "form_urlencoded", - "idna 0.3.0", + "idna 0.4.0", "percent-encoding", ] @@ -9675,9 +9736,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.84" +version = "0.2.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b" +checksum = "5bba0e8cb82ba49ff4e229459ff22a191bbe9a1cb3a341610c9c33efc27ddf73" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -9685,24 +9746,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.84" +version = "0.2.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9" +checksum = "19b04bc93f9d6bdee709f6bd2118f57dd6679cf1176a1af464fca3ab0d66d8fb" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.18", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.34" +version = "0.4.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454" +checksum = "2d1985d03709c53167ce907ff394f5316aa22cb4e12761295c5dc57dacb6297e" dependencies = [ "cfg-if", "js-sys", @@ -9712,9 +9773,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.84" +version = "0.2.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5" +checksum = "14d6b024f1a526bb0234f52840389927257beb670610081360e5a03c5df9c258" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -9722,22 +9783,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.84" +version = "0.2.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" +checksum = "e128beba882dd1eb6200e1dc92ae6c5dbaa4311aa7bb211ca035779e5efc39f8" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.18", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.84" +version = "0.2.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" +checksum = "ed9d5b4305409d1fc9482fee2d7f9bcbf24b3972bf59817ef757e23982242a93" [[package]] name = "wasm-instrument" @@ -9858,7 +9919,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57d20cb3c59b788653d99541c646c561c9dd26506f25c0cebfe810659c54c6d7" dependencies = [ "downcast-rs", - "libm 0.2.6", + "libm 0.2.7", "memory_units", "num-rational", "num-traits", @@ -9871,7 +9932,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c5bf998ab792be85e20e771fe14182b4295571ad1d4f89d3da521c1bef5f597a" dependencies = [ "downcast-rs", - "libm 0.2.6", + "libm 0.2.7", "num-traits", ] @@ -10065,9 +10126,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.61" +version = "0.3.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97" +checksum = "3bdd9ef4e984da1187bf8110c5cf5b845fbc87a23602cdf912386a76fcd3a7c2" dependencies = [ "js-sys", "wasm-bindgen", @@ -10467,7 +10528,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.18", ] [[package]] @@ -10498,4 +10559,4 @@ dependencies = [ "cc", "libc", "pkg-config", -] \ No newline at end of file +] diff --git a/c-pallets/audit/src/lib.rs b/c-pallets/audit/src/lib.rs index 9c021c84..3d40253d 100644 --- a/c-pallets/audit/src/lib.rs +++ b/c-pallets/audit/src/lib.rs @@ -906,8 +906,9 @@ pub mod pallet { if miner_count == 0 { Err(OffchainErr::GenerateInfoError)?; } - - let need_miner_count = miner_count / 10 + 1; + //For TEST + let need_miner_count = miner_count; + // let need_miner_count = miner_count / 10 + 1; let mut miner_list: BoundedVec>, T::ChallengeMinerMax> = Default::default(); @@ -916,8 +917,10 @@ pub mod pallet { let mut total_idle_space: u128 = u128::MIN; let mut total_service_space: u128 = u128::MIN; // TODO: need to set a maximum number of cycles - while (miner_list.len() as u32 != need_miner_count) || (valid_index_list.len() as u32 != miner_count) { - let index_list = Self::random_select_miner(need_miner_count, miner_count, &valid_index_list); + let mut seed: u32 = 20230601; + while (miner_list.len() as u32 != need_miner_count) && (valid_index_list.len() as u32 != miner_count) { + seed = seed.saturating_add(1); + let index_list = Self::random_select_miner(need_miner_count, miner_count, &valid_index_list, seed); let allminer = T::MinerControl::get_all_miner().map_err(|_| OffchainErr::GenerateInfoError)?; @@ -944,7 +947,7 @@ pub mod pallet { }; let result = miner_list.try_push(miner_snapshot); if let Err(_e) = result { - break; + return Err(OffchainErr::GenerateInfoError)?; }; } } @@ -985,10 +988,10 @@ pub mod pallet { } // Ensure that the length is not 0 - fn random_select_miner(need: u32, length: u32, valid_index_list: &Vec) -> Vec { + fn random_select_miner(need: u32, length: u32, valid_index_list: &Vec, seed: u32) -> Vec { let mut miner_index_list: Vec = Default::default(); - let mut seed: u32 = 20230417; - while (miner_index_list.len() as u32) < need { + let mut seed: u32 = seed.saturating_mul(1000); + while (miner_index_list.len() as u32) < need && ((valid_index_list.len() + miner_index_list.len()) as u32 != length) { seed += 1; let index = Self::random_number(seed); let index: u32 = (index % length as u64) as u32; diff --git a/c-pallets/cacher/src/lib.rs b/c-pallets/cacher/src/lib.rs index ed87892f..6a78a669 100644 --- a/c-pallets/cacher/src/lib.rs +++ b/c-pallets/cacher/src/lib.rs @@ -79,7 +79,6 @@ pub mod pallet { #[pallet::call] impl Pallet { - /// Register for cacher. /// /// Parameters: diff --git a/c-pallets/cacher/src/tests.rs b/c-pallets/cacher/src/tests.rs index 3c632067..3a034aad 100644 --- a/c-pallets/cacher/src/tests.rs +++ b/c-pallets/cacher/src/tests.rs @@ -41,7 +41,15 @@ fn update_works() { byte_price: 200u32.into(), }; // Wrong accout update fails. +<<<<<<< HEAD +<<<<<<< HEAD assert_noop!(Cacher::update(RuntimeOrigin::signed(2), new_info.clone()), Error::::UnRegister); +======= + assert_noop!(Cacher::update(Origin::signed(2), new_info.clone()), Error::::UnRegistered); +>>>>>>> main +======= + assert_noop!(Cacher::update(RuntimeOrigin::signed(2), new_info.clone()), Error::::UnRegister); +>>>>>>> main // Update works. assert_ok!(Cacher::update(RuntimeOrigin::signed(1), new_info.clone())); @@ -61,7 +69,15 @@ fn logout_works() { assert_ok!(Cacher::register(RuntimeOrigin::signed(1), info.clone())); // Wrong accout logout fails. +<<<<<<< HEAD +<<<<<<< HEAD + assert_noop!(Cacher::logout(RuntimeOrigin::signed(2)), Error::::UnRegister); +======= + assert_noop!(Cacher::logout(Origin::signed(2)), Error::::UnRegistered); +>>>>>>> main +======= assert_noop!(Cacher::logout(RuntimeOrigin::signed(2)), Error::::UnRegister); +>>>>>>> main // Logout works. assert_ok!(Cacher::logout(RuntimeOrigin::signed(1))); }); @@ -89,7 +105,15 @@ fn pay_works() { let bills: BoundedVec<_, ::BillsLimit> = bill_vec.try_into().unwrap(); // Pay fails. +<<<<<<< HEAD +<<<<<<< HEAD + assert_noop!(Cacher::pay(RuntimeOrigin::signed(1), bills.clone()), Error::::InsufficientBalance); +======= + assert_noop!(Cacher::pay(Origin::signed(1), bills.clone()), BalancesError::::InsufficientBalance); +>>>>>>> main +======= assert_noop!(Cacher::pay(RuntimeOrigin::signed(1), bills.clone()), Error::::InsufficientBalance); +>>>>>>> main ::Currency::make_free_balance_be(&1, BalanceOf::::max_value()); let balance_befor_1 = ::Currency::free_balance(&1); diff --git a/c-pallets/file-bank/src/functions.rs b/c-pallets/file-bank/src/functions.rs index 407a5bb8..4cf57b88 100644 --- a/c-pallets/file-bank/src/functions.rs +++ b/c-pallets/file-bank/src/functions.rs @@ -101,7 +101,12 @@ impl Pallet { bucket.object_list.try_push(hash).map_err(|_e| Error::::BoundedVecError)?; } - >::insert(user, bucket_name, bucket); + >::insert(user, bucket_name.clone(), bucket); + + >::try_mutate(&user, |bucket_list| -> DispatchResult{ + bucket_list.try_push(bucket_name.clone()).map_err(|_e| Error::::LengthExceedsLimit)?; + Ok(()) + })?; Ok(()) } @@ -182,7 +187,6 @@ impl Pallet { pub(super) fn random_assign_miner( needed_list: &BoundedVec, T::SegmentCount> ) -> Result, T::StringLimit>, DispatchError> { - let mut index_list: Vec = Default::default(); let mut miner_task_list: BoundedVec, T::StringLimit> = Default::default(); let mut miner_idle_space_list: Vec = Default::default(); // The optimal number of miners required for storage. @@ -190,42 +194,42 @@ impl Pallet { let miner_count: u32 = (SEGMENT_SIZE * 15 / 10 / FRAGMENT_SIZE) as u32; let mut seed = >::block_number().saturated_into(); - let all_miner = T::MinerControl::get_all_miner()?; - let total = all_miner.len() as u32; + let mut all_miner = T::MinerControl::get_all_miner()?; + let mut total = all_miner.len() as u32; // ensure!(total > miner_count, Error::::NodesInsufficient); let max_count = miner_count * 5; let mut cur_count = 0; let mut total_idle_space = 0; + // start random choose miner loop { // Get a random subscript. + if total == 0 { + break; + } + let index = Self::generate_random_number(seed)? as u32 % total; // seed + 1 seed = seed.checked_add(1).ok_or(Error::::Overflow)?; - // Number of cycles plus 1 - cur_count += 1; + // When the number of cycles reaches the upper limit, the cycle ends. if cur_count == max_count { break; } - // End the cycle after all storage nodes have been traversed. - if total == index_list.len() as u32 { - break; - } - // Continue to the next cycle when the current random result already exists. - if index_list.contains(&index) { - continue; - } - + + // Number of cycles plus 1 + cur_count += 1; + // Judge whether the idle space of the miners is sufficient. let miner = all_miner[index as usize].clone(); + all_miner.remove(index as usize); + total = total - 1; let result = T::MinerControl::is_positive(&miner)?; if !result { continue; } - // Record current cycle results. - index_list.push(index); + let cur_space: u128 = T::MinerControl::get_miner_idle_space(&miner)?; // If sufficient, the miner is selected. if cur_space > needed_list.len() as u128 * FRAGMENT_SIZE { @@ -393,7 +397,11 @@ impl Pallet { } for (miner, count) in miner_list.iter() { - T::MinerControl::sub_miner_service_space(miner, FRAGMENT_SIZE * *count as u128)?; + if >::contains_key(miner) { + Self::update_restoral_target(miner, FRAGMENT_SIZE * *count as u128)?; + } else { + T::MinerControl::sub_miner_service_space(miner, FRAGMENT_SIZE * *count as u128)?; + } weight = weight.saturating_add(T::DbWeight::get().reads_writes(1, 1)); } @@ -541,7 +549,8 @@ impl Pallet { let now = >::block_number(); let block = now.checked_add(&block.saturated_into()).ok_or(Error::::Overflow)?; - let restoral_info = RestoralInfo::>{ + let restoral_info = RestoralTargetInfo::, BlockNumberOf>{ + miner: miner.clone(), service_space, restored_space: u128::MIN, cooling_block: block, @@ -551,4 +560,15 @@ impl Pallet { Ok(()) } + + pub(super) fn update_restoral_target(miner: &AccountOf, service_space: u128) -> DispatchResult { + >::try_mutate(miner, |info_opt| -> DispatchResult { + let info = info_opt.as_mut().ok_or(Error::::NonExistent)?; + + info.restored_space = info.restored_space + .checked_add(service_space).ok_or(Error::::Overflow)?; + + Ok(()) + }) + } } \ No newline at end of file diff --git a/c-pallets/file-bank/src/lib.rs b/c-pallets/file-bank/src/lib.rs index 37961805..6b75b313 100755 --- a/c-pallets/file-bank/src/lib.rs +++ b/c-pallets/file-bank/src/lib.rs @@ -157,9 +157,15 @@ pub mod pallet { #[pallet::constant] type OwnerLimit: Get + Clone + Eq + PartialEq; + #[pallet::constant] + type RestoralOrderLife: Get + Clone + Eq + PartialEq; + type CreditCounter: SchedulerCreditCounter; //Used to confirm whether the origin is authorized type OssFindAuthor: OssFindAuthor; + + #[pallet::constant] + type MissionCount: Get + Clone + Eq + PartialEq; } #[pallet::event] @@ -189,7 +195,14 @@ pub mod pallet { DeleteBucket { operator: AccountOf, owner: AccountOf, bucket_name: Vec}, Withdraw { acc: AccountOf }, + + GenerateRestoralOrder { miner: AccountOf, fragment_hash: Hash }, + + ClaimRestoralOrder { miner: AccountOf, order_id: Hash }, + + RecoveryCompleted { miner: AccountOf, order_id: Hash }, } + #[pallet::error] pub enum Error { Existed, @@ -251,6 +264,8 @@ pub mod pallet { Calculate, MinerStateError, + + Expired, } @@ -330,7 +345,12 @@ pub mod pallet { #[pallet::storage] #[pallet::getter(fn restoral_target)] pub(super) type RestoralTarget = - StorageMap< _, Blake2_128Concat, AccountOf, RestoralInfo>>; + StorageMap< _, Blake2_128Concat, AccountOf, RestoralTargetInfo, BlockNumberOf>>; + + #[pallet::storage] + #[pallet::getter(fn restoral_order)] + pub(super) type RestoralOrder = + StorageMap<_, Blake2_128Concat, Hash, RestoralOrderInfo>; #[pallet::pallet] #[pallet::storage_version(STORAGE_VERSION)] @@ -341,11 +361,17 @@ pub mod pallet { impl Hooks> for Pallet { fn on_initialize(_now: BlockNumberOf) -> Weight { let (mut weight, acc_list) = T::StorageHandle::frozen_task(); - + let mut count: u32 = 0; for acc in acc_list.iter() { // todo! Delete in blocks, and delete a part of each block - if let Ok(file_info_list) = >::try_get(&acc) { - for file_info in file_info_list.iter() { + if let Ok(mut file_info_list) = >::try_get(&acc) { + weight = weight.saturating_add(T::DbWeight::get().reads(1)); + while let Some(file_info) = file_info_list.pop() { + count = count + 1; + if count == 300 { + >::insert(&acc, file_info_list); + return weight; + } if let Ok(file) = >::try_get(&file_info.file_hash) { weight = weight.saturating_add(T::DbWeight::get().reads(1)); if file.owner.len() > 1 { @@ -357,11 +383,18 @@ pub mod pallet { weight = weight.saturating_add(temp_weight); } } + } else { + log::error!("space lease, delete file bug!"); + log::error!("acc: {:?}, file_hash: {:?}", &acc, &file_info.file_hash); } } + + T::StorageHandle::delete_user_space_storage(&acc); + >::remove(&acc); // todo! clear all let _ = >::clear_prefix(&acc, 100000, None); + >::remove(&acc); } } @@ -478,16 +511,16 @@ pub mod pallet { if count < 5 { >::try_mutate(&deal_hash, |opt| -> DispatchResult { let deal_info = opt.as_mut().ok_or(Error::::NonExistent)?; + // unlock mienr space + for miner_task in &deal_info.assigned_miner { + let task_count = miner_task.fragment_list.len() as u128; + T::MinerControl::unlock_space(&miner_task.miner, FRAGMENT_SIZE * task_count)?; + } let miner_task_list = Self::random_assign_miner(&deal_info.needed_list)?; deal_info.assigned_miner = miner_task_list; deal_info.complete_list = Default::default(); deal_info.count = count; Self::start_first_task(deal_hash.0.to_vec(), deal_hash, count + 1)?; - // unlock mienr space - for miner_task in &deal_info.assigned_miner { - let count = miner_task.fragment_list.len() as u128; - T::MinerControl::unlock_space(&miner_task.miner, FRAGMENT_SIZE * count)?; - } Ok(()) })?; } else { @@ -636,13 +669,18 @@ pub mod pallet { let needed_space = Self::cal_file_size(deal_info.segment_list.len() as u128); T::StorageHandle::unlock_and_used_user_space(&deal_info.user.user, needed_space)?; - T::FScheduler::cancel_named(hash.0.to_vec()).map_err(|_| Error::::Unexpected)?; + let result = T::FScheduler::cancel_named(hash.0.to_vec()).map_err(|_| Error::::Unexpected); + if let Err(_) = result { + log::info!("transfer report cancel schedule failed: {:?}", hash.clone()); + } Self::start_second_task(hash.0.to_vec(), hash, 5)?; if >::contains_key(&deal_info.user.user, &deal_info.user.bucket_name) { Self::add_file_to_bucket(&deal_info.user.user, &deal_info.user.bucket_name, &hash)?; } else { Self::create_bucket_helper(&deal_info.user.user, &deal_info.user.bucket_name, Some(hash))?; } + + Self::add_user_hold_fileslice(&deal_info.user.user, hash, needed_space)?; } } else { failed_list.push(hash); @@ -850,18 +888,8 @@ pub mod pallet { ) -> DispatchResult { let sender = ensure_signed(origin)?; ensure!(Self::check_permission(sender.clone(), owner.clone()), Error::::NoPermission); - ensure!(!>::contains_key(&sender, &name), Error::::SameBucketName); - ensure!(name.len() >= T::NameMinLength::get() as usize, Error::::LessMinLength); - let bucket = BucketInfo::{ - object_list: Default::default(), - authority: vec![owner.clone()].try_into().map_err(|_e| Error::::BoundedVecError)?, - }; - - >::insert(&owner, &name, bucket); - >::try_mutate(&owner, |bucket_list| -> DispatchResult{ - bucket_list.try_push(name.clone()).map_err(|_e| Error::::LengthExceedsLimit)?; - Ok(()) - })?; + + Self::create_bucket_helper(&owner, &name, None)?; Self::deposit_event(Event::::CreateBucket { operator: sender, @@ -908,9 +936,195 @@ pub mod pallet { Ok(()) } + // restoral file #[pallet::call_index(13)] #[transactional] #[pallet::weight(100_000_000)] + pub fn generate_restoral_order( + origin: OriginFor, + file_hash: Hash, + restoral_fragment: Hash, + ) -> DispatchResult { + let sender = ensure_signed(origin)?; + + ensure!( + !RestoralOrder::::contains_key(&restoral_fragment), + Error::::Existed, + ); + + >::try_mutate(&file_hash, |file_opt| -> DispatchResult { + let file = file_opt.as_mut().ok_or(Error::::NonExistent)?; + for segment in &mut file.segment_list { + for fragment in &mut segment.fragment_list { + if &fragment.hash == &restoral_fragment { + ensure!(&fragment.miner == &sender, Error::::SpecError); + let restoral_order = RestoralOrderInfo:: { + count: u32::MIN, + miner: sender.clone(), + origin_miner: sender.clone(), + file_hash: file_hash, + fragment_hash: restoral_fragment.clone(), + gen_block: >::block_number(), + deadline: Default::default(), + }; + + fragment.avail = false; + + >::insert(&restoral_fragment, restoral_order); + + Self::deposit_event(Event::::GenerateRestoralOrder{ miner: sender, fragment_hash: restoral_fragment}); + + return Ok(()) + } + } + } + + Err(Error::::SpecError)? + }) + } + + #[pallet::call_index(14)] + #[transactional] + #[pallet::weight(100_000_000)] + pub fn claim_restoral_order( + origin: OriginFor, + restoral_fragment: Hash, + ) -> DispatchResult { + let sender = ensure_signed(origin)?; + let is_positive = T::MinerControl::is_positive(&sender)?; + ensure!(is_positive, Error::::MinerStateError); + + let now = >::block_number(); + >::try_mutate(&restoral_fragment, |order_opt| -> DispatchResult { + let order = order_opt.as_mut().ok_or(Error::::NonExistent)?; + + ensure!(now > order.deadline, Error::::SpecError); + + let life = T::RestoralOrderLife::get(); + order.count = order.count.checked_add(1).ok_or(Error::::Overflow)?; + order.deadline = now.checked_add(&life.saturated_into()).ok_or(Error::::Overflow)?; + order.miner = sender.clone(); + + Ok(()) + })?; + + Self::deposit_event(Event::::ClaimRestoralOrder{ miner: sender, order_id: restoral_fragment}); + + Ok(()) + } + + #[pallet::call_index(15)] + #[transactional] + #[pallet::weight(100_000_000)] + pub fn claim_restoral_exist_order( + origin: OriginFor, + miner: AccountOf, + file_hash: Hash, + restoral_fragment: Hash, + ) -> DispatchResult { + let sender = ensure_signed(origin)?; + let is_positive = T::MinerControl::is_positive(&sender)?; + ensure!(is_positive, Error::::MinerStateError); + + ensure!( + !RestoralOrder::::contains_key(&restoral_fragment), + Error::::Existed, + ); + + ensure!( + RestoralTarget::::contains_key(&miner), + Error::::NonExistent, + ); + + >::try_mutate(&file_hash, |file_opt| -> DispatchResult { + let file = file_opt.as_mut().ok_or(Error::::NonExistent)?; + for segment in &mut file.segment_list { + for fragment in &mut segment.fragment_list { + if &fragment.hash == &restoral_fragment { + ensure!(&fragment.miner == &miner, Error::::SpecError); + let restoral_order = RestoralOrderInfo:: { + count: u32::MIN, + miner: sender.clone(), + origin_miner: fragment.miner.clone(), + file_hash: file_hash, + fragment_hash: restoral_fragment.clone(), + gen_block: >::block_number(), + deadline: Default::default(), + }; + + fragment.avail = false; + + >::insert(&restoral_fragment, restoral_order); + + return Ok(()) + } + } + } + + Err(Error::::SpecError)? + })?; + + Self::deposit_event(Event::::ClaimRestoralOrder{ miner: sender, order_id: restoral_fragment}); + + Ok(()) + } + + #[pallet::call_index(16)] + #[transactional] + #[pallet::weight(100_000_000)] + pub fn restoral_order_complete( + origin: OriginFor, + fragment_hash: Hash, + ) -> DispatchResult { + let sender = ensure_signed(origin)?; + let is_positive = T::MinerControl::is_positive(&sender)?; + ensure!(is_positive, Error::::MinerStateError); + + let order = >::try_get(&fragment_hash).map_err(|_| Error::::NonExistent)?; + ensure!(&order.miner == &sender, Error::::SpecError); + let now = >::block_number(); + ensure!(now < order.deadline, Error::::Expired); + + if !>::contains_key(&order.file_hash) { + >::remove(fragment_hash); + return Ok(()); + } else { + >::try_mutate(&order.file_hash, |file_opt| -> DispatchResult { + let file = file_opt.as_mut().ok_or(Error::::BugInvalid)?; + + for segment in &mut file.segment_list { + for fragment in &mut segment.fragment_list { + if &fragment.hash == &fragment_hash { + ensure!(&order.origin_miner == &fragment.miner, Error::::BugInvalid); + T::MinerControl::sub_miner_service_space(&fragment.miner, FRAGMENT_SIZE)?; + T::MinerControl::add_miner_service_space(&sender, FRAGMENT_SIZE)?; + + if >::contains_key(&fragment.miner) { + Self::update_restoral_target(&fragment.miner, FRAGMENT_SIZE)?; + } + + fragment.avail = true; + fragment.miner = sender.clone(); + return Ok(()); + } + } + } + + Ok(()) + })?; + } + + >::remove(fragment_hash); + + Self::deposit_event(Event::::RecoveryCompleted{ miner: sender, order_id: fragment_hash}); + + Ok(()) + } + + // The lock in time must be greater than the survival period of the challenge + #[pallet::call_index(17)] + #[transactional] + #[pallet::weight(100_000_000)] pub fn miner_exit_prep( origin: OriginFor, ) -> DispatchResult { @@ -942,7 +1156,9 @@ pub mod pallet { Ok(()) } - #[pallet::call_index(14)] + + + #[pallet::call_index(18)] #[transactional] #[pallet::weight(100_000_000)] pub fn miner_exit( @@ -966,16 +1182,20 @@ pub mod pallet { Ok(()) } - #[pallet::call_index(15)] + #[pallet::call_index(19)] #[transactional] #[pallet::weight(100_000_000)] - pub fn miner_withdaw(origin: OriginFor) -> DispatchResult { + pub fn miner_withdraw(origin: OriginFor) -> DispatchResult { let sender = ensure_signed(origin)?; let restoral_info = >::try_get(&sender).map_err(|_| Error::::MinerStateError)?; let now = >::block_number(); ensure!(now >= restoral_info.cooling_block, Error::::MinerStateError); + ensure!( + restoral_info.restored_space == restoral_info.service_space, + Error::::MinerStateError, + ); T::MinerControl::withdraw(&sender)?; @@ -983,6 +1203,85 @@ pub mod pallet { acc: sender, }); + Ok(()) + } + // FOR TEST + #[pallet::call_index(20)] + #[transactional] + #[pallet::weight(100_000_000)] + pub fn test_add_user_hold_list( + origin: OriginFor, + acc: AccountOf, + file_list: Vec<(Hash, u128)>, + ) -> DispatchResult { + let _ = ensure_root(origin)?; + + for (hash, size) in file_list { + Self::add_user_hold_fileslice(&acc, hash, size)?; + } + + Ok(()) + } + //FOR TEST + #[pallet::call_index(21)] + #[transactional] + #[pallet::weight(100_000_000)] + pub fn test_delete_deal_map( + origin: OriginFor, + deal_hash: Hash, + ) -> DispatchResult { + let _ = ensure_root(origin)?; + + DealMap::::remove(&deal_hash); + + Ok(()) + } + //FOR TEST + #[pallet::call_index(22)] + #[transactional] + #[pallet::weight(100_000_000)] + pub fn test_delete_file_map( + origin: OriginFor, + file_hash: Hash, + ) -> DispatchResult { + let _ = ensure_root(origin)?; + + File::::remove(&file_hash); + + Ok(()) + } + // FOR TEST + #[pallet::call_index(23)] + #[transactional] + #[pallet::weight(100_000_000)] + pub fn test_re_cal_miner_idle( + origin: OriginFor, + miner: AccountOf, + ) -> DispatchResult { + let _ = ensure_root(origin)?; + + let mut count: u128 = 0; + for _ in >::iter_prefix(&miner) { + count += 1; + } + + let true_space = FRAGMENT_SIZE * count; + let cur_space = T::MinerControl::get_miner_idle_space(&miner)?; + + if true_space == cur_space { + return Ok(()) + } + + if true_space > cur_space { + let fix = true_space - cur_space; + T::StorageHandle::add_total_idle_space(fix)?; + } else { + let fix = cur_space - true_space; + T::StorageHandle::sub_total_idle_space(fix)?; + } + + T::MinerControl::test_update_miner_idle_space(&miner, true_space)?; + Ok(()) } } diff --git a/c-pallets/file-bank/src/types.rs b/c-pallets/file-bank/src/types.rs index 94569412..da1d779a 100755 --- a/c-pallets/file-bank/src/types.rs +++ b/c-pallets/file-bank/src/types.rs @@ -6,6 +6,7 @@ type BlockNumberOf = ::BlockNumber; // pub(super) type SegmentList = BoundedVec<(Hash, BoundedVec::FragmentCount>), ::SegmentCount>; // pub(super) type MinerTaskList = BoundedVec<(AccountOf, BoundedVec::FragmentCount>), ::FragmentCount>; + #[derive(PartialEq, Eq, Clone, Encode, Decode, RuntimeDebug, MaxEncodedLen, TypeInfo)] #[scale_info(skip_type_params(T))] #[codec(mel_bound())] @@ -19,7 +20,7 @@ pub struct SegmentList { #[codec(mel_bound())] pub struct MinerTaskList { pub(super) miner: AccountOf, - pub(super) fragment_list: BoundedVec::FragmentCount>, + pub(super) fragment_list: BoundedVec::MissionCount>, } #[derive(PartialEq, Eq, Clone, Encode, Decode, RuntimeDebug, MaxEncodedLen, TypeInfo)] @@ -45,8 +46,8 @@ pub struct DealInfo { pub(super) share_info: BoundedVec, T::SegmentCount>, pub(super) complete_list: BoundedVec, T::FragmentCount>, } -// [s...] -// s{acc, [Hash...]} + +//TODO! BoundedVec type -> BTreeMap #[derive(PartialEq, Eq, Clone, Encode, Decode, RuntimeDebug, MaxEncodedLen, TypeInfo)] #[scale_info(skip_type_params(T))] #[codec(mel_bound())] @@ -108,8 +109,23 @@ pub struct UserBrief { } #[derive(PartialEq, Eq, Clone, Encode, Decode, RuntimeDebug, MaxEncodedLen, TypeInfo)] -pub struct RestoralInfo { +pub struct RestoralTargetInfo { + pub(super) miner: Account, pub(super) service_space: u128, pub(super) restored_space: u128, pub(super) cooling_block: Block, -} \ No newline at end of file +} + +#[derive(PartialEq, Eq, Clone, Encode, Decode, RuntimeDebug, MaxEncodedLen, TypeInfo)] +#[scale_info(skip_type_params(T))] +#[codec(mel_bound())] +pub struct RestoralOrderInfo { + pub(super) count: u32, + pub(super) miner: AccountOf, + pub(super) origin_miner: AccountOf, + pub(super) fragment_hash: Hash, + pub(super) file_hash: Hash, + pub(super) gen_block: BlockNumberOf, + pub(super) deadline: BlockNumberOf, +} + diff --git a/c-pallets/sminer/src/constants.rs b/c-pallets/sminer/src/constants.rs index e67ae2c3..96aa2448 100644 --- a/c-pallets/sminer/src/constants.rs +++ b/c-pallets/sminer/src/constants.rs @@ -17,8 +17,8 @@ pub(super) const SERVICE_MUTI: Perbill = Perbill::from_percent(70); pub(super) const ISSUE_MUTI: Perbill = Perbill::from_percent(20); pub(super) const EACH_SHARE_MUTI: Perbill = Perbill::from_percent(80); - -pub(super) const RELEASE_NUMBER: u8 = 180; +//FOR TEST +pub(super) const RELEASE_NUMBER: u8 = 2; pub(super) const IDLE_PUNI_MUTI: Perbill = Perbill::from_percent(10); diff --git a/c-pallets/sminer/src/lib.rs b/c-pallets/sminer/src/lib.rs index 601d4574..9233714e 100644 --- a/c-pallets/sminer/src/lib.rs +++ b/c-pallets/sminer/src/lib.rs @@ -343,7 +343,7 @@ pub mod pallet { if miner_info.state == STATE_FROZEN.as_bytes().to_vec() { let power = Self::calculate_power(miner_info.idle_space, miner_info.service_space); let limit = Self::check_collateral_limit(power)?; - if miner_info.collaterals > limit { + if miner_info.collaterals >= limit { miner_info.state = Self::vec_to_bound(STATE_POSITIVE.as_bytes().to_vec())?; } } @@ -353,8 +353,6 @@ pub mod pallet { Ok(()) })?; - - Self::deposit_event(Event::::IncreaseCollateral { acc: sender, balance }); Ok(()) } @@ -550,6 +548,17 @@ pub mod pallet { Self::deposit_event(Event::::DrawFaucetMoney()); Ok(()) } + //FOR TEST + #[pallet::call_index(15)] + #[transactional] + #[pallet::weight(100_000)] + pub fn test_unlock_space(origin: OriginFor, miner: AccountOf, space: u128) -> DispatchResult { + let _ = ensure_root(origin)?; + + Self::unlock_space(&miner, space)?; + + Ok(()) + } } } @@ -916,6 +925,7 @@ pub trait MinerControl { fn is_positive(miner: &AccountId) -> Result; fn is_lock(miner: &AccountId) -> Result; fn update_miner_state(miner: &AccountId, state: &str) -> DispatchResult; + fn test_update_miner_idle_space(acc: &AccountId, space: u128) -> DispatchResult; } impl MinerControl<::AccountId> for Pallet { @@ -1085,4 +1095,16 @@ impl MinerControl<::AccountId> for Pallet< fn withdraw(acc: &AccountOf) -> DispatchResult { Self::withdraw(acc) } + + fn test_update_miner_idle_space(acc: &AccountOf, space: u128) -> DispatchResult { + MinerItems::::try_mutate(&acc, |miner_opt| -> DispatchResult { + let miner = miner_opt.as_mut().ok_or(Error::::Overflow)?; + + miner.idle_space = space; + + Ok(()) + })?; + + Ok(()) + } } diff --git a/c-pallets/storage-handler/src/lib.rs b/c-pallets/storage-handler/src/lib.rs index b4c1416d..541f4d1b 100644 --- a/c-pallets/storage-handler/src/lib.rs +++ b/c-pallets/storage-handler/src/lib.rs @@ -35,6 +35,7 @@ pub use pallet::*; pub const SPACE_NORMAL: &str = "normal"; pub const SPACE_FROZEN: &str = "frozen"; +pub const SPACE_DEAD: &str = "dead"; type AccountOf = ::AccountId; type BalanceOf = @@ -178,7 +179,7 @@ pub mod pallet { let sender = ensure_signed(origin)?; ensure!(!>::contains_key(&sender), Error::::PurchasedSpace); // For TEST - let space= M_BYTE.checked_mul(gib_count as u128).ok_or(Error::::Overflow)?; + let space = G_BYTE.checked_mul(gib_count as u128).ok_or(Error::::Overflow)?; let unit_price = >::try_get() .map_err(|_e| Error::::BugInvalid)?; @@ -277,6 +278,11 @@ pub mod pallet { let cur_owned_space = >::try_get(&sender) .map_err(|_e| Error::::NotPurchasedSpace)?; + ensure!( + cur_owned_space.state.to_vec() != SPACE_DEAD.as_bytes().to_vec(), + Error::::LeaseExpired, + ); + let days_unit_price = >::try_get() .map_err(|_e| Error::::BugInvalid)? .checked_div(&30u32.saturated_into()) @@ -328,6 +334,28 @@ pub mod pallet { Ok(()) } + + //For TEST + #[pallet::call_index(6)] + #[transactional] + #[pallet::weight(100_000_000)] + pub fn update_deadline( + origin: OriginFor, + acc: AccountOf, + deadline: BlockNumberOf, + ) -> DispatchResult { + let _ = ensure_root(origin)?; + + >::try_mutate(&acc, |info_opt| -> DispatchResult { + let info = info_opt.as_mut().ok_or(Error::::NotPurchasedSpace)?; + + info.deadline = deadline; + + Ok(()) + })?; + + Ok(()) + } } } @@ -466,52 +494,63 @@ impl Pallet { fn frozen_task() -> (Weight, Vec>) { let now: BlockNumberOf = >::block_number(); let number: u128 = now.saturated_into(); - let block_oneday: BlockNumberOf = ::OneDay::get(); - let oneday: u32 = block_oneday.saturated_into(); + let mut weight: Weight = Weight::from_ref_time(0); let mut clear_acc_list: Vec> = Default::default(); - if number % oneday as u128 == 0 { - log::info!("Start lease expiration check"); - for (acc, info) in >::iter() { - weight = weight.saturating_add(T::DbWeight::get().reads(1 as u64)); - if now > info.deadline { - let frozen_day: BlockNumberOf = ::FrozenDays::get(); - if now > info.deadline + frozen_day { - log::info!("clear user:#{}'s files", number); - let result = Self::sub_purchased_space(info.total_space); + + log::info!("Start lease expiration check"); + for (acc, info) in >::iter() { + weight = weight.saturating_add(T::DbWeight::get().reads(1 as u64)); + if now > info.deadline { + let frozen_day: BlockNumberOf = ::FrozenDays::get(); + if now > info.deadline + frozen_day { + log::info!("clear user:#{}'s files", number); + let result = >::try_mutate( + &acc, + |s_opt| -> DispatchResult { + let s = s_opt + .as_mut() + .ok_or(Error::::NotPurchasedSpace)?; + s.state = SPACE_DEAD + .as_bytes() + .to_vec() + .try_into() + .map_err(|_e| Error::::BoundedVecError)?; + Ok(()) + }, + ); + match result { + Ok(()) => log::info!("user space dead: #{}", number), + Err(e) => log::error!("space mark dead failed: {:?}", e), + } + weight = weight.saturating_add(T::DbWeight::get().reads_writes(1, 1)); + clear_acc_list.push(acc); + } else { + if info.state.to_vec() != SPACE_FROZEN.as_bytes().to_vec() { + let result = >::try_mutate( + &acc, + |s_opt| -> DispatchResult { + let s = s_opt + .as_mut() + .ok_or(Error::::NotPurchasedSpace)?; + s.state = SPACE_FROZEN + .as_bytes() + .to_vec() + .try_into() + .map_err(|_e| Error::::BoundedVecError)?; + Ok(()) + }, + ); match result { - Ok(()) => log::info!("sub purchased space success"), - Err(e) => log::error!("failed sub purchased space: {:?}", e), - }; - weight = weight.saturating_add(T::DbWeight::get().reads_writes(1, 1)); - clear_acc_list.push(acc); - } else { - if info.state.to_vec() != SPACE_FROZEN.as_bytes().to_vec() { - let result = >::try_mutate( - &acc, - |s_opt| -> DispatchResult { - let s = s_opt - .as_mut() - .ok_or(Error::::NotPurchasedSpace)?; - s.state = SPACE_FROZEN - .as_bytes() - .to_vec() - .try_into() - .map_err(|_e| Error::::BoundedVecError)?; - Ok(()) - }, - ); - match result { - Ok(()) => log::info!("user space frozen: #{}", number), - Err(e) => log::error!("frozen failed: {:?}", e), - } - weight = weight.saturating_add(T::DbWeight::get().reads_writes(1, 1)); + Ok(()) => log::info!("user space frozen: #{}", number), + Err(e) => log::error!("frozen failed: {:?}", e), } + weight = weight.saturating_add(T::DbWeight::get().reads_writes(1, 1)); } } } - log::info!("End lease expiration check"); } + log::info!("End lease expiration check"); (weight, clear_acc_list) } @@ -630,6 +669,7 @@ pub trait StorageHandle { fn unlock_and_used_user_space(acc: &AccountId, needed_space: u128) -> DispatchResult; fn get_user_avail_space(acc: &AccountId) -> Result; fn frozen_task() -> (Weight, Vec); + fn delete_user_space_storage(acc: &AccountId); } impl StorageHandle for Pallet { @@ -685,4 +725,8 @@ impl StorageHandle for Pallet { fn frozen_task() -> (Weight, Vec>) { Self::frozen_task() } + + fn delete_user_space_storage(acc: &T::AccountId) { + >::remove(acc); + } } \ No newline at end of file diff --git a/c-pallets/tee-worker/Cargo.toml b/c-pallets/tee-worker/Cargo.toml index 8db64f75..848ca8d4 100644 --- a/c-pallets/tee-worker/Cargo.toml +++ b/c-pallets/tee-worker/Cargo.toml @@ -39,12 +39,6 @@ git = 'https://github.com/CESSProject/substrate.git' branch = "cess-polkadot-v0.9.36" version = '4.0.0-dev' -[dependencies.sp-io] -default-features = false -git = 'https://github.com/CESSProject/substrate.git' -branch = "cess-polkadot-v0.9.36" -version = '7.0.0' - [dependencies.sp-std] default-features = false git = 'https://github.com/CESSProject/substrate.git' @@ -94,7 +88,6 @@ std = [ "codec/std", "scale-info/std", "sp-std/std", - "sp-io/std", "sp-runtime/std", "frame-support/std", "frame-system/std", @@ -102,6 +95,7 @@ std = [ "pallet-session/std", "pallet-cess-staking/std", "cp-cess-common/std", + "cp-enclave-verify/std", ] runtime-benchmarks = [ diff --git a/c-pallets/tee-worker/src/lib.rs b/c-pallets/tee-worker/src/lib.rs index 72289301..39917b03 100644 --- a/c-pallets/tee-worker/src/lib.rs +++ b/c-pallets/tee-worker/src/lib.rs @@ -78,7 +78,7 @@ pub mod pallet { #[pallet::generate_deposit(pub(super) fn deposit_event)] pub enum Event { //Scheduling registration method - RegistrationTeeWorker { acc: AccountOf }, + RegistrationTeeWorker { acc: AccountOf, peer_id: PeerId }, UpdateScheduler { acc: AccountOf, endpoint: IpAddress }, @@ -160,7 +160,7 @@ pub mod pallet { let tee_worker_info = TeeWorkerInfo:: { controller_account: sender.clone(), - peer_id: peer_id, + peer_id: peer_id.clone(), node_key, stash_account: stash_account, }; @@ -171,7 +171,7 @@ pub mod pallet { TeeWorkerMap::::insert(&sender, tee_worker_info); - Self::deposit_event(Event::::RegistrationTeeWorker { acc: sender }); + Self::deposit_event(Event::::RegistrationTeeWorker { acc: sender, peer_id: peer_id }); Ok(()) } @@ -217,15 +217,48 @@ pub mod pallet { Ok(()) } - // #[pallet::call_index(4)] - // #[transactional] - // #[pallet::weight(100_000_000)] - // pub fn exit(origin: OriginFor) -> DispatchResult { - // let sender = ensure_signed(origin)?; + #[pallet::call_index(4)] + #[transactional] + #[pallet::weight(100_000_000)] + pub fn exit(origin: OriginFor) -> DispatchResult { + let sender = ensure_signed(origin)?; + + TeeWorkerMap::::remove(&sender); + + if TeeWorkerMap::::count() == 0 { + >::kill(); + } + + Self::deposit_event(Event::::Exit { acc: sender }); + + Ok(()) + } + + //For TEST + #[pallet::call_index(5)] + #[transactional] + #[pallet::weight(100_00_000)] + pub fn update_pk(origin: OriginFor, podr2_pbk: Podr2Key) -> DispatchResult { + let _sender = ensure_signed(origin)?; + + >::put(podr2_pbk); + + Ok(()) + } + + // #[pallet::call_index(6)] + // #[transactional] + // #[pallet::weight(100_00_000)] + // pub fn bls_verify_test(origin: OriginFor, puk: Vec, msg: Vec, sig: Vec) -> DispatchResult { + // let _ = ensure_signed(origin)?; - // TeeWorkerMap::::remove(&sender); + // let result = verify_bls(&puk, &msg, &sig); - // Self::deposit_event(Event::::Exit { acc: sender }); + // if let Ok(()) = result { + // log::info!("bls verify result is true"); + // } else { + // log::info!("bls verify result is false"); + // } // Ok(()) // } diff --git a/primitives/enclave-verify/Cargo.toml b/primitives/enclave-verify/Cargo.toml index d7397f5a..6438b2bd 100644 --- a/primitives/enclave-verify/Cargo.toml +++ b/primitives/enclave-verify/Cargo.toml @@ -4,6 +4,12 @@ version = "0.1.0" edition = "2021" [dependencies] +# bls-signatures = "0.14.0" +# bls-signatures = { version = "0.14.0", default-features = false, features = ["pairing"]} + +# signature_bls = { version = "0.35.0" , default-features = false} +ic-verify-bls-signature = { version = "0.2.0", path = '../../utils/verify-bls-signatures', default-features = false } + log = { version = "0.4.14", default-features = false } codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false } scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } @@ -23,22 +29,21 @@ sp-core = { version = "7.0.0", default-features = false, git = 'https://github.c webpki = { package = "webpki", path = '../../utils/webpki', default-features = false } base64 = { default-features = false, features = ["alloc"], version = "0.12.2" } sp-application-crypto = { version = '7.0.0', branch = 'cess-polkadot-v0.9.36', git = 'https://github.com/CESSProject/substrate.git', default-features = false } -sp-io = { version = "7.0.0", default-features = false, branch = 'cess-polkadot-v0.9.36', git = 'https://github.com/CESSProject/substrate.git' } +# sp-io = { version = "7.0.0", default-features = false, branch = 'cess-polkadot-v0.9.36', git = 'https://github.com/CESSProject/substrate.git' } + +[dev-dependencies] +rand = "0.8.5" [features] default = ["std"] std = [ - # "sp-externalities/std", "codec/std", "scale-info/std", "sp-std/std", "sp-application-crypto/std", - "sp-io/std", "sp-api/std", "sp-core/std", "frame-support/std", "cp-cess-common/std", "webpki/std", - # "ed25519-dalek", - # "sp-runtime-interface/std", -] \ No newline at end of file +] diff --git a/primitives/enclave-verify/src/lib.rs b/primitives/enclave-verify/src/lib.rs index ab19afce..11b9dd5c 100644 --- a/primitives/enclave-verify/src/lib.rs +++ b/primitives/enclave-verify/src/lib.rs @@ -12,7 +12,26 @@ use cp_cess_common::*; // use sp_runtime_interface::{ // runtime_interface, // }; -use rsa::{PublicKey, Pkcs1v15Sign, pkcs8::DecodePublicKey}; +use rsa::{ + PublicKey, + Pkcs1v15Sign, + pkcs8::DecodePublicKey, +}; + +use ic_verify_bls_signature::{ + Signature as BLSSignature, + PublicKey as BLSPubilc, +}; + +#[test] +use rand::RngCore; + +#[test] +use rsa::{ + RsaPublicKey, RsaPrivateKey, + EncodePublicKey, +}; + // #[cfg(feature = "std")] // sp_externalities::decl_extension! { // pub struct UseDalekExt; @@ -206,4 +225,31 @@ pub fn verify_rsa(key: &[u8], msg: &[u8], sig: &[u8]) -> bool { Ok(()) => return true, Err(_) => return false, }; -} \ No newline at end of file +} + +pub fn verify_bls(key: &[u8], msg: &[u8], sig: &[u8]) -> Result<(), ()> { + let puk = BLSPubilc::deserialize(key).unwrap(); + log::info!("bls puk: {:?}", puk); + let sig = BLSSignature::deserialize(sig).unwrap(); + puk.verify(&msg, &sig) +} + +// pub fn sig_rsa(key: &[u8], msg: &[u8]) -> &[u8] { + +// } + + +#[test] +fn cryptos_rsa() { + let mut rng = rand::thread_rng(); + let bits = 2048; + let priv_key = RsaPrivateKey::new(&mut rng, bits).expect("failed to generate a key"); + let pub_key = RsaPublicKey::from(&priv_key); + + let doc = pub_key.to_public_key_der().unwrap(); + let msg = "hello world!".as_bytes(); + let binding = priv_key.sign(Pkcs1v15Sign::new_raw(), msg).unwrap(); + let sig = binding.as_ref(); + let result = verify_rsa(&doc.as_bytes(), &msg, &sig); + println!("result: {:?}", result); +} diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index 91b93542..1433f846 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -170,7 +170,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { // `spec_version`, and `authoring_version` are the same between Wasm and native. // This value is set to 100 to notify Polkadot-JS App (https://polkadot.js.org/apps) to use // the compatible custom types. - spec_version: 115, + spec_version: 109, impl_version: 1, apis: RUNTIME_API_VERSIONS, transaction_version: 1, @@ -961,8 +961,9 @@ impl pallet_sminer::Config for Runtime { } parameter_types! { + //FOR TEST #[derive(Clone, Eq, PartialEq)] - pub const FrozenDays: BlockNumber = DAYS * 7; + pub const FrozenDays: BlockNumber = 10; #[derive(Clone, Eq, PartialEq)] pub const StateStringMax: u32 = 20; @@ -1022,6 +1023,9 @@ impl pallet_audit::Config for Runtime { type SigmaMax = SigmaMax; } +pub const SEGMENT_COUNT: u32 = 1000; +pub const FRAGMENT_COUNT: u32 = 3; + parameter_types! { pub const FilbakPalletId: PalletId = PalletId(*b"rewardpt"); pub const OneDay: BlockNumber = DAYS; @@ -1038,13 +1042,17 @@ parameter_types! { #[derive(Clone, Eq, PartialEq)] pub const FileListLimit: u32 = 500000; #[derive(Clone, Eq, PartialEq)] - pub const SegmentCount: u32 = 1000; + pub const SegmentCount: u32 = SEGMENT_COUNT; #[derive(Clone, Eq, PartialEq)] - pub const FragmentCount: u32 = 3; + pub const FragmentCount: u32 = FRAGMENT_COUNT; #[derive(Clone, Eq, PartialEq)] pub const OwnerLimit: u32 = 50000; #[derive(Clone, Eq, PartialEq)] pub const NameMinLength: u32 = 3; + #[derive(Clone, Eq, PartialEq)] + pub const RestoralOrderLife: u32 = 250; + #[derive(Clone, Eq, PartialEq)] + pub const MissionCount: u32 = SEGMENT_COUNT * FRAGMENT_COUNT; } impl pallet_file_bank::Config for Runtime { @@ -1076,6 +1084,8 @@ impl pallet_file_bank::Config for Runtime { type FragmentCount = FragmentCount; type OwnerLimit = OwnerLimit; type NameMinLength = NameMinLength; + type RestoralOrderLife = RestoralOrderLife; + type MissionCount = MissionCount; } parameter_types! { diff --git a/utils/ring/build.rs b/utils/ring/build.rs index 93a67745..70575df4 100755 --- a/utils/ring/build.rs +++ b/utils/ring/build.rs @@ -364,7 +364,7 @@ fn maybe_set_toolchain(target: &Target) { std::env::set_var("CC_wasm32-unknown-unknown", &clang); std::env::set_var("AR_wasm32-unknown-unknown", &ar); } else if target.arch == "wasm32" { - panic!("One of the compatible llvm toolchain must exist: llvm-{11,10,9}"); + panic!("{}", "One of the compatible llvm toolchain must exist: llvm-{11,10,9}"); } } diff --git a/utils/verify-bls-signatures/.gitignore b/utils/verify-bls-signatures/.gitignore new file mode 100644 index 00000000..96ef6c0b --- /dev/null +++ b/utils/verify-bls-signatures/.gitignore @@ -0,0 +1,2 @@ +/target +Cargo.lock diff --git a/utils/verify-bls-signatures/Cargo.toml b/utils/verify-bls-signatures/Cargo.toml new file mode 100644 index 00000000..0c666bb1 --- /dev/null +++ b/utils/verify-bls-signatures/Cargo.toml @@ -0,0 +1,22 @@ +[package] +name = "ic-verify-bls-signature" +version = "0.2.0" +edition = "2021" +license = "Apache-2.0" +description = "A library for handling BLS signatures" + +[dependencies] +bls12_381 = { version = "0.7", default-features = false, features = ["groups", "pairings", "alloc", "experimental"] } +pairing = { version = "0.22", default-features = false } +lazy_static = { version = "1", default-features = false } +# rand = { version = "0.8.5", default-features = false, features = ["getrandom"] } + +# Check references: +# - https://docs.rs/getrandom/latest/getrandom/index.html +# - https://rust-random.github.io/book/crates.html +# - https://github.com/rust-random/getrandom/pull/109 // This one explains why "custom" feature +# is added, and we will need to call `register_custom_getrandom` in future. +# - https://docs.rs/getrandom/latest/getrandom/index.html#custom-implementations +getrandom = { version = "0.2.10", default-features = false, features = ["custom"] } +sha2 = { version = "0.9", default-features = false } +hex = { version = "0.4", default-features = false } diff --git a/utils/verify-bls-signatures/README.md b/utils/verify-bls-signatures/README.md new file mode 100644 index 00000000..03dccf83 --- /dev/null +++ b/utils/verify-bls-signatures/README.md @@ -0,0 +1,11 @@ +BLS signature utility crate +============================= + +This is a simple Rust crate which can be used to create and verify BLS signatures +over the BLS12-381 curve. This follows the +[IETF draft for BLS signatures](https://datatracker.ietf.org/doc/draft-irtf-cfrg-bls-signature/), +using the "short signature" variation, where signatures are in G1 and +public keys are in G2. + +For historical reasons, this crate is named `ic-verify-bls-signature`, +but it also supports signature generation. diff --git a/utils/verify-bls-signatures/src/lib.rs b/utils/verify-bls-signatures/src/lib.rs new file mode 100644 index 00000000..21e765ed --- /dev/null +++ b/utils/verify-bls-signatures/src/lib.rs @@ -0,0 +1,247 @@ +#![no_std] +#![forbid(unsafe_code)] +#![forbid(missing_docs)] +#![allow(clippy::result_unit_err)] + +//! Verify BLS signatures +//! +//! This verifies BLS signatures in a manner which is compatible with +//! the Internet Computer. + +use core::fmt; +use core::ops::Neg; + +use bls12_381::hash_to_curve::{ExpandMsgXmd, HashToCurve}; +use bls12_381::{multi_miller_loop, G1Affine, G1Projective, G2Affine, G2Prepared, Scalar}; +use pairing::group::{Curve, Group}; +// use rand::RngCore; + +lazy_static::lazy_static! { + static ref G2PREPARED_NEG_G : G2Prepared = G2Affine::generator().neg().into(); +} + +const BLS_SIGNATURE_DOMAIN_SEP: [u8; 43] = *b"BLS_SIG_BLS12381G1_XMD:SHA-256_SSWU_RO_NUL_"; + +fn hash_to_g1(msg: &[u8]) -> G1Affine { + >>::hash_to_curve( + msg, + &BLS_SIGNATURE_DOMAIN_SEP, + ) + .to_affine() +} + +/// A BLS12-381 public key usable for signature verification +#[derive(Clone, Eq, PartialEq)] +pub struct PublicKey { + pk: G2Affine, +} + +impl fmt::Debug for PublicKey { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "PublicKey({})", hex::encode(self.serialize())) + } +} + +/// An error indicating an encoded public key was not valid +#[derive(Debug, Copy, Clone, Eq, PartialEq)] +pub enum InvalidPublicKey { + /// The public key encoding was not the correct length + WrongLength, + /// The public key was not a valid BLS12-381 G2 point + InvalidPoint, +} + +impl PublicKey { + /// The length of the binary encoding of this type + pub const BYTES: usize = 96; + + fn new(pk: G2Affine) -> Self { + Self { pk } + } + + /// Return the serialization of this BLS12-381 public key + pub fn serialize(&self) -> [u8; Self::BYTES] { + self.pk.to_compressed() + } + + /// Deserialize a BLS12-381 public key + pub fn deserialize(bytes: &[u8]) -> Result { + let bytes: Result<[u8; Self::BYTES], _> = bytes.try_into(); + + match bytes { + Err(_) => Err(InvalidPublicKey::WrongLength), + Ok(b) => { + let pk = G2Affine::from_compressed(&b); + if bool::from(pk.is_some()) { + Ok(Self::new(pk.unwrap())) + } else { + Err(InvalidPublicKey::InvalidPoint) + } + } + } + } + + /// Verify a BLS signature + pub fn verify(&self, message: &[u8], signature: &Signature) -> Result<(), ()> { + let msg = hash_to_g1(message); + let g2_gen: &G2Prepared = &G2PREPARED_NEG_G; + let pk = G2Prepared::from(self.pk); + + let sig_g2 = (&signature.sig, g2_gen); + let msg_pk = (&msg, &pk); + + let x = multi_miller_loop(&[sig_g2, msg_pk]).final_exponentiation(); + + if bool::from(x.is_identity()) { + Ok(()) + } else { + Err(()) + } + } +} + +/// An error indicating a signature could not be deserialized +#[derive(Debug, Copy, Clone, Eq, PartialEq)] +pub enum InvalidSignature { + /// The signature encoding is the wrong length + WrongLength, + /// The signature encoding is not a valid BLS12-381 G1 point + InvalidPoint, +} + +/// A type expressing a BLS12-381 signature +#[derive(Copy, Clone, Eq, PartialEq)] +pub struct Signature { + sig: G1Affine, +} + +impl fmt::Debug for Signature { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "Signature({})", hex::encode(self.serialize())) + } +} + +impl Signature { + /// The length of the binary encoding of this type + pub const BYTES: usize = 48; + + fn new(sig: G1Affine) -> Self { + Self { sig } + } + + /// Serialize the BLS signature + pub fn serialize(&self) -> [u8; Self::BYTES] { + self.sig.to_compressed() + } + + /// Deserialize a BLS signature + pub fn deserialize(bytes: &[u8]) -> Result { + let bytes: Result<[u8; Self::BYTES], _> = bytes.try_into(); + + match bytes { + Err(_) => Err(InvalidSignature::WrongLength), + Ok(b) => { + let sig = G1Affine::from_compressed(&b); + if bool::from(sig.is_some()) { + Ok(Self::new(sig.unwrap())) + } else { + Err(InvalidSignature::InvalidPoint) + } + } + } + } +} + +/// An error indicating a private key could not be deserialized +#[derive(Debug, Copy, Clone, Eq, PartialEq)] +pub enum InvalidPrivateKey { + /// The secret key encoding was the wrong length and not possibly valid + WrongLength, + /// The secret key was outside the valid range of BLS12-381 keys + OutOfRange, +} + +/// A type expressing a BLS12-381 private key +#[derive(Copy, Clone, Eq, PartialEq)] +pub struct PrivateKey { + sk: Scalar, +} + +impl fmt::Debug for PrivateKey { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "PrivateKey(REDACTED)") + } +} + +impl PrivateKey { + /// The length of the serialized encoding of this type + pub const BYTES: usize = 32; + + fn new(sk: Scalar) -> Self { + Self { sk } + } + + /// Create a new random secret key + pub fn random() -> Self { + // let mut rng = rand::thread_rng(); + loop { + let mut buf = [0u8; 32]; + // rng.fill_bytes(&mut buf); + // note: Handle the `Result` below + getrandom::getrandom(&mut buf); + let s: Option = Scalar::from_bytes(&buf).into(); + + if let Some(s) = s { + return Self::new(s); + } + } + } + + /// Serialize a private key to the binary big-ending encoding + pub fn serialize(&self) -> [u8; Self::BYTES] { + let mut bytes = self.sk.to_bytes(); + bytes.reverse(); + bytes + } + + /// Deserialize a secret key + pub fn deserialize(bytes: &[u8]) -> Result { + let bytes: Result<[u8; Self::BYTES], _> = bytes.try_into(); + + match bytes { + Err(_) => Err(InvalidPrivateKey::WrongLength), + Ok(mut b) => { + b.reverse(); + let sk = Scalar::from_bytes(&b); + if bool::from(sk.is_some()) { + Ok(Self::new(sk.unwrap())) + } else { + Err(InvalidPrivateKey::OutOfRange) + } + } + } + } + + /// Return the public key associated with this secret key + pub fn public_key(&self) -> PublicKey { + PublicKey::new(G2Affine::from(G2Affine::generator() * self.sk)) + } + + /// Sign a message using this private key + /// + /// The message can be of arbitrary length + pub fn sign(&self, message: &[u8]) -> Signature { + let sig = hash_to_g1(message) * self.sk; + Signature::new(sig.to_affine()) + } +} + +/// Verify a BLS signature +/// +/// The signature must be exactly 48 bytes (compressed G1 element) +/// The key must be exactly 96 bytes (compressed G2 element) +pub fn verify_bls_signature(sig: &[u8], msg: &[u8], key: &[u8]) -> Result<(), ()> { + let sig = Signature::deserialize(sig).map_err(|_| ())?; + let pk = PublicKey::deserialize(key).map_err(|_| ())?; + pk.verify(msg, &sig) +} diff --git a/utils/verify-bls-signatures/tests/tests.rs b/utils/verify-bls-signatures/tests/tests.rs new file mode 100644 index 00000000..51cdb2b9 --- /dev/null +++ b/utils/verify-bls-signatures/tests/tests.rs @@ -0,0 +1,112 @@ +use ic_verify_bls_signature::*; +use rand::Rng; + +fn test_bls_signature( + expected_result: bool, + sig: &'static str, + msg: &'static str, + key: &'static str, +) { + let sig = hex::decode(sig).expect("Invalid hex"); + let msg = hex::decode(msg).expect("Invalid hex"); + let key = hex::decode(key).expect("Invalid hex"); + + let result = verify_bls_signature(&sig, &msg, &key); + + assert_eq!(expected_result, result.is_ok()); +} + +#[test] +fn verify_valid() { + // derived from agent-rs tests + test_bls_signature( + true, + "ace9fcdd9bc977e05d6328f889dc4e7c99114c737a494653cb27a1f55c06f4555e0f160980af5ead098acc195010b2f7", + "0d69632d73746174652d726f6f74e6c01e909b4923345ce5970962bcfe3004bfd8474a21dae28f50692502f46d90", + "814c0e6ec71fab583b08bd81373c255c3c371b2e84863c98a4f1e08b74235d14fb5d9c0cd546d9685f913a0c0b2cc5341583bf4b4392e467db96d65b9bb4cb717112f8472e0d5a4d14505ffd7484b01291091c5f87b98883463f98091a0baaae"); + + test_bls_signature( + true, + "89a2be21b5fa8ac9fab1527e041327ce899d7da971436a1f2165393947b4d942365bfe5488710e61a619ba48388a21b1", + "0d69632d73746174652d726f6f74b294b418b11ebe5dd7dd1dcb099e4e0372b9a42aef7a7a37fb4f25667d705ea9", + "9933e1f89e8a3c4d7fdcccdbd518089e2bd4d8180a261f18d9c247a52768ebce98dc7328a39814a8f911086a1dd50cbe015e2a53b7bf78b55288893daa15c346640e8831d72a12bdedd979d28470c34823b8d1c3f4795d9c3984a247132e94fe"); +} + +#[test] +fn reject_invalid() { + // derived from agent-rs tests + test_bls_signature( + false, + "89a2be21b5fa8ac9fab1527e041327ce899d7da971436a1f2165393947b4d942365bfe5488710e61a619ba48388a21b1", + "0d69632d73746174652d726f6f74e6c01e909b4923345ce5970962bcfe3004bfd8474a21dae28f50692502f46d90", + "814c0e6ec71fab583b08bd81373c255c3c371b2e84863c98a4f1e08b74235d14fb5d9c0cd546d9685f913a0c0b2cc5341583bf4b4392e467db96d65b9bb4cb717112f8472e0d5a4d14505ffd7484b01291091c5f87b98883463f98091a0baaae"); + + test_bls_signature( + false, + "ace9fcdd9bc977e05d6328f889dc4e7c99114c737a494653cb27a1f55c06f4555e0f160980af5ead098acc195010b2f7", + "0d69632d73746174652d726f6f74b294b418b11ebe5dd7dd1dcb099e4e0372b9a42aef7a7a37fb4f25667d705ea9", + "9933e1f89e8a3c4d7fdcccdbd518089e2bd4d8180a261f18d9c247a52768ebce98dc7328a39814a8f911086a1dd50cbe015e2a53b7bf78b55288893daa15c346640e8831d72a12bdedd979d28470c34823b8d1c3f4795d9c3984a247132e94fe"); +} + +#[test] +fn reject_invalid_sig() { + // sig is not a valid point + test_bls_signature( + false, + "ace9fcdd9bc977e05d6328f889dc4e7c99114c737a494653cb27a1f55c06f4555e0f160980af5ead098acc195010b2f8", + "0d69632d73746174652d726f6f74e6c01e909b4923345ce5970962bcfe3004bfd8474a21dae28f50692502f46d90", + "814c0e6ec71fab583b08bd81373c255c3c371b2e84863c98a4f1e08b74235d14fb5d9c0cd546d9685f913a0c0b2cc5341583bf4b4392e467db96d65b9bb4cb717112f8472e0d5a4d14505ffd7484b01291091c5f87b98883463f98091a0baaae"); +} + +#[test] +fn reject_invalid_key() { + // key is not a valid point + test_bls_signature( + false, + "ace9fcdd9bc977e05d6328f889dc4e7c99114c737a494653cb27a1f55c06f4555e0f160980af5ead098acc195010b2f7", + "0d69632d73746174652d726f6f74e6c01e909b4923345ce5970962bcfe3004bfd8474a21dae28f50692502f46d90", + "814c0e6ec71fab583b08bd81373c255c3c371b2e84863c98a4f1e08b74235d14fb5d9c0cd546d9685f913a0c0b2cc5341583bf4b4392e467db96d65b9bb4cb717112f8472e0d5a4d14505ffd7484b01291091c5f87b98883463f98091a0baaad"); +} + +#[test] +fn accepts_generated_signatures() { + let mut rng = rand::thread_rng(); + + for _trial in 0..30 { + let sk = PrivateKey::random(); + let pk = sk.public_key(); + let msg = rng.gen::<[u8; 24]>(); + let sig = sk.sign(&msg); + assert!(verify_bls_signature(&sig.serialize(), &msg, &pk.serialize()).is_ok()); + + assert_eq!(sig, Signature::deserialize(&sig.serialize()).unwrap()); + assert_eq!(sk, PrivateKey::deserialize(&sk.serialize()).unwrap()); + assert_eq!(pk, PublicKey::deserialize(&pk.serialize()).unwrap()); + } +} + +#[test] +fn accepts_known_good_signature() { + // Generated using the threshold signature implementation in IC repo + + let public_key = hex::decode("87033f48fd8f327ff5d164e85af31433c6a8c73fc5a65bad5d472127205c73c5168a45e862f5af6d0da5676df45d0a5f1293a530d5498f812a34a280f6bef869e4ca9b7c275554456d8770733d72ac4006777382fa541873fe002adb12184268").unwrap(); + let message = hex::decode("e751fdb69185002b13c8d2954c7d0c39546402ecdde9c2a9a2c624293535a5ca2f560a582f705580448fbe1ccdc0e86af3ba4c487a7f73bc9c312556").unwrap(); + let signature = hex::decode("98733cc2b312d5787cd4dba6ea0e19a1f1850b9e8c6d5112f12e12db8e7413a4ecb4096c23730566c67d9b2694e4e179").unwrap(); + + assert!(verify_bls_signature(&signature, &message, &public_key).is_ok()); +} + +#[test] +fn generates_expected_signature() { + // Generated using the threshold signature implementation in IC repo + + let secret_key = + hex::decode("6f3977f6051e184b2c412daa1b5c0115ef7ab347cac8d808ffa2c26bd0658243").unwrap(); + let message = hex::decode("50484522ad8aede64ec7f86b9273b7ed3940481acf93cdd40a2b77f2be2734a14012b2492b6363b12adaeaf055c573e4611b085d2e0fe2153d72453a95eaebf350ac3ba6a26ba0bc79f4c0bf5664dfdf5865f69f7fc6b58ba7d068e8").unwrap(); + let expected_signature = "8f7ad830632657f7b3eae17fd4c3d9ff5c13365eea8d33fd0a1a6d8fbebc5152e066bb0ad61ab64e8a8541c8e3f96de9"; + + let sk = PrivateKey::deserialize(&secret_key).unwrap(); + let generated_sig = sk.sign(&message); + + assert_eq!(hex::encode(generated_sig.serialize()), expected_signature); +}