diff --git a/bolt-sidecar/Cargo.lock b/bolt-sidecar/Cargo.lock index 2591a332f..092391ccf 100644 --- a/bolt-sidecar/Cargo.lock +++ b/bolt-sidecar/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "addr2line" -version = "0.21.0" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" dependencies = [ "gimli", ] @@ -31,9 +31,9 @@ dependencies = [ [[package]] name = "allocator-api2" -version = "0.2.16" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" +checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" [[package]] name = "alloy-chains" @@ -48,7 +48,7 @@ dependencies = [ [[package]] name = "alloy-consensus" version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy#bd391179fb4ebf64fe13484e44f2e432baf9b6c2" +source = "git+https://github.com/alloy-rs/alloy#2bff1dd43fb752c15f6179f2bfcebf4c3e0a227d" dependencies = [ "alloy-eips", "alloy-primitives", @@ -61,7 +61,7 @@ dependencies = [ [[package]] name = "alloy-eips" version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy#bd391179fb4ebf64fe13484e44f2e432baf9b6c2" +source = "git+https://github.com/alloy-rs/alloy#2bff1dd43fb752c15f6179f2bfcebf4c3e0a227d" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -75,7 +75,7 @@ dependencies = [ [[package]] name = "alloy-genesis" version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy#bd391179fb4ebf64fe13484e44f2e432baf9b6c2" +source = "git+https://github.com/alloy-rs/alloy#2bff1dd43fb752c15f6179f2bfcebf4c3e0a227d" dependencies = [ "alloy-primitives", "alloy-serde", @@ -86,7 +86,7 @@ dependencies = [ [[package]] name = "alloy-json-rpc" version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy#bd391179fb4ebf64fe13484e44f2e432baf9b6c2" +source = "git+https://github.com/alloy-rs/alloy#2bff1dd43fb752c15f6179f2bfcebf4c3e0a227d" dependencies = [ "alloy-primitives", "serde", @@ -98,7 +98,7 @@ dependencies = [ [[package]] name = "alloy-network" version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy#bd391179fb4ebf64fe13484e44f2e432baf9b6c2" +source = "git+https://github.com/alloy-rs/alloy#2bff1dd43fb752c15f6179f2bfcebf4c3e0a227d" dependencies = [ "alloy-consensus", "alloy-eips", @@ -116,7 +116,7 @@ dependencies = [ [[package]] name = "alloy-node-bindings" version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy#bd391179fb4ebf64fe13484e44f2e432baf9b6c2" +source = "git+https://github.com/alloy-rs/alloy#2bff1dd43fb752c15f6179f2bfcebf4c3e0a227d" dependencies = [ "alloy-genesis", "alloy-primitives", @@ -153,7 +153,7 @@ dependencies = [ [[package]] name = "alloy-provider" version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy#bd391179fb4ebf64fe13484e44f2e432baf9b6c2" +source = "git+https://github.com/alloy-rs/alloy#2bff1dd43fb752c15f6179f2bfcebf4c3e0a227d" dependencies = [ "alloy-chains", "alloy-consensus", @@ -187,7 +187,7 @@ dependencies = [ [[package]] name = "alloy-pubsub" version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy#bd391179fb4ebf64fe13484e44f2e432baf9b6c2" +source = "git+https://github.com/alloy-rs/alloy#2bff1dd43fb752c15f6179f2bfcebf4c3e0a227d" dependencies = [ "alloy-json-rpc", "alloy-primitives", @@ -204,9 +204,9 @@ dependencies = [ [[package]] name = "alloy-rlp" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d58d9f5da7b40e9bfff0b7e7816700be4019db97d4b6359fe7f94a9e22e42ac" +checksum = "b155716bab55763c95ba212806cf43d05bcc70e5f35b02bad20cf5ec7fe11fed" dependencies = [ "alloy-rlp-derive", "arrayvec", @@ -215,19 +215,19 @@ dependencies = [ [[package]] name = "alloy-rlp-derive" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a047897373be4bbb0224c1afdabca92648dc57a9c9ef6e7b0be3aff7a859c83" +checksum = "8037e03c7f462a063f28daec9fda285a9a89da003c552f8637a80b9c8fd96241" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.66", ] [[package]] name = "alloy-rpc-client" version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy#bd391179fb4ebf64fe13484e44f2e432baf9b6c2" +source = "git+https://github.com/alloy-rs/alloy#2bff1dd43fb752c15f6179f2bfcebf4c3e0a227d" dependencies = [ "alloy-json-rpc", "alloy-primitives", @@ -250,7 +250,7 @@ dependencies = [ [[package]] name = "alloy-rpc-types" version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy#bd391179fb4ebf64fe13484e44f2e432baf9b6c2" +source = "git+https://github.com/alloy-rs/alloy#2bff1dd43fb752c15f6179f2bfcebf4c3e0a227d" dependencies = [ "alloy-consensus", "alloy-eips", @@ -268,7 +268,7 @@ dependencies = [ [[package]] name = "alloy-rpc-types-trace" version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy#bd391179fb4ebf64fe13484e44f2e432baf9b6c2" +source = "git+https://github.com/alloy-rs/alloy#2bff1dd43fb752c15f6179f2bfcebf4c3e0a227d" dependencies = [ "alloy-primitives", "alloy-rpc-types", @@ -280,7 +280,7 @@ dependencies = [ [[package]] name = "alloy-serde" version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy#bd391179fb4ebf64fe13484e44f2e432baf9b6c2" +source = "git+https://github.com/alloy-rs/alloy#2bff1dd43fb752c15f6179f2bfcebf4c3e0a227d" dependencies = [ "alloy-primitives", "serde", @@ -290,7 +290,7 @@ dependencies = [ [[package]] name = "alloy-signer" version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy#bd391179fb4ebf64fe13484e44f2e432baf9b6c2" +source = "git+https://github.com/alloy-rs/alloy#2bff1dd43fb752c15f6179f2bfcebf4c3e0a227d" dependencies = [ "alloy-primitives", "async-trait", @@ -303,7 +303,7 @@ dependencies = [ [[package]] name = "alloy-signer-wallet" version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy#bd391179fb4ebf64fe13484e44f2e432baf9b6c2" +source = "git+https://github.com/alloy-rs/alloy#2bff1dd43fb752c15f6179f2bfcebf4c3e0a227d" dependencies = [ "alloy-consensus", "alloy-network", @@ -326,7 +326,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.66", ] [[package]] @@ -342,7 +342,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.66", "syn-solidity", "tiny-keccak", ] @@ -358,7 +358,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.66", "syn-solidity", ] @@ -376,7 +376,7 @@ dependencies = [ [[package]] name = "alloy-transport" version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy#bd391179fb4ebf64fe13484e44f2e432baf9b6c2" +source = "git+https://github.com/alloy-rs/alloy#2bff1dd43fb752c15f6179f2bfcebf4c3e0a227d" dependencies = [ "alloy-json-rpc", "base64 0.22.1", @@ -394,7 +394,7 @@ dependencies = [ [[package]] name = "alloy-transport-http" version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy#bd391179fb4ebf64fe13484e44f2e432baf9b6c2" +source = "git+https://github.com/alloy-rs/alloy#2bff1dd43fb752c15f6179f2bfcebf4c3e0a227d" dependencies = [ "alloy-json-rpc", "alloy-transport", @@ -408,7 +408,7 @@ dependencies = [ [[package]] name = "alloy-transport-ws" version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy#bd391179fb4ebf64fe13484e44f2e432baf9b6c2" +source = "git+https://github.com/alloy-rs/alloy#2bff1dd43fb752c15f6179f2bfcebf4c3e0a227d" dependencies = [ "alloy-pubsub", "alloy-transport", @@ -423,47 +423,48 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.13" +version = "0.6.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d96bd03f33fe50a863e394ee9718a706f988b9079b20c3784fb726e7678b62fb" +checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" dependencies = [ "anstyle", "anstyle-parse", "anstyle-query", "anstyle-wincon", "colorchoice", + "is_terminal_polyfill", "utf8parse", ] [[package]] name = "anstyle" -version = "1.0.6" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc" +checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" [[package]] name = "anstyle-parse" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" +checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" +checksum = "a64c907d4e79225ac72e2a354c9ce84d50ebb4586dee56c82b3ee73004f537f5" dependencies = [ "windows-sys 0.52.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.2" +version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" +checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" dependencies = [ "anstyle", "windows-sys 0.52.0", @@ -618,18 +619,18 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.66", ] [[package]] name = "async-trait" -version = "0.1.79" +version = "0.1.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507401cad91ec6a857ed5513a2073c82a9b9048762b885bb98655b306964681" +checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.66", ] [[package]] @@ -643,6 +644,12 @@ dependencies = [ "rustc_version 0.4.0", ] +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + [[package]] name = "auto_impl" version = "1.2.0" @@ -651,20 +658,20 @@ checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.66", ] [[package]] name = "autocfg" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "backtrace" -version = "0.3.71" +version = "0.3.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d" +checksum = "17c6a35df3749d2e8bb1b7b21a976d82b15548788d2735b9d82f329268f71a11" dependencies = [ "addr2line", "cc", @@ -764,9 +771,9 @@ dependencies = [ [[package]] name = "blst" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c94087b935a822949d3291a9989ad2b2051ea141eda0fd4e478a75f6aa3e604b" +checksum = "62dc83a094a71d43eeadd254b1ec2d24cb6a0bb6cadce00df51f0db594711a32" dependencies = [ "cc", "glob", @@ -855,9 +862,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.91" +version = "1.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd97381a8cc6493395a5afc4c691c1084b3768db713b73aa215217aa245d153" +checksum = "41c270e7540d725e65ac7f1b212ac8ce349719624d7bcff99f8e2e488e8cf03f" [[package]] name = "cfg-if" @@ -896,7 +903,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.66", ] [[package]] @@ -907,15 +914,15 @@ checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" [[package]] name = "colorchoice" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" +checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" [[package]] name = "const-hex" -version = "1.11.3" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ba00838774b4ab0233e355d26710fbfc8327a05c017f6dc4873f876d1f79f78" +checksum = "94fb8a24a26d37e1ffd45343323dc9fe6654ceea44c12f2fcb3d7ac29e610bc6" dependencies = [ "cfg-if", "cpufeatures", @@ -1004,9 +1011,9 @@ dependencies = [ [[package]] name = "data-encoding" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5" +checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" [[package]] name = "der" @@ -1085,9 +1092,9 @@ dependencies = [ [[package]] name = "either" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47c1c47d2f5964e29c61246e81db715514cd532db6b5116a25ea3c03d6780a2" +checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" [[package]] name = "elliptic-curve" @@ -1110,9 +1117,9 @@ dependencies = [ [[package]] name = "encoding_rs" -version = "0.8.33" +version = "0.8.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" +checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" dependencies = [ "cfg-if", ] @@ -1125,9 +1132,9 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" dependencies = [ "libc", "windows-sys 0.52.0", @@ -1145,9 +1152,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.0.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "658bd65b1cf4c852a3cc96f18a8ce7b5640f6b703f905c7d74532294c2a63984" +checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" [[package]] name = "fastrlp" @@ -1274,7 +1281,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.66", ] [[package]] @@ -1326,9 +1333,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.13" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a06fddc2749e0528d2813f95e050e87e52c8cbbae56223b9babf73b3e53b0cc6" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "libc", @@ -1337,9 +1344,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.28.1" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" [[package]] name = "glob" @@ -1379,15 +1386,15 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "816ec7294445779408f36fe57bc5b7fc1cf59664059096c65f905c1c61f58069" +checksum = "fa82e28a107a8cc405f0839610bdc9b15f1e25ec7d696aa5cf173edbcb1486ab" dependencies = [ + "atomic-waker", "bytes", "fnv", "futures-core", "futures-sink", - "futures-util", "http 1.1.0", "indexmap", "slab", @@ -1398,9 +1405,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.14.3" +version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" dependencies = [ "ahash", "allocator-api2", @@ -1459,9 +1466,9 @@ dependencies = [ [[package]] name = "hex-conservative" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1aa273bf451e37ed35ced41c71a5e2a4e29064afb104158f2514bcd71c2c986" +checksum = "5313b072ce3c597065a808dbf612c4c8e8590bdbf8b579508bf7a762c5eae6cd" dependencies = [ "arrayvec", ] @@ -1582,7 +1589,7 @@ dependencies = [ "bytes", "futures-channel", "futures-util", - "h2 0.4.4", + "h2 0.4.5", "http 1.1.0", "http-body 1.0.0", "httparse", @@ -1611,9 +1618,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.3" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca38ef113da30126bbff9cd1705f9273e15d45498615d138b0c20279ac7a76aa" +checksum = "7b875924a60b96e5d7b9ae7b066540b1dd1cbd90d1828f54c92e02a283351c56" dependencies = [ "bytes", "futures-channel", @@ -1681,6 +1688,12 @@ version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +[[package]] +name = "is_terminal_polyfill" +version = "1.70.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" + [[package]] name = "itertools" version = "0.10.5" @@ -1729,9 +1742,9 @@ dependencies = [ [[package]] name = "keccak-asm" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb8515fff80ed850aea4a1595f2e519c003e2a00a82fe168ebf5269196caf444" +checksum = "47a3633291834c4fbebf8673acbc1b04ec9d151418ff9b8e26dcd79129928758" dependencies = [ "digest 0.10.7", "sha3-asm", @@ -1745,9 +1758,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.153" +version = "0.2.155" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" [[package]] name = "libm" @@ -1757,15 +1770,15 @@ checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" [[package]] name = "linux-raw-sys" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" [[package]] name = "lock_api" -version = "0.4.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" dependencies = [ "autocfg", "scopeguard", @@ -1810,9 +1823,9 @@ dependencies = [ [[package]] name = "miniz_oxide" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" +checksum = "87dfd01fe195c66b572b37921ad8803d010623c0aca821bea2302239d155cdae" dependencies = [ "adler", ] @@ -1848,11 +1861,10 @@ dependencies = [ [[package]] name = "native-tls" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" dependencies = [ - "lazy_static", "libc", "log", "openssl", @@ -1876,11 +1888,10 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +checksum = "c165a9ab64cf766f73521c0dd2cfdff64f488b8f0b3e621face3462d3db536d7" dependencies = [ - "autocfg", "num-integer", "num-traits", ] @@ -1896,9 +1907,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", "libm", @@ -1931,14 +1942,14 @@ checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.66", ] [[package]] name = "object" -version = "0.32.2" +version = "0.35.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +checksum = "b8ec7ab813848ba4522158d5517a6093db1ded27575b070f4177b8d12b41db5e" dependencies = [ "memchr", ] @@ -1972,7 +1983,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.66", ] [[package]] @@ -2001,9 +2012,9 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "parity-scale-codec" -version = "3.6.9" +version = "3.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "881331e34fa842a2fb61cc2db9643a8fedc615e47cfcc52597d1af0db9a7e8fe" +checksum = "306800abfa29c7f16596b5970a588435e3d5b3149683d00c12b699cc19f895ee" dependencies = [ "arrayvec", "bitvec", @@ -2015,9 +2026,9 @@ dependencies = [ [[package]] name = "parity-scale-codec-derive" -version = "3.6.9" +version = "3.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be30eaf4b0a9fba5336683b38de57bb86d179a35862ba6bfcf57625d006bde5b" +checksum = "d830939c76d294956402033aee57a6da7b438f2294eb94864c37b0569053a42c" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -2027,9 +2038,9 @@ dependencies = [ [[package]] name = "parking_lot" -version = "0.12.1" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ "lock_api", "parking_lot_core", @@ -2037,22 +2048,22 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.9" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", "redox_syscall", "smallvec", - "windows-targets 0.48.5", + "windows-targets 0.52.5", ] [[package]] name = "paste" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "percent-encoding" @@ -2062,9 +2073,9 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pest" -version = "2.7.9" +version = "2.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "311fb059dee1a7b802f036316d790138c613a4e8b180c822e3925a662e9f0c95" +checksum = "560131c633294438da9f7c4b08189194b20946c8274c6b9e38881a7874dc8ee8" dependencies = [ "memchr", "thiserror", @@ -2098,7 +2109,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.66", ] [[package]] @@ -2148,11 +2159,10 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "2.0.2" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b00f26d3400549137f92511a46ac1cd8ce37cb5598a96d382381458b992a5d24" +checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" dependencies = [ - "toml_datetime", "toml_edit", ] @@ -2182,9 +2192,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.79" +version = "1.0.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835ff2298f5721608eb1a980ecaee1aef2c132bf95ecc026a11b7bf3c01c02e" +checksum = "ec96c6a92621310b51366f1e28d05ef11489516e93be030060e5fc12024a49d6" dependencies = [ "unicode-ident", ] @@ -2217,9 +2227,9 @@ checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[package]] name = "quote" -version = "1.0.35" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ "proc-macro2", ] @@ -2271,11 +2281,11 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.4.1" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +checksum = "469052894dcb553421e483e4209ee581a45100d31b4018de03e5a7ad86374a7e" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.5.0", ] [[package]] @@ -2295,7 +2305,7 @@ dependencies = [ "encoding_rs", "futures-core", "futures-util", - "h2 0.4.4", + "h2 0.4.5", "http 1.1.0", "http-body 1.0.0", "http-body-util", @@ -2393,9 +2403,9 @@ checksum = "f86854cf50259291520509879a5c294c3c9a4c334e9ff65071c51e42ef1e2343" [[package]] name = "rustc-demangle" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustc-hex" @@ -2418,7 +2428,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver 1.0.22", + "semver 1.0.23", ] [[package]] @@ -2458,9 +2468,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.5.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "beb461507cee2c2ff151784c52762cf4d9ff6a61f3e80968600ed24fa837fa54" +checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" [[package]] name = "rustls-webpki" @@ -2492,9 +2502,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" [[package]] name = "schannel" @@ -2595,9 +2605,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" [[package]] name = "semver-parser" @@ -2616,29 +2626,29 @@ checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" [[package]] name = "serde" -version = "1.0.197" +version = "1.0.203" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2" +checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.197" +version = "1.0.203" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" +checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.66", ] [[package]] name = "serde_json" -version = "1.0.115" +version = "1.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12dc5c46daa8e9fdf4f5e71b6cf9a53f2487da0e86e55808e2d35539666497dd" +checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" dependencies = [ "itoa", "ryu", @@ -2681,9 +2691,9 @@ dependencies = [ [[package]] name = "sha3-asm" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bac61da6b35ad76b195eb4771210f947734321a8d81d7738e1580d953bc7a15e" +checksum = "a9b57fd861253bff08bb1919e995f90ba8f4889de2726091c8876f3a4e823b40" dependencies = [ "cc", "cfg-if", @@ -2700,9 +2710,9 @@ dependencies = [ [[package]] name = "signal-hook-registry" -version = "1.4.1" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" dependencies = [ "libc", ] @@ -2734,9 +2744,9 @@ checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "socket2" -version = "0.5.6" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05ffd9c0a93b7543e062e759284fcf5f5e3b098501104bfbdde4d404db792871" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" dependencies = [ "libc", "windows-sys 0.52.0", @@ -2789,7 +2799,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.58", + "syn 2.0.66", ] [[package]] @@ -2811,9 +2821,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.58" +version = "2.0.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44cfb93f38070beee36b3fef7d4f5a16f27751d94b187b666a5cc5e9b0d30687" +checksum = "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5" dependencies = [ "proc-macro2", "quote", @@ -2829,7 +2839,7 @@ dependencies = [ "paste", "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.66", ] [[package]] @@ -2879,22 +2889,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.58" +version = "1.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03468839009160513471e86a034bb2c5c0e4baae3b43f79ffc55c4a5427b3297" +checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.58" +version = "1.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7" +checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.66", ] [[package]] @@ -2942,9 +2952,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.37.0" +version = "1.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1adbebffeca75fcfd058afa480fb6c0b81e165a0323f9c9d39c9697e37c46787" +checksum = "ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a" dependencies = [ "backtrace", "bytes", @@ -2961,13 +2971,13 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" +checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.66", ] [[package]] @@ -3031,29 +3041,28 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.10" +version = "0.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" +checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" dependencies = [ "bytes", "futures-core", "futures-sink", "pin-project-lite", "tokio", - "tracing", ] [[package]] name = "toml_datetime" -version = "0.6.3" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf" [[package]] name = "toml_edit" -version = "0.20.2" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" +checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" dependencies = [ "indexmap", "toml_datetime", @@ -3108,7 +3117,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.66", ] [[package]] @@ -3372,7 +3381,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.66", "wasm-bindgen-shared", ] @@ -3406,7 +3415,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.66", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -3470,7 +3479,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.4", + "windows-targets 0.52.5", ] [[package]] @@ -3490,17 +3499,18 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.52.4" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dd37b7e5ab9018759f893a1952c9420d060016fc19a472b4bb20d1bdd694d1b" +checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" dependencies = [ - "windows_aarch64_gnullvm 0.52.4", - "windows_aarch64_msvc 0.52.4", - "windows_i686_gnu 0.52.4", - "windows_i686_msvc 0.52.4", - "windows_x86_64_gnu 0.52.4", - "windows_x86_64_gnullvm 0.52.4", - "windows_x86_64_msvc 0.52.4", + "windows_aarch64_gnullvm 0.52.5", + "windows_aarch64_msvc 0.52.5", + "windows_i686_gnu 0.52.5", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.5", + "windows_x86_64_gnu 0.52.5", + "windows_x86_64_gnullvm 0.52.5", + "windows_x86_64_msvc 0.52.5", ] [[package]] @@ -3511,9 +3521,9 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.4" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcf46cf4c365c6f2d1cc93ce535f2c8b244591df96ceee75d8e83deb70a9cac9" +checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" [[package]] name = "windows_aarch64_msvc" @@ -3523,9 +3533,9 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.52.4" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da9f259dd3bcf6990b55bffd094c4f7235817ba4ceebde8e6d11cd0c5633b675" +checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" [[package]] name = "windows_i686_gnu" @@ -3535,9 +3545,15 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.52.4" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b474d8268f99e0995f25b9f095bc7434632601028cf86590aea5c8a5cb7801d3" +checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" [[package]] name = "windows_i686_msvc" @@ -3547,9 +3563,9 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.52.4" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1515e9a29e5bed743cb4415a9ecf5dfca648ce85ee42e15873c3cd8610ff8e02" +checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" [[package]] name = "windows_x86_64_gnu" @@ -3559,9 +3575,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.52.4" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5eee091590e89cc02ad514ffe3ead9eb6b660aedca2183455434b93546371a03" +checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" [[package]] name = "windows_x86_64_gnullvm" @@ -3571,9 +3587,9 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.4" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77ca79f2451b49fa9e2af39f0747fe999fcda4f5e241b2898624dca97a1f2177" +checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" [[package]] name = "windows_x86_64_msvc" @@ -3583,9 +3599,9 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.52.4" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32b752e52a2da0ddfbdbcc6fceadfeede4c939ed16d13e648833a61dfb611ed8" +checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" [[package]] name = "winnow" @@ -3636,29 +3652,29 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.7.32" +version = "0.7.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" +checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.32" +version = "0.7.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" +checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.66", ] [[package]] name = "zeroize" -version = "1.7.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" dependencies = [ "zeroize_derive", ] @@ -3671,5 +3687,5 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.66", ] diff --git a/bolt-sidecar/Cargo.toml b/bolt-sidecar/Cargo.toml index 0a3911fa3..2d4b3fa60 100644 --- a/bolt-sidecar/Cargo.toml +++ b/bolt-sidecar/Cargo.toml @@ -7,10 +7,12 @@ edition = "2021" # core clap = { version = "4.5.4", features = ["derive"] } tokio = { version = "1", features = ["full"] } -secp256k1 = { version = "0.29.0", features = ["hashes", "rand"] } warp = "0.3.7" futures = "0.3" +# crypto +secp256k1 = { version = "0.29.0", features = ["hashes", "rand"] } + # alloy alloy-rpc-client = { git = "https://github.com/alloy-rs/alloy", features = [ "reqwest", @@ -28,7 +30,7 @@ alloy-transport-http = { git = "https://github.com/alloy-rs/alloy" } alloy-transport-ws = { git = "https://github.com/alloy-rs/alloy" } alloy-pubsub = { git = "https://github.com/alloy-rs/alloy" } alloy-rpc-types = { git = "https://github.com/alloy-rs/alloy" } -alloy-consensus = { git = "https://github.com/alloy-rs/alloy" } +alloy-consensus = { git = "https://github.com/alloy-rs/alloy", features = ["k256"] } alloy-json-rpc = { git = "https://github.com/alloy-rs/alloy" } alloy-primitives = "0.7.1" alloy-rlp = "0.3" diff --git a/bolt-sidecar/README.md b/bolt-sidecar/README.md index e7543b28c..1fa54f3ab 100644 --- a/bolt-sidecar/README.md +++ b/bolt-sidecar/README.md @@ -1,8 +1,11 @@ # `bolt-sidecar` + The Bolt sidecar is the main entrypoint for proposers to issue proposer commitments. Proposers should point their `builder-api` to the Bolt sidecar API in order to enable it. ## Functionality + The sidecar is responsible for: + 1. Registering the preferences of the proposer 2. Accepting (or rejecting) commitment requests 3. Implementing pricing strategies @@ -12,23 +15,27 @@ The sidecar is responsible for: 7. Dealing with PBS failures by falling back to the local template ### Local Block Template + The local block template serves 3 purposes: + 1. Building a fallback block in case the PBS pipeline fails 2. Maintaining intermediate state to simulate commitment requests on 3. Syncing with Ethereum state and invalidating stale commitments -*What do we simulate?* +_What do we simulate?_ We only simulate in order to verify the validity of the transaction according to protocol rules. This means: + 1. The transaction sender should be able to pay for it: `balance >= value + fee` 2. The transaction nonce should be higher than any previously known nonce 3. The base fee should be able to cover the maximum base fee the target block can have: `max_base_fee = current_base_fee * 1.125^block_diff` -*Building strategy* +_Building strategy_ The block template is built and simulated on in FIFO order. -*Updating state* +_Updating state_ We store a list of commitment addresses along with their account state. For each new block, we should update that state and check if we have to invalidate any commitments. This is critical as we don't want to return an invalid block in case a fallback block is required. ## Running -- We require Anvil to be installed in the $PATH for running tests \ No newline at end of file + +- We require Anvil to be installed in the $PATH for running tests diff --git a/bolt-sidecar/src/client.rs b/bolt-sidecar/src/client.rs index 2a8044085..0f44fdce5 100644 --- a/bolt-sidecar/src/client.rs +++ b/bolt-sidecar/src/client.rs @@ -7,7 +7,7 @@ use alloy::ClientBuilder; use alloy_eips::BlockNumberOrTag; use alloy_primitives::{Address, U256, U64}; use alloy_rpc_client as alloy; -use alloy_rpc_types::{AccountInfo, FeeHistory}; +use alloy_rpc_types::FeeHistory; use alloy_transport::TransportResult; use alloy_transport_http::Http; use reqwest::{Client, Url}; diff --git a/bolt-sidecar/src/config.rs b/bolt-sidecar/src/config.rs index 63e7e0507..54e23c114 100644 --- a/bolt-sidecar/src/config.rs +++ b/bolt-sidecar/src/config.rs @@ -1,6 +1,7 @@ use std::str::FromStr; use clap::Parser; +use secp256k1::{rand, SecretKey}; #[derive(Parser)] pub(super) struct Opts { @@ -17,7 +18,7 @@ pub(super) struct Opts { pub struct Config { pub rpc_port: u16, - pub private_key: secp256k1::SecretKey, + pub private_key: SecretKey, pub limits: Limits, } @@ -25,42 +26,40 @@ impl Default for Config { fn default() -> Self { Self { rpc_port: 8000, - private_key: secp256k1::SecretKey::new(&mut secp256k1::rand::thread_rng()), + private_key: SecretKey::new(&mut rand::thread_rng()), limits: Limits::default(), } } } -impl From for Config { - fn from(opts: Opts) -> Self { - // Start with default config +impl TryFrom for Config { + type Error = eyre::Report; + + fn try_from(opts: Opts) -> eyre::Result { let mut config = Config::default(); if let Some(port) = opts.port { config.rpc_port = port; } - let private_key = secp256k1::SecretKey::from_str(&opts.private_key) - .expect("Invalid secpk256k1 private key"); - - config.private_key = private_key; - if let Some(max_commitments) = opts.max_commitments { - config.limits.max_commitments_per_block = max_commitments; + config.limits.max_commitments_per_slot = max_commitments; } - config + config.private_key = SecretKey::from_str(&opts.private_key)?; + + Ok(config) } } pub struct Limits { - pub max_commitments_per_block: usize, + pub max_commitments_per_slot: usize, } impl Default for Limits { fn default() -> Self { Self { - max_commitments_per_block: 6, + max_commitments_per_slot: 6, } } } diff --git a/bolt-sidecar/src/crypto.rs b/bolt-sidecar/src/crypto.rs new file mode 100644 index 000000000..44e4528b1 --- /dev/null +++ b/bolt-sidecar/src/crypto.rs @@ -0,0 +1,53 @@ +use secp256k1::{ecdsa::Signature, Message, PublicKey, SecretKey}; + +/// Trait for any types that can be signed and verified with ECDSA. +/// This trait is used to abstract over the signing and verification of different types. +pub trait SignableECDSA { + /// Create a digest of the object that can be signed. + /// This API doesn't enforce a specific hash or encoding method. + fn digest(&self) -> Message; + + /// Sign the object with the given key. Returns the signature. + /// + /// Note: The default implementation should be used where possible. + fn sign(&self, key: &SecretKey) -> Signature { + secp256k1::Secp256k1::new().sign_ecdsa(&self.digest(), key) + } + + /// Verify the signature of the object with the given public key. + /// + /// Note: The default implementation should be used where possible. + fn verify(&self, signature: &Signature, pubkey: &PublicKey) -> bool { + secp256k1::Secp256k1::new() + .verify_ecdsa(&self.digest(), signature, pubkey) + .is_ok() + } +} + +/// A signer that can sign any type that implements `Signable{curve}` trait. +pub struct Signer { + secp256k1_key: SecretKey, +} + +impl Signer { + /// Create a new signer with the given SECP256K1 secret key. + pub fn new(secp256k1_key: SecretKey) -> Self { + Self { secp256k1_key } + } + + /// Sign the given object with the SECP256K1 key and ECDSA algorithm. + pub fn sign_ecdsa(&self, obj: &T) -> Signature { + obj.sign(&self.secp256k1_key) + } + + /// Verify the given object with the SECP256K1 key and ECDSA algorithm. + #[allow(dead_code)] + pub fn verify_ecdsa( + &self, + obj: &T, + sig: &Signature, + pubkey: &PublicKey, + ) -> bool { + obj.verify(sig, pubkey) + } +} diff --git a/bolt-sidecar/src/json_rpc/api.rs b/bolt-sidecar/src/json_rpc/api.rs index 8a6b8e90e..0d2a0b2d0 100644 --- a/bolt-sidecar/src/json_rpc/api.rs +++ b/bolt-sidecar/src/json_rpc/api.rs @@ -1,107 +1,161 @@ -use std::{num::NonZeroUsize, sync::Arc}; +use std::{num::NonZeroUsize, str::FromStr, sync::Arc}; +use alloy_consensus::TxEnvelope; +use alloy_eips::eip2718::Decodable2718; +use alloy_primitives::Signature; use parking_lot::RwLock; -use secp256k1::{ - hashes::{sha256, Hash}, - Message, Secp256k1, SecretKey, -}; +use secp256k1::SecretKey; +use serde_json::Value; use thiserror::Error; use tracing::info; -use super::types::{PreconfirmationRequestParams, Slot}; +use super::types::InclusionRequestParams; +use crate::{ + crypto::{SignableECDSA, Signer}, + json_rpc::types::InclusionRequestResponse, + types::Slot, +}; -/// Default size of the preconfirmation cache (implemented as a LRU). -const DEFAULT_PRECONFIRMATION_CACHE_SIZE: usize = 1000; +/// Default size of the api request cache (implemented as a LRU). +const DEFAULT_API_REQUEST_CACHE_SIZE: usize = 1000; +/// An error that can occur while processing any API request. #[derive(Error, Debug)] -pub enum PreconfirmationError { +pub enum ApiError { #[error("failed to parse JSON: {0}")] Parse(#[from] serde_json::Error), #[error("failed to decode hex string: {0}")] DecodeHex(#[from] hex::FromHexError), - #[error("failed while processing preconfirmation: {0}")] + #[error("duplicate: the same request already exists")] + DuplicateRequest, + #[error("signature error: {0}")] + Signature(#[from] alloy_primitives::SignatureError), + #[error("failed to decode RLP: {0}")] + Rlp(#[from] alloy_rlp::Error), + #[error("failed while processing API request: {0}")] Custom(String), } +/// Alias for the result of an API call that returns a JSON value. +pub type JsonApiResult = Result; + +/// The JSON-RPC API trait that defines the methods that can be called. +#[async_trait::async_trait] +pub trait CommitmentsRpc { + /// Request an inclusion commitment for a given slot. + async fn request_inclusion_commitment(&self, params: Value) -> JsonApiResult; +} + +/// The struct that implements handlers for all JSON-RPC API methods. +/// +/// # Functionality +/// - We keep track of API requests in a local cache in order to avoid +/// accepting duplicate commitments from users. +/// - We also sign each request with a BLS signature to irrevocably bind +/// the request to this sidecar's identity. pub struct JsonRpcApi { - cache: Arc>>>, - private_key: Option, + /// A cache of commitment requests. + cache: Arc>>>, + /// The signer for this sidecar. + signer: Signer, } impl JsonRpcApi { /// Create a new instance of the JSON-RPC API. - pub fn new(private_key: Option) -> Self { - let cap = NonZeroUsize::new(DEFAULT_PRECONFIRMATION_CACHE_SIZE).unwrap(); + pub fn new(private_key: SecretKey) -> Self { + let cap = NonZeroUsize::new(DEFAULT_API_REQUEST_CACHE_SIZE).unwrap(); Self { cache: Arc::new(RwLock::new(lru::LruCache::new(cap))), - private_key, + signer: Signer::new(private_key), } } } #[async_trait::async_trait] -pub trait PreconfirmationRpc { - async fn request_preconfirmation( - &self, - params: serde_json::Value, - ) -> Result; -} - -#[async_trait::async_trait] -impl PreconfirmationRpc for JsonRpcApi { - async fn request_preconfirmation( - &self, - params: serde_json::Value, - ) -> Result { +impl CommitmentsRpc for JsonRpcApi { + async fn request_inclusion_commitment(&self, params: Value) -> JsonApiResult { let Some(params) = params.as_array().and_then(|a| a.first()).cloned() else { - return Err(PreconfirmationError::Custom( + return Err(ApiError::Custom( "request params must be an array with a single object".to_string(), )); }; - let params = serde_json::from_value::(params)?; - info!(?params, "received preconfirmation request"); - - // sanity checks: tx hash and raw tx must be valid hex strings - hex::decode(params.tx_hash.trim_start_matches("0x")) - .map_err(PreconfirmationError::DecodeHex)?; - hex::decode(params.raw_tx.trim_start_matches("0x")) - .map_err(PreconfirmationError::DecodeHex)?; - if params.tx_hash.len() != 66 || params.raw_tx.len() % 2 != 0 { - return Err(PreconfirmationError::Custom( - "tx hash and raw tx must be valid hex strings".to_string(), + let params = serde_json::from_value::(params)?; + info!(?params, "received inclusion commitment request"); + + // parse the raw transaction bytes + let hex_decoded_tx = hex::decode(params.message.tx.trim_start_matches("0x"))?; + let transaction = TxEnvelope::decode_2718(&mut hex_decoded_tx.as_slice())?; + let tx_sender = transaction.recover_signer()?; + + // validate the user's signature + let user_sig = Signature::from_str(params.signature.trim_start_matches("0x"))?; + let signer_address = user_sig.recover_address_from_msg(params.message.digest().as_ref())?; + + // TODO: relax this check to allow for external signers to request commitments + // about transactions that they did not sign themselves + if signer_address != tx_sender { + return Err(ApiError::Custom( + "commitment signature does not match the transaction sender".to_string(), )); } - // sign the preconfirmation request object - let signature = if let Some(pk) = self.private_key { - let secp = Secp256k1::new(); - let digest = sha256::Hash::hash(¶ms.as_bytes()); - let message = Message::from_digest(digest.to_byte_array()); - Some(secp.sign_ecdsa(&message, &pk).to_string()) - } else { - None - }; - { let mut cache = self.cache.write(); - if let Some(preconfs) = cache.get_mut(¶ms.slot) { - if preconfs.iter().any(|p| p.tx_hash == params.tx_hash) { - return Err(PreconfirmationError::Custom( - "this preconfirmation request already exists".to_string(), - )); + if let Some(commitments) = cache.get_mut(¶ms.message.slot) { + if commitments.iter().any(|p| p == ¶ms) { + return Err(ApiError::DuplicateRequest); } - preconfs.push(params); + commitments.push(params.clone()); } else { - cache.put(params.slot, vec![params]); + cache.put(params.message.slot, vec![params.clone()]); } } // Drop the lock - Ok(serde_json::json!({ - "status": "ok", - "signature": signature, - })) + // sign the commitment request object + let sidecar_signature = self.signer.sign_ecdsa(¶ms).to_string(); + + // TODO: simulate and check if the transaction can be included in the next block + // self.block_builder.try_append(params.slot, params.tx) + + // TODO: check if there is enough time left in the current slot + + // TODO: If valid, broadcast the commitment to all connected relays + + Ok(serde_json::to_value(InclusionRequestResponse { + request: params, + signature: sidecar_signature, + })?) + } +} + +#[cfg(test)] +mod tests { + use serde_json::Value; + + use super::{CommitmentsRpc, JsonApiResult}; + + struct MockCommitmentsRpc; + + #[async_trait::async_trait] + impl CommitmentsRpc for MockCommitmentsRpc { + async fn request_inclusion_commitment(&self, _params: Value) -> JsonApiResult { + Ok(Value::Null) + } + } + + #[tokio::test] + async fn test_request_inclusion_commitment() { + let rpc = MockCommitmentsRpc; + let params = serde_json::json!([{ + "slot": 1, + "tx": "0x1234", + "signature": "0x5678", + }]); + + let result = rpc.request_inclusion_commitment(params).await; + assert!(result.is_ok()); } } diff --git a/bolt-sidecar/src/json_rpc/mod.rs b/bolt-sidecar/src/json_rpc/mod.rs index ae01bc6fc..838ddec58 100644 --- a/bolt-sidecar/src/json_rpc/mod.rs +++ b/bolt-sidecar/src/json_rpc/mod.rs @@ -1,6 +1,7 @@ use std::convert::Infallible; use std::sync::Arc; +use api::JsonRpcApi; use bytes::Bytes; use secp256k1::SecretKey; use tokio::sync::mpsc; @@ -8,14 +9,13 @@ use tracing::{error, info}; use warp::{http::Method, reject::Rejection, Filter}; mod api; +mod spec; mod types; -use self::{ - api::{JsonRpcApi, PreconfirmationRpc}, - types::{JsonRpcError, JsonRpcRequest, JsonRpcResponse}, -}; +use self::api::CommitmentsRpc; +use self::spec::{JsonRpcError, JsonRpcRequest, JsonRpcResponse}; -pub async fn start_server(port: u16, pk: Option) -> eyre::Result> { +pub async fn start_server(port: u16, pk: SecretKey) -> eyre::Result> { let (shutdown_tx, mut shutdown_rx) = mpsc::channel(1); let cors = warp::cors().allow_any_origin().allow_method(Method::POST); @@ -49,20 +49,22 @@ async fn handle_rpc_request( let req = serde_json::from_slice::(&req_bytes).map_err(|e| { error!(err = ?e, "failed parsing json rpc request"); warp::reject::custom(JsonRpcError { - code: -32700, message: "Request parse error".to_string(), + code: -32700, + data: None, }) })?; tracing::debug!(?req, "received rpc request"); let res = match req.method.as_str() { - "eth_requestPreconfirmation" => rpc_api.request_preconfirmation(req.params).await?, + "bolt_inclusionPreconfirmation" => rpc_api.request_inclusion_commitment(req.params).await?, _ => { error!(method = ?req.method, "RPC method not found"); return Err(warp::reject::custom(JsonRpcError { - code: -32601, message: format!("Method not found: {}", req.method), + code: -32601, + data: None, })); } }; @@ -79,19 +81,22 @@ async fn handle_rejection(err: warp::Rejection) -> Result() { Ok(warp::reply::json(&JsonRpcError { - code: -32600, message: format!("Missing header: {}", e.name()), + code: -32600, + data: None, })) } else { error!(?err, "unhandled rejection"); Ok(warp::reply::json(&JsonRpcError { - code: -32000, message: "Internal error".to_string(), + code: -32000, + data: None, })) } } diff --git a/bolt-sidecar/src/json_rpc/spec.rs b/bolt-sidecar/src/json_rpc/spec.rs new file mode 100644 index 000000000..807efc20d --- /dev/null +++ b/bolt-sidecar/src/json_rpc/spec.rs @@ -0,0 +1,71 @@ +use serde::{Deserialize, Serialize}; +use serde_json::Value; +use tracing::error; + +use super::api::ApiError; + +/// Standard JSON-RPC error object +/// +/// spec: https://www.jsonrpc.org/specification#error_object +#[derive(Debug, Default, Serialize, Deserialize)] +pub struct JsonRpcError { + pub code: i64, + pub message: String, + pub data: Option, +} + +impl warp::reject::Reject for JsonRpcError {} + +/// Standard JSON-RPC request object +/// +/// spec: https://www.jsonrpc.org/specification#request_object +#[derive(Debug, Serialize, Deserialize)] +pub struct JsonRpcRequest { + pub jsonrpc: String, + pub id: String, + pub method: String, + pub params: serde_json::Value, +} + +/// Standard JSON-RPC response object +/// +/// spec: https://www.jsonrpc.org/specification#response_object +#[derive(Debug, Serialize, Deserialize)] +pub struct JsonRpcResponse { + pub jsonrpc: String, + pub id: String, + pub result: serde_json::Value, +} + +impl From for JsonRpcError { + fn from(err: eyre::Report) -> Self { + Self { + message: err.to_string(), + code: -32000, + data: None, + } + } +} + +impl From for warp::reply::Json { + fn from(err: JsonRpcError) -> Self { + warp::reply::json(&err) + } +} + +impl From for JsonRpcError { + fn from(err: ApiError) -> Self { + Self { + message: err.to_string(), + code: -32000, + data: None, + } + } +} + +impl From for warp::Rejection { + fn from(err: ApiError) -> Self { + error!(err = ?err, "failed to process RPC request"); + warp::reject::custom(JsonRpcError::from(err)) + } +} diff --git a/bolt-sidecar/src/json_rpc/types.rs b/bolt-sidecar/src/json_rpc/types.rs index 1b7bb17ae..e4d79ee3f 100644 --- a/bolt-sidecar/src/json_rpc/types.rs +++ b/bolt-sidecar/src/json_rpc/types.rs @@ -1,78 +1,55 @@ +use alloy_primitives::keccak256; +use secp256k1::Message; use serde::{Deserialize, Serialize}; -use tracing::error; -use super::api::PreconfirmationError; +use crate::{crypto::SignableECDSA, types::Slot}; -pub type Slot = u64; - -#[derive(Serialize, Deserialize, Debug, Clone)] +/// The API parameters to request an inclusion commitment for a given slot. +#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)] #[serde(rename_all = "camelCase")] -pub struct PreconfirmationRequestParams { - pub slot: Slot, - pub tx_hash: String, - pub raw_tx: String, -} - -impl PreconfirmationRequestParams { - pub fn as_bytes(&self) -> Vec { - let mut bytes = Vec::new(); - bytes.extend_from_slice(&self.slot.to_be_bytes()); - bytes.extend_from_slice(&hex::decode(&self.tx_hash[2..]).unwrap()); - bytes.extend_from_slice(&hex::decode(&self.raw_tx[2..]).unwrap()); - bytes - } -} - -#[derive(Debug, Default, Serialize, Deserialize)] -pub struct JsonRpcError { - pub code: i64, - pub message: String, +pub struct InclusionRequestParams { + #[serde(flatten)] + pub message: InclusionRequestMessage, + pub signature: String, } -impl warp::reject::Reject for JsonRpcError {} - -#[derive(Debug, Serialize, Deserialize)] -pub struct JsonRpcRequest { - pub jsonrpc: String, - pub id: String, - pub method: String, - pub params: serde_json::Value, +/// The message to request an inclusion commitment for a given slot. +#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)] +#[serde(rename_all = "camelCase")] +pub struct InclusionRequestMessage { + pub slot: Slot, + pub tx: String, } -#[derive(Debug, Serialize, Deserialize)] -pub struct JsonRpcResponse { - pub jsonrpc: String, - pub id: String, - pub result: serde_json::Value, -} +/// What users will need to sign to request an inclusion commitment. +impl SignableECDSA for InclusionRequestMessage { + fn digest(&self) -> Message { + let mut data = Vec::new(); + data.extend_from_slice(&self.slot.to_le_bytes()); + data.extend_from_slice(self.tx.as_bytes()); -impl From for JsonRpcError { - fn from(err: eyre::Report) -> Self { - Self { - code: -32000, - message: err.to_string(), - } + let hash = keccak256(data).0; + Message::from_digest_slice(&hash).expect("digest") } } -impl From for warp::reply::Json { - fn from(err: JsonRpcError) -> Self { - warp::reply::json(&err) - } -} +/// What the proposer sidecar will need to sign to confirm the inclusion request. +impl SignableECDSA for InclusionRequestParams { + fn digest(&self) -> Message { + let mut data = Vec::new(); + data.extend_from_slice(&self.message.slot.to_le_bytes()); + data.extend_from_slice(self.message.tx.as_bytes()); + data.extend_from_slice(self.signature.as_bytes()); -impl From for JsonRpcError { - fn from(err: PreconfirmationError) -> Self { - Self { - code: -32000, - message: err.to_string(), - } + let hash = keccak256(data).0; + Message::from_digest_slice(&hash).expect("digest") } } -impl From for warp::Rejection { - fn from(err: PreconfirmationError) -> Self { - error!(err = ?err, "failed to process RPC request"); - warp::reject::custom(JsonRpcError::from(err)) - } +/// The response to an inclusion request, including the request and a BLS signature. +#[derive(Serialize, Deserialize, Debug)] +#[serde(rename_all = "camelCase")] +pub struct InclusionRequestResponse { + pub request: InclusionRequestParams, + pub signature: String, } diff --git a/bolt-sidecar/src/main.rs b/bolt-sidecar/src/main.rs index a4f932e7f..f8fe8a1cb 100644 --- a/bolt-sidecar/src/main.rs +++ b/bolt-sidecar/src/main.rs @@ -1,17 +1,20 @@ +#![doc = include_str!("../README.md")] +#![warn(missing_debug_implementations, missing_docs, rustdoc::all)] +#![deny(unused_must_use, rust_2018_idioms)] +#![cfg_attr(docsrs, feature(doc_cfg, doc_auto_cfg))] + use clap::Parser; use tracing::info; mod client; mod common; mod config; +mod crypto; mod json_rpc; mod pubsub; mod state; mod template; mod types; -use json_rpc::start_server; - -use crate::config::Config; #[tokio::main] async fn main() -> eyre::Result<()> { @@ -21,9 +24,9 @@ async fn main() -> eyre::Result<()> { let opts = config::Opts::parse(); - let config = Config::from(opts); + let config = config::Config::try_from(opts)?; - let shutdown_tx = start_server(config.rpc_port, Some(config.private_key)).await?; + let shutdown_tx = json_rpc::start_server(config.rpc_port, config.private_key).await?; tokio::signal::ctrl_c().await?; shutdown_tx.send(()).await.ok(); diff --git a/bolt-sidecar/src/state/mod.rs b/bolt-sidecar/src/state/mod.rs index c9039c82b..08bc4bb24 100644 --- a/bolt-sidecar/src/state/mod.rs +++ b/bolt-sidecar/src/state/mod.rs @@ -215,8 +215,6 @@ mod tests { use alloy_signer_wallet::LocalWallet; use fetcher::StateClient; - use crate::types::commitment::InclusionRequest; - use super::*; fn launch_anvil() -> AnvilInstance { diff --git a/bolt-sidecar/src/types/commitment.rs b/bolt-sidecar/src/types/commitment.rs index 158ee0ab8..ed5ff2976 100644 --- a/bolt-sidecar/src/types/commitment.rs +++ b/bolt-sidecar/src/types/commitment.rs @@ -1,7 +1,7 @@ use alloy_primitives::{Bytes, Signature, TxHash}; use alloy_rpc_types::Transaction; -use super::Slot; +use crate::types::Slot; /// A request for a proposer commitment. /// diff --git a/bolt-sidecar/src/types/mod.rs b/bolt-sidecar/src/types/mod.rs index 437fb2768..27986d26b 100644 --- a/bolt-sidecar/src/types/mod.rs +++ b/bolt-sidecar/src/types/mod.rs @@ -2,6 +2,7 @@ use alloy_primitives::U256; pub mod commitment; +/// An alias for a Beacon Chain slot number pub type Slot = u64; /// Minimal account state needed for commitment validation.