diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 26ef781b68..30ac52b6ef 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -282,6 +282,6 @@ jobs:
|
| Docker | [${{ env.VERSION }}](https://hub.docker.com/r/${{ env.IMAGE_NAME }}/tags?page=1&ordering=last_updated&name=${{ env.VERSION }}) | [${{ env.IMAGE_NAME }}](https://hub.docker.com/r/${{ env.IMAGE_NAME }}) |
ENDBODY
)
- assets=(./lighthouse-*.tar.gz*)
+ assets=(./lighthouse-*.tar.gz*/lighthouse-*.tar.gz*)
tag_name="${{ env.VERSION }}"
echo "$body" | gh release create --draft -F "-" "$tag_name" "${assets[@]}"
diff --git a/Cargo.lock b/Cargo.lock
index b111a18749..f58f51ed21 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -90,6 +90,16 @@ dependencies = [
"generic-array",
]
+[[package]]
+name = "aead"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0"
+dependencies = [
+ "crypto-common",
+ "generic-array",
+]
+
[[package]]
name = "aes"
version = "0.7.5"
@@ -99,7 +109,7 @@ dependencies = [
"cfg-if",
"cipher 0.3.0",
"cpufeatures",
- "ctr",
+ "ctr 0.8.0",
"opaque-debug",
]
@@ -116,34 +126,37 @@ dependencies = [
[[package]]
name = "aes-gcm"
-version = "0.9.4"
+version = "0.9.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "df5f85a83a7d8b0442b6aa7b504b8212c1733da07b98aae43d4bc21b2cb3cdf6"
+checksum = "bc3be92e19a7ef47457b8e6f90707e12b6ac5d20c6f3866584fa3be0787d839f"
dependencies = [
- "aead",
+ "aead 0.4.3",
"aes 0.7.5",
"cipher 0.3.0",
- "ctr",
- "ghash",
+ "ctr 0.7.0",
+ "ghash 0.4.4",
+ "subtle",
+]
+
+[[package]]
+name = "aes-gcm"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1"
+dependencies = [
+ "aead 0.5.2",
+ "aes 0.8.3",
+ "cipher 0.4.4",
+ "ctr 0.9.2",
+ "ghash 0.5.0",
"subtle",
]
[[package]]
name = "ahash"
-version = "0.7.7"
+version = "0.8.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5a824f2aa7e75a0c98c5a504fceb80649e9c35265d44525b5f94de4771a395cd"
-dependencies = [
- "getrandom",
- "once_cell",
- "version_check",
-]
-
-[[package]]
-name = "ahash"
-version = "0.8.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a"
+checksum = "77c3a9648d43b9cd48db467b3f87fdd6e146bcc88ab0180006cef2179fe11d01"
dependencies = [
"cfg-if",
"once_cell",
@@ -197,15 +210,15 @@ dependencies = [
[[package]]
name = "anyhow"
-version = "1.0.75"
+version = "1.0.79"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
+checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca"
[[package]]
name = "arbitrary"
-version = "1.3.1"
+version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a2e1373abdaa212b704512ec2bd8b26bd0b7d5c3f70117411a5d9a451383c859"
+checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110"
dependencies = [
"derive_arbitrary",
]
@@ -274,43 +287,55 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "155a5a185e42c6b77ac7b88a15143d930a9e9727a5b7b77eed417404ab15c247"
[[package]]
-name = "async-io"
-version = "1.13.0"
+name = "async-channel"
+version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af"
+checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35"
+dependencies = [
+ "concurrent-queue",
+ "event-listener 2.5.3",
+ "futures-core",
+]
+
+[[package]]
+name = "async-io"
+version = "2.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6afaa937395a620e33dc6a742c593c01aced20aa376ffb0f628121198578ccc7"
dependencies = [
"async-lock",
- "autocfg",
"cfg-if",
"concurrent-queue",
+ "futures-io",
"futures-lite",
- "log",
"parking",
"polling",
- "rustix 0.37.26",
+ "rustix 0.38.30",
"slab",
- "socket2 0.4.9",
- "waker-fn",
+ "tracing",
+ "windows-sys 0.52.0",
]
[[package]]
name = "async-lock"
-version = "2.8.0"
+version = "3.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b"
+checksum = "d034b430882f8381900d3fe6f0aaa3ad94f2cb4ac519b429692a1bc2dda4ae7b"
dependencies = [
- "event-listener",
+ "event-listener 4.0.3",
+ "event-listener-strategy",
+ "pin-project-lite",
]
[[package]]
name = "async-trait"
-version = "0.1.74"
+version = "0.1.77"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9"
+checksum = "c980ee35e870bd1a4d2c8294d4c04d0499e67bca1e4b5cefcc693c2fa00caea9"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.38",
+ "syn 2.0.48",
]
[[package]]
@@ -324,19 +349,6 @@ dependencies = [
"rustc_version",
]
-[[package]]
-name = "asynchronous-codec"
-version = "0.6.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4057f2c32adbb2fc158e22fb38433c8e9bbf76b75a4732c7c0cbaf695fb65568"
-dependencies = [
- "bytes",
- "futures-sink",
- "futures-util",
- "memchr",
- "pin-project-lite",
-]
-
[[package]]
name = "asynchronous-codec"
version = "0.7.0"
@@ -356,7 +368,7 @@ version = "0.16.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fdb8867f378f33f78a811a8eb9bf108ad99430d7aad43315dd9319c827ef6247"
dependencies = [
- "http 0.2.9",
+ "http 0.2.11",
"log",
"url",
"wildmatch",
@@ -368,7 +380,7 @@ version = "0.24.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8d9a9bf8b79a749ee0b911b91b671cc2b6c670bdbc7e3dfd537576ddc94bb2a2"
dependencies = [
- "http 0.2.9",
+ "http 0.2.11",
"log",
"url",
]
@@ -404,9 +416,9 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
[[package]]
name = "axum"
-version = "0.7.2"
+version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "202651474fe73c62d9e0a56c6133f7a0ff1dc1c8cf7a5b03381af2a26553ac9d"
+checksum = "1236b4b292f6c4d6dc34604bb5120d85c3fe1d1aa596bd5cc52ca054d13e7b9e"
dependencies = [
"async-trait",
"axum-core",
@@ -415,7 +427,7 @@ dependencies = [
"http 1.0.0",
"http-body 1.0.0",
"http-body-util",
- "hyper 1.0.1",
+ "hyper 1.1.0",
"hyper-util",
"itoa",
"matchit",
@@ -433,13 +445,14 @@ dependencies = [
"tower",
"tower-layer",
"tower-service",
+ "tracing",
]
[[package]]
name = "axum-core"
-version = "0.4.1"
+version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "77cb22c689c44d4c07b0ab44ebc25d69d8ae601a2f28fb8d672d344178fa17aa"
+checksum = "a15c63fd72d41492dc4f497196f5da1fb04fb7529e631d73630d1b491e47a2e3"
dependencies = [
"async-trait",
"bytes",
@@ -453,6 +466,7 @@ dependencies = [
"sync_wrapper",
"tower-layer",
"tower-service",
+ "tracing",
]
[[package]]
@@ -496,9 +510,9 @@ checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
[[package]]
name = "base64"
-version = "0.21.5"
+version = "0.21.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9"
+checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567"
[[package]]
name = "base64ct"
@@ -533,7 +547,7 @@ dependencies = [
"lazy_static",
"lighthouse_metrics",
"logging",
- "lru 0.12.0",
+ "lru",
"maplit",
"merkle_proof",
"oneshot_broadcast",
@@ -569,7 +583,7 @@ dependencies = [
[[package]]
name = "beacon_node"
-version = "4.5.0"
+version = "4.6.0-rc.0"
dependencies = [
"beacon_chain",
"clap",
@@ -585,7 +599,7 @@ dependencies = [
"genesis",
"hex",
"http_api",
- "hyper 1.0.1",
+ "hyper 1.1.0",
"lighthouse_network",
"lighthouse_version",
"monitoring_api",
@@ -675,7 +689,7 @@ dependencies = [
"regex",
"rustc-hash",
"shlex",
- "syn 2.0.38",
+ "syn 2.0.48",
"which",
]
@@ -791,7 +805,7 @@ dependencies = [
[[package]]
name = "boot_node"
-version = "4.5.0"
+version = "4.6.0-rc.0"
dependencies = [
"beacon_node",
"clap",
@@ -929,9 +943,9 @@ dependencies = [
[[package]]
name = "cargo-platform"
-version = "0.1.4"
+version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "12024c4645c97566567129c204f65d5815a8c9aecf30fcbe682b2fe034996d36"
+checksum = "ceed8ef69d8518a5dda55c07425450b58a4e1946f4951eab6d7191ee86c2443d"
dependencies = [
"serde",
]
@@ -983,25 +997,24 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]]
name = "chacha20"
-version = "0.8.2"
+version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5c80e5460aa66fe3b91d40bcbdab953a597b60053e34d684ac6903f863b680a6"
+checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818"
dependencies = [
"cfg-if",
- "cipher 0.3.0",
+ "cipher 0.4.4",
"cpufeatures",
- "zeroize",
]
[[package]]
name = "chacha20poly1305"
-version = "0.9.1"
+version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a18446b09be63d457bbec447509e85f662f32952b035ce892290396bc0b0cff5"
+checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35"
dependencies = [
- "aead",
+ "aead 0.5.2",
"chacha20",
- "cipher 0.3.0",
+ "cipher 0.4.4",
"poly1305",
"zeroize",
]
@@ -1035,13 +1048,14 @@ checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad"
dependencies = [
"crypto-common",
"inout",
+ "zeroize",
]
[[package]]
name = "clang-sys"
-version = "1.6.1"
+version = "1.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f"
+checksum = "67523a3b4be3ce1989d607a828d036249522dd9c1c8de7f4dd2dae43a37369d1"
dependencies = [
"glob",
"libc",
@@ -1148,18 +1162,18 @@ dependencies = [
[[package]]
name = "concurrent-queue"
-version = "2.3.0"
+version = "2.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f057a694a54f12365049b0958a1685bb52d567f5593b355fbf685838e873d400"
+checksum = "d16048cd947b08fa32c24458a22f5dc5e835264f689f4f5653210c69fd107363"
dependencies = [
"crossbeam-utils",
]
[[package]]
name = "const-oid"
-version = "0.9.5"
+version = "0.9.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f"
+checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8"
[[package]]
name = "constant_time_eq"
@@ -1175,9 +1189,9 @@ checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
[[package]]
name = "core-foundation"
-version = "0.9.3"
+version = "0.9.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f"
dependencies = [
"core-foundation-sys",
"libc",
@@ -1185,9 +1199,9 @@ dependencies = [
[[package]]
name = "core-foundation-sys"
-version = "0.8.4"
+version = "0.8.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f"
[[package]]
name = "core2"
@@ -1200,9 +1214,9 @@ dependencies = [
[[package]]
name = "cpufeatures"
-version = "0.2.9"
+version = "0.2.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1"
+checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504"
dependencies = [
"libc",
]
@@ -1254,46 +1268,37 @@ dependencies = [
[[package]]
name = "crossbeam-channel"
-version = "0.5.8"
+version = "0.5.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
+checksum = "176dc175b78f56c0f321911d9c8eb2b77a78a4860b9c19db83835fea1a46649b"
dependencies = [
- "cfg-if",
"crossbeam-utils",
]
[[package]]
name = "crossbeam-deque"
-version = "0.8.3"
+version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
+checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d"
dependencies = [
- "cfg-if",
"crossbeam-epoch",
"crossbeam-utils",
]
[[package]]
name = "crossbeam-epoch"
-version = "0.9.15"
+version = "0.9.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
+checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
dependencies = [
- "autocfg",
- "cfg-if",
"crossbeam-utils",
- "memoffset 0.9.0",
- "scopeguard",
]
[[package]]
name = "crossbeam-utils"
-version = "0.8.16"
+version = "0.8.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
-dependencies = [
- "cfg-if",
-]
+checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345"
[[package]]
name = "crunchy"
@@ -1315,9 +1320,9 @@ dependencies = [
[[package]]
name = "crypto-bigint"
-version = "0.5.3"
+version = "0.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "740fe28e594155f10cfc383984cbefd529d7396050557148f79cb0f621204124"
+checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76"
dependencies = [
"generic-array",
"rand_core",
@@ -1332,6 +1337,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
dependencies = [
"generic-array",
+ "rand_core",
"typenum",
]
@@ -1347,9 +1353,9 @@ dependencies = [
[[package]]
name = "crypto-mac"
-version = "0.11.1"
+version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714"
+checksum = "25fab6889090c8133f3deb8f73ba3c65a7f456f66436fc012a1b1e272b1e103e"
dependencies = [
"generic-array",
"subtle",
@@ -1376,6 +1382,15 @@ dependencies = [
"memchr",
]
+[[package]]
+name = "ctr"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a232f92a03f37dd7d7dd2adc67166c77e9cd88de5b019b9a9eecfaeaf7bfd481"
+dependencies = [
+ "cipher 0.3.0",
+]
+
[[package]]
name = "ctr"
version = "0.8.0"
@@ -1386,13 +1401,22 @@ dependencies = [
]
[[package]]
-name = "ctrlc"
-version = "3.4.1"
+name = "ctr"
+version = "0.9.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "82e95fbd621905b854affdc67943b043a0fbb6ed7385fd5a25650d19a8a6cfdf"
+checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835"
+dependencies = [
+ "cipher 0.4.4",
+]
+
+[[package]]
+name = "ctrlc"
+version = "3.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b467862cc8610ca6fc9a1532d7777cee0804e678ab45410897b9396495994a0b"
dependencies = [
"nix 0.27.1",
- "windows-sys 0.48.0",
+ "windows-sys 0.52.0",
]
[[package]]
@@ -1406,7 +1430,7 @@ dependencies = [
"curve25519-dalek-derive",
"digest 0.10.7",
"fiat-crypto",
- "platforms 3.1.2",
+ "platforms 3.3.0",
"rustc_version",
"subtle",
"zeroize",
@@ -1414,13 +1438,13 @@ dependencies = [
[[package]]
name = "curve25519-dalek-derive"
-version = "0.1.0"
+version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "83fdaf97f4804dcebfa5862639bc9ce4121e82140bec2a987ac5140294865b5b"
+checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.38",
+ "syn 2.0.48",
]
[[package]]
@@ -1480,15 +1504,15 @@ dependencies = [
[[package]]
name = "data-encoding"
-version = "2.4.0"
+version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308"
+checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5"
[[package]]
name = "data-encoding-macro"
-version = "0.1.13"
+version = "0.1.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c904b33cc60130e1aeea4956ab803d08a3f4a0ca82d64ed757afac3891f2bb99"
+checksum = "20c01c06f5f429efdf2bae21eb67c28b3df3cf85b7dd2d8ef09c0838dac5d33e"
dependencies = [
"data-encoding",
"data-encoding-macro-internal",
@@ -1496,9 +1520,9 @@ dependencies = [
[[package]]
name = "data-encoding-macro-internal"
-version = "0.1.11"
+version = "0.1.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8fdf3fce3ce863539ec1d7fd1b6dcc3c645663376b43ed376bbf887733e4f772"
+checksum = "0047d07f2c89b17dd631c80450d69841a6b5d7fb17278cbc43d7e4cfcf2576f3"
dependencies = [
"data-encoding",
"syn 1.0.109",
@@ -1536,7 +1560,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e4355c25cbf99edcb6b4a0e906f6bdc6956eda149e84455bea49696429b2f8e8"
dependencies = [
"futures",
- "tokio-util 0.7.9",
+ "tokio-util 0.7.10",
]
[[package]]
@@ -1590,9 +1614,9 @@ dependencies = [
[[package]]
name = "deranged"
-version = "0.3.9"
+version = "0.3.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0f32d04922c60427da6f9fef14d042d9edddef64cb9d4ce0d64d0685fbeb1fd3"
+checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4"
dependencies = [
"powerfmt",
]
@@ -1610,13 +1634,13 @@ dependencies = [
[[package]]
name = "derive_arbitrary"
-version = "1.3.1"
+version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "53e0efad4403bfc52dc201159c4b842a246a14b98c64b55dfd0f2d89729dfeb8"
+checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.38",
+ "syn 2.0.48",
]
[[package]]
@@ -1634,9 +1658,9 @@ dependencies = [
[[package]]
name = "diesel"
-version = "2.1.3"
+version = "2.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2268a214a6f118fce1838edba3d1561cf0e78d8de785475957a580a7f8c69d33"
+checksum = "62c6fcf842f17f8c78ecf7c81d75c5ce84436b41ee07e03f490fbb5f5a8731d8"
dependencies = [
"bitflags 2.4.1",
"byteorder",
@@ -1655,7 +1679,7 @@ dependencies = [
"diesel_table_macro_syntax",
"proc-macro2",
"quote",
- "syn 2.0.38",
+ "syn 2.0.48",
]
[[package]]
@@ -1675,7 +1699,7 @@ version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fc5557efc453706fed5e4fa85006fe9817c224c3f480a34c7e5959fd700921c5"
dependencies = [
- "syn 2.0.38",
+ "syn 2.0.48",
]
[[package]]
@@ -1751,33 +1775,30 @@ dependencies = [
[[package]]
name = "discv5"
-version = "0.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "98c05fa26996c6141f78ac4fafbe297a7fa69690565ba4e0d1f2e60bde5ce501"
+version = "0.4.0"
+source = "git+https://github.com/sigp/discv5?rev=dbb4a718cd32eaed8127c3c8241bfd0fde9eb908#dbb4a718cd32eaed8127c3c8241bfd0fde9eb908"
dependencies = [
"aes 0.7.5",
- "aes-gcm",
+ "aes-gcm 0.9.2",
"arrayvec",
"delay_map",
"enr",
"fnv",
"futures",
- "hashlink 0.7.0",
+ "hashlink",
"hex",
"hkdf",
"lazy_static",
- "libp2p-core 0.40.1",
- "libp2p-identity",
- "lru 0.7.8",
+ "libp2p",
+ "lru",
"more-asserts",
"parking_lot 0.11.2",
"rand",
"rlp",
"smallvec",
- "socket2 0.4.9",
+ "socket2 0.4.10",
"tokio",
"tracing",
- "tracing-subscriber",
"uint",
"zeroize",
]
@@ -1790,7 +1811,7 @@ checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.38",
+ "syn 2.0.48",
]
[[package]]
@@ -1819,16 +1840,16 @@ dependencies = [
[[package]]
name = "ecdsa"
-version = "0.16.8"
+version = "0.16.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a4b1e0c257a9e9f25f90ff76d7a68360ed497ee519c8e428d1825ef0000799d4"
+checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca"
dependencies = [
"der 0.7.8",
"digest 0.10.7",
- "elliptic-curve 0.13.6",
+ "elliptic-curve 0.13.8",
"rfc6979 0.4.0",
- "signature 2.1.0",
- "spki 0.7.2",
+ "signature 2.2.0",
+ "spki 0.7.3",
]
[[package]]
@@ -1838,20 +1859,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53"
dependencies = [
"pkcs8 0.10.2",
- "signature 2.1.0",
+ "signature 2.2.0",
]
[[package]]
name = "ed25519-dalek"
-version = "2.0.0"
+version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7277392b266383ef8396db7fdeb1e77b6c52fed775f5df15bb24f35b72156980"
+checksum = "1f628eaec48bfd21b865dc2950cfa014450c01d2fa2b69a86c2fd5844ec523c0"
dependencies = [
"curve25519-dalek",
"ed25519",
"rand_core",
"serde",
"sha2 0.10.8",
+ "subtle",
"zeroize",
]
@@ -1917,12 +1939,12 @@ dependencies = [
[[package]]
name = "elliptic-curve"
-version = "0.13.6"
+version = "0.13.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d97ca172ae9dc9f9b779a6e3a65d308f2af74e5b8c921299075bdb4a0370e914"
+checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47"
dependencies = [
"base16ct 0.2.0",
- "crypto-bigint 0.5.3",
+ "crypto-bigint 0.5.5",
"digest 0.10.7",
"ff 0.13.0",
"generic-array",
@@ -1946,15 +1968,15 @@ dependencies = [
[[package]]
name = "enr"
-version = "0.9.1"
+version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fe81b5c06ecfdbc71dd845216f225f53b62a10cb8a16c946836a3467f701d05b"
+checksum = "2a3d8dc56e02f954cac8eb489772c552c473346fc34f67412bb6244fd647f7e4"
dependencies = [
- "base64 0.21.5",
+ "base64 0.21.7",
"bytes",
"ed25519-dalek",
"hex",
- "k256 0.13.1",
+ "k256 0.13.3",
"log",
"rand",
"rlp",
@@ -1972,7 +1994,7 @@ dependencies = [
"heck",
"proc-macro2",
"quote",
- "syn 2.0.38",
+ "syn 2.0.48",
]
[[package]]
@@ -2036,12 +2058,12 @@ dependencies = [
[[package]]
name = "errno"
-version = "0.3.5"
+version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ac3e13f66a2f95e32a39eaa81f6b95d42878ca0e1db0c7543723dfe12557e860"
+checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245"
dependencies = [
"libc",
- "windows-sys 0.48.0",
+ "windows-sys 0.52.0",
]
[[package]]
@@ -2342,9 +2364,9 @@ dependencies = [
[[package]]
name = "ethereum_serde_utils"
-version = "0.5.1"
+version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0f8cb04ea380a33e9c269fa5f8df6f2d63dee19728235f3e639e7674e038686a"
+checksum = "de4d5951468846963c24e8744c133d44f39dff2cd3a233f6be22b370d08a524f"
dependencies = [
"ethereum-types 0.14.1",
"hex",
@@ -2480,7 +2502,7 @@ dependencies = [
"getrandom",
"hashers",
"hex",
- "http 0.2.9",
+ "http 0.2.11",
"once_cell",
"parking_lot 0.11.2",
"pin-project",
@@ -2505,6 +2527,27 @@ version = "2.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
+[[package]]
+name = "event-listener"
+version = "4.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67b215c49b2b248c855fb73579eb1f4f26c38ffdc12973e20e07b91d78d5646e"
+dependencies = [
+ "concurrent-queue",
+ "parking",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "event-listener-strategy"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "958e4d70b6d5e81971bebec42271ec641e7ff4e170a6fa605f2b8a8b65cb97d3"
+dependencies = [
+ "event-listener 4.0.3",
+ "pin-project-lite",
+]
+
[[package]]
name = "execution_engine_integration"
version = "0.1.0"
@@ -2554,7 +2597,7 @@ dependencies = [
"kzg",
"lazy_static",
"lighthouse_metrics",
- "lru 0.12.0",
+ "lru",
"parking_lot 0.12.1",
"pretty_reqwest_error",
"rand",
@@ -2591,9 +2634,9 @@ dependencies = [
[[package]]
name = "eyre"
-version = "0.6.8"
+version = "0.6.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4c2b6b5a29c02cdc822728b7d7b8ae1bab3e3b05d44522770ddd49722eeac7eb"
+checksum = "b6267a1fa6f59179ea4afc8e50fd8612a3cc60bc858f786ff877a4a8cb042799"
dependencies = [
"indenter",
"once_cell",
@@ -2611,15 +2654,6 @@ version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a"
-[[package]]
-name = "fastrand"
-version = "1.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
-dependencies = [
- "instant",
-]
-
[[package]]
name = "fastrand"
version = "2.0.1"
@@ -2654,9 +2688,9 @@ checksum = "ec54ac60a7f2ee9a97cad9946f9bf629a3bc6a7ae59e68983dc9318f5a54b81a"
[[package]]
name = "fiat-crypto"
-version = "0.2.1"
+version = "0.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d0870c84016d4b481be5c9f323c24f65e31e901ae618f0e80f4308fb00de1d2d"
+checksum = "27573eac26f4dd11e2b1916c3fe1baa56407c83c71a773a8ba17ec0bca03b6b7"
[[package]]
name = "field-offset"
@@ -2664,7 +2698,7 @@ version = "0.3.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f"
dependencies = [
- "memoffset 0.9.0",
+ "memoffset",
"rustc_version",
]
@@ -2756,9 +2790,9 @@ dependencies = [
[[package]]
name = "form_urlencoded"
-version = "1.2.0"
+version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652"
+checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
dependencies = [
"percent-encoding",
]
@@ -2787,9 +2821,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c"
[[package]]
name = "futures"
-version = "0.3.29"
+version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "da0290714b38af9b4a7b094b8a37086d1b4e61f2df9122c3cad2577669145335"
+checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0"
dependencies = [
"futures-channel",
"futures-core",
@@ -2803,8 +2837,7 @@ dependencies = [
[[package]]
name = "futures-bounded"
version = "0.2.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e1e2774cc104e198ef3d3e1ff4ab40f86fa3245d6cb6a3a46174f21463cee173"
+source = "git+https://github.com/sigp/rust-libp2p/?rev=b96b90894faab0a1eed78e1c82c6452138a3538a#b96b90894faab0a1eed78e1c82c6452138a3538a"
dependencies = [
"futures-timer",
"futures-util",
@@ -2812,9 +2845,9 @@ dependencies = [
[[package]]
name = "futures-channel"
-version = "0.3.29"
+version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb"
+checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78"
dependencies = [
"futures-core",
"futures-sink",
@@ -2822,15 +2855,15 @@ dependencies = [
[[package]]
name = "futures-core"
-version = "0.3.29"
+version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c"
+checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d"
[[package]]
name = "futures-executor"
-version = "0.3.29"
+version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0f4fb8693db0cf099eadcca0efe2a5a22e4550f98ed16aba6c48700da29597bc"
+checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d"
dependencies = [
"futures-core",
"futures-task",
@@ -2840,34 +2873,29 @@ dependencies = [
[[package]]
name = "futures-io"
-version = "0.3.29"
+version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa"
+checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1"
[[package]]
name = "futures-lite"
-version = "1.13.0"
+version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce"
+checksum = "445ba825b27408685aaecefd65178908c36c6e96aaf6d8599419d46e624192ba"
dependencies = [
- "fastrand 1.9.0",
"futures-core",
- "futures-io",
- "memchr",
- "parking",
"pin-project-lite",
- "waker-fn",
]
[[package]]
name = "futures-macro"
-version = "0.3.29"
+version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb"
+checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.38",
+ "syn 2.0.48",
]
[[package]]
@@ -2877,20 +2905,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "35bd3cf68c183738046838e300353e4716c674dc5e56890de4826801a6622a28"
dependencies = [
"futures-io",
- "rustls",
+ "rustls 0.21.10",
]
[[package]]
name = "futures-sink"
-version = "0.3.29"
+version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817"
+checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5"
[[package]]
name = "futures-task"
-version = "0.3.29"
+version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2"
+checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004"
[[package]]
name = "futures-ticker"
@@ -2911,9 +2939,9 @@ checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c"
[[package]]
name = "futures-util"
-version = "0.3.29"
+version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104"
+checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48"
dependencies = [
"futures-channel",
"futures-core",
@@ -2970,9 +2998,9 @@ dependencies = [
[[package]]
name = "getrandom"
-version = "0.2.10"
+version = "0.2.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
+checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5"
dependencies = [
"cfg-if",
"js-sys",
@@ -2988,35 +3016,43 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1583cc1656d7839fd3732b80cf4f38850336cdb9b8ded1cd399ca62958de3c99"
dependencies = [
"opaque-debug",
- "polyval",
+ "polyval 0.5.3",
+]
+
+[[package]]
+name = "ghash"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d930750de5717d2dd0b8c0d42c076c0e884c81a73e6cab859bbd2339c71e3e40"
+dependencies = [
+ "opaque-debug",
+ "polyval 0.6.1",
]
[[package]]
name = "gimli"
-version = "0.28.0"
+version = "0.28.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0"
+checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253"
[[package]]
name = "git-version"
-version = "0.3.5"
+version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f6b0decc02f4636b9ccad390dcbe77b722a77efedfa393caf8379a51d5c61899"
+checksum = "1ad568aa3db0fcbc81f2f116137f263d7304f512a1209b35b85150d3ef88ad19"
dependencies = [
"git-version-macro",
- "proc-macro-hack",
]
[[package]]
name = "git-version-macro"
-version = "0.3.5"
+version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fe69f1cbdb6e28af2bac214e943b99ce8a0a06b447d15d3e61161b0423139f3f"
+checksum = "53010ccb100b96a67bc32c0175f0ed1426b31b655d562898e57325f81c023ac0"
dependencies = [
- "proc-macro-hack",
"proc-macro2",
"quote",
- "syn 1.0.109",
+ "syn 2.0.48",
]
[[package]]
@@ -3049,28 +3085,28 @@ dependencies = [
[[package]]
name = "h2"
-version = "0.3.21"
+version = "0.3.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833"
+checksum = "b553656127a00601c8ae5590fcfdc118e4083a7924b6cf4ffc1ea4b99dc429d7"
dependencies = [
"bytes",
"fnv",
"futures-core",
"futures-sink",
"futures-util",
- "http 0.2.9",
- "indexmap 1.9.3",
+ "http 0.2.11",
+ "indexmap 2.1.0",
"slab",
"tokio",
- "tokio-util 0.7.9",
+ "tokio-util 0.7.10",
"tracing",
]
[[package]]
name = "h2"
-version = "0.4.0"
+version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e1d308f63daf4181410c242d34c11f928dcb3aa105852019e043c9d1f4e4368a"
+checksum = "991910e35c615d8cab86b5ab04be67e6ad24d2bf5f4f11fdbbed26da999bbeab"
dependencies = [
"bytes",
"fnv",
@@ -3078,10 +3114,10 @@ dependencies = [
"futures-sink",
"futures-util",
"http 1.0.0",
- "indexmap 2.0.2",
+ "indexmap 2.1.0",
"slab",
"tokio",
- "tokio-util 0.7.9",
+ "tokio-util 0.7.10",
"tracing",
]
@@ -3106,23 +3142,11 @@ dependencies = [
"crunchy",
]
-[[package]]
-name = "hashbrown"
-version = "0.11.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
-dependencies = [
- "ahash 0.7.7",
-]
-
[[package]]
name = "hashbrown"
version = "0.12.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
-dependencies = [
- "ahash 0.7.7",
-]
[[package]]
name = "hashbrown"
@@ -3130,7 +3154,7 @@ version = "0.14.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
dependencies = [
- "ahash 0.8.6",
+ "ahash",
"allocator-api2",
]
@@ -3143,15 +3167,6 @@ dependencies = [
"fxhash",
]
-[[package]]
-name = "hashlink"
-version = "0.7.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7249a3129cbc1ffccd74857f81464a323a152173cdb134e0fd81bc803b29facf"
-dependencies = [
- "hashbrown 0.11.2",
-]
-
[[package]]
name = "hashlink"
version = "0.8.4"
@@ -3167,10 +3182,10 @@ version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "06683b93020a07e3dbcf5f8c0f6d40080d725bea7936fc01ad345c01b97dc270"
dependencies = [
- "base64 0.21.5",
+ "base64 0.21.7",
"bytes",
"headers-core",
- "http 0.2.9",
+ "http 0.2.11",
"httpdate",
"mime",
"sha1",
@@ -3182,7 +3197,7 @@ version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429"
dependencies = [
- "http 0.2.9",
+ "http 0.2.11",
]
[[package]]
@@ -3231,7 +3246,7 @@ dependencies = [
"futures-channel",
"futures-io",
"futures-util",
- "idna",
+ "idna 0.4.0",
"ipnet",
"once_cell",
"rand",
@@ -3266,9 +3281,9 @@ dependencies = [
[[package]]
name = "hkdf"
-version = "0.12.3"
+version = "0.12.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437"
+checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7"
dependencies = [
"hmac 0.12.1",
]
@@ -3289,7 +3304,7 @@ version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b"
dependencies = [
- "crypto-mac 0.11.1",
+ "crypto-mac 0.11.0",
"digest 0.9.0",
]
@@ -3315,11 +3330,11 @@ dependencies = [
[[package]]
name = "home"
-version = "0.5.5"
+version = "0.5.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb"
+checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5"
dependencies = [
- "windows-sys 0.48.0",
+ "windows-sys 0.52.0",
]
[[package]]
@@ -3335,9 +3350,9 @@ dependencies = [
[[package]]
name = "http"
-version = "0.2.9"
+version = "0.2.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
+checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb"
dependencies = [
"bytes",
"fnv",
@@ -3357,12 +3372,12 @@ dependencies = [
[[package]]
name = "http-body"
-version = "0.4.5"
+version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2"
dependencies = [
"bytes",
- "http 0.2.9",
+ "http 0.2.11",
"pin-project-lite",
]
@@ -3412,7 +3427,7 @@ dependencies = [
"lighthouse_network",
"lighthouse_version",
"logging",
- "lru 0.12.0",
+ "lru",
"network",
"operation_pool",
"parking_lot 0.12.1",
@@ -3477,22 +3492,22 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
[[package]]
name = "hyper"
-version = "0.14.27"
+version = "0.14.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468"
+checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80"
dependencies = [
"bytes",
"futures-channel",
"futures-core",
"futures-util",
- "h2 0.3.21",
- "http 0.2.9",
- "http-body 0.4.5",
+ "h2 0.3.23",
+ "http 0.2.11",
+ "http-body 0.4.6",
"httparse",
"httpdate",
"itoa",
"pin-project-lite",
- "socket2 0.4.9",
+ "socket2 0.5.5",
"tokio",
"tower-service",
"tracing",
@@ -3501,14 +3516,14 @@ dependencies = [
[[package]]
name = "hyper"
-version = "1.0.1"
+version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "403f9214f3e703236b221f1a9cd88ec8b4adfa5296de01ab96216361f4692f56"
+checksum = "fb5aa53871fc917b1a9ed87b683a5d86db645e23acb32c2e0785a353e522fb75"
dependencies = [
"bytes",
"futures-channel",
"futures-util",
- "h2 0.4.0",
+ "h2 0.4.1",
"http 1.0.0",
"http-body 1.0.0",
"httparse",
@@ -3520,16 +3535,16 @@ dependencies = [
[[package]]
name = "hyper-rustls"
-version = "0.24.1"
+version = "0.24.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8d78e1e73ec14cf7375674f74d7dde185c8206fd9dea6fb6295e8a98098aaa97"
+checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590"
dependencies = [
"futures-util",
- "http 0.2.9",
- "hyper 0.14.27",
- "rustls",
+ "http 0.2.11",
+ "hyper 0.14.28",
+ "rustls 0.21.10",
"tokio",
- "tokio-rustls",
+ "tokio-rustls 0.24.1",
]
[[package]]
@@ -3539,7 +3554,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
dependencies = [
"bytes",
- "hyper 0.14.27",
+ "hyper 0.14.28",
"native-tls",
"tokio",
"tokio-native-tls",
@@ -3547,36 +3562,34 @@ dependencies = [
[[package]]
name = "hyper-util"
-version = "0.1.1"
+version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9ca339002caeb0d159cc6e023dff48e199f081e42fa039895c7c6f38b37f2e9d"
+checksum = "bdea9aac0dbe5a9240d68cfd9501e2db94222c6dc06843e06640b9e07f0fdc67"
dependencies = [
"bytes",
"futures-channel",
"futures-util",
"http 1.0.0",
"http-body 1.0.0",
- "hyper 1.0.1",
+ "hyper 1.1.0",
"pin-project-lite",
"socket2 0.5.5",
"tokio",
- "tower",
- "tower-service",
"tracing",
]
[[package]]
name = "iana-time-zone"
-version = "0.1.58"
+version = "0.1.59"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8326b86b6cff230b97d0d312a6c40a60726df3332e721f72a1b035f451663b20"
+checksum = "b6a67363e2aa4443928ce15e57ebae94fd8949958fd1223c4cfc0cd473ad7539"
dependencies = [
"android_system_properties",
"core-foundation-sys",
"iana-time-zone-haiku",
"js-sys",
"wasm-bindgen",
- "windows-core",
+ "windows-core 0.52.0",
]
[[package]]
@@ -3604,6 +3617,16 @@ dependencies = [
"unicode-normalization",
]
+[[package]]
+name = "idna"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
[[package]]
name = "if-addrs"
version = "0.6.7"
@@ -3617,12 +3640,12 @@ dependencies = [
[[package]]
name = "if-addrs"
-version = "0.7.0"
+version = "0.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cbc0fa01ffc752e9dbc72818cdb072cd028b86be5e09dd04c5a643704fe101a9"
+checksum = "cabb0019d51a643781ff15c9c8a3e5dedc365c47211270f4e8f82812fedd8f0a"
dependencies = [
"libc",
- "winapi",
+ "windows-sys 0.48.0",
]
[[package]]
@@ -3637,15 +3660,15 @@ dependencies = [
[[package]]
name = "if-watch"
-version = "3.1.0"
+version = "3.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bbb892e5777fe09e16f3d44de7802f4daa7267ecbe8c466f19d94e25bb0c303e"
+checksum = "d6b0422c86d7ce0e97169cc42e04ae643caf278874a7a3c87b8150a220dc7e1e"
dependencies = [
"async-io",
"core-foundation",
"fnv",
"futures",
- "if-addrs 0.7.0",
+ "if-addrs 0.10.2",
"ipnet",
"log",
"rtnetlink",
@@ -3669,16 +3692,16 @@ dependencies = [
[[package]]
name = "igd-next"
-version = "0.14.2"
+version = "0.14.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "57e065e90a518ab5fedf79aa1e4b784e10f8e484a834f6bda85c42633a2cb7af"
+checksum = "064d90fec10d541084e7b39ead8875a5a80d9114a2b18791565253bae25f49e4"
dependencies = [
"async-trait",
"attohttpc 0.24.1",
"bytes",
"futures",
- "http 0.2.9",
- "hyper 0.14.27",
+ "http 0.2.11",
+ "hyper 0.14.28",
"log",
"rand",
"tokio",
@@ -3701,7 +3724,7 @@ version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f"
dependencies = [
- "parity-scale-codec 3.6.5",
+ "parity-scale-codec 3.6.9",
]
[[package]]
@@ -3760,9 +3783,9 @@ dependencies = [
[[package]]
name = "indexmap"
-version = "2.0.2"
+version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8adf3ddd720272c6ea8bf59463c04e0f93d0bbf7c5439b691bca2987e0270897"
+checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f"
dependencies = [
"equivalent",
"hashbrown 0.14.3",
@@ -3832,9 +3855,9 @@ dependencies = [
[[package]]
name = "ipnet"
-version = "2.8.0"
+version = "2.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6"
+checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3"
[[package]]
name = "itertools"
@@ -3847,9 +3870,9 @@ dependencies = [
[[package]]
name = "itoa"
-version = "1.0.9"
+version = "1.0.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
+checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c"
[[package]]
name = "jemalloc-ctl"
@@ -3893,9 +3916,9 @@ dependencies = [
[[package]]
name = "js-sys"
-version = "0.3.64"
+version = "0.3.67"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a"
+checksum = "9a1d36f1235bc969acba30b7f5990b864423a6068a10f7c90ae8f0112e3a59d1"
dependencies = [
"wasm-bindgen",
]
@@ -3906,7 +3929,7 @@ version = "8.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6971da4d9c3aa03c3d8f3ff0f4155b534aad021292003895a469716b2a230378"
dependencies = [
- "base64 0.21.5",
+ "base64 0.21.7",
"pem 1.1.1",
"ring 0.16.20",
"serde",
@@ -3929,23 +3952,23 @@ dependencies = [
[[package]]
name = "k256"
-version = "0.13.1"
+version = "0.13.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cadb76004ed8e97623117f3df85b17aaa6626ab0b0831e6573f104df16cd1bcc"
+checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b"
dependencies = [
"cfg-if",
- "ecdsa 0.16.8",
- "elliptic-curve 0.13.6",
+ "ecdsa 0.16.9",
+ "elliptic-curve 0.13.8",
"once_cell",
"sha2 0.10.8",
- "signature 2.1.0",
+ "signature 2.2.0",
]
[[package]]
name = "keccak"
-version = "0.1.4"
+version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940"
+checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654"
dependencies = [
"cpufeatures",
]
@@ -3993,7 +4016,7 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
[[package]]
name = "lcli"
-version = "4.5.0"
+version = "4.6.0-rc.0"
dependencies = [
"account_utils",
"beacon_chain",
@@ -4056,9 +4079,9 @@ dependencies = [
[[package]]
name = "libc"
-version = "0.2.149"
+version = "0.2.152"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b"
+checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7"
[[package]]
name = "libflate"
@@ -4082,12 +4105,12 @@ dependencies = [
[[package]]
name = "libloading"
-version = "0.7.4"
+version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f"
+checksum = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161"
dependencies = [
"cfg-if",
- "winapi",
+ "windows-sys 0.48.0",
]
[[package]]
@@ -4113,9 +4136,8 @@ dependencies = [
[[package]]
name = "libp2p"
-version = "0.53.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1252a34c693386829c34d44ccfbce86679d2a9a2c61f582863649bbf57f26260"
+version = "0.54.0"
+source = "git+https://github.com/sigp/rust-libp2p/?rev=b96b90894faab0a1eed78e1c82c6452138a3538a#b96b90894faab0a1eed78e1c82c6452138a3538a"
dependencies = [
"bytes",
"either",
@@ -4125,7 +4147,7 @@ dependencies = [
"instant",
"libp2p-allow-block-list",
"libp2p-connection-limits",
- "libp2p-core 0.41.1",
+ "libp2p-core",
"libp2p-dns",
"libp2p-gossipsub",
"libp2p-identify",
@@ -4148,10 +4170,9 @@ dependencies = [
[[package]]
name = "libp2p-allow-block-list"
version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "107b238b794cb83ab53b74ad5dcf7cca3200899b72fe662840cfb52f5b0a32e6"
+source = "git+https://github.com/sigp/rust-libp2p/?rev=b96b90894faab0a1eed78e1c82c6452138a3538a#b96b90894faab0a1eed78e1c82c6452138a3538a"
dependencies = [
- "libp2p-core 0.41.1",
+ "libp2p-core",
"libp2p-identity",
"libp2p-swarm",
"void",
@@ -4159,11 +4180,10 @@ dependencies = [
[[package]]
name = "libp2p-connection-limits"
-version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f2af4b1e1a1d6c5005a59b42287c0a526bcce94d8d688e2e9233b18eb843ceb4"
+version = "0.3.1"
+source = "git+https://github.com/sigp/rust-libp2p/?rev=b96b90894faab0a1eed78e1c82c6452138a3538a#b96b90894faab0a1eed78e1c82c6452138a3538a"
dependencies = [
- "libp2p-core 0.41.1",
+ "libp2p-core",
"libp2p-identity",
"libp2p-swarm",
"void",
@@ -4171,37 +4191,8 @@ dependencies = [
[[package]]
name = "libp2p-core"
-version = "0.40.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dd44289ab25e4c9230d9246c475a22241e301b23e8f4061d3bdef304a1a99713"
-dependencies = [
- "either",
- "fnv",
- "futures",
- "futures-timer",
- "instant",
- "libp2p-identity",
- "log",
- "multiaddr",
- "multihash",
- "multistream-select",
- "once_cell",
- "parking_lot 0.12.1",
- "pin-project",
- "quick-protobuf",
- "rand",
- "rw-stream-sink",
- "smallvec",
- "thiserror",
- "unsigned-varint 0.7.2",
- "void",
-]
-
-[[package]]
-name = "libp2p-core"
-version = "0.41.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "59c61b924474cf2c7edccca306693e798d797b85d004f4fef5689a7a3e6e8fe5"
+version = "0.41.2"
+source = "git+https://github.com/sigp/rust-libp2p/?rev=b96b90894faab0a1eed78e1c82c6452138a3538a#b96b90894faab0a1eed78e1c82c6452138a3538a"
dependencies = [
"either",
"fnv",
@@ -4221,20 +4212,19 @@ dependencies = [
"smallvec",
"thiserror",
"tracing",
- "unsigned-varint 0.7.2",
+ "unsigned-varint 0.8.0",
"void",
]
[[package]]
name = "libp2p-dns"
version = "0.41.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d17cbcf7160ff35c3e8e560de4a068fe9d6cb777ea72840e48eb76ff9576c4b6"
+source = "git+https://github.com/sigp/rust-libp2p/?rev=b96b90894faab0a1eed78e1c82c6452138a3538a#b96b90894faab0a1eed78e1c82c6452138a3538a"
dependencies = [
"async-trait",
"futures",
"hickory-resolver",
- "libp2p-core 0.41.1",
+ "libp2p-core",
"libp2p-identity",
"parking_lot 0.12.1",
"smallvec",
@@ -4243,22 +4233,23 @@ dependencies = [
[[package]]
name = "libp2p-gossipsub"
-version = "0.46.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "201f0626acd8985fae7fdd318e86c954574b9eef2e5dec433936a19a0338393d"
+version = "0.46.1"
+source = "git+https://github.com/sigp/rust-libp2p/?rev=b96b90894faab0a1eed78e1c82c6452138a3538a#b96b90894faab0a1eed78e1c82c6452138a3538a"
dependencies = [
- "asynchronous-codec 0.6.2",
- "base64 0.21.5",
+ "async-channel",
+ "asynchronous-codec",
+ "base64 0.21.7",
"byteorder",
"bytes",
"either",
"fnv",
"futures",
"futures-ticker",
+ "futures-timer",
"getrandom",
"hex_fmt",
"instant",
- "libp2p-core 0.41.1",
+ "libp2p-core",
"libp2p-identity",
"libp2p-swarm",
"prometheus-client",
@@ -4269,25 +4260,23 @@ dependencies = [
"sha2 0.10.8",
"smallvec",
"tracing",
- "unsigned-varint 0.7.2",
"void",
]
[[package]]
name = "libp2p-identify"
-version = "0.44.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0544703553921214556f7567278b4f00cdd5052d29b0555ab88290cbfe54d81c"
+version = "0.44.1"
+source = "git+https://github.com/sigp/rust-libp2p/?rev=b96b90894faab0a1eed78e1c82c6452138a3538a#b96b90894faab0a1eed78e1c82c6452138a3538a"
dependencies = [
- "asynchronous-codec 0.6.2",
+ "asynchronous-codec",
"either",
"futures",
"futures-bounded",
"futures-timer",
- "libp2p-core 0.41.1",
+ "libp2p-core",
"libp2p-identity",
"libp2p-swarm",
- "lru 0.12.0",
+ "lru",
"quick-protobuf",
"quick-protobuf-codec",
"smallvec",
@@ -4298,16 +4287,15 @@ dependencies = [
[[package]]
name = "libp2p-identity"
-version = "0.2.7"
+version = "0.2.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cdd6317441f361babc74c2989c6484eb0726045399b6648de039e1805ea96972"
+checksum = "999ec70441b2fb35355076726a6bc466c932e9bdc66f6a11c6c0aa17c7ab9be0"
dependencies = [
"asn1_der",
"bs58 0.5.0",
"ed25519-dalek",
"hkdf",
"libsecp256k1",
- "log",
"multihash",
"p256",
"quick-protobuf",
@@ -4315,21 +4303,21 @@ dependencies = [
"sec1 0.7.3",
"sha2 0.10.8",
"thiserror",
+ "tracing",
"void",
"zeroize",
]
[[package]]
name = "libp2p-mdns"
-version = "0.45.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "68f273a551ee9d0a79695f75afaeafb1371459dec69c29555e8a73a35608e96a"
+version = "0.45.1"
+source = "git+https://github.com/sigp/rust-libp2p/?rev=b96b90894faab0a1eed78e1c82c6452138a3538a#b96b90894faab0a1eed78e1c82c6452138a3538a"
dependencies = [
"data-encoding",
"futures",
"hickory-proto",
"if-watch",
- "libp2p-core 0.41.1",
+ "libp2p-core",
"libp2p-identity",
"libp2p-swarm",
"rand",
@@ -4343,12 +4331,11 @@ dependencies = [
[[package]]
name = "libp2p-metrics"
version = "0.14.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fdac91ae4f291046a3b2660c039a2830c931f84df2ee227989af92f7692d3357"
+source = "git+https://github.com/sigp/rust-libp2p/?rev=b96b90894faab0a1eed78e1c82c6452138a3538a#b96b90894faab0a1eed78e1c82c6452138a3538a"
dependencies = [
"futures",
"instant",
- "libp2p-core 0.41.1",
+ "libp2p-core",
"libp2p-gossipsub",
"libp2p-identify",
"libp2p-identity",
@@ -4360,33 +4347,31 @@ dependencies = [
[[package]]
name = "libp2p-mplex"
version = "0.41.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a5e895765e27e30217b25f7cb7ac4686dad1ff80bf2fdeffd1d898566900a924"
+source = "git+https://github.com/sigp/rust-libp2p/?rev=b96b90894faab0a1eed78e1c82c6452138a3538a#b96b90894faab0a1eed78e1c82c6452138a3538a"
dependencies = [
- "asynchronous-codec 0.6.2",
+ "asynchronous-codec",
"bytes",
"futures",
- "libp2p-core 0.41.1",
+ "libp2p-core",
"libp2p-identity",
"nohash-hasher",
"parking_lot 0.12.1",
"rand",
"smallvec",
"tracing",
- "unsigned-varint 0.7.2",
+ "unsigned-varint 0.8.0",
]
[[package]]
name = "libp2p-noise"
version = "0.44.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8ecd0545ce077f6ea5434bcb76e8d0fe942693b4380aaad0d34a358c2bd05793"
+source = "git+https://github.com/sigp/rust-libp2p/?rev=b96b90894faab0a1eed78e1c82c6452138a3538a#b96b90894faab0a1eed78e1c82c6452138a3538a"
dependencies = [
- "asynchronous-codec 0.7.0",
+ "asynchronous-codec",
"bytes",
"curve25519-dalek",
"futures",
- "libp2p-core 0.41.1",
+ "libp2p-core",
"libp2p-identity",
"multiaddr",
"multihash",
@@ -4405,13 +4390,12 @@ dependencies = [
[[package]]
name = "libp2p-plaintext"
version = "0.41.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "67330af40b67217e746d42551913cfb7ad04c74fa300fb329660a56318590b3f"
+source = "git+https://github.com/sigp/rust-libp2p/?rev=b96b90894faab0a1eed78e1c82c6452138a3538a#b96b90894faab0a1eed78e1c82c6452138a3538a"
dependencies = [
- "asynchronous-codec 0.6.2",
+ "asynchronous-codec",
"bytes",
"futures",
- "libp2p-core 0.41.1",
+ "libp2p-core",
"libp2p-identity",
"quick-protobuf",
"quick-protobuf-codec",
@@ -4420,22 +4404,21 @@ dependencies = [
[[package]]
name = "libp2p-quic"
-version = "0.10.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c02570b9effbc7c33331803104a8e9e53af7f2bdb4a2b61be420d6667545a0f5"
+version = "0.10.2"
+source = "git+https://github.com/sigp/rust-libp2p/?rev=b96b90894faab0a1eed78e1c82c6452138a3538a#b96b90894faab0a1eed78e1c82c6452138a3538a"
dependencies = [
"bytes",
"futures",
"futures-timer",
"if-watch",
- "libp2p-core 0.41.1",
+ "libp2p-core",
"libp2p-identity",
"libp2p-tls",
"parking_lot 0.12.1",
"quinn",
"rand",
"ring 0.16.20",
- "rustls",
+ "rustls 0.21.10",
"socket2 0.5.5",
"thiserror",
"tokio",
@@ -4444,16 +4427,15 @@ dependencies = [
[[package]]
name = "libp2p-swarm"
-version = "0.44.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "643ce11d87db56387631c9757b61b83435b434f94dc52ec267c1666e560e78b0"
+version = "0.45.0"
+source = "git+https://github.com/sigp/rust-libp2p/?rev=b96b90894faab0a1eed78e1c82c6452138a3538a#b96b90894faab0a1eed78e1c82c6452138a3538a"
dependencies = [
"either",
"fnv",
"futures",
"futures-timer",
"instant",
- "libp2p-core 0.41.1",
+ "libp2p-core",
"libp2p-identity",
"libp2p-swarm-derive",
"multistream-select",
@@ -4467,27 +4449,25 @@ dependencies = [
[[package]]
name = "libp2p-swarm-derive"
-version = "0.34.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9b27d257436d01433a21da8da7688c83dba35826726161a328ff0989cd7af2dd"
+version = "0.34.1"
+source = "git+https://github.com/sigp/rust-libp2p/?rev=b96b90894faab0a1eed78e1c82c6452138a3538a#b96b90894faab0a1eed78e1c82c6452138a3538a"
dependencies = [
"heck",
"proc-macro2",
"quote",
- "syn 2.0.38",
+ "syn 2.0.48",
]
[[package]]
name = "libp2p-tcp"
version = "0.41.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8b2460fc2748919adff99ecbc1aab296e4579e41f374fb164149bd2c9e529d4c"
+source = "git+https://github.com/sigp/rust-libp2p/?rev=b96b90894faab0a1eed78e1c82c6452138a3538a#b96b90894faab0a1eed78e1c82c6452138a3538a"
dependencies = [
"futures",
"futures-timer",
"if-watch",
"libc",
- "libp2p-core 0.41.1",
+ "libp2p-core",
"libp2p-identity",
"socket2 0.5.5",
"tokio",
@@ -4497,17 +4477,16 @@ dependencies = [
[[package]]
name = "libp2p-tls"
version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "93ce7e3c2e7569d685d08ec795157981722ff96e9e9f9eae75df3c29d02b07a5"
+source = "git+https://github.com/sigp/rust-libp2p/?rev=b96b90894faab0a1eed78e1c82c6452138a3538a#b96b90894faab0a1eed78e1c82c6452138a3538a"
dependencies = [
"futures",
"futures-rustls",
- "libp2p-core 0.41.1",
+ "libp2p-core",
"libp2p-identity",
"rcgen",
"ring 0.16.20",
- "rustls",
- "rustls-webpki",
+ "rustls 0.21.10",
+ "rustls-webpki 0.101.7",
"thiserror",
"x509-parser",
"yasna",
@@ -4516,13 +4495,12 @@ dependencies = [
[[package]]
name = "libp2p-upnp"
version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "963eb8a174f828f6a51927999a9ab5e45dfa9aa2aa5fed99aa65f79de6229464"
+source = "git+https://github.com/sigp/rust-libp2p/?rev=b96b90894faab0a1eed78e1c82c6452138a3538a#b96b90894faab0a1eed78e1c82c6452138a3538a"
dependencies = [
"futures",
"futures-timer",
"igd-next",
- "libp2p-core 0.41.1",
+ "libp2p-core",
"libp2p-swarm",
"tokio",
"tracing",
@@ -4531,15 +4509,27 @@ dependencies = [
[[package]]
name = "libp2p-yamux"
-version = "0.45.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "751f4778f71bc3db1ccf2451e7f4484463fec7f00c1ac2680e39c8368c23aae8"
+version = "0.45.1"
+source = "git+https://github.com/sigp/rust-libp2p/?rev=b96b90894faab0a1eed78e1c82c6452138a3538a#b96b90894faab0a1eed78e1c82c6452138a3538a"
dependencies = [
+ "either",
"futures",
- "libp2p-core 0.41.1",
+ "libp2p-core",
"thiserror",
"tracing",
- "yamux",
+ "yamux 0.12.1",
+ "yamux 0.13.1",
+]
+
+[[package]]
+name = "libredox"
+version = "0.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8"
+dependencies = [
+ "bitflags 2.4.1",
+ "libc",
+ "redox_syscall 0.4.1",
]
[[package]]
@@ -4603,9 +4593,9 @@ dependencies = [
[[package]]
name = "libz-sys"
-version = "1.1.12"
+version = "1.1.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d97137b25e321a73eef1418d1d5d2eda4d77e12813f8e6dead84bc52c5870a7b"
+checksum = "295c17e837573c8c821dbaeb3cceb3d745ad082f7572191409e69cbc1b3fd050"
dependencies = [
"cc",
"pkg-config",
@@ -4614,7 +4604,7 @@ dependencies = [
[[package]]
name = "lighthouse"
-version = "4.5.0"
+version = "4.6.0-rc.0"
dependencies = [
"account_manager",
"account_utils",
@@ -4626,7 +4616,6 @@ dependencies = [
"clap_utils",
"database_manager",
"directory",
- "env_logger 0.9.3",
"environment",
"eth1",
"eth2",
@@ -4637,6 +4626,7 @@ dependencies = [
"lighthouse_metrics",
"lighthouse_network",
"lighthouse_version",
+ "logging",
"malloc_utils",
"sensitive_url",
"serde",
@@ -4648,6 +4638,7 @@ dependencies = [
"sloggers",
"task_executor",
"tempfile",
+ "tracing-subscriber",
"types",
"unused_port",
"validator_client",
@@ -4683,7 +4674,7 @@ dependencies = [
"libp2p-mplex",
"lighthouse_metrics",
"lighthouse_version",
- "lru 0.12.0",
+ "lru",
"lru_cache",
"parking_lot 0.12.1",
"prometheus-client",
@@ -4738,15 +4729,9 @@ checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4"
[[package]]
name = "linux-raw-sys"
-version = "0.3.8"
+version = "0.4.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
-
-[[package]]
-name = "linux-raw-sys"
-version = "0.4.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "da2479e8c062e40bf0066ffa0bc823de0a9368974af99c9f6df941d2c231e03f"
+checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456"
[[package]]
name = "lmdb-rkv"
@@ -4809,22 +4794,18 @@ dependencies = [
"sloggers",
"take_mut",
"tokio",
+ "tracing",
+ "tracing-appender",
+ "tracing-core",
+ "tracing-log",
+ "tracing-subscriber",
]
[[package]]
name = "lru"
-version = "0.7.8"
+version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e999beba7b6e8345721bd280141ed958096a2e4abdf74f67ff4ce49b4b54e47a"
-dependencies = [
- "hashbrown 0.12.3",
-]
-
-[[package]]
-name = "lru"
-version = "0.12.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1efa59af2ddfad1854ae27d75009d538d0998b4b2fd47083e743ac1a10e46c60"
+checksum = "2994eeba8ed550fd9b47a0b38f0242bc3344e496483c6180b69139cc2fa5d1d7"
dependencies = [
"hashbrown 0.14.3",
]
@@ -4847,10 +4828,10 @@ dependencies = [
]
[[package]]
-name = "mach"
-version = "0.3.2"
+name = "mach2"
+version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa"
+checksum = "19b955cdeb2a02b9117f121ce63aa52d08ade45de53e48fe6a38b39c10f6f709"
dependencies = [
"libc",
]
@@ -4923,24 +4904,15 @@ dependencies = [
[[package]]
name = "mediatype"
-version = "0.19.15"
+version = "0.19.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8c408dc227d302f1496c84d9dc68c00fec6f56f9228a18f3023f976f3ca7c945"
+checksum = "83a018c36a54f4e12c30464bbc59311f85d3f6f4d6c1b4fa4ea9db2b174ddefc"
[[package]]
name = "memchr"
-version = "2.6.4"
+version = "2.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
-
-[[package]]
-name = "memoffset"
-version = "0.6.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
-dependencies = [
- "autocfg",
-]
+checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149"
[[package]]
name = "memoffset"
@@ -5052,9 +5024,9 @@ dependencies = [
[[package]]
name = "mio"
-version = "0.8.8"
+version = "0.8.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2"
+checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09"
dependencies = [
"libc",
"wasi",
@@ -5088,15 +5060,15 @@ dependencies = [
[[package]]
name = "more-asserts"
-version = "0.2.2"
+version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7843ec2de400bcbc6a6328c958dc38e5359da6e93e72e37bc5246bf1ae776389"
+checksum = "1fafa6961cabd9c63bcd77a45d7e3b7f3b552b70417831fb0f56db717e72407e"
[[package]]
name = "multiaddr"
-version = "0.18.0"
+version = "0.18.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "92a651988b3ed3ad1bc8c87d016bb92f6f395b84ed1db9b926b32b1fc5a2c8b5"
+checksum = "8b852bc02a2da5feed68cd14fa50d0774b92790a5bdbfa932a813926c8472070"
dependencies = [
"arrayref",
"byteorder",
@@ -5135,15 +5107,14 @@ dependencies = [
[[package]]
name = "multistream-select"
version = "0.13.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ea0df8e5eec2298a62b326ee4f0d7fe1a6b90a09dfcf9df37b38f947a8c42f19"
+source = "git+https://github.com/sigp/rust-libp2p/?rev=b96b90894faab0a1eed78e1c82c6452138a3538a#b96b90894faab0a1eed78e1c82c6452138a3538a"
dependencies = [
"bytes",
"futures",
- "log",
"pin-project",
"smallvec",
- "unsigned-varint 0.7.2",
+ "tracing",
+ "unsigned-varint 0.8.0",
]
[[package]]
@@ -5256,7 +5227,7 @@ dependencies = [
"lighthouse_metrics",
"lighthouse_network",
"logging",
- "lru 0.12.0",
+ "lru",
"lru_cache",
"matches",
"num_cpus",
@@ -5280,19 +5251,6 @@ dependencies = [
"types",
]
-[[package]]
-name = "nix"
-version = "0.23.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f3790c00a0150112de0f4cd161e3d7fc4b2d8a5542ffc35f099a2562aecb35c"
-dependencies = [
- "bitflags 1.3.2",
- "cc",
- "cfg-if",
- "libc",
- "memoffset 0.6.5",
-]
-
[[package]]
name = "nix"
version = "0.24.3"
@@ -5446,9 +5404,9 @@ dependencies = [
[[package]]
name = "object"
-version = "0.32.1"
+version = "0.32.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0"
+checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441"
dependencies = [
"memchr",
]
@@ -5464,9 +5422,9 @@ dependencies = [
[[package]]
name = "once_cell"
-version = "1.18.0"
+version = "1.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
[[package]]
name = "oneshot_broadcast"
@@ -5514,9 +5472,9 @@ dependencies = [
[[package]]
name = "openssl"
-version = "0.10.57"
+version = "0.10.62"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bac25ee399abb46215765b1cb35bc0212377e58a061560d8b29b024fd0430e7c"
+checksum = "8cde4d2d9200ad5909f8dac647e29482e07c3a35de8a13fce7c9c7747ad9f671"
dependencies = [
"bitflags 2.4.1",
"cfg-if",
@@ -5535,7 +5493,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.38",
+ "syn 2.0.48",
]
[[package]]
@@ -5546,18 +5504,18 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
[[package]]
name = "openssl-src"
-version = "300.1.5+3.1.3"
+version = "300.2.1+3.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "559068e4c12950d7dcaa1857a61725c0d38d4fc03ff8e070ab31a75d6e316491"
+checksum = "3fe476c29791a5ca0d1273c697e96085bbabbbea2ef7afd5617e78a4b40332d3"
dependencies = [
"cc",
]
[[package]]
name = "openssl-sys"
-version = "0.9.93"
+version = "0.9.98"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "db4d56a4c0478783083cfafcc42493dd4a981d41669da64b4572a2a089b51b1d"
+checksum = "c1665caf8ab2dc9aef43d1c0023bd904633a6a05cb30b0ad59bec2ae986e57a7"
dependencies = [
"cc",
"libc",
@@ -5601,8 +5559,8 @@ version = "0.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b"
dependencies = [
- "ecdsa 0.16.8",
- "elliptic-curve 0.13.6",
+ "ecdsa 0.16.9",
+ "elliptic-curve 0.13.8",
"primeorder",
"sha2 0.10.8",
]
@@ -5623,15 +5581,15 @@ dependencies = [
[[package]]
name = "parity-scale-codec"
-version = "3.6.5"
+version = "3.6.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0dec8a8073036902368c2cdc0387e85ff9a37054d7e7c98e592145e0c92cd4fb"
+checksum = "881331e34fa842a2fb61cc2db9643a8fedc615e47cfcc52597d1af0db9a7e8fe"
dependencies = [
"arrayvec",
"bitvec 1.0.1",
"byte-slice-cast",
"impl-trait-for-tuples",
- "parity-scale-codec-derive 3.6.5",
+ "parity-scale-codec-derive 3.6.9",
"serde",
]
@@ -5641,7 +5599,7 @@ version = "2.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1557010476e0595c9b568d16dcfb81b93cdeb157612726f5170d31aa707bed27"
dependencies = [
- "proc-macro-crate",
+ "proc-macro-crate 1.3.1",
"proc-macro2",
"quote",
"syn 1.0.109",
@@ -5649,11 +5607,11 @@ dependencies = [
[[package]]
name = "parity-scale-codec-derive"
-version = "3.6.5"
+version = "3.6.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "312270ee71e1cd70289dacf597cab7b207aa107d2f28191c2ae45b2ece18a260"
+checksum = "be30eaf4b0a9fba5336683b38de57bb86d179a35862ba6bfcf57625d006bde5b"
dependencies = [
- "proc-macro-crate",
+ "proc-macro-crate 2.0.0",
"proc-macro2",
"quote",
"syn 1.0.109",
@@ -5736,7 +5694,7 @@ version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d95f5254224e617595d2cc3cc73ff0a5eaf2637519e25f03388154e9378b6ffa"
dependencies = [
- "crypto-mac 0.11.1",
+ "crypto-mac 0.11.0",
]
[[package]]
@@ -5768,11 +5726,11 @@ dependencies = [
[[package]]
name = "pem"
-version = "3.0.2"
+version = "3.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3163d2912b7c3b52d651a055f2c7eec9ba5cd22d26ef75b8dd3a59980b185923"
+checksum = "1b8fcc794035347fb64beda2d3b462595dd2753e3f268d89c5aae77e8cf2c310"
dependencies = [
- "base64 0.21.5",
+ "base64 0.21.7",
"serde",
]
@@ -5787,9 +5745,9 @@ dependencies = [
[[package]]
name = "percent-encoding"
-version = "2.3.0"
+version = "2.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
+checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
[[package]]
name = "pharos"
@@ -5836,7 +5794,7 @@ checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.38",
+ "syn 2.0.48",
]
[[package]]
@@ -5868,14 +5826,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7"
dependencies = [
"der 0.7.8",
- "spki 0.7.2",
+ "spki 0.7.3",
]
[[package]]
name = "pkg-config"
-version = "0.3.27"
+version = "0.3.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
+checksum = "69d3587f8a9e599cc7ec2c00e331f71c4e69a5f9a4b8a6efd5b07466b9736f9a"
[[package]]
name = "platforms"
@@ -5885,9 +5843,9 @@ checksum = "e8d0eef3571242013a0d5dc84861c3ae4a652e56e12adf8bdc26ff5f8cb34c94"
[[package]]
name = "platforms"
-version = "3.1.2"
+version = "3.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4503fa043bf02cee09a9582e9554b4c6403b2ef55e4612e96561d294419429f8"
+checksum = "626dec3cac7cc0e1577a2ec3fc496277ec2baa084bebad95bb6fdbfae235f84c"
[[package]]
name = "plotters"
@@ -5919,29 +5877,27 @@ dependencies = [
[[package]]
name = "polling"
-version = "2.8.0"
+version = "3.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce"
+checksum = "545c980a3880efd47b2e262f6a4bb6daad6555cf3367aa9c4e52895f69537a41"
dependencies = [
- "autocfg",
- "bitflags 1.3.2",
"cfg-if",
"concurrent-queue",
- "libc",
- "log",
"pin-project-lite",
- "windows-sys 0.48.0",
+ "rustix 0.38.30",
+ "tracing",
+ "windows-sys 0.52.0",
]
[[package]]
name = "poly1305"
-version = "0.7.2"
+version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "048aeb476be11a4b6ca432ca569e375810de9294ae78f4774e78ea98a9246ede"
+checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf"
dependencies = [
"cpufeatures",
"opaque-debug",
- "universal-hash",
+ "universal-hash 0.5.1",
]
[[package]]
@@ -5953,7 +5909,19 @@ dependencies = [
"cfg-if",
"cpufeatures",
"opaque-debug",
- "universal-hash",
+ "universal-hash 0.4.0",
+]
+
+[[package]]
+name = "polyval"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52cff9d1d4dee5fe6d03729099f4a310a41179e0a10dbf542039873f2e826fb"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "opaque-debug",
+ "universal-hash 0.5.1",
]
[[package]]
@@ -5962,7 +5930,7 @@ version = "0.6.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "49b6c5ef183cd3ab4ba005f1ca64c21e8bd97ce4699cfea9e8d9a2c4958ca520"
dependencies = [
- "base64 0.21.5",
+ "base64 0.21.7",
"byteorder",
"bytes",
"fallible-iterator",
@@ -6016,21 +5984,21 @@ dependencies = [
[[package]]
name = "prettyplease"
-version = "0.2.15"
+version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ae005bd773ab59b4725093fd7df83fd7892f7d8eafb48dbd7de6e024e4215f9d"
+checksum = "a41cf62165e97c7f814d2221421dbb9afcbcdb0a88068e5ea206e19951c2cbb5"
dependencies = [
"proc-macro2",
- "syn 2.0.38",
+ "syn 2.0.48",
]
[[package]]
name = "primeorder"
-version = "0.13.2"
+version = "0.13.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3c2fcef82c0ec6eefcc179b978446c399b3cdf73c392c35604e399eee6df1ee3"
+checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6"
dependencies = [
- "elliptic-curve 0.13.6",
+ "elliptic-curve 0.13.8",
]
[[package]]
@@ -6067,7 +6035,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919"
dependencies = [
"once_cell",
- "toml_edit",
+ "toml_edit 0.19.15",
+]
+
+[[package]]
+name = "proc-macro-crate"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8"
+dependencies = [
+ "toml_edit 0.20.7",
]
[[package]]
@@ -6094,17 +6071,11 @@ dependencies = [
"version_check",
]
-[[package]]
-name = "proc-macro-hack"
-version = "0.5.20+deprecated"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
-
[[package]]
name = "proc-macro2"
-version = "1.0.69"
+version = "1.0.76"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da"
+checksum = "95fc56cda0b5c3325f5fbbd7ff9fda9e02bb00bb3dac51252d2f1bfa1cb8cc8c"
dependencies = [
"unicode-ident",
]
@@ -6121,7 +6092,7 @@ dependencies = [
"flate2",
"hex",
"lazy_static",
- "rustix 0.36.16",
+ "rustix 0.36.17",
]
[[package]]
@@ -6159,7 +6130,7 @@ checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.38",
+ "syn 2.0.48",
]
[[package]]
@@ -6183,16 +6154,16 @@ checksum = "106dd99e98437432fed6519dedecfade6a06a73bb7b2a1e019fdd2bee5778d94"
[[package]]
name = "psutil"
-version = "3.2.2"
+version = "3.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f866af2b0f8e4b0d2d00aad8a9c5fc48fad33466cd99a64cbb3a4c1505f1a62d"
+checksum = "5e617cc9058daa5e1fe5a0d23ed745773a5ee354111dad1ec0235b0cc16b6730"
dependencies = [
"cfg-if",
"darwin-libproc",
"derive_more",
"glob",
- "mach",
- "nix 0.23.2",
+ "mach2",
+ "nix 0.24.3",
"num_cpus",
"once_cell",
"platforms 2.0.0",
@@ -6217,15 +6188,14 @@ dependencies = [
[[package]]
name = "quick-protobuf-codec"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f8ededb1cd78531627244d51dd0c7139fbe736c7d57af0092a76f0ffb2f56e98"
+version = "0.3.1"
+source = "git+https://github.com/sigp/rust-libp2p/?rev=b96b90894faab0a1eed78e1c82c6452138a3538a#b96b90894faab0a1eed78e1c82c6452138a3538a"
dependencies = [
- "asynchronous-codec 0.6.2",
+ "asynchronous-codec",
"bytes",
"quick-protobuf",
"thiserror",
- "unsigned-varint 0.7.2",
+ "unsigned-varint 0.8.0",
]
[[package]]
@@ -6262,7 +6232,7 @@ dependencies = [
"quinn-proto",
"quinn-udp",
"rustc-hash",
- "rustls",
+ "rustls 0.21.10",
"thiserror",
"tokio",
"tracing",
@@ -6270,15 +6240,15 @@ dependencies = [
[[package]]
name = "quinn-proto"
-version = "0.10.5"
+version = "0.10.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2c78e758510582acc40acb90458401172d41f1016f8c9dde89e49677afb7eec1"
+checksum = "141bf7dfde2fbc246bfd3fe12f2455aa24b0fbd9af535d8c86c7bd1381ff2b1a"
dependencies = [
"bytes",
"rand",
"ring 0.16.20",
"rustc-hash",
- "rustls",
+ "rustls 0.21.10",
"slab",
"thiserror",
"tinyvec",
@@ -6300,9 +6270,9 @@ dependencies = [
[[package]]
name = "quote"
-version = "1.0.33"
+version = "1.0.35"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
+checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef"
dependencies = [
"proc-macro2",
]
@@ -6405,7 +6375,7 @@ version = "0.11.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "52c4f3084aa3bc7dfbba4eff4fab2a54db4324965d8872ab933565e6fbd83bc6"
dependencies = [
- "pem 3.0.2",
+ "pem 3.0.3",
"ring 0.16.20",
"time",
"yasna",
@@ -6420,15 +6390,6 @@ dependencies = [
"bitflags 1.3.2",
]
-[[package]]
-name = "redox_syscall"
-version = "0.3.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
-dependencies = [
- "bitflags 1.3.2",
-]
-
[[package]]
name = "redox_syscall"
version = "0.4.1"
@@ -6440,12 +6401,12 @@ dependencies = [
[[package]]
name = "redox_users"
-version = "0.4.3"
+version = "0.4.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
+checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4"
dependencies = [
"getrandom",
- "redox_syscall 0.2.16",
+ "libredox",
"thiserror",
]
@@ -6495,19 +6456,19 @@ checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
[[package]]
name = "reqwest"
-version = "0.11.22"
+version = "0.11.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b"
+checksum = "37b1ae8d9ac08420c66222fb9096fc5de435c3c48542bc5336c51892cffafb41"
dependencies = [
- "base64 0.21.5",
+ "base64 0.21.7",
"bytes",
"encoding_rs",
"futures-core",
"futures-util",
- "h2 0.3.21",
- "http 0.2.9",
- "http-body 0.4.5",
- "hyper 0.14.27",
+ "h2 0.3.23",
+ "http 0.2.11",
+ "http-body 0.4.6",
+ "hyper 0.14.28",
"hyper-rustls",
"hyper-tls",
"ipnet",
@@ -6518,16 +6479,16 @@ dependencies = [
"once_cell",
"percent-encoding",
"pin-project-lite",
- "rustls",
- "rustls-pemfile",
+ "rustls 0.21.10",
+ "rustls-pemfile 1.0.4",
"serde",
"serde_json",
"serde_urlencoded",
"system-configuration",
"tokio",
"tokio-native-tls",
- "tokio-rustls",
- "tokio-util 0.7.9",
+ "tokio-rustls 0.24.1",
+ "tokio-util 0.7.10",
"tower-service",
"url",
"wasm-bindgen",
@@ -6586,9 +6547,9 @@ dependencies = [
[[package]]
name = "ring"
-version = "0.17.5"
+version = "0.17.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fb0205304757e5d899b9c2e448b867ffd03ae7f988002e47cd24954391394d0b"
+checksum = "688c63d65483050968b2a8937f7995f443e27041a0f7700aa59b0822aedebb74"
dependencies = [
"cc",
"getrandom",
@@ -6659,7 +6620,7 @@ dependencies = [
"bitflags 1.3.2",
"fallible-iterator",
"fallible-streaming-iterator",
- "hashlink 0.8.4",
+ "hashlink",
"libsqlite3-sys",
"smallvec",
]
@@ -6702,9 +6663,9 @@ dependencies = [
[[package]]
name = "rustix"
-version = "0.36.16"
+version = "0.36.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6da3636faa25820d8648e0e31c5d519bbb01f72fdf57131f0f5f7da5fed36eab"
+checksum = "305efbd14fde4139eb501df5f136994bb520b033fa9fbdce287507dc23b8c7ed"
dependencies = [
"bitflags 1.3.2",
"errno",
@@ -6716,59 +6677,86 @@ dependencies = [
[[package]]
name = "rustix"
-version = "0.37.26"
+version = "0.38.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "84f3f8f960ed3b5a59055428714943298bf3fa2d4a1d53135084e0544829d995"
-dependencies = [
- "bitflags 1.3.2",
- "errno",
- "io-lifetimes",
- "libc",
- "linux-raw-sys 0.3.8",
- "windows-sys 0.48.0",
-]
-
-[[package]]
-name = "rustix"
-version = "0.38.20"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "67ce50cb2e16c2903e30d1cbccfd8387a74b9d4c938b6a4c5ec6cc7556f7a8a0"
+checksum = "322394588aaf33c24007e8bb3238ee3e4c5c09c084ab32bc73890b99ff326bca"
dependencies = [
"bitflags 2.4.1",
"errno",
"libc",
- "linux-raw-sys 0.4.10",
- "windows-sys 0.48.0",
+ "linux-raw-sys 0.4.12",
+ "windows-sys 0.52.0",
]
[[package]]
name = "rustls"
-version = "0.21.9"
+version = "0.21.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "629648aced5775d558af50b2b4c7b02983a04b312126d45eeead26e7caa498b9"
+checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba"
dependencies = [
"log",
- "ring 0.17.5",
- "rustls-webpki",
+ "ring 0.17.7",
+ "rustls-webpki 0.101.7",
"sct",
]
[[package]]
-name = "rustls-pemfile"
-version = "1.0.3"
+name = "rustls"
+version = "0.22.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2"
+checksum = "e87c9956bd9807afa1f77e0f7594af32566e830e088a5576d27c5b6f30f49d41"
dependencies = [
- "base64 0.21.5",
+ "log",
+ "ring 0.17.7",
+ "rustls-pki-types",
+ "rustls-webpki 0.102.1",
+ "subtle",
+ "zeroize",
]
+[[package]]
+name = "rustls-pemfile"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c"
+dependencies = [
+ "base64 0.21.7",
+]
+
+[[package]]
+name = "rustls-pemfile"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35e4980fa29e4c4b212ffb3db068a564cbf560e51d3944b7c88bd8bf5bec64f4"
+dependencies = [
+ "base64 0.21.7",
+ "rustls-pki-types",
+]
+
+[[package]]
+name = "rustls-pki-types"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e9d979b3ce68192e42760c7810125eb6cf2ea10efae545a156063e61f314e2a"
+
[[package]]
name = "rustls-webpki"
version = "0.101.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765"
dependencies = [
- "ring 0.17.5",
+ "ring 0.17.7",
+ "untrusted 0.9.0",
+]
+
+[[package]]
+name = "rustls-webpki"
+version = "0.102.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef4ca26037c909dedb327b48c3327d0ba91d3dd3c4e05dad328f210ffb68e95b"
+dependencies = [
+ "ring 0.17.7",
+ "rustls-pki-types",
"untrusted 0.9.0",
]
@@ -6781,8 +6769,7 @@ checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4"
[[package]]
name = "rw-stream-sink"
version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d8c9026ff5d2f23da5e45bbc283f156383001bfb09c4e44256d02c1a685fe9a1"
+source = "git+https://github.com/sigp/rust-libp2p/?rev=b96b90894faab0a1eed78e1c82c6452138a3538a#b96b90894faab0a1eed78e1c82c6452138a3538a"
dependencies = [
"futures",
"pin-project",
@@ -6791,9 +6778,9 @@ dependencies = [
[[package]]
name = "ryu"
-version = "1.0.15"
+version = "1.0.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
+checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c"
[[package]]
name = "safe_arith"
@@ -6819,23 +6806,23 @@ dependencies = [
[[package]]
name = "scale-info"
-version = "2.9.0"
+version = "2.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "35c0a159d0c45c12b20c5a844feb1fe4bea86e28f17b92a5f0c42193634d3782"
+checksum = "7f7d66a1128282b7ef025a8ead62a4a9fcf017382ec53b8ffbf4d7bf77bd3c60"
dependencies = [
"cfg-if",
"derive_more",
- "parity-scale-codec 3.6.5",
+ "parity-scale-codec 3.6.9",
"scale-info-derive",
]
[[package]]
name = "scale-info-derive"
-version = "2.9.0"
+version = "2.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "912e55f6d20e0e80d63733872b40e1227c0bce1e1ab81ba67d696339bfd7fd29"
+checksum = "abf2c68b89cafb3b8d918dd07b42be0da66ff202cf1155c5739a4e0c1ea0dc19"
dependencies = [
- "proc-macro-crate",
+ "proc-macro-crate 1.3.1",
"proc-macro2",
"quote",
"syn 1.0.109",
@@ -6843,11 +6830,11 @@ dependencies = [
[[package]]
name = "schannel"
-version = "0.1.22"
+version = "0.1.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88"
+checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534"
dependencies = [
- "windows-sys 0.48.0",
+ "windows-sys 0.52.0",
]
[[package]]
@@ -6885,12 +6872,12 @@ dependencies = [
[[package]]
name = "sct"
-version = "0.7.0"
+version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
+checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414"
dependencies = [
- "ring 0.16.20",
- "untrusted 0.7.1",
+ "ring 0.17.7",
+ "untrusted 0.9.0",
]
[[package]]
@@ -6946,9 +6933,9 @@ dependencies = [
[[package]]
name = "semver"
-version = "1.0.20"
+version = "1.0.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090"
+checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0"
dependencies = [
"serde",
]
@@ -6969,9 +6956,9 @@ dependencies = [
[[package]]
name = "serde"
-version = "1.0.189"
+version = "1.0.195"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8e422a44e74ad4001bdc8eede9a4570ab52f71190e9c076d14369f38b9200537"
+checksum = "63261df402c67811e9ac6def069e4786148c4563f4b50fd4bf30aa370d626b02"
dependencies = [
"serde_derive",
]
@@ -6998,20 +6985,20 @@ dependencies = [
[[package]]
name = "serde_derive"
-version = "1.0.189"
+version = "1.0.195"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1e48d1f918009ce3145511378cf68d613e3b3d9137d67272562080d68a2b32d5"
+checksum = "46fe8f8603d81ba86327b23a2e9cdf49e1255fb94a4c5f297f6ee0547178ea2c"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.38",
+ "syn 2.0.48",
]
[[package]]
name = "serde_json"
-version = "1.0.107"
+version = "1.0.111"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65"
+checksum = "176e46fa42316f18edd598015a5166857fc835ec732f5215eac6b7bdbf0a84f4"
dependencies = [
"itoa",
"ryu",
@@ -7020,9 +7007,9 @@ dependencies = [
[[package]]
name = "serde_path_to_error"
-version = "0.1.14"
+version = "0.1.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4beec8bce849d58d06238cb50db2e1c417cfeafa4c63f692b15c82b7c80f8335"
+checksum = "ebd154a240de39fdebcf5775d2675c204d7c13cf39a4c697be6493c8e734337c"
dependencies = [
"itoa",
"serde",
@@ -7030,20 +7017,20 @@ dependencies = [
[[package]]
name = "serde_repr"
-version = "0.1.16"
+version = "0.1.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8725e1dfadb3a50f7e5ce0b1a540466f6ed3fe7a0fca2ac2b8b831d31316bd00"
+checksum = "0b2e6b945e9d3df726b65d6ee24060aff8e3533d431f677a9695db04eff9dfdb"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.38",
+ "syn 2.0.48",
]
[[package]]
name = "serde_spanned"
-version = "0.6.3"
+version = "0.6.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186"
+checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1"
dependencies = [
"serde",
]
@@ -7084,11 +7071,11 @@ dependencies = [
[[package]]
name = "serde_yaml"
-version = "0.9.25"
+version = "0.9.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1a49e178e4452f45cb61d0cd8cebc1b0fafd3e41929e996cef79aa3aca91f574"
+checksum = "b1bf28c79a99f70ee1f1d83d10c875d2e70618417fda01ad1785e027579d9d38"
dependencies = [
- "indexmap 2.0.2",
+ "indexmap 2.1.0",
"itoa",
"ryu",
"serde",
@@ -7188,9 +7175,9 @@ dependencies = [
[[package]]
name = "signature"
-version = "2.1.0"
+version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5e1788eed21689f9cf370582dfc467ef36ed9c707f073528ddafa8d83e3b8500"
+checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de"
dependencies = [
"digest 0.10.7",
"rand_core",
@@ -7257,7 +7244,7 @@ dependencies = [
"lmdb-rkv",
"lmdb-rkv-sys",
"logging",
- "lru 0.12.0",
+ "lru",
"maplit",
"parking_lot 0.12.1",
"rand",
@@ -7422,28 +7409,28 @@ dependencies = [
[[package]]
name = "smallvec"
-version = "1.11.1"
+version = "1.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a"
+checksum = "2593d31f82ead8df961d8bd23a64c2ccf2eb5dd34b0a34bfb4dd54011c72009e"
[[package]]
name = "snap"
-version = "1.1.0"
+version = "1.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5e9f0ab6ef7eb7353d9119c170a436d1bf248eea575ac42d19d12f4e34130831"
+checksum = "1b6b67fb9a61334225b5b790716f609cd58395f895b3fe8b328786812a40bc3b"
[[package]]
name = "snow"
-version = "0.9.3"
+version = "0.9.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0c9d1425eb528a21de2755c75af4c9b5d57f50a0d4c3b7f1828a4cd03f8ba155"
+checksum = "58021967fd0a5eeeb23b08df6cc244a4d4a5b4aec1d27c9e02fad1a58b4cd74e"
dependencies = [
- "aes-gcm",
+ "aes-gcm 0.10.3",
"blake2",
"chacha20poly1305",
"curve25519-dalek",
"rand_core",
- "ring 0.16.20",
+ "ring 0.17.7",
"rustc_version",
"sha2 0.10.8",
"subtle",
@@ -7451,9 +7438,9 @@ dependencies = [
[[package]]
name = "socket2"
-version = "0.4.9"
+version = "0.4.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
+checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d"
dependencies = [
"libc",
"winapi",
@@ -7493,9 +7480,9 @@ dependencies = [
[[package]]
name = "spki"
-version = "0.7.2"
+version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9d1e996ef02c474957d681f1b05213dfb0abab947b446a62d37770b23500184a"
+checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d"
dependencies = [
"base64ct",
"der 0.7.8",
@@ -7577,7 +7564,7 @@ dependencies = [
"lazy_static",
"leveldb",
"lighthouse_metrics",
- "lru 0.12.0",
+ "lru",
"parking_lot 0.12.1",
"serde",
"slog",
@@ -7635,9 +7622,9 @@ dependencies = [
[[package]]
name = "subtle"
-version = "2.4.1"
+version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
+checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
[[package]]
name = "superstruct"
@@ -7675,9 +7662,9 @@ dependencies = [
[[package]]
name = "syn"
-version = "2.0.38"
+version = "2.0.48"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b"
+checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f"
dependencies = [
"proc-macro2",
"quote",
@@ -7790,15 +7777,15 @@ dependencies = [
[[package]]
name = "tempfile"
-version = "3.8.0"
+version = "3.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef"
+checksum = "01ce4141aa927a6d1bd34a041795abd0db1cccba5d5f24b009f694bdf3a1f3fa"
dependencies = [
"cfg-if",
- "fastrand 2.0.1",
- "redox_syscall 0.3.5",
- "rustix 0.38.20",
- "windows-sys 0.48.0",
+ "fastrand",
+ "redox_syscall 0.4.1",
+ "rustix 0.38.30",
+ "windows-sys 0.52.0",
]
[[package]]
@@ -7814,9 +7801,9 @@ dependencies = [
[[package]]
name = "termcolor"
-version = "1.3.0"
+version = "1.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6093bad37da69aab9d123a8091e4be0aa4a03e4d601ec641c327398315f62b64"
+checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755"
dependencies = [
"winapi-util",
]
@@ -7865,22 +7852,22 @@ dependencies = [
[[package]]
name = "thiserror"
-version = "1.0.50"
+version = "1.0.56"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2"
+checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad"
dependencies = [
"thiserror-impl",
]
[[package]]
name = "thiserror-impl"
-version = "1.0.50"
+version = "1.0.56"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8"
+checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.38",
+ "syn 2.0.48",
]
[[package]]
@@ -7904,9 +7891,9 @@ dependencies = [
[[package]]
name = "time"
-version = "0.3.30"
+version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5"
+checksum = "f657ba42c3f86e7680e53c8cd3af8abbe56b5491790b46e22e19c0d57463583e"
dependencies = [
"deranged",
"itoa",
@@ -7926,9 +7913,9 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
[[package]]
name = "time-macros"
-version = "0.2.15"
+version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20"
+checksum = "26197e33420244aeb70c3e8c78376ca46571bc4e701e4791c2cd9f57dcb3a43f"
dependencies = [
"time-core",
]
@@ -7999,9 +7986,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
[[package]]
name = "tokio"
-version = "1.33.0"
+version = "1.35.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4f38200e3ef7995e5ef13baec2f432a6da0aa9ac495b2c0e8f3b7eec2c92d653"
+checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104"
dependencies = [
"backtrace",
"bytes",
@@ -8027,13 +8014,13 @@ dependencies = [
[[package]]
name = "tokio-macros"
-version = "2.1.0"
+version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
+checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.38",
+ "syn 2.0.48",
]
[[package]]
@@ -8068,7 +8055,7 @@ dependencies = [
"rand",
"socket2 0.5.5",
"tokio",
- "tokio-util 0.7.9",
+ "tokio-util 0.7.10",
"whoami",
]
@@ -8078,7 +8065,18 @@ version = "0.24.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081"
dependencies = [
- "rustls",
+ "rustls 0.21.10",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-rustls"
+version = "0.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "775e0c0f0adb3a2f22a00c4745d728b479985fc15ee7ca6a2608388c5569860f"
+dependencies = [
+ "rustls 0.22.2",
+ "rustls-pki-types",
"tokio",
]
@@ -8091,7 +8089,7 @@ dependencies = [
"futures-core",
"pin-project-lite",
"tokio",
- "tokio-util 0.7.9",
+ "tokio-util 0.7.10",
]
[[package]]
@@ -8112,9 +8110,9 @@ dependencies = [
[[package]]
name = "tokio-util"
-version = "0.7.9"
+version = "0.7.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1d68074620f57a0b21594d9735eb2e98ab38b17f80d3fcb189fca266771ca60d"
+checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15"
dependencies = [
"bytes",
"futures-core",
@@ -8143,14 +8141,14 @@ dependencies = [
"serde",
"serde_spanned",
"toml_datetime",
- "toml_edit",
+ "toml_edit 0.19.15",
]
[[package]]
name = "toml_datetime"
-version = "0.6.3"
+version = "0.6.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b"
+checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1"
dependencies = [
"serde",
]
@@ -8161,13 +8159,24 @@ version = "0.19.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
dependencies = [
- "indexmap 2.0.2",
+ "indexmap 2.1.0",
"serde",
"serde_spanned",
"toml_datetime",
"winnow",
]
+[[package]]
+name = "toml_edit"
+version = "0.20.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81"
+dependencies = [
+ "indexmap 2.1.0",
+ "toml_datetime",
+ "winnow",
+]
+
[[package]]
name = "tower"
version = "0.4.13"
@@ -8208,6 +8217,18 @@ dependencies = [
"tracing-core",
]
+[[package]]
+name = "tracing-appender"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3566e8ce28cc0a3fe42519fc80e6b4c943cc4c8cef275620eb8dac2d3d4e06cf"
+dependencies = [
+ "crossbeam-channel",
+ "thiserror",
+ "time",
+ "tracing-subscriber",
+]
+
[[package]]
name = "tracing-attributes"
version = "0.1.27"
@@ -8216,7 +8237,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.38",
+ "syn 2.0.48",
]
[[package]]
@@ -8241,20 +8262,20 @@ dependencies = [
[[package]]
name = "tracing-log"
-version = "0.1.3"
+version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922"
+checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3"
dependencies = [
- "lazy_static",
"log",
+ "once_cell",
"tracing-core",
]
[[package]]
name = "tracing-subscriber"
-version = "0.3.17"
+version = "0.3.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77"
+checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b"
dependencies = [
"matchers",
"nu-ansi-term",
@@ -8321,9 +8342,9 @@ dependencies = [
[[package]]
name = "try-lock"
-version = "0.2.4"
+version = "0.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
[[package]]
name = "typenum"
@@ -8413,9 +8434,9 @@ dependencies = [
[[package]]
name = "unicode-bidi"
-version = "0.3.13"
+version = "0.3.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+checksum = "6f2528f27a9eb2b21e69c95319b30bd0efd85d09c379741b0f78ea1d86be2416"
[[package]]
name = "unicode-ident"
@@ -8446,19 +8467,29 @@ checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
[[package]]
name = "universal-hash"
-version = "0.4.1"
+version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05"
+checksum = "8326b2c654932e3e4f9196e69d08fdf7cfd718e1dc6f66b347e6024a0c961402"
dependencies = [
"generic-array",
"subtle",
]
[[package]]
-name = "unsafe-libyaml"
-version = "0.2.9"
+name = "universal-hash"
+version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f28467d3e1d3c6586d8f25fa243f544f5800fec42d97032474e17222c2b75cfa"
+checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea"
+dependencies = [
+ "crypto-common",
+ "subtle",
+]
+
+[[package]]
+name = "unsafe-libyaml"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab4c90930b95a82d00dc9e9ac071b4991924390d46cbd0dfe566148667605e4b"
[[package]]
name = "unsigned-varint"
@@ -8475,8 +8506,14 @@ name = "unsigned-varint"
version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6889a77d49f1f013504cec6bf97a2c730394adedaeb1deb5ea08949a50541105"
+
+[[package]]
+name = "unsigned-varint"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb066959b24b5196ae73cb057f45598450d2c5f71460e98c49b738086eff9c06"
dependencies = [
- "asynchronous-codec 0.6.2",
+ "asynchronous-codec",
"bytes",
]
@@ -8503,12 +8540,12 @@ dependencies = [
[[package]]
name = "url"
-version = "2.4.1"
+version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5"
+checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633"
dependencies = [
"form_urlencoded",
- "idna",
+ "idna 0.5.0",
"percent-encoding",
]
@@ -8542,7 +8579,7 @@ dependencies = [
"filesystem",
"futures",
"hex",
- "hyper 1.0.1",
+ "hyper 1.1.0",
"itertools",
"lazy_static",
"libsecp256k1",
@@ -8651,12 +8688,6 @@ version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"
-[[package]]
-name = "waker-fn"
-version = "1.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690"
-
[[package]]
name = "walkdir"
version = "2.4.0"
@@ -8679,28 +8710,27 @@ dependencies = [
[[package]]
name = "warp"
version = "0.3.6"
-source = "git+https://github.com/seanmonstar/warp.git#efe8548a19172e69918396d0fdbc369df9d0eb17"
+source = "git+https://github.com/seanmonstar/warp.git#724e767173132de7c435b323e12d6bec68038de2"
dependencies = [
"bytes",
"futures-channel",
"futures-util",
"headers",
- "http 0.2.9",
- "hyper 0.14.27",
+ "http 0.2.11",
+ "hyper 0.14.28",
"log",
"mime",
"mime_guess",
"percent-encoding",
"pin-project",
- "rustls-pemfile",
+ "rustls-pemfile 2.0.0",
"scoped-tls",
"serde",
"serde_json",
"serde_urlencoded",
"tokio",
- "tokio-rustls",
- "tokio-stream",
- "tokio-util 0.7.9",
+ "tokio-rustls 0.25.0",
+ "tokio-util 0.7.10",
"tower-service",
"tracing",
]
@@ -8731,9 +8761,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
[[package]]
name = "wasm-bindgen"
-version = "0.2.87"
+version = "0.2.90"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342"
+checksum = "b1223296a201415c7fad14792dbefaace9bd52b62d33453ade1c5b5f07555406"
dependencies = [
"cfg-if",
"wasm-bindgen-macro",
@@ -8741,24 +8771,24 @@ dependencies = [
[[package]]
name = "wasm-bindgen-backend"
-version = "0.2.87"
+version = "0.2.90"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd"
+checksum = "fcdc935b63408d58a32f8cc9738a0bffd8f05cc7c002086c6ef20b7312ad9dcd"
dependencies = [
"bumpalo",
"log",
"once_cell",
"proc-macro2",
"quote",
- "syn 2.0.38",
+ "syn 2.0.48",
"wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-futures"
-version = "0.4.37"
+version = "0.4.40"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03"
+checksum = "bde2032aeb86bdfaecc8b261eef3cba735cc426c1f3a3416d1e0791be95fc461"
dependencies = [
"cfg-if",
"js-sys",
@@ -8768,9 +8798,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro"
-version = "0.2.87"
+version = "0.2.90"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d"
+checksum = "3e4c238561b2d428924c49815533a8b9121c664599558a5d9ec51f8a1740a999"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
@@ -8778,22 +8808,22 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro-support"
-version = "0.2.87"
+version = "0.2.90"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
+checksum = "bae1abb6806dc1ad9e560ed242107c0f6c84335f1749dd4e8ddb012ebd5e25a7"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.38",
+ "syn 2.0.48",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-shared"
-version = "0.2.87"
+version = "0.2.90"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
+checksum = "4d91413b1c31d7539ba5ef2451af3f0b833a005eb27a631cec32bc0635a8602b"
[[package]]
name = "wasm-streams"
@@ -8839,7 +8869,7 @@ dependencies = [
"eth2",
"hex",
"http_api",
- "hyper 1.0.1",
+ "hyper 1.1.0",
"log",
"logging",
"network",
@@ -8860,9 +8890,9 @@ dependencies = [
[[package]]
name = "web-sys"
-version = "0.3.64"
+version = "0.3.67"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b"
+checksum = "58cd2333b6e0be7a39605f0e255892fd7418a682d8da8fe042fe25128794d2ed"
dependencies = [
"js-sys",
"wasm-bindgen",
@@ -8896,9 +8926,9 @@ dependencies = [
[[package]]
name = "webpki-roots"
-version = "0.25.2"
+version = "0.25.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "14247bb57be4f377dfb94c72830b8ce8fc6beac03cf4bf7b9732eadd414123fc"
+checksum = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10"
[[package]]
name = "which"
@@ -8909,7 +8939,7 @@ dependencies = [
"either",
"home",
"once_cell",
- "rustix 0.38.20",
+ "rustix 0.38.30",
]
[[package]]
@@ -8977,7 +9007,7 @@ version = "0.51.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ca229916c5ee38c2f2bc1e9d8f04df975b4bd93f9955dc69fabb5d91270045c9"
dependencies = [
- "windows-core",
+ "windows-core 0.51.1",
"windows-targets 0.48.5",
]
@@ -9002,6 +9032,15 @@ dependencies = [
"windows-targets 0.48.5",
]
+[[package]]
+name = "windows-core"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9"
+dependencies = [
+ "windows-targets 0.52.0",
+]
+
[[package]]
name = "windows-sys"
version = "0.45.0"
@@ -9020,6 +9059,15 @@ dependencies = [
"windows-targets 0.48.5",
]
+[[package]]
+name = "windows-sys"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
+dependencies = [
+ "windows-targets 0.52.0",
+]
+
[[package]]
name = "windows-targets"
version = "0.42.2"
@@ -9050,6 +9098,21 @@ dependencies = [
"windows_x86_64_msvc 0.48.5",
]
+[[package]]
+name = "windows-targets"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd"
+dependencies = [
+ "windows_aarch64_gnullvm 0.52.0",
+ "windows_aarch64_msvc 0.52.0",
+ "windows_i686_gnu 0.52.0",
+ "windows_i686_msvc 0.52.0",
+ "windows_x86_64_gnu 0.52.0",
+ "windows_x86_64_gnullvm 0.52.0",
+ "windows_x86_64_msvc 0.52.0",
+]
+
[[package]]
name = "windows_aarch64_gnullvm"
version = "0.42.2"
@@ -9062,6 +9125,12 @@ version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea"
+
[[package]]
name = "windows_aarch64_msvc"
version = "0.42.2"
@@ -9074,6 +9143,12 @@ version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef"
+
[[package]]
name = "windows_i686_gnu"
version = "0.42.2"
@@ -9086,6 +9161,12 @@ version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+[[package]]
+name = "windows_i686_gnu"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313"
+
[[package]]
name = "windows_i686_msvc"
version = "0.42.2"
@@ -9098,6 +9179,12 @@ version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+[[package]]
+name = "windows_i686_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a"
+
[[package]]
name = "windows_x86_64_gnu"
version = "0.42.2"
@@ -9110,6 +9197,12 @@ version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd"
+
[[package]]
name = "windows_x86_64_gnullvm"
version = "0.42.2"
@@ -9122,6 +9215,12 @@ version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e"
+
[[package]]
name = "windows_x86_64_msvc"
version = "0.42.2"
@@ -9135,10 +9234,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
[[package]]
-name = "winnow"
-version = "0.5.17"
+name = "windows_x86_64_msvc"
+version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a3b801d0e0a6726477cc207f60162da452f3a95adb368399bef20a946e06f65c"
+checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04"
+
+[[package]]
+name = "winnow"
+version = "0.5.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7cf47b659b318dccbd69cc4797a39ae128f533dce7902a1096044d1967b9c16"
dependencies = [
"memchr",
]
@@ -9242,9 +9347,9 @@ dependencies = [
[[package]]
name = "yamux"
-version = "0.12.0"
+version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0329ef377816896f014435162bb3711ea7a07729c23d0960e6f8048b21b8fe91"
+checksum = "9ed0164ae619f2dc144909a9f082187ebb5893693d8c0196e8085283ccd4b776"
dependencies = [
"futures",
"log",
@@ -9255,6 +9360,22 @@ dependencies = [
"static_assertions",
]
+[[package]]
+name = "yamux"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad1d0148b89300047e72994bee99ecdabd15a9166a7b70c8b8c37c314dcc9002"
+dependencies = [
+ "futures",
+ "instant",
+ "log",
+ "nohash-hasher",
+ "parking_lot 0.12.1",
+ "pin-project",
+ "rand",
+ "static_assertions",
+]
+
[[package]]
name = "yasna"
version = "0.5.2"
@@ -9281,14 +9402,14 @@ checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.38",
+ "syn 2.0.48",
]
[[package]]
name = "zeroize"
-version = "1.6.0"
+version = "1.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9"
+checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d"
dependencies = [
"zeroize_derive",
]
@@ -9301,7 +9422,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.38",
+ "syn 2.0.48",
]
[[package]]
diff --git a/Cargo.toml b/Cargo.toml
index 6847d650ee..a3e1430f3f 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -105,7 +105,7 @@ criterion = "0.3"
delay_map = "0.3"
derivative = "2"
dirs = "3"
-discv5 = { version = "0.3", features = ["libp2p"] }
+discv5 = { git="https://github.com/sigp/discv5", rev="dbb4a718cd32eaed8127c3c8241bfd0fde9eb908", features = ["libp2p"] }
env_logger = "0.9"
error-chain = "0.12"
ethereum-types = "0.14"
@@ -149,7 +149,7 @@ slog = { version = "2", features = ["max_level_trace", "release_max_level_trace"
slog-async = "2"
slog-term = "2"
sloggers = { version = "2", features = ["json"] }
-smallvec = "1"
+smallvec = "1.11.2"
snap = "1"
ssz_types = "0.5"
strum = { version = "0.24", features = ["derive"] }
@@ -160,6 +160,10 @@ tempfile = "3"
tokio = { version = "1", features = ["rt-multi-thread", "sync", "signal"] }
tokio-stream = { version = "0.1", features = ["sync"] }
tokio-util = { version = "0.6", features = ["codec", "compat", "time"] }
+tracing-appender = "0.2"
+tracing-core = "0.1"
+tracing-log = "0.2"
+tracing-subscriber = { version = "0.3", features = ["env-filter"] }
tree_hash = "0.5"
tree_hash_derive = "0.5"
url = "2"
diff --git a/Makefile b/Makefile
index c1190ac98c..8392d00170 100644
--- a/Makefile
+++ b/Makefile
@@ -14,7 +14,7 @@ BUILD_PATH_AARCH64 = "target/$(AARCH64_TAG)/release"
PINNED_NIGHTLY ?= nightly
CLIPPY_PINNED_NIGHTLY=nightly-2022-05-19
-# List of features to use when building natively. Can be overriden via the environment.
+# List of features to use when building natively. Can be overridden via the environment.
# No jemalloc on Windows
ifeq ($(OS),Windows_NT)
FEATURES?=
@@ -200,12 +200,17 @@ test-exec-engine:
# test vectors.
test: test-release
-# Updates the CLI help text pages in the Lighthouse book.
+# Updates the CLI help text pages in the Lighthouse book, building with Docker.
cli:
docker run --rm --user=root \
-v ${PWD}:/home/runner/actions-runner/lighthouse sigmaprime/github-runner \
bash -c 'cd lighthouse && make && ./scripts/cli.sh'
-
+
+# Updates the CLI help text pages in the Lighthouse book, building using local
+# `cargo`.
+cli-local:
+ make && ./scripts/cli.sh
+
# Runs the entire test suite, downloading test vectors if required.
test-full: cargo-fmt test-release test-debug test-ef test-exec-engine
diff --git a/beacon_node/Cargo.toml b/beacon_node/Cargo.toml
index 276faaecdd..d6d7de8b8d 100644
--- a/beacon_node/Cargo.toml
+++ b/beacon_node/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "beacon_node"
-version = "4.5.0"
+version = "4.6.0-rc.0"
authors = [
"Paul Hauner ",
"Age Manning (
}
pub fn produce_unaggregated_attestation(
- inner_chain: Arc>,
+ chain: Arc>,
current_slot: Slot,
) {
+ // Don't run the attestation simulator when the head slot is far behind the
+ // wall-clock slot.
+ //
+ // This helps prevent the simulator from becoming a burden by computing
+ // committees from old states.
+ let syncing_tolerance_slots = SYNCING_TOLERANCE_EPOCHS * T::EthSpec::slots_per_epoch();
+ if chain.best_slot() + syncing_tolerance_slots < current_slot {
+ return;
+ }
+
// Since attestations for different committees are practically identical (apart from the committee index field)
// Committee 0 is guaranteed to exist. That means there's no need to load the committee.
let beacon_committee_index = 0;
// Store the unaggregated attestation in the validator monitor for later processing
- match inner_chain.produce_unaggregated_attestation(current_slot, beacon_committee_index) {
+ match chain.produce_unaggregated_attestation(current_slot, beacon_committee_index) {
Ok(unaggregated_attestation) => {
let data = &unaggregated_attestation.data;
debug!(
- inner_chain.log,
+ chain.log,
"Produce unagg. attestation";
"attestation_source" => data.source.root.to_string(),
"attestation_target" => data.target.root.to_string(),
);
- inner_chain
+ chain
.validator_monitor
.write()
.set_unaggregated_attestation(unaggregated_attestation);
}
Err(e) => {
debug!(
- inner_chain.log,
+ chain.log,
"Failed to simulate attestation";
"error" => ?e
);
diff --git a/beacon_node/beacon_chain/src/beacon_chain.rs b/beacon_node/beacon_chain/src/beacon_chain.rs
index 7d1e058a1b..bf41805479 100644
--- a/beacon_node/beacon_chain/src/beacon_chain.rs
+++ b/beacon_node/beacon_chain/src/beacon_chain.rs
@@ -12,8 +12,8 @@ use crate::block_times_cache::BlockTimesCache;
use crate::block_verification::POS_PANDA_BANNER;
use crate::block_verification::{
check_block_is_finalized_checkpoint_or_descendant, check_block_relevancy,
- signature_verify_chain_segment, BlockError, ExecutionPendingBlock, GossipVerifiedBlock,
- IntoExecutionPendingBlock,
+ signature_verify_chain_segment, verify_header_signature, BlockError, ExecutionPendingBlock,
+ GossipVerifiedBlock, IntoExecutionPendingBlock,
};
use crate::block_verification_types::{
AsBlock, AvailableExecutedBlock, BlockImportData, ExecutedBlock, RpcBlock,
@@ -52,6 +52,7 @@ use crate::observed_attesters::{
use crate::observed_blob_sidecars::ObservedBlobSidecars;
use crate::observed_block_producers::ObservedBlockProducers;
use crate::observed_operations::{ObservationOutcome, ObservedOperations};
+use crate::observed_slashable::ObservedSlashable;
use crate::persisted_beacon_chain::{PersistedBeaconChain, DUMMY_CANONICAL_HEAD_BLOCK_ROOT};
use crate::persisted_fork_choice::PersistedForkChoice;
use crate::pre_finalization_cache::PreFinalizationBlockCache;
@@ -407,6 +408,8 @@ pub struct BeaconChain {
pub observed_block_producers: RwLock>,
/// Maintains a record of blob sidecars seen over the gossip network.
pub observed_blob_sidecars: RwLock>,
+ /// Maintains a record of slashable message seen over the gossip network or RPC.
+ pub observed_slashable: RwLock>,
/// Maintains a record of which validators have submitted voluntary exits.
pub(crate) observed_voluntary_exits: Mutex>,
/// Maintains a record of which validators we've seen proposer slashings for.
@@ -508,13 +511,17 @@ impl BeaconBlockResponseWrapper {
}
}
- pub fn consensus_block_value(&self) -> u64 {
+ pub fn consensus_block_value_gwei(&self) -> u64 {
match self {
BeaconBlockResponseWrapper::Full(resp) => resp.consensus_block_value,
BeaconBlockResponseWrapper::Blinded(resp) => resp.consensus_block_value,
}
}
+ pub fn consensus_block_value_wei(&self) -> Uint256 {
+ Uint256::from(self.consensus_block_value_gwei()) * 1_000_000_000
+ }
+
pub fn is_blinded(&self) -> bool {
matches!(self, BeaconBlockResponseWrapper::Blinded(_))
}
@@ -3157,9 +3164,27 @@ impl BeaconChain {
block_root: Hash256,
blobs: FixedBlobSidecarList,
) -> Result> {
- if let Some(slasher) = self.slasher.as_ref() {
- for blob_sidecar in blobs.iter().filter_map(|blob| blob.clone()) {
- slasher.accept_block_header(blob_sidecar.signed_block_header.clone());
+ // Need to scope this to ensure the lock is dropped before calling `process_availability`
+ // Even an explicit drop is not enough to convince the borrow checker.
+ {
+ let mut slashable_cache = self.observed_slashable.write();
+ for header in blobs
+ .into_iter()
+ .filter_map(|b| b.as_ref().map(|b| b.signed_block_header.clone()))
+ .unique()
+ {
+ if verify_header_signature::>(self, &header).is_ok() {
+ slashable_cache
+ .observe_slashable(
+ header.message.slot,
+ header.message.proposer_index,
+ block_root,
+ )
+ .map_err(|e| BlockError::BeaconChainError(e.into()))?;
+ if let Some(slasher) = self.slasher.as_ref() {
+ slasher.accept_block_header(header);
+ }
+ }
}
}
let availability = self
@@ -4021,6 +4046,7 @@ impl BeaconChain {
slot: Slot,
validator_graffiti: Option,
verification: ProduceBlockVerification,
+ builder_boost_factor: Option,
block_production_version: BlockProductionVersion,
) -> Result, BlockProductionError> {
metrics::inc_counter(&metrics::BLOCK_PRODUCTION_REQUESTS);
@@ -4049,6 +4075,7 @@ impl BeaconChain {
randao_reveal,
validator_graffiti,
verification,
+ builder_boost_factor,
block_production_version,
)
.await
@@ -4652,6 +4679,7 @@ impl BeaconChain {
randao_reveal: Signature,
validator_graffiti: Option,
verification: ProduceBlockVerification,
+ builder_boost_factor: Option,
block_production_version: BlockProductionVersion,
) -> Result, BlockProductionError> {
// Part 1/3 (blocking)
@@ -4668,6 +4696,7 @@ impl BeaconChain {
produce_at_slot,
randao_reveal,
validator_graffiti,
+ builder_boost_factor,
block_production_version,
)
},
@@ -4757,6 +4786,7 @@ impl BeaconChain {
}
}
+ #[allow(clippy::too_many_arguments)]
fn produce_partial_beacon_block(
self: &Arc,
mut state: BeaconState,
@@ -4764,6 +4794,7 @@ impl BeaconChain {
produce_at_slot: Slot,
randao_reveal: Signature,
validator_graffiti: Option,
+ builder_boost_factor: Option,
block_production_version: BlockProductionVersion,
) -> Result, BlockProductionError> {
let eth1_chain = self
@@ -4825,6 +4856,7 @@ impl BeaconChain {
parent_root,
proposer_index,
builder_params,
+ builder_boost_factor,
block_production_version,
)?;
Some(prepare_payload_handle)
diff --git a/beacon_node/beacon_chain/src/blob_verification.rs b/beacon_node/beacon_chain/src/blob_verification.rs
index a4750fd6ef..f2d150d72b 100644
--- a/beacon_node/beacon_chain/src/blob_verification.rs
+++ b/beacon_node/beacon_chain/src/blob_verification.rs
@@ -599,6 +599,16 @@ pub fn validate_blob_sidecar_for_gossip(
});
}
+ chain
+ .observed_slashable
+ .write()
+ .observe_slashable(
+ blob_sidecar.slot(),
+ blob_sidecar.block_proposer_index(),
+ block_root,
+ )
+ .map_err(|e| GossipBlobError::BeaconChainError(e.into()))?;
+
// Now the signature is valid, store the proposal so we don't accept another blob sidecar
// with the same `BlobIdentifier`.
// It's important to double-check that the proposer still hasn't been observed so we don't
diff --git a/beacon_node/beacon_chain/src/block_verification.rs b/beacon_node/beacon_chain/src/block_verification.rs
index 23c9ab7257..0cdf5b9fe9 100644
--- a/beacon_node/beacon_chain/src/block_verification.rs
+++ b/beacon_node/beacon_chain/src/block_verification.rs
@@ -946,6 +946,11 @@ impl GossipVerifiedBlock {
return Err(BlockError::ProposalSignatureInvalid);
}
+ chain
+ .observed_slashable
+ .write()
+ .observe_slashable(block.slot(), block.message().proposer_index(), block_root)
+ .map_err(|e| BlockError::BeaconChainError(e.into()))?;
// Now the signature is valid, store the proposal so we don't accept another from this
// validator and slot.
//
@@ -1241,6 +1246,12 @@ impl ExecutionPendingBlock {
chain: &Arc>,
notify_execution_layer: NotifyExecutionLayer,
) -> Result> {
+ chain
+ .observed_slashable
+ .write()
+ .observe_slashable(block.slot(), block.message().proposer_index(), block_root)
+ .map_err(|e| BlockError::BeaconChainError(e.into()))?;
+
chain
.observed_block_producers
.write()
@@ -2066,7 +2077,7 @@ fn get_signature_verifier<'a, T: BeaconChainTypes>(
/// Verify that `header` was signed with a valid signature from its proposer.
///
/// Return `Ok(())` if the signature is valid, and an `Err` otherwise.
-fn verify_header_signature(
+pub fn verify_header_signature(
chain: &BeaconChain,
header: &SignedBeaconBlockHeader,
) -> Result<(), Err> {
diff --git a/beacon_node/beacon_chain/src/builder.rs b/beacon_node/beacon_chain/src/builder.rs
index 00f5b04d2a..d36d996f01 100644
--- a/beacon_node/beacon_chain/src/builder.rs
+++ b/beacon_node/beacon_chain/src/builder.rs
@@ -880,6 +880,7 @@ where
// TODO: allow for persisting and loading the pool from disk.
observed_block_producers: <_>::default(),
observed_blob_sidecars: <_>::default(),
+ observed_slashable: <_>::default(),
observed_voluntary_exits: <_>::default(),
observed_proposer_slashings: <_>::default(),
observed_attester_slashings: <_>::default(),
diff --git a/beacon_node/beacon_chain/src/canonical_head.rs b/beacon_node/beacon_chain/src/canonical_head.rs
index 35355754bd..ced4eda05c 100644
--- a/beacon_node/beacon_chain/src/canonical_head.rs
+++ b/beacon_node/beacon_chain/src/canonical_head.rs
@@ -991,6 +991,13 @@ impl BeaconChain {
.start_slot(T::EthSpec::slots_per_epoch()),
);
+ self.observed_slashable.write().prune(
+ new_view
+ .finalized_checkpoint
+ .epoch
+ .start_slot(T::EthSpec::slots_per_epoch()),
+ );
+
self.snapshot_cache
.try_write_for(BLOCK_PROCESSING_CACHE_LOCK_TIMEOUT)
.map(|mut snapshot_cache| {
diff --git a/beacon_node/beacon_chain/src/data_availability_checker.rs b/beacon_node/beacon_chain/src/data_availability_checker.rs
index ad0e812cf2..21cac9a264 100644
--- a/beacon_node/beacon_chain/src/data_availability_checker.rs
+++ b/beacon_node/beacon_chain/src/data_availability_checker.rs
@@ -22,7 +22,6 @@ use std::sync::Arc;
use task_executor::TaskExecutor;
use types::beacon_block_body::{KzgCommitmentOpts, KzgCommitments};
use types::blob_sidecar::{BlobIdentifier, BlobSidecar, FixedBlobSidecarList};
-use types::consts::deneb::MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUESTS;
use types::{BlobSidecarList, ChainSpec, Epoch, EthSpec, Hash256, SignedBeaconBlock, Slot};
mod availability_view;
@@ -424,7 +423,8 @@ impl DataAvailabilityChecker {
.map(|current_epoch| {
std::cmp::max(
fork_epoch,
- current_epoch.saturating_sub(MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUESTS),
+ current_epoch
+ .saturating_sub(self.spec.min_epochs_for_blob_sidecars_requests),
)
})
})
@@ -517,7 +517,8 @@ async fn availability_cache_maintenance_service(
let cutoff_epoch = std::cmp::max(
finalized_epoch + 1,
std::cmp::max(
- current_epoch.saturating_sub(MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUESTS),
+ current_epoch
+ .saturating_sub(chain.spec.min_epochs_for_blob_sidecars_requests),
deneb_fork_epoch,
),
);
diff --git a/beacon_node/beacon_chain/src/execution_payload.rs b/beacon_node/beacon_chain/src/execution_payload.rs
index 093255b201..e25976c2a5 100644
--- a/beacon_node/beacon_chain/src/execution_payload.rs
+++ b/beacon_node/beacon_chain/src/execution_payload.rs
@@ -405,6 +405,7 @@ pub fn get_execution_payload(
parent_block_root: Hash256,
proposer_index: u64,
builder_params: BuilderParams,
+ builder_boost_factor: Option,
block_production_version: BlockProductionVersion,
) -> Result, BlockProductionError> {
// Compute all required values from the `state` now to avoid needing to pass it into a spawned
@@ -449,6 +450,7 @@ pub fn get_execution_payload(
builder_params,
withdrawals,
parent_beacon_block_root,
+ builder_boost_factor,
block_production_version,
)
.await
@@ -485,6 +487,7 @@ pub async fn prepare_execution_payload(
builder_params: BuilderParams,
withdrawals: Option>,
parent_beacon_block_root: Option,
+ builder_boost_factor: Option,
block_production_version: BlockProductionVersion,
) -> Result, BlockProductionError>
where
@@ -575,6 +578,7 @@ where
builder_params,
fork,
&chain.spec,
+ builder_boost_factor,
block_production_version,
)
.await
diff --git a/beacon_node/beacon_chain/src/lib.rs b/beacon_node/beacon_chain/src/lib.rs
index 4ad98a50eb..40fd5e63d1 100644
--- a/beacon_node/beacon_chain/src/lib.rs
+++ b/beacon_node/beacon_chain/src/lib.rs
@@ -40,6 +40,7 @@ mod observed_attesters;
mod observed_blob_sidecars;
pub mod observed_block_producers;
pub mod observed_operations;
+mod observed_slashable;
pub mod otb_verification_service;
mod persisted_beacon_chain;
mod persisted_fork_choice;
diff --git a/beacon_node/beacon_chain/src/observed_blob_sidecars.rs b/beacon_node/beacon_chain/src/observed_blob_sidecars.rs
index 488faf12ac..148d85befb 100644
--- a/beacon_node/beacon_chain/src/observed_blob_sidecars.rs
+++ b/beacon_node/beacon_chain/src/observed_blob_sidecars.rs
@@ -3,10 +3,10 @@
//! Only `BlobSidecar`s that have completed proposer signature verification can be added
//! to this cache to reduce DoS risks.
-use crate::observed_block_producers::{ProposalKey, SeenBlock};
+use crate::observed_block_producers::ProposalKey;
use std::collections::{HashMap, HashSet};
use std::marker::PhantomData;
-use types::{BlobSidecar, EthSpec, Hash256, Slot};
+use types::{BlobSidecar, EthSpec, Slot};
#[derive(Debug, PartialEq)]
pub enum Error {
@@ -30,7 +30,7 @@ pub enum Error {
pub struct ObservedBlobSidecars {
finalized_slot: Slot,
/// Stores all received blob indices for a given `(ValidatorIndex, Slot)` tuple.
- items: HashMap, HashSet)>,
+ items: HashMap>,
_phantom: PhantomData,
}
@@ -51,23 +51,16 @@ impl ObservedBlobSidecars {
///
/// The supplied `blob_sidecar` **MUST** have completed proposer signature verification.
pub fn observe_sidecar(&mut self, blob_sidecar: &BlobSidecar) -> Result {
- let block_root = blob_sidecar.block_root();
self.sanitize_blob_sidecar(blob_sidecar)?;
- let (blob_indices, block_roots) = self
+ let blob_indices = self
.items
.entry(ProposalKey {
slot: blob_sidecar.slot(),
proposer: blob_sidecar.block_proposer_index(),
})
- .or_insert_with(|| {
- (
- HashSet::with_capacity(T::max_blobs_per_block()),
- HashSet::new(),
- )
- });
+ .or_insert_with(|| HashSet::with_capacity(T::max_blobs_per_block()));
let did_not_exist = blob_indices.insert(blob_sidecar.index);
- block_roots.insert(block_root);
Ok(!did_not_exist)
}
@@ -81,44 +74,12 @@ impl ObservedBlobSidecars {
slot: blob_sidecar.slot(),
proposer: blob_sidecar.block_proposer_index(),
})
- .map_or(false, |(blob_indices, _block_roots)| {
+ .map_or(false, |blob_indices| {
blob_indices.contains(&blob_sidecar.index)
});
Ok(is_known)
}
- /// Returns `Ok(true)` if the `block_root` has been observed in a blob sidecar message before, `Ok(false)` if not.
- /// Does not update the cache, so calling this function multiple times will continue to return
- /// `Ok(false)`, until `Self::observe_proposer` is called.
- ///
- /// ## Errors
- ///
- /// - `key.proposer_index` is greater than `VALIDATOR_REGISTRY_LIMIT`.
- /// - `key.slot` is equal to or less than the latest pruned `finalized_slot`.
- pub fn proposer_has_been_observed(
- &self,
- slot: Slot,
- proposer: u64,
- block_root: Hash256,
- ) -> Result {
- let key = ProposalKey { slot, proposer };
- if let Some((_, block_roots)) = self.items.get(&key) {
- let block_already_known = block_roots.contains(&block_root);
- let no_prev_known_blocks =
- block_roots.difference(&HashSet::from([block_root])).count() == 0;
-
- if !no_prev_known_blocks {
- Ok(SeenBlock::Slashable)
- } else if block_already_known {
- Ok(SeenBlock::Duplicate)
- } else {
- Ok(SeenBlock::UniqueNonSlashable)
- }
- } else {
- Ok(SeenBlock::UniqueNonSlashable)
- }
- }
-
fn sanitize_blob_sidecar(&self, blob_sidecar: &BlobSidecar) -> Result<(), Error> {
if blob_sidecar.index >= T::max_blobs_per_block() as u64 {
return Err(Error::InvalidBlobIndex(blob_sidecar.index));
@@ -148,6 +109,7 @@ impl ObservedBlobSidecars {
#[cfg(test)]
mod tests {
use super::*;
+ use bls::Hash256;
use std::sync::Arc;
use types::{BlobSidecar, MainnetEthSpec};
@@ -189,7 +151,7 @@ mod tests {
"only one (validator_index, slot) tuple should be present"
);
- let (cached_blob_indices, cached_block_roots) = cache
+ let cached_blob_indices = cache
.items
.get(&ProposalKey::new(proposer_index_a, Slot::new(0)))
.expect("slot zero should be present");
@@ -198,11 +160,6 @@ mod tests {
1,
"only one proposer should be present"
);
- assert_eq!(
- cached_block_roots.len(),
- 1,
- "only one block root should be present"
- );
/*
* Check that a prune at the genesis slot does nothing.
@@ -212,7 +169,7 @@ mod tests {
assert_eq!(cache.finalized_slot, 0, "finalized slot is zero");
assert_eq!(cache.items.len(), 1, "only one slot should be present");
- let (cached_blob_indices, cached_block_roots) = cache
+ let cached_blob_indices = cache
.items
.get(&ProposalKey::new(proposer_index_a, Slot::new(0)))
.expect("slot zero should be present");
@@ -221,11 +178,6 @@ mod tests {
1,
"only one proposer should be present"
);
- assert_eq!(
- cached_block_roots.len(),
- 1,
- "only one block root should be present"
- );
/*
* Check that a prune empties the cache
@@ -274,7 +226,7 @@ mod tests {
);
assert_eq!(cache.items.len(), 1, "only one slot should be present");
- let (cached_blob_indices, cached_block_roots) = cache
+ let cached_blob_indices = cache
.items
.get(&ProposalKey::new(proposer_index_b, Slot::new(three_epochs)))
.expect("the three epochs slot should be present");
@@ -283,11 +235,6 @@ mod tests {
1,
"only one proposer should be present"
);
- assert_eq!(
- cached_block_roots.len(),
- 1,
- "only one block root should be present"
- );
/*
* Check that a prune doesnt wipe later blocks
@@ -303,7 +250,7 @@ mod tests {
);
assert_eq!(cache.items.len(), 1, "only one slot should be present");
- let (cached_blob_indices, cached_block_roots) = cache
+ let cached_blob_indices = cache
.items
.get(&ProposalKey::new(proposer_index_b, Slot::new(three_epochs)))
.expect("the three epochs slot should be present");
@@ -312,11 +259,6 @@ mod tests {
1,
"only one proposer should be present"
);
- assert_eq!(
- cached_block_roots.len(),
- 1,
- "only one block root should be present"
- );
}
#[test]
@@ -353,7 +295,7 @@ mod tests {
assert_eq!(cache.finalized_slot, 0, "finalized slot is zero");
assert_eq!(cache.items.len(), 1, "only one slot should be present");
- let (cached_blob_indices, cached_block_roots) = cache
+ let cached_blob_indices = cache
.items
.get(&ProposalKey::new(proposer_index_a, Slot::new(0)))
.expect("slot zero should be present");
@@ -362,11 +304,6 @@ mod tests {
1,
"only one proposer should be present"
);
- assert_eq!(
- cached_block_roots.len(),
- 1,
- "only one block root should be present"
- );
// Slot 1, proposer 0
@@ -396,7 +333,7 @@ mod tests {
assert_eq!(cache.finalized_slot, 0, "finalized slot is zero");
assert_eq!(cache.items.len(), 2, "two slots should be present");
- let (cached_blob_indices, cached_block_roots) = cache
+ let cached_blob_indices = cache
.items
.get(&ProposalKey::new(proposer_index_a, Slot::new(0)))
.expect("slot zero should be present");
@@ -405,12 +342,7 @@ mod tests {
1,
"only one proposer should be present in slot 0"
);
- assert_eq!(
- cached_block_roots.len(),
- 1,
- "only one block root should be present in slot 0"
- );
- let (cached_blob_indices, cached_block_roots) = cache
+ let cached_blob_indices = cache
.items
.get(&ProposalKey::new(proposer_index_b, Slot::new(1)))
.expect("slot zero should be present");
@@ -419,11 +351,6 @@ mod tests {
1,
"only one proposer should be present in slot 1"
);
- assert_eq!(
- cached_block_roots.len(),
- 1,
- "only one block root should be present in slot 1"
- );
// Slot 0, index 1
let sidecar_c = get_blob_sidecar(0, proposer_index_a, 1);
@@ -451,7 +378,7 @@ mod tests {
assert_eq!(cache.finalized_slot, 0, "finalized slot is zero");
assert_eq!(cache.items.len(), 2, "two slots should be present");
- let (cached_blob_indices, cached_block_roots) = cache
+ let cached_blob_indices = cache
.items
.get(&ProposalKey::new(proposer_index_a, Slot::new(0)))
.expect("slot zero should be present");
@@ -460,13 +387,6 @@ mod tests {
2,
"two blob indices should be present in slot 0"
);
- // Changing the blob index doesn't change the block root, so only one unique signed
- // header should be in the cache.
- assert_eq!(
- cached_block_roots.len(),
- 1,
- "one block root should be present in slot 0"
- );
// Create a sidecar sharing slot and proposer but with a different block root.
let mut sidecar_d: BlobSidecar = BlobSidecar {
@@ -488,7 +408,7 @@ mod tests {
Ok(true),
"indicates sidecar proposer was observed"
);
- let (cached_blob_indices, cached_block_roots) = cache
+ let cached_blob_indices = cache
.items
.get(&ProposalKey::new(proposer_index_a, Slot::new(0)))
.expect("slot zero should be present");
@@ -497,11 +417,6 @@ mod tests {
2,
"two blob indices should be present in slot 0"
);
- assert_eq!(
- cached_block_roots.len(),
- 2,
- "two block root should be present in slot 0"
- );
// Try adding an out of bounds index
let invalid_index = E::max_blobs_per_block() as u64;
diff --git a/beacon_node/beacon_chain/src/observed_slashable.rs b/beacon_node/beacon_chain/src/observed_slashable.rs
new file mode 100644
index 0000000000..001a0d4a86
--- /dev/null
+++ b/beacon_node/beacon_chain/src/observed_slashable.rs
@@ -0,0 +1,486 @@
+//! Provides the `ObservedSlashable` struct which tracks slashable messages seen in
+//! gossip or via RPC. Useful in supporting `broadcast_validation`Â in the Beacon API.
+
+use crate::observed_block_producers::Error;
+use std::collections::hash_map::Entry;
+use std::collections::{HashMap, HashSet};
+use std::marker::PhantomData;
+use types::{EthSpec, Hash256, Slot, Unsigned};
+
+#[derive(Eq, Hash, PartialEq, Debug, Default)]
+pub struct ProposalKey {
+ pub slot: Slot,
+ pub proposer: u64,
+}
+
+/// Maintains a cache of observed `(block.slot, block.proposer)`.
+///
+/// The cache supports pruning based upon the finalized epoch. It does not automatically prune, you
+/// must call `Self::prune` manually.
+///
+/// The maximum size of the cache is determined by `slots_since_finality *
+/// VALIDATOR_REGISTRY_LIMIT`. This is quite a large size, so it's important that upstream
+/// functions only use this cache for blocks with a valid signature. Only allowing valid signed
+/// blocks reduces the theoretical maximum size of this cache to `slots_since_finality *
+/// active_validator_count`, however in reality that is more like `slots_since_finality *
+/// known_distinct_shufflings` which is much smaller.
+pub struct ObservedSlashable {
+ finalized_slot: Slot,
+ items: HashMap>,
+ _phantom: PhantomData,
+}
+
+impl Default for ObservedSlashable {
+ /// Instantiates `Self` with `finalized_slot == 0`.
+ fn default() -> Self {
+ Self {
+ finalized_slot: Slot::new(0),
+ items: HashMap::new(),
+ _phantom: PhantomData,
+ }
+ }
+}
+
+impl ObservedSlashable {
+ /// Observe that the `header` was produced by `header.proposer_index` at `header.slot`. This will
+ /// update `self` so future calls to it indicate that this block is known.
+ ///
+ /// The supplied `block` **MUST** be signature verified (see struct-level documentation).
+ ///
+ /// ## Errors
+ ///
+ /// - `header.proposer_index` is greater than `VALIDATOR_REGISTRY_LIMIT`.
+ /// - `header.slot` is equal to or less than the latest pruned `finalized_slot`.
+ pub fn observe_slashable(
+ &mut self,
+ slot: Slot,
+ proposer_index: u64,
+ block_root: Hash256,
+ ) -> Result<(), Error> {
+ self.sanitize_header(slot, proposer_index)?;
+
+ let key = ProposalKey {
+ slot,
+ proposer: proposer_index,
+ };
+
+ let entry = self.items.entry(key);
+
+ match entry {
+ Entry::Occupied(mut occupied_entry) => {
+ let block_roots = occupied_entry.get_mut();
+ block_roots.insert(block_root);
+ }
+ Entry::Vacant(vacant_entry) => {
+ let block_roots = HashSet::from([block_root]);
+ vacant_entry.insert(block_roots);
+ }
+ }
+
+ Ok(())
+ }
+
+ /// Returns `Ok(true)` if the `block_root` is slashable, `Ok(false)` if not. Does not
+ /// update the cache, so calling this function multiple times will continue to return
+ /// `Ok(false)`, until `Self::observe_proposer` is called.
+ ///
+ /// ## Errors
+ ///
+ /// - `proposer_index` is greater than `VALIDATOR_REGISTRY_LIMIT`.
+ /// - `slot` is equal to or less than the latest pruned `finalized_slot`.
+ pub fn is_slashable(
+ &self,
+ slot: Slot,
+ proposer_index: u64,
+ block_root: Hash256,
+ ) -> Result {
+ self.sanitize_header(slot, proposer_index)?;
+
+ let key = ProposalKey {
+ slot,
+ proposer: proposer_index,
+ };
+
+ if let Some(block_roots) = self.items.get(&key) {
+ let no_prev_known_blocks =
+ block_roots.difference(&HashSet::from([block_root])).count() == 0;
+
+ Ok(!no_prev_known_blocks)
+ } else {
+ Ok(false)
+ }
+ }
+
+ /// Returns `Ok(())` if the given `header` is sane.
+ fn sanitize_header(&self, slot: Slot, proposer_index: u64) -> Result<(), Error> {
+ if proposer_index >= E::ValidatorRegistryLimit::to_u64() {
+ return Err(Error::ValidatorIndexTooHigh(proposer_index));
+ }
+
+ let finalized_slot = self.finalized_slot;
+ if finalized_slot > 0 && slot <= finalized_slot {
+ return Err(Error::FinalizedBlock {
+ slot,
+ finalized_slot,
+ });
+ }
+
+ Ok(())
+ }
+
+ /// Removes all observations of blocks equal to or earlier than `finalized_slot`.
+ ///
+ /// Stores `finalized_slot` in `self`, so that `self` will reject any block that has a slot
+ /// equal to or less than `finalized_slot`.
+ ///
+ /// No-op if `finalized_slot == 0`.
+ pub fn prune(&mut self, finalized_slot: Slot) {
+ if finalized_slot == 0 {
+ return;
+ }
+
+ self.finalized_slot = finalized_slot;
+ self.items.retain(|key, _| key.slot > finalized_slot);
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use types::{BeaconBlock, Graffiti, MainnetEthSpec};
+
+ type E = MainnetEthSpec;
+
+ fn get_block(slot: u64, proposer: u64) -> BeaconBlock {
+ let mut block = BeaconBlock::empty(&E::default_spec());
+ *block.slot_mut() = slot.into();
+ *block.proposer_index_mut() = proposer;
+ block
+ }
+
+ #[test]
+ fn pruning() {
+ let mut cache = ObservedSlashable::::default();
+
+ assert_eq!(cache.finalized_slot, 0, "finalized slot is zero");
+ assert_eq!(cache.items.len(), 0, "no slots should be present");
+
+ // Slot 0, proposer 0
+ let block_a = get_block(0, 0);
+ let block_root = block_a.canonical_root();
+
+ assert_eq!(
+ cache.observe_slashable(block_a.slot(), block_a.proposer_index(), block_root),
+ Ok(()),
+ "can observe proposer"
+ );
+
+ /*
+ * Preconditions.
+ */
+ assert_eq!(cache.finalized_slot, 0, "finalized slot is zero");
+ assert_eq!(cache.items.len(), 1, "only one slot should be present");
+ assert_eq!(
+ cache
+ .items
+ .get(&ProposalKey {
+ slot: Slot::new(0),
+ proposer: 0
+ })
+ .expect("slot zero should be present")
+ .len(),
+ 1,
+ "only one proposer should be present"
+ );
+
+ /*
+ * Check that a prune at the genesis slot does nothing.
+ */
+ cache.prune(Slot::new(0));
+
+ assert_eq!(cache.finalized_slot, 0, "finalized slot is zero");
+ assert_eq!(cache.items.len(), 1, "only one slot should be present");
+ assert_eq!(
+ cache
+ .items
+ .get(&ProposalKey {
+ slot: Slot::new(0),
+ proposer: 0
+ })
+ .expect("slot zero should be present")
+ .len(),
+ 1,
+ "only one block root should be present"
+ );
+
+ /*
+ * Check that a prune empties the cache
+ */
+ cache.prune(E::slots_per_epoch().into());
+ assert_eq!(
+ cache.finalized_slot,
+ Slot::from(E::slots_per_epoch()),
+ "finalized slot is updated"
+ );
+ assert_eq!(cache.items.len(), 0, "no items left");
+
+ /*
+ * Check that we can't insert a finalized block
+ */
+ // First slot of finalized epoch, proposer 0
+ let block_b = get_block(E::slots_per_epoch(), 0);
+ let block_root_b = block_b.canonical_root();
+
+ assert_eq!(
+ cache.observe_slashable(block_b.slot(), block_b.proposer_index(), block_root_b),
+ Err(Error::FinalizedBlock {
+ slot: E::slots_per_epoch().into(),
+ finalized_slot: E::slots_per_epoch().into(),
+ }),
+ "cant insert finalized block"
+ );
+
+ assert_eq!(cache.items.len(), 0, "block was not added");
+
+ /*
+ * Check that we _can_ insert a non-finalized block
+ */
+ let three_epochs = E::slots_per_epoch() * 3;
+
+ // First slot of finalized epoch, proposer 0
+ let block_b = get_block(three_epochs, 0);
+
+ assert_eq!(
+ cache.observe_slashable(block_b.slot(), block_b.proposer_index(), block_root_b),
+ Ok(()),
+ "can insert non-finalized block"
+ );
+
+ assert_eq!(cache.items.len(), 1, "only one slot should be present");
+ assert_eq!(
+ cache
+ .items
+ .get(&ProposalKey {
+ slot: Slot::new(three_epochs),
+ proposer: 0
+ })
+ .expect("the three epochs slot should be present")
+ .len(),
+ 1,
+ "only one proposer should be present"
+ );
+
+ /*
+ * Check that a prune doesnt wipe later blocks
+ */
+ let two_epochs = E::slots_per_epoch() * 2;
+ cache.prune(two_epochs.into());
+
+ assert_eq!(
+ cache.finalized_slot,
+ Slot::from(two_epochs),
+ "finalized slot is updated"
+ );
+
+ assert_eq!(cache.items.len(), 1, "only one slot should be present");
+ assert_eq!(
+ cache
+ .items
+ .get(&ProposalKey {
+ slot: Slot::new(three_epochs),
+ proposer: 0
+ })
+ .expect("the three epochs slot should be present")
+ .len(),
+ 1,
+ "only one block root should be present"
+ );
+ }
+
+ #[test]
+ fn simple_observations() {
+ let mut cache = ObservedSlashable::::default();
+
+ // Slot 0, proposer 0
+ let block_a = get_block(0, 0);
+ let block_root_a = block_a.canonical_root();
+
+ assert_eq!(
+ cache.is_slashable(
+ block_a.slot(),
+ block_a.proposer_index(),
+ block_a.canonical_root()
+ ),
+ Ok(false),
+ "no observation in empty cache"
+ );
+ assert_eq!(
+ cache.observe_slashable(block_a.slot(), block_a.proposer_index(), block_root_a),
+ Ok(()),
+ "can observe proposer"
+ );
+ assert_eq!(
+ cache.is_slashable(
+ block_a.slot(),
+ block_a.proposer_index(),
+ block_a.canonical_root()
+ ),
+ Ok(false),
+ "observed but unslashed block"
+ );
+ assert_eq!(
+ cache.observe_slashable(block_a.slot(), block_a.proposer_index(), block_root_a),
+ Ok(()),
+ "observing again"
+ );
+
+ assert_eq!(cache.finalized_slot, 0, "finalized slot is zero");
+ assert_eq!(cache.items.len(), 1, "only one slot should be present");
+ assert_eq!(
+ cache
+ .items
+ .get(&ProposalKey {
+ slot: Slot::new(0),
+ proposer: 0
+ })
+ .expect("slot zero should be present")
+ .len(),
+ 1,
+ "only one block root should be present"
+ );
+
+ // Slot 1, proposer 0
+ let block_b = get_block(1, 0);
+ let block_root_b = block_b.canonical_root();
+
+ assert_eq!(
+ cache.is_slashable(
+ block_b.slot(),
+ block_b.proposer_index(),
+ block_b.canonical_root()
+ ),
+ Ok(false),
+ "not slashable for new slot"
+ );
+ assert_eq!(
+ cache.observe_slashable(block_b.slot(), block_b.proposer_index(), block_root_b),
+ Ok(()),
+ "can observe proposer for new slot"
+ );
+ assert_eq!(
+ cache.is_slashable(
+ block_b.slot(),
+ block_b.proposer_index(),
+ block_b.canonical_root()
+ ),
+ Ok(false),
+ "observed but not slashable block in slot 1"
+ );
+ assert_eq!(
+ cache.observe_slashable(block_b.slot(), block_b.proposer_index(), block_root_b),
+ Ok(()),
+ "observing slot 1 again"
+ );
+
+ assert_eq!(cache.finalized_slot, 0, "finalized slot is zero");
+ assert_eq!(cache.items.len(), 2, "two slots should be present");
+ assert_eq!(
+ cache
+ .items
+ .get(&ProposalKey {
+ slot: Slot::new(0),
+ proposer: 0
+ })
+ .expect("slot zero should be present")
+ .len(),
+ 1,
+ "only one block root should be present in slot 0"
+ );
+ assert_eq!(
+ cache
+ .items
+ .get(&ProposalKey {
+ slot: Slot::new(1),
+ proposer: 0
+ })
+ .expect("slot zero should be present")
+ .len(),
+ 1,
+ "only one block root should be present in slot 1"
+ );
+
+ // Slot 0, proposer 1
+ let block_c = get_block(0, 1);
+ let block_root_c = block_c.canonical_root();
+
+ assert_eq!(
+ cache.is_slashable(
+ block_c.slot(),
+ block_c.proposer_index(),
+ block_c.canonical_root()
+ ),
+ Ok(false),
+ "not slashable due to new proposer"
+ );
+ assert_eq!(
+ cache.observe_slashable(block_c.slot(), block_c.proposer_index(), block_root_c),
+ Ok(()),
+ "can observe new proposer, indicates proposer unobserved"
+ );
+ assert_eq!(
+ cache.is_slashable(
+ block_c.slot(),
+ block_c.proposer_index(),
+ block_c.canonical_root()
+ ),
+ Ok(false),
+ "not slashable due to new proposer"
+ );
+ assert_eq!(
+ cache.observe_slashable(block_c.slot(), block_c.proposer_index(), block_root_c),
+ Ok(()),
+ "observing new proposer again"
+ );
+
+ assert_eq!(cache.finalized_slot, 0, "finalized slot is zero");
+ assert_eq!(cache.items.len(), 3, "three slots should be present");
+ assert_eq!(
+ cache
+ .items
+ .iter()
+ .filter(|(k, _)| k.slot == cache.finalized_slot)
+ .count(),
+ 2,
+ "two proposers should be present in slot 0"
+ );
+ assert_eq!(
+ cache
+ .items
+ .iter()
+ .filter(|(k, _)| k.slot == Slot::new(1))
+ .count(),
+ 1,
+ "only one proposer should be present in slot 1"
+ );
+
+ // Slot 0, proposer 1 (again)
+ let mut block_d = get_block(0, 1);
+ *block_d.body_mut().graffiti_mut() = Graffiti::from(*b"this is slashable ");
+ let block_root_d = block_d.canonical_root();
+
+ assert_eq!(
+ cache.is_slashable(
+ block_d.slot(),
+ block_d.proposer_index(),
+ block_d.canonical_root()
+ ),
+ Ok(true),
+ "slashable due to new proposer"
+ );
+ assert_eq!(
+ cache.observe_slashable(block_d.slot(), block_d.proposer_index(), block_root_d),
+ Ok(()),
+ "can observe new proposer, indicates proposer unobserved"
+ );
+ }
+}
diff --git a/beacon_node/beacon_chain/src/test_utils.rs b/beacon_node/beacon_chain/src/test_utils.rs
index eb73478dee..7a66a6bdb4 100644
--- a/beacon_node/beacon_chain/src/test_utils.rs
+++ b/beacon_node/beacon_chain/src/test_utils.rs
@@ -464,14 +464,13 @@ where
}
pub fn mock_execution_layer(self) -> Self {
- self.mock_execution_layer_with_config(None)
+ self.mock_execution_layer_with_config()
}
- pub fn mock_execution_layer_with_config(mut self, builder_threshold: Option) -> Self {
+ pub fn mock_execution_layer_with_config(mut self) -> Self {
let mock = mock_execution_layer_from_parts::(
self.spec.as_ref().expect("cannot build without spec"),
self.runtime.task_executor.clone(),
- builder_threshold,
);
self.execution_layer = Some(mock.el.clone());
self.mock_execution_layer = Some(mock);
@@ -574,7 +573,6 @@ where
pub fn mock_execution_layer_from_parts(
spec: &ChainSpec,
task_executor: TaskExecutor,
- builder_threshold: Option,
) -> MockExecutionLayer {
let shanghai_time = spec.capella_fork_epoch.map(|epoch| {
HARNESS_GENESIS_TIME + spec.seconds_per_slot * T::slots_per_epoch() * epoch.as_u64()
@@ -593,7 +591,6 @@ pub fn mock_execution_layer_from_parts(
DEFAULT_TERMINAL_BLOCK,
shanghai_time,
cancun_time,
- builder_threshold,
Some(JwtKey::from_slice(&DEFAULT_JWT_SECRET).unwrap()),
spec.clone(),
Some(kzg),
@@ -860,6 +857,7 @@ where
randao_reveal,
Some(graffiti),
ProduceBlockVerification::VerifyRandao,
+ None,
BlockProductionVersion::FullV2,
)
.await
@@ -921,6 +919,7 @@ where
randao_reveal,
Some(graffiti),
ProduceBlockVerification::VerifyRandao,
+ None,
BlockProductionVersion::FullV2,
)
.await
@@ -1758,6 +1757,32 @@ where
((signed_block, blobs), state)
}
+ pub async fn make_blob_with_modifier(
+ &self,
+ state: BeaconState,
+ slot: Slot,
+ blob_modifier: impl FnOnce(&mut BlobsList),
+ ) -> (SignedBlockContentsTuple, BeaconState) {
+ assert_ne!(slot, 0, "can't produce a block at slot 0");
+ assert!(slot >= state.slot());
+
+ let ((block, mut blobs), state) = self.make_block_return_pre_state(state, slot).await;
+
+ let (block, _) = block.deconstruct();
+
+ blob_modifier(&mut blobs.as_mut().unwrap().1);
+
+ let proposer_index = state.get_beacon_proposer_index(slot, &self.spec).unwrap();
+
+ let signed_block = block.sign(
+ &self.validator_keypairs[proposer_index].sk,
+ &state.fork(),
+ state.genesis_validators_root(),
+ &self.spec,
+ );
+ ((signed_block, blobs), state)
+ }
+
pub fn make_deposits<'a>(
&self,
state: &'a mut BeaconState,
diff --git a/beacon_node/beacon_chain/src/validator_monitor.rs b/beacon_node/beacon_chain/src/validator_monitor.rs
index 8d82a0c06b..49a555816b 100644
--- a/beacon_node/beacon_chain/src/validator_monitor.rs
+++ b/beacon_node/beacon_chain/src/validator_monitor.rs
@@ -26,9 +26,9 @@ use types::consts::altair::{
TIMELY_HEAD_FLAG_INDEX, TIMELY_SOURCE_FLAG_INDEX, TIMELY_TARGET_FLAG_INDEX,
};
use types::{
- Attestation, AttesterSlashing, BeaconBlockRef, BeaconState, ChainSpec, Epoch, EthSpec, Hash256,
- IndexedAttestation, ProposerSlashing, PublicKeyBytes, SignedAggregateAndProof,
- SignedContributionAndProof, Slot, SyncCommitteeMessage, VoluntaryExit,
+ Attestation, AttestationData, AttesterSlashing, BeaconBlockRef, BeaconState, BeaconStateError,
+ ChainSpec, Epoch, EthSpec, Hash256, IndexedAttestation, ProposerSlashing, PublicKeyBytes,
+ SignedAggregateAndProof, SignedContributionAndProof, Slot, SyncCommitteeMessage, VoluntaryExit,
};
/// Used for Prometheus labels.
@@ -731,6 +731,8 @@ impl ValidatorMonitor {
// that qualifies the committee index for reward is included
let inclusion_delay = spec.min_attestation_inclusion_delay;
+ let data = &unaggregated_attestation.data;
+
// Get the reward indices for the unaggregated attestation or log an error
match get_attestation_participation_flag_indices(
state,
@@ -742,47 +744,12 @@ impl ValidatorMonitor {
let head_hit = flag_indices.contains(&TIMELY_HEAD_FLAG_INDEX);
let target_hit = flag_indices.contains(&TIMELY_TARGET_FLAG_INDEX);
let source_hit = flag_indices.contains(&TIMELY_SOURCE_FLAG_INDEX);
-
- if head_hit {
- metrics::inc_counter(
- &metrics::VALIDATOR_MONITOR_ATTESTATION_SIMULATOR_HEAD_ATTESTER_HIT,
- );
- } else {
- metrics::inc_counter(
- &metrics::VALIDATOR_MONITOR_ATTESTATION_SIMULATOR_HEAD_ATTESTER_MISS,
- );
- }
- if target_hit {
- metrics::inc_counter(
- &metrics::VALIDATOR_MONITOR_ATTESTATION_SIMULATOR_TARGET_ATTESTER_HIT,
- );
- } else {
- metrics::inc_counter(
- &metrics::VALIDATOR_MONITOR_ATTESTATION_SIMULATOR_TARGET_ATTESTER_MISS,
- );
- }
- if source_hit {
- metrics::inc_counter(
- &metrics::VALIDATOR_MONITOR_ATTESTATION_SIMULATOR_SOURCE_ATTESTER_HIT,
- );
- } else {
- metrics::inc_counter(
- &metrics::VALIDATOR_MONITOR_ATTESTATION_SIMULATOR_SOURCE_ATTESTER_MISS,
- );
- }
-
- let data = &unaggregated_attestation.data;
- debug!(
- self.log,
- "Simulated attestation evaluated";
- "attestation_source" => ?data.source.root,
- "attestation_target" => ?data.target.root,
- "attestation_head" => ?data.beacon_block_root,
- "attestation_slot" => ?data.slot,
- "source_hit" => source_hit,
- "target_hit" => target_hit,
- "head_hit" => head_hit,
- );
+ register_simulated_attestation(
+ data, head_hit, target_hit, source_hit, &self.log,
+ )
+ }
+ Err(BeaconStateError::IncorrectAttestationSource) => {
+ register_simulated_attestation(data, false, false, false, &self.log)
}
Err(err) => {
error!(
@@ -2054,6 +2021,46 @@ impl ValidatorMonitor {
}
}
+fn register_simulated_attestation(
+ data: &AttestationData,
+ head_hit: bool,
+ target_hit: bool,
+ source_hit: bool,
+ log: &Logger,
+) {
+ if head_hit {
+ metrics::inc_counter(&metrics::VALIDATOR_MONITOR_ATTESTATION_SIMULATOR_HEAD_ATTESTER_HIT);
+ } else {
+ metrics::inc_counter(&metrics::VALIDATOR_MONITOR_ATTESTATION_SIMULATOR_HEAD_ATTESTER_MISS);
+ }
+ if target_hit {
+ metrics::inc_counter(&metrics::VALIDATOR_MONITOR_ATTESTATION_SIMULATOR_TARGET_ATTESTER_HIT);
+ } else {
+ metrics::inc_counter(
+ &metrics::VALIDATOR_MONITOR_ATTESTATION_SIMULATOR_TARGET_ATTESTER_MISS,
+ );
+ }
+ if source_hit {
+ metrics::inc_counter(&metrics::VALIDATOR_MONITOR_ATTESTATION_SIMULATOR_SOURCE_ATTESTER_HIT);
+ } else {
+ metrics::inc_counter(
+ &metrics::VALIDATOR_MONITOR_ATTESTATION_SIMULATOR_SOURCE_ATTESTER_MISS,
+ );
+ }
+
+ debug!(
+ log,
+ "Simulated attestation evaluated";
+ "attestation_source" => ?data.source.root,
+ "attestation_target" => ?data.target.root,
+ "attestation_head" => ?data.beacon_block_root,
+ "attestation_slot" => ?data.slot,
+ "source_hit" => source_hit,
+ "target_hit" => target_hit,
+ "head_hit" => head_hit,
+ );
+}
+
/// Returns the duration since the unix epoch.
pub fn timestamp_now() -> Duration {
SystemTime::now()
diff --git a/beacon_node/beacon_chain/tests/store_tests.rs b/beacon_node/beacon_chain/tests/store_tests.rs
index 8ba099ec73..28770b93e2 100644
--- a/beacon_node/beacon_chain/tests/store_tests.rs
+++ b/beacon_node/beacon_chain/tests/store_tests.rs
@@ -2421,7 +2421,7 @@ async fn weak_subjectivity_sync_test(slots: Vec, checkpoint_slot: Slot) {
.unwrap();
let mock =
- mock_execution_layer_from_parts(&harness.spec, harness.runtime.task_executor.clone(), None);
+ mock_execution_layer_from_parts(&harness.spec, harness.runtime.task_executor.clone());
// Initialise a new beacon chain from the finalized checkpoint.
// The slot clock must be set to a time ahead of the checkpoint state.
diff --git a/beacon_node/beacon_processor/src/lib.rs b/beacon_node/beacon_processor/src/lib.rs
index 79b46f90a5..045b06a1e7 100644
--- a/beacon_node/beacon_processor/src/lib.rs
+++ b/beacon_node/beacon_processor/src/lib.rs
@@ -60,7 +60,6 @@ use std::time::Duration;
use task_executor::TaskExecutor;
use tokio::sync::mpsc;
use tokio::sync::mpsc::error::TrySendError;
-use types::consts::deneb::MAX_BLOBS_PER_BLOCK;
use types::{Attestation, Hash256, SignedAggregateAndProof, SubnetId};
use types::{EthSpec, Slot};
use work_reprocessing_queue::IgnoredRpcBlock;
@@ -168,8 +167,7 @@ const MAX_BLOCKS_BY_RANGE_QUEUE_LEN: usize = 1_024;
/// The maximum number of queued `BlobsByRangeRequest` objects received from the network RPC that
/// will be stored before we start dropping them.
-const MAX_BLOBS_BY_RANGE_QUEUE_LEN: usize =
- MAX_BLOCKS_BY_RANGE_QUEUE_LEN * MAX_BLOBS_PER_BLOCK as usize;
+const MAX_BLOBS_BY_RANGE_QUEUE_LEN: usize = 1024;
/// The maximum number of queued `BlocksByRootRequest` objects received from the network RPC that
/// will be stored before we start dropping them.
diff --git a/beacon_node/client/src/builder.rs b/beacon_node/client/src/builder.rs
index c6c238fd5a..9c88eccc70 100644
--- a/beacon_node/client/src/builder.rs
+++ b/beacon_node/client/src/builder.rs
@@ -35,6 +35,7 @@ use std::net::TcpListener;
use std::path::{Path, PathBuf};
use std::sync::Arc;
use std::time::Duration;
+use std::time::{SystemTime, UNIX_EPOCH};
use timer::spawn_timer;
use tokio::sync::oneshot;
use types::{
@@ -45,6 +46,11 @@ use types::{
/// Interval between polling the eth1 node for genesis information.
pub const ETH1_GENESIS_UPDATE_INTERVAL_MILLIS: u64 = 7_000;
+/// Reduces the blob availability period by some epochs. Helps prevent the user
+/// from starting a genesis sync so near to the blob pruning window that blobs
+/// have been pruned before they can manage to sync the chain.
+const BLOB_AVAILABILITY_REDUCTION_EPOCHS: u64 = 2;
+
/// Builds a `Client` instance.
///
/// ## Notes
@@ -252,6 +258,45 @@ where
let genesis_state = genesis_state(&runtime_context, &config, log).await?;
+ // If the user has not explicitly allowed genesis sync, prevent
+ // them from trying to sync from genesis if we're outside of the
+ // blob P2P availability window.
+ //
+ // It doesn't make sense to try and sync the chain if we can't
+ // verify blob availability by downloading blobs from the P2P
+ // network. The user should do a checkpoint sync instead.
+ if !config.allow_insecure_genesis_sync {
+ if let Some(deneb_fork_epoch) = spec.deneb_fork_epoch {
+ let now = SystemTime::now()
+ .duration_since(UNIX_EPOCH)
+ .map_err(|e| format!("Unable to read system time: {e:}"))?
+ .as_secs();
+ let genesis_time = genesis_state.genesis_time();
+ let deneb_time =
+ genesis_time + (deneb_fork_epoch.as_u64() * spec.seconds_per_slot);
+
+ // Shrink the blob availability window so users don't start
+ // a sync right before blobs start to disappear from the P2P
+ // network.
+ let reduced_p2p_availability_epochs = spec
+ .min_epochs_for_blob_sidecars_requests
+ .saturating_sub(BLOB_AVAILABILITY_REDUCTION_EPOCHS);
+ let blob_availability_window = reduced_p2p_availability_epochs
+ * TEthSpec::slots_per_epoch()
+ * spec.seconds_per_slot;
+
+ if now > deneb_time + blob_availability_window {
+ return Err(
+ "Syncing from genesis is insecure and incompatible with data availability checks. \
+ You should instead perform a checkpoint sync from a trusted node using the --checkpoint-sync-url option. \
+ For a list of public endpoints, see: https://eth-clients.github.io/checkpoint-sync-endpoints/ \
+ Alternatively, use --allow-insecure-genesis-sync if the risks are understood."
+ .to_string(),
+ );
+ }
+ }
+ }
+
builder.genesis_state(genesis_state).map(|v| (v, None))?
}
ClientGenesis::WeakSubjSszBytes {
diff --git a/beacon_node/client/src/config.rs b/beacon_node/client/src/config.rs
index 20afdb948b..275f999864 100644
--- a/beacon_node/client/src/config.rs
+++ b/beacon_node/client/src/config.rs
@@ -78,6 +78,7 @@ pub struct Config {
pub beacon_processor: BeaconProcessorConfig,
pub genesis_state_url: Option,
pub genesis_state_url_timeout: Duration,
+ pub allow_insecure_genesis_sync: bool,
}
impl Default for Config {
@@ -108,6 +109,7 @@ impl Default for Config {
genesis_state_url: <_>::default(),
// This default value should always be overwritten by the CLI default value.
genesis_state_url_timeout: Duration::from_secs(60),
+ allow_insecure_genesis_sync: false,
}
}
}
diff --git a/beacon_node/execution_layer/src/lib.rs b/beacon_node/execution_layer/src/lib.rs
index 6841f4d50e..868d819446 100644
--- a/beacon_node/execution_layer/src/lib.rs
+++ b/beacon_node/execution_layer/src/lib.rs
@@ -335,10 +335,7 @@ struct Inner {
proposers: RwLock>,
executor: TaskExecutor,
payload_cache: PayloadCache,
- builder_profit_threshold: Uint256,
log: Logger,
- always_prefer_builder_payload: bool,
- ignore_builder_override_suggestion_threshold: f32,
/// Track whether the last `newPayload` call errored.
///
/// This is used *only* in the informational sync status endpoint, so that a VC using this
@@ -365,11 +362,7 @@ pub struct Config {
pub jwt_version: Option,
/// Default directory for the jwt secret if not provided through cli.
pub default_datadir: PathBuf,
- /// The minimum value of an external payload for it to be considered in a proposal.
- pub builder_profit_threshold: u128,
pub execution_timeout_multiplier: Option,
- pub always_prefer_builder_payload: bool,
- pub ignore_builder_override_suggestion_threshold: f32,
}
/// Provides access to one execution engine and provides a neat interface for consumption by the
@@ -379,40 +372,6 @@ pub struct ExecutionLayer {
inner: Arc>,
}
-/// This function will return the percentage difference between 2 U256 values, using `base_value`
-/// as the denominator. It is accurate to 7 decimal places which is about the precision of
-/// an f32.
-///
-/// If some error is encountered in the calculation, None will be returned.
-fn percentage_difference_u256(base_value: Uint256, comparison_value: Uint256) -> Option {
- if base_value == Uint256::zero() {
- return None;
- }
- // this is the total supply of ETH in WEI
- let max_value = Uint256::from(12u8) * Uint256::exp10(25);
- if base_value > max_value || comparison_value > max_value {
- return None;
- }
-
- // Now we should be able to calculate the difference without division by zero or overflow
- const PRECISION: usize = 7;
- let precision_factor = Uint256::exp10(PRECISION);
- let scaled_difference = if base_value <= comparison_value {
- (comparison_value - base_value) * precision_factor
- } else {
- (base_value - comparison_value) * precision_factor
- };
- let scaled_proportion = scaled_difference / base_value;
- // max value of scaled difference is 1.2 * 10^33, well below the max value of a u128 / f64 / f32
- let percentage =
- 100.0f64 * scaled_proportion.low_u128() as f64 / precision_factor.low_u128() as f64;
- if base_value <= comparison_value {
- Some(percentage as f32)
- } else {
- Some(-percentage as f32)
- }
-}
-
impl ExecutionLayer {
/// Instantiate `Self` with an Execution engine specified in `Config`, using JSON-RPC via HTTP.
pub fn from_config(config: Config, executor: TaskExecutor, log: Logger) -> Result {
@@ -425,10 +384,7 @@ impl ExecutionLayer {
jwt_id,
jwt_version,
default_datadir,
- builder_profit_threshold,
execution_timeout_multiplier,
- always_prefer_builder_payload,
- ignore_builder_override_suggestion_threshold,
} = config;
if urls.len() > 1 {
@@ -489,10 +445,7 @@ impl ExecutionLayer {
execution_blocks: Mutex::new(LruCache::new(EXECUTION_BLOCKS_LRU_CACHE_SIZE)),
executor,
payload_cache: PayloadCache::default(),
- builder_profit_threshold: Uint256::from(builder_profit_threshold),
log,
- always_prefer_builder_payload,
- ignore_builder_override_suggestion_threshold,
last_new_payload_errored: RwLock::new(false),
};
@@ -530,7 +483,6 @@ impl ExecutionLayer {
self.log(),
"Using external block builder";
"builder_url" => ?builder_url,
- "builder_profit_threshold" => self.inner.builder_profit_threshold.as_u128(),
"local_user_agent" => builder_client.get_user_agent(),
);
self.inner.builder.swap(Some(Arc::new(builder_client)));
@@ -836,6 +788,7 @@ impl ExecutionLayer {
builder_params: BuilderParams,
current_fork: ForkName,
spec: &ChainSpec,
+ builder_boost_factor: Option,
block_production_version: BlockProductionVersion,
) -> Result, Error> {
let payload_result_type = match block_production_version {
@@ -846,6 +799,7 @@ impl ExecutionLayer {
forkchoice_update_params,
builder_params,
current_fork,
+ builder_boost_factor,
spec,
)
.await
@@ -870,6 +824,7 @@ impl ExecutionLayer {
forkchoice_update_params,
builder_params,
current_fork,
+ None,
spec,
)
.await?
@@ -990,6 +945,7 @@ impl ExecutionLayer {
(relay_result, local_result)
}
+ #[allow(clippy::too_many_arguments)]
async fn determine_and_fetch_payload(
&self,
parent_hash: ExecutionBlockHash,
@@ -997,6 +953,7 @@ impl ExecutionLayer {
forkchoice_update_params: ForkchoiceUpdateParameters,
builder_params: BuilderParams,
current_fork: ForkName,
+ builder_boost_factor: Option,
spec: &ChainSpec,
) -> Result>, Error> {
let Some(builder) = self.builder() else {
@@ -1148,18 +1105,36 @@ impl ExecutionLayer {
)));
}
- if self.inner.always_prefer_builder_payload {
- return ProvenancedPayload::try_from(relay.data.message);
- }
-
let relay_value = *relay.data.message.value();
+
+ let boosted_relay_value = match builder_boost_factor {
+ Some(builder_boost_factor) => {
+ (relay_value / 100).saturating_mul(builder_boost_factor.into())
+ }
+ None => relay_value,
+ };
+
let local_value = *local.block_value();
- if local_value >= relay_value {
+ if local_value >= boosted_relay_value {
info!(
self.log(),
"Local block is more profitable than relay block";
"local_block_value" => %local_value,
+ "relay_value" => %relay_value,
+ "boosted_relay_value" => %boosted_relay_value,
+ "builder_boost_factor" => ?builder_boost_factor,
+ );
+ return Ok(ProvenancedPayload::Local(BlockProposalContentsType::Full(
+ local.try_into()?,
+ )));
+ }
+
+ if local.should_override_builder().unwrap_or(false) {
+ info!(
+ self.log(),
+ "Using local payload because execution engine suggested we ignore builder payload";
+ "local_block_value" => %local_value,
"relay_value" => %relay_value
);
return Ok(ProvenancedPayload::Local(BlockProposalContentsType::Full(
@@ -1167,43 +1142,13 @@ impl ExecutionLayer {
)));
}
- if relay_value < self.inner.builder_profit_threshold {
- info!(
- self.log(),
- "Builder payload ignored";
- "info" => "using local payload",
- "reason" => format!("payload value of {} does not meet user-configured profit-threshold of {}", relay_value, self.inner.builder_profit_threshold),
- "relay_block_hash" => ?header.block_hash(),
- "parent_hash" => ?parent_hash,
- );
- return Ok(ProvenancedPayload::Local(BlockProposalContentsType::Full(
- local.try_into()?,
- )));
- }
-
- if local.should_override_builder().unwrap_or(false) {
- let percentage_difference =
- percentage_difference_u256(local_value, relay_value);
- if percentage_difference.map_or(false, |percentage| {
- percentage < self.inner.ignore_builder_override_suggestion_threshold
- }) {
- info!(
- self.log(),
- "Using local payload because execution engine suggested we ignore builder payload";
- "local_block_value" => %local_value,
- "relay_value" => %relay_value
- );
- return Ok(ProvenancedPayload::Local(BlockProposalContentsType::Full(
- local.try_into()?,
- )));
- }
- }
-
info!(
self.log(),
"Relay block is more profitable than local block";
"local_block_value" => %local_value,
- "relay_value" => %relay_value
+ "relay_value" => %relay_value,
+ "boosted_relay_value" => %boosted_relay_value,
+ "builder_boost_factor" => ?builder_boost_factor
);
Ok(ProvenancedPayload::try_from(relay.data.message)?)
@@ -2374,42 +2319,4 @@ mod test {
})
.await;
}
-
- #[tokio::test]
- async fn percentage_difference_u256_tests() {
- // ensure function returns `None` when base value is zero
- assert_eq!(percentage_difference_u256(0.into(), 1.into()), None);
- // ensure function returns `None` when either value is greater than 120 Million ETH
- let max_value = Uint256::from(12u8) * Uint256::exp10(25);
- assert_eq!(
- percentage_difference_u256(1u8.into(), max_value + Uint256::from(1u8)),
- None
- );
- assert_eq!(
- percentage_difference_u256(max_value + Uint256::from(1u8), 1u8.into()),
- None
- );
- // it should work up to max value
- assert_eq!(
- percentage_difference_u256(max_value, max_value / Uint256::from(2u8)),
- Some(-50f32)
- );
- // should work when base value is greater than comparison value
- assert_eq!(
- percentage_difference_u256(4u8.into(), 3u8.into()),
- Some(-25f32)
- );
- // should work when comparison value is greater than base value
- assert_eq!(
- percentage_difference_u256(4u8.into(), 5u8.into()),
- Some(25f32)
- );
- // should be accurate to 7 decimal places
- let result =
- percentage_difference_u256(Uint256::from(31415926u64), Uint256::from(13371337u64))
- .expect("should get percentage");
- // result = -57.4377116
- assert!(result > -57.43772);
- assert!(result <= -57.43771);
- }
}
diff --git a/beacon_node/execution_layer/src/test_utils/mock_execution_layer.rs b/beacon_node/execution_layer/src/test_utils/mock_execution_layer.rs
index 72f0388e24..7afeafc321 100644
--- a/beacon_node/execution_layer/src/test_utils/mock_execution_layer.rs
+++ b/beacon_node/execution_layer/src/test_utils/mock_execution_layer.rs
@@ -1,7 +1,6 @@
use crate::{
test_utils::{
- MockServer, DEFAULT_BUILDER_THRESHOLD_WEI, DEFAULT_JWT_SECRET, DEFAULT_TERMINAL_BLOCK,
- DEFAULT_TERMINAL_DIFFICULTY,
+ MockServer, DEFAULT_JWT_SECRET, DEFAULT_TERMINAL_BLOCK, DEFAULT_TERMINAL_DIFFICULTY,
},
Config, *,
};
@@ -30,7 +29,6 @@ impl MockExecutionLayer {
DEFAULT_TERMINAL_BLOCK,
None,
None,
- None,
Some(JwtKey::from_slice(&DEFAULT_JWT_SECRET).unwrap()),
spec,
None,
@@ -43,7 +41,6 @@ impl MockExecutionLayer {
terminal_block: u64,
shanghai_time: Option,
cancun_time: Option,
- builder_threshold: Option,
jwt_key: Option,
spec: ChainSpec,
kzg: Option,
@@ -72,7 +69,6 @@ impl MockExecutionLayer {
execution_endpoints: vec![url],
secret_files: vec![path],
suggested_fee_recipient: Some(Address::repeat_byte(42)),
- builder_profit_threshold: builder_threshold.unwrap_or(DEFAULT_BUILDER_THRESHOLD_WEI),
..Default::default()
};
let el =
@@ -143,6 +139,7 @@ impl MockExecutionLayer {
builder_params,
ForkName::Merge,
&self.spec,
+ None,
BlockProductionVersion::FullV2,
)
.await
@@ -182,6 +179,7 @@ impl MockExecutionLayer {
builder_params,
ForkName::Merge,
&self.spec,
+ None,
BlockProductionVersion::BlindedV2,
)
.await
diff --git a/beacon_node/execution_layer/src/test_utils/mod.rs b/beacon_node/execution_layer/src/test_utils/mod.rs
index 92be94e603..f0be511147 100644
--- a/beacon_node/execution_layer/src/test_utils/mod.rs
+++ b/beacon_node/execution_layer/src/test_utils/mod.rs
@@ -35,7 +35,6 @@ pub use mock_execution_layer::MockExecutionLayer;
pub const DEFAULT_TERMINAL_DIFFICULTY: u64 = 6400;
pub const DEFAULT_TERMINAL_BLOCK: u64 = 64;
pub const DEFAULT_JWT_SECRET: [u8; 32] = [42; 32];
-pub const DEFAULT_BUILDER_THRESHOLD_WEI: u128 = 1_000_000_000_000_000_000;
pub const DEFAULT_MOCK_EL_PAYLOAD_VALUE_WEI: u128 = 10_000_000_000_000_000;
pub const DEFAULT_BUILDER_PAYLOAD_VALUE_WEI: u128 = 20_000_000_000_000_000;
pub const DEFAULT_ENGINE_CAPABILITIES: EngineCapabilities = EngineCapabilities {
diff --git a/beacon_node/http_api/src/lib.rs b/beacon_node/http_api/src/lib.rs
index 1b4f1d35e1..f1d7769e89 100644
--- a/beacon_node/http_api/src/lib.rs
+++ b/beacon_node/http_api/src/lib.rs
@@ -45,6 +45,7 @@ use eth2::types::{
PublishBlockRequest, ValidatorBalancesRequestBody, ValidatorId, ValidatorStatus,
ValidatorsRequestBody,
};
+use eth2::{CONTENT_TYPE_HEADER, SSZ_CONTENT_TYPE_HEADER};
use lighthouse_network::{types::SyncState, EnrExt, NetworkGlobals, PeerId, PubsubMessage};
use lighthouse_version::version_with_platform;
use logging::SSELoggingComponents;
@@ -86,10 +87,12 @@ use types::{
};
use validator::pubkey_to_validator_index;
use version::{
- add_consensus_version_header, execution_optimistic_finalized_fork_versioned_response,
- inconsistent_fork_rejection, unsupported_version_rejection, V1, V2, V3,
+ add_consensus_version_header, add_ssz_content_type_header,
+ execution_optimistic_finalized_fork_versioned_response, inconsistent_fork_rejection,
+ unsupported_version_rejection, V1, V2, V3,
};
use warp::http::StatusCode;
+use warp::hyper::Body;
use warp::sse::Event;
use warp::Reply;
use warp::{http::Response, Filter};
@@ -1567,8 +1570,8 @@ pub fn serve(
match accept_header {
Some(api_types::Accept::Ssz) => Response::builder()
.status(200)
- .header("Content-Type", "application/octet-stream")
.body(block.as_ssz_bytes().into())
+ .map(|res: Response| add_ssz_content_type_header(res))
.map_err(|e| {
warp_utils::reject::custom_server_error(format!(
"failed to create response: {}",
@@ -1659,8 +1662,8 @@ pub fn serve(
match accept_header {
Some(api_types::Accept::Ssz) => Response::builder()
.status(200)
- .header("Content-Type", "application/octet-stream")
.body(block.as_ssz_bytes().into())
+ .map(|res: Response| add_ssz_content_type_header(res))
.map_err(|e| {
warp_utils::reject::custom_server_error(format!(
"failed to create response: {}",
@@ -1710,8 +1713,8 @@ pub fn serve(
match accept_header {
Some(api_types::Accept::Ssz) => Response::builder()
.status(200)
- .header("Content-Type", "application/octet-stream")
.body(blob_sidecar_list_filtered.as_ssz_bytes().into())
+ .map(|res: Response| add_ssz_content_type_header(res))
.map_err(|e| {
warp_utils::reject::custom_server_error(format!(
"failed to create response: {}",
@@ -2239,8 +2242,8 @@ pub fn serve(
.map(|snapshot| {
Response::builder()
.status(200)
- .header("Content-Type", "application/octet-stream")
.body(snapshot.as_ssz_bytes().into())
+ .map(|res: Response| add_ssz_content_type_header(res))
.map_err(|e| {
warp_utils::reject::custom_server_error(format!(
"failed to create response: {}",
@@ -2251,8 +2254,8 @@ pub fn serve(
.unwrap_or_else(|| {
Response::builder()
.status(503)
- .header("Content-Type", "application/octet-stream")
.body(Vec::new().into())
+ .map(|res: Response| add_ssz_content_type_header(res))
.map_err(|e| {
warp_utils::reject::custom_server_error(format!(
"failed to create response: {}",
@@ -2323,8 +2326,8 @@ pub fn serve(
match accept_header {
Some(api_types::Accept::Ssz) => Response::builder()
.status(200)
- .header("Content-Type", "application/octet-stream")
.body(withdrawals.as_ssz_bytes().into())
+ .map(|res: Response| add_ssz_content_type_header(res))
.map_err(|e| {
warp_utils::reject::custom_server_error(format!(
"failed to create response: {}",
@@ -2389,8 +2392,8 @@ pub fn serve(
match accept_header {
Some(api_types::Accept::Ssz) => Response::builder()
.status(200)
- .header("Content-Type", "application/octet-stream")
.body(bootstrap.as_ssz_bytes().into())
+ .map(|res: Response| add_ssz_content_type_header(res))
.map_err(|e| {
warp_utils::reject::custom_server_error(format!(
"failed to create response: {}",
@@ -2437,8 +2440,8 @@ pub fn serve(
match accept_header {
Some(api_types::Accept::Ssz) => Response::builder()
.status(200)
- .header("Content-Type", "application/octet-stream")
.body(update.as_ssz_bytes().into())
+ .map(|res: Response| add_ssz_content_type_header(res))
.map_err(|e| {
warp_utils::reject::custom_server_error(format!(
"failed to create response: {}",
@@ -2485,8 +2488,8 @@ pub fn serve(
match accept_header {
Some(api_types::Accept::Ssz) => Response::builder()
.status(200)
- .header("Content-Type", "application/octet-stream")
.body(update.as_ssz_bytes().into())
+ .map(|res: Response| add_ssz_content_type_header(res))
.map_err(|e| {
warp_utils::reject::custom_server_error(format!(
"failed to create response: {}",
@@ -2687,8 +2690,8 @@ pub fn serve(
.map_err(inconsistent_fork_rejection)?;
Response::builder()
.status(200)
- .header("Content-Type", "application/octet-stream")
.body(state.as_ssz_bytes().into())
+ .map(|res: Response| add_ssz_content_type_header(res))
.map(|resp: warp::reply::Response| {
add_consensus_version_header(resp, fork_name)
})
@@ -4273,8 +4276,8 @@ pub fn serve(
let (state, _execution_optimistic, _finalized) = state_id.state(&chain)?;
Response::builder()
.status(200)
- .header("Content-Type", "application/ssz")
- .body(state.as_ssz_bytes())
+ .body(state.as_ssz_bytes().into())
+ .map(|res: Response| add_ssz_content_type_header(res))
.map_err(|e| {
warp_utils::reject::custom_server_error(format!(
"failed to create response: {}",
@@ -4646,7 +4649,7 @@ pub fn serve(
.boxed()
.uor(
warp::post().and(
- warp::header::exact("Content-Type", "application/octet-stream")
+ warp::header::exact(CONTENT_TYPE_HEADER, SSZ_CONTENT_TYPE_HEADER)
// Routes which expect `application/octet-stream` go within this `and`.
.and(
post_beacon_blocks_ssz
diff --git a/beacon_node/http_api/src/produce_block.rs b/beacon_node/http_api/src/produce_block.rs
index ff1c7d345c..0da3bdc7aa 100644
--- a/beacon_node/http_api/src/produce_block.rs
+++ b/beacon_node/http_api/src/produce_block.rs
@@ -3,13 +3,12 @@ use crate::{
version::{
add_consensus_block_value_header, add_consensus_version_header,
add_execution_payload_blinded_header, add_execution_payload_value_header,
- fork_versioned_response, inconsistent_fork_rejection,
+ add_ssz_content_type_header, fork_versioned_response, inconsistent_fork_rejection,
},
};
use beacon_chain::{
BeaconBlockResponseWrapper, BeaconChain, BeaconChainTypes, ProduceBlockVerification,
};
-use bytes::Bytes;
use eth2::types::{
self as api_types, EndpointVersion, ProduceBlockV3Metadata, SkipRandaoVerification,
};
@@ -58,8 +57,9 @@ pub async fn produce_block_v3(
.produce_block_with_verification(
randao_reveal,
slot,
- query.graffiti.map(Into::into),
+ query.graffiti,
randao_verification,
+ query.builder_boost_factor,
BlockProductionVersion::V3,
)
.await
@@ -79,7 +79,7 @@ pub fn build_response_v3(
.fork_name(&chain.spec)
.map_err(inconsistent_fork_rejection)?;
let execution_payload_value = block_response.execution_payload_value();
- let consensus_block_value = block_response.consensus_block_value();
+ let consensus_block_value = block_response.consensus_block_value_wei();
let execution_payload_blinded = block_response.is_blinded();
let metadata = ProduceBlockV3Metadata {
@@ -94,8 +94,8 @@ pub fn build_response_v3(
match accept_header {
Some(api_types::Accept::Ssz) => Response::builder()
.status(200)
- .header("Content-Type", "application/ssz")
.body(block_contents.as_ssz_bytes().into())
+ .map(|res: Response| add_ssz_content_type_header(res))
.map(|res: Response| add_consensus_version_header(res, fork_name))
.map(|res| add_execution_payload_blinded_header(res, execution_payload_blinded))
.map(|res: Response| {
@@ -140,6 +140,7 @@ pub async fn produce_blinded_block_v2(
slot,
query.graffiti.map(Into::into),
randao_verification,
+ None,
BlockProductionVersion::BlindedV2,
)
.await
@@ -170,6 +171,7 @@ pub async fn produce_block_v2(
slot,
query.graffiti.map(Into::into),
randao_verification,
+ None,
BlockProductionVersion::FullV2,
)
.await
@@ -193,9 +195,9 @@ pub fn build_response_v2(
match accept_header {
Some(api_types::Accept::Ssz) => Response::builder()
.status(200)
- .header("Content-Type", "application/octet-stream")
.body(block_contents.as_ssz_bytes().into())
- .map(|res: Response| add_consensus_version_header(res, fork_name))
+ .map(|res: Response| add_ssz_content_type_header(res))
+ .map(|res: Response| add_consensus_version_header(res, fork_name))
.map_err(|e| {
warp_utils::reject::custom_server_error(format!("failed to create response: {}", e))
}),
diff --git a/beacon_node/http_api/src/publish_blocks.rs b/beacon_node/http_api/src/publish_blocks.rs
index 92d302f56d..8b03771540 100644
--- a/beacon_node/http_api/src/publish_blocks.rs
+++ b/beacon_node/http_api/src/publish_blocks.rs
@@ -60,7 +60,7 @@ pub async fn publish_block (block_contents, true),
ProvenancedBlock::Builder(block_contents, _) => (block_contents, false),
};
- let block = block_contents.inner_block();
+ let block = block_contents.inner_block().clone();
let delay = get_block_delay_ms(seen_timestamp, block.message(), &chain.slot_clock);
debug!(log, "Signed block received in HTTP API"; "slot" => block.slot());
@@ -175,45 +175,20 @@ pub async fn publish_block {
- if chain_clone
- .observed_block_producers
- .read()
- .proposer_has_been_observed(block_clone.message(), block_root)
- .map_err(|e| BlockError::BeaconChainError(e.into()))?
- .is_slashable()
- {
- warn!(
- log_clone,
- "Not publishing equivocating block";
- "slot" => block_clone.slot()
- );
- Err(BlockError::Slashable)
- } else if chain_clone
- .observed_blob_sidecars
- .read()
- .proposer_has_been_observed(
- block_clone.slot(),
- block_clone.message().proposer_index(),
- block_root,
- )
- .map_err(|e| BlockError::BeaconChainError(e.into()))?
- .is_slashable()
- {
- warn!(
- log_clone,
- "Not publishing equivocating blob";
- "slot" => block_clone.slot()
- );
- Err(BlockError::Slashable)
- } else {
- publish_block(
- block_clone,
- blobs_opt,
- sender_clone,
- log_clone,
- seen_timestamp,
- )
- }
+ check_slashable(
+ &chain_clone,
+ &blobs_opt,
+ block_root,
+ &block_clone,
+ &log_clone,
+ )?;
+ publish_block(
+ block_clone,
+ blobs_opt,
+ sender_clone,
+ log_clone,
+ seen_timestamp,
+ )
}
};
@@ -470,3 +445,46 @@ fn late_block_logging>(
)
}
}
+
+/// Check if any of the blobs or the block are slashable. Returns `BlockError::Slashable` if so.
+fn check_slashable(
+ chain_clone: &BeaconChain,
+ blobs_opt: &Option>,
+ block_root: Hash256,
+ block_clone: &SignedBeaconBlock>,
+ log_clone: &Logger,
+) -> Result<(), BlockError> {
+ let slashable_cache = chain_clone.observed_slashable.read();
+ if let Some(blobs) = blobs_opt.as_ref() {
+ blobs.iter().try_for_each(|blob| {
+ if slashable_cache
+ .is_slashable(blob.slot(), blob.block_proposer_index(), blob.block_root())
+ .map_err(|e| BlockError::BeaconChainError(e.into()))?
+ {
+ warn!(
+ log_clone,
+ "Not publishing equivocating blob";
+ "slot" => block_clone.slot()
+ );
+ return Err(BlockError::Slashable);
+ }
+ Ok(())
+ })?;
+ };
+ if slashable_cache
+ .is_slashable(
+ block_clone.slot(),
+ block_clone.message().proposer_index(),
+ block_root,
+ )
+ .map_err(|e| BlockError::BeaconChainError(e.into()))?
+ {
+ warn!(
+ log_clone,
+ "Not publishing equivocating block";
+ "slot" => block_clone.slot()
+ );
+ return Err(BlockError::Slashable);
+ }
+ Ok(())
+}
diff --git a/beacon_node/http_api/src/test_utils.rs b/beacon_node/http_api/src/test_utils.rs
index bafb573819..b87fdf6088 100644
--- a/beacon_node/http_api/src/test_utils.rs
+++ b/beacon_node/http_api/src/test_utils.rs
@@ -7,7 +7,7 @@ use beacon_processor::{BeaconProcessor, BeaconProcessorChannels, BeaconProcessor
use directory::DEFAULT_ROOT_DIR;
use eth2::{BeaconNodeHttpClient, Timeouts};
use lighthouse_network::{
- discv5::enr::{CombinedKey, EnrBuilder},
+ discv5::enr::CombinedKey,
libp2p::swarm::{
behaviour::{ConnectionEstablished, FromSwarm},
ConnectionId, NetworkBehaviour,
@@ -138,7 +138,7 @@ pub async fn create_api_server(
syncnets: EnrSyncCommitteeBitfield::::default(),
});
let enr_key = CombinedKey::generate_secp256k1();
- let enr = EnrBuilder::new("v4").build(&enr_key).unwrap();
+ let enr = Enr::builder().build(&enr_key).unwrap();
let network_globals = Arc::new(NetworkGlobals::new(
enr.clone(),
meta_data,
diff --git a/beacon_node/http_api/src/version.rs b/beacon_node/http_api/src/version.rs
index 343defb809..59816cb897 100644
--- a/beacon_node/http_api/src/version.rs
+++ b/beacon_node/http_api/src/version.rs
@@ -1,7 +1,7 @@
use crate::api_types::EndpointVersion;
use eth2::{
- CONSENSUS_BLOCK_VALUE_HEADER, CONSENSUS_VERSION_HEADER, EXECUTION_PAYLOAD_BLINDED_HEADER,
- EXECUTION_PAYLOAD_VALUE_HEADER,
+ CONSENSUS_BLOCK_VALUE_HEADER, CONSENSUS_VERSION_HEADER, CONTENT_TYPE_HEADER,
+ EXECUTION_PAYLOAD_BLINDED_HEADER, EXECUTION_PAYLOAD_VALUE_HEADER, SSZ_CONTENT_TYPE_HEADER,
};
use serde::Serialize;
use types::{
@@ -59,6 +59,11 @@ pub fn execution_optimistic_finalized_fork_versioned_response(
})
}
+/// Add the 'Content-Type application/octet-stream` header to a response.
+pub fn add_ssz_content_type_header(reply: T) -> Response {
+ reply::with_header(reply, CONTENT_TYPE_HEADER, SSZ_CONTENT_TYPE_HEADER).into_response()
+}
+
/// Add the `Eth-Consensus-Version` header to a response.
pub fn add_consensus_version_header(reply: T, fork_name: ForkName) -> Response {
reply::with_header(reply, CONSENSUS_VERSION_HEADER, fork_name.to_string()).into_response()
@@ -93,7 +98,7 @@ pub fn add_execution_payload_value_header(
/// Add the `Eth-Consensus-Block-Value` header to a response.
pub fn add_consensus_block_value_header(
reply: T,
- consensus_payload_value: u64,
+ consensus_payload_value: Uint256,
) -> Response {
reply::with_header(
reply,
diff --git a/beacon_node/http_api/tests/broadcast_validation_tests.rs b/beacon_node/http_api/tests/broadcast_validation_tests.rs
index 7961b32c57..eb39bdd115 100644
--- a/beacon_node/http_api/tests/broadcast_validation_tests.rs
+++ b/beacon_node/http_api/tests/broadcast_validation_tests.rs
@@ -1226,9 +1226,13 @@ pub async fn blinded_equivocation_gossip() {
);
}
-/// This test checks that a block that is valid from both a gossip and consensus perspective but that equivocates **late** is rejected when using `broadcast_validation=consensus_and_equivocation`.
+/// This test checks that a block that is valid from both a gossip and
+/// consensus perspective but that equivocates **late** is rejected when using
+/// `broadcast_validation=consensus_and_equivocation`.
///
-/// This test is unique in that we can't actually test the HTTP API directly, but instead have to hook into the `publish_blocks` code manually. This is in order to handle the late equivocation case.
+/// This test is unique in that we can't actually test the HTTP API directly,
+/// but instead have to hook into the `publish_blocks` code manually. This is
+/// in order to handle the late equivocation case.
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
pub async fn blinded_equivocation_consensus_late_equivocation() {
/* this test targets gossip-level validation */
diff --git a/beacon_node/http_api/tests/interactive_tests.rs b/beacon_node/http_api/tests/interactive_tests.rs
index 945f538a3a..210c4d2550 100644
--- a/beacon_node/http_api/tests/interactive_tests.rs
+++ b/beacon_node/http_api/tests/interactive_tests.rs
@@ -620,7 +620,7 @@ pub async fn proposer_boost_re_org_test(
.into();
let (unsigned_block_type, _) = tester
.client
- .get_validator_blocks_v3::(slot_c, &randao_reveal, None)
+ .get_validator_blocks_v3::(slot_c, &randao_reveal, None, None)
.await
.unwrap();
diff --git a/beacon_node/http_api/tests/tests.rs b/beacon_node/http_api/tests/tests.rs
index 1b694ecf9d..300c5a1060 100644
--- a/beacon_node/http_api/tests/tests.rs
+++ b/beacon_node/http_api/tests/tests.rs
@@ -13,8 +13,7 @@ use eth2::{
BeaconNodeHttpClient, Error, StatusCode, Timeouts,
};
use execution_layer::test_utils::{
- MockBuilder, Operation, DEFAULT_BUILDER_PAYLOAD_VALUE_WEI, DEFAULT_BUILDER_THRESHOLD_WEI,
- DEFAULT_MOCK_EL_PAYLOAD_VALUE_WEI,
+ MockBuilder, Operation, DEFAULT_BUILDER_PAYLOAD_VALUE_WEI, DEFAULT_MOCK_EL_PAYLOAD_VALUE_WEI,
};
use futures::stream::{Stream, StreamExt};
use futures::FutureExt;
@@ -80,7 +79,6 @@ struct ApiTester {
struct ApiTesterConfig {
spec: ChainSpec,
retain_historic_states: bool,
- builder_threshold: Option,
}
impl Default for ApiTesterConfig {
@@ -90,7 +88,6 @@ impl Default for ApiTesterConfig {
Self {
spec,
retain_historic_states: false,
- builder_threshold: None,
}
}
}
@@ -132,7 +129,7 @@ impl ApiTester {
.logger(logging::test_logger())
.deterministic_keypairs(VALIDATOR_COUNT)
.fresh_ephemeral_store()
- .mock_execution_layer_with_config(config.builder_threshold)
+ .mock_execution_layer_with_config()
.build();
harness
@@ -391,19 +388,12 @@ impl ApiTester {
.test_post_validator_register_validator()
.await;
// Make sure bids always meet the minimum threshold.
- tester
- .mock_builder
- .as_ref()
- .unwrap()
- .add_operation(Operation::Value(Uint256::from(
- DEFAULT_BUILDER_THRESHOLD_WEI,
- )));
+ tester.mock_builder.as_ref().unwrap();
tester
}
- pub async fn new_mev_tester_no_builder_threshold() -> Self {
+ pub async fn new_mev_tester_default_payload_value() -> Self {
let mut config = ApiTesterConfig {
- builder_threshold: Some(0),
retain_historic_states: false,
spec: E::default_spec(),
};
@@ -2730,7 +2720,7 @@ impl ApiTester {
let (response, metadata) = self
.client
- .get_validator_blocks_v3_ssz::(slot, &randao_reveal, None)
+ .get_validator_blocks_v3_ssz::(slot, &randao_reveal, None, None)
.await
.unwrap();
@@ -3553,7 +3543,59 @@ impl ApiTester {
let (payload_type, _) = self
.client
- .get_validator_blocks_v3::(slot, &randao_reveal, None)
+ .get_validator_blocks_v3::(slot, &randao_reveal, None, None)
+ .await
+ .unwrap();
+
+ let payload: BlindedPayload = match payload_type.data {
+ ProduceBlockV3Response::Blinded(payload) => {
+ payload.body().execution_payload().unwrap().into()
+ }
+ ProduceBlockV3Response::Full(_) => panic!("Expecting a blinded payload"),
+ };
+
+ let expected_fee_recipient = Address::from_low_u64_be(proposer_index as u64);
+ assert_eq!(payload.fee_recipient(), expected_fee_recipient);
+ assert_eq!(payload.gas_limit(), 11_111_111);
+
+ self
+ }
+
+ pub async fn test_payload_v3_zero_builder_boost_factor(self) -> Self {
+ let slot = self.chain.slot().unwrap();
+ let epoch = self.chain.epoch().unwrap();
+
+ let (proposer_index, randao_reveal) = self.get_test_randao(slot, epoch).await;
+
+ let (payload_type, _) = self
+ .client
+ .get_validator_blocks_v3::(slot, &randao_reveal, None, Some(0))
+ .await
+ .unwrap();
+
+ let payload: FullPayload = match payload_type.data {
+ ProduceBlockV3Response::Full(payload) => {
+ payload.block().body().execution_payload().unwrap().into()
+ }
+ ProduceBlockV3Response::Blinded(_) => panic!("Expecting a full payload"),
+ };
+
+ let expected_fee_recipient = Address::from_low_u64_be(proposer_index as u64);
+ assert_eq!(payload.fee_recipient(), expected_fee_recipient);
+ assert_eq!(payload.gas_limit(), 16_384);
+
+ self
+ }
+
+ pub async fn test_payload_v3_max_builder_boost_factor(self) -> Self {
+ let slot = self.chain.slot().unwrap();
+ let epoch = self.chain.epoch().unwrap();
+
+ let (proposer_index, randao_reveal) = self.get_test_randao(slot, epoch).await;
+
+ let (payload_type, _) = self
+ .client
+ .get_validator_blocks_v3::(slot, &randao_reveal, None, Some(u64::MAX))
.await
.unwrap();
@@ -3657,7 +3699,7 @@ impl ApiTester {
let (payload_type, _) = self
.client
- .get_validator_blocks_v3::(slot, &randao_reveal, None)
+ .get_validator_blocks_v3::(slot, &randao_reveal, None, None)
.await
.unwrap();
@@ -3733,7 +3775,7 @@ impl ApiTester {
let (payload_type, _) = self
.client
- .get_validator_blocks_v3::(slot, &randao_reveal, None)
+ .get_validator_blocks_v3::(slot, &randao_reveal, None, None)
.await
.unwrap();
@@ -3823,7 +3865,7 @@ impl ApiTester {
let (payload_type, _) = self
.client
- .get_validator_blocks_v3::(slot, &randao_reveal, None)
+ .get_validator_blocks_v3::(slot, &randao_reveal, None, None)
.await
.unwrap();
@@ -3909,7 +3951,7 @@ impl ApiTester {
let (payload_type, _) = self
.client
- .get_validator_blocks_v3::(slot, &randao_reveal, None)
+ .get_validator_blocks_v3::(slot, &randao_reveal, None, None)
.await
.unwrap();
@@ -3995,7 +4037,7 @@ impl ApiTester {
let (payload_type, _) = self
.client
- .get_validator_blocks_v3::(slot, &randao_reveal, None)
+ .get_validator_blocks_v3::(slot, &randao_reveal, None, None)
.await
.unwrap();
@@ -4079,7 +4121,7 @@ impl ApiTester {
let (payload_type, _) = self
.client
- .get_validator_blocks_v3::(slot, &randao_reveal, None)
+ .get_validator_blocks_v3::(slot, &randao_reveal, None, None)
.await
.unwrap();
@@ -4135,7 +4177,7 @@ impl ApiTester {
let (payload_type, _) = self
.client
- .get_validator_blocks_v3::(slot, &randao_reveal, None)
+ .get_validator_blocks_v3::(slot, &randao_reveal, None, None)
.await
.unwrap();
@@ -4201,7 +4243,7 @@ impl ApiTester {
let (payload_type, _) = self
.client
- .get_validator_blocks_v3::(slot, &randao_reveal, None)
+ .get_validator_blocks_v3::(slot, &randao_reveal, None, None)
.await
.unwrap();
@@ -4309,7 +4351,7 @@ impl ApiTester {
let (payload_type, _) = self
.client
- .get_validator_blocks_v3::(next_slot, &randao_reveal, None)
+ .get_validator_blocks_v3::(next_slot, &randao_reveal, None, None)
.await
.unwrap();
@@ -4329,7 +4371,7 @@ impl ApiTester {
let (payload_type, _) = self
.client
- .get_validator_blocks_v3::(next_slot, &randao_reveal, None)
+ .get_validator_blocks_v3::(next_slot, &randao_reveal, None, None)
.await
.unwrap();
@@ -4457,7 +4499,7 @@ impl ApiTester {
let (payload_type, _) = self
.client
- .get_validator_blocks_v3::(next_slot, &randao_reveal, None)
+ .get_validator_blocks_v3::(next_slot, &randao_reveal, None, None)
.await
.unwrap();
@@ -4487,7 +4529,7 @@ impl ApiTester {
let (payload_type, _) = self
.client
- .get_validator_blocks_v3::(next_slot, &randao_reveal, None)
+ .get_validator_blocks_v3::(next_slot, &randao_reveal, None, None)
.await
.unwrap();
@@ -4567,7 +4609,7 @@ impl ApiTester {
let (payload_type, _) = self
.client
- .get_validator_blocks_v3::(slot, &randao_reveal, None)
+ .get_validator_blocks_v3::(slot, &randao_reveal, None, None)
.await
.unwrap();
@@ -4584,70 +4626,6 @@ impl ApiTester {
self
}
- pub async fn test_payload_rejects_inadequate_builder_threshold(self) -> Self {
- // Mutate value.
- self.mock_builder
- .as_ref()
- .unwrap()
- .add_operation(Operation::Value(Uint256::from(
- DEFAULT_BUILDER_THRESHOLD_WEI - 1,
- )));
-
- let slot = self.chain.slot().unwrap();
- let epoch = self.chain.epoch().unwrap();
-
- let (_, randao_reveal) = self.get_test_randao(slot, epoch).await;
-
- let payload: BlindedPayload = self
- .client
- .get_validator_blinded_blocks::(slot, &randao_reveal, None)
- .await
- .unwrap()
- .data
- .body()
- .execution_payload()
- .unwrap()
- .into();
-
- // If this cache is populated, it indicates fallback to the local EE was correctly used.
- assert!(self
- .chain
- .execution_layer
- .as_ref()
- .unwrap()
- .get_payload_by_root(&payload.tree_hash_root())
- .is_some());
- self
- }
-
- pub async fn test_payload_v3_rejects_inadequate_builder_threshold(self) -> Self {
- // Mutate value.
- self.mock_builder
- .as_ref()
- .unwrap()
- .add_operation(Operation::Value(Uint256::from(
- DEFAULT_BUILDER_THRESHOLD_WEI - 1,
- )));
-
- let slot = self.chain.slot().unwrap();
- let epoch = self.chain.epoch().unwrap();
-
- let (_, randao_reveal) = self.get_test_randao(slot, epoch).await;
-
- let (payload_type, _) = self
- .client
- .get_validator_blocks_v3::(slot, &randao_reveal, None)
- .await
- .unwrap();
-
- match payload_type.data {
- ProduceBlockV3Response::Full(_) => (),
- ProduceBlockV3Response::Blinded(_) => panic!("Expecting a full payload"),
- };
-
- self
- }
-
pub async fn test_builder_payload_chosen_when_more_profitable(self) -> Self {
// Mutate value.
self.mock_builder
@@ -4700,7 +4678,7 @@ impl ApiTester {
let (payload_type, _) = self
.client
- .get_validator_blocks_v3::(slot, &randao_reveal, None)
+ .get_validator_blocks_v3::(slot, &randao_reveal, None, None)
.await
.unwrap();
@@ -4764,7 +4742,7 @@ impl ApiTester {
let (payload_type, _) = self
.client
- .get_validator_blocks_v3::(slot, &randao_reveal, None)
+ .get_validator_blocks_v3::(slot, &randao_reveal, None, None)
.await
.unwrap();
@@ -4828,7 +4806,7 @@ impl ApiTester {
let (payload_type, _) = self
.client
- .get_validator_blocks_v3::(slot, &randao_reveal, None)
+ .get_validator_blocks_v3::(slot, &randao_reveal, None, None)
.await
.unwrap();
@@ -4890,7 +4868,7 @@ impl ApiTester {
let (payload_type, _) = self
.client
- .get_validator_blocks_v3::(slot, &randao_reveal, None)
+ .get_validator_blocks_v3::(slot, &randao_reveal, None, None)
.await
.unwrap();
@@ -4962,7 +4940,7 @@ impl ApiTester {
let (payload_type, _) = self
.client
- .get_validator_blocks_v3::(slot, &randao_reveal, None)
+ .get_validator_blocks_v3::(slot, &randao_reveal, None, None)
.await
.unwrap();
@@ -6048,6 +6026,22 @@ async fn post_validator_register_valid() {
.await;
}
+#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
+async fn post_validator_zero_builder_boost_factor() {
+ ApiTester::new_mev_tester()
+ .await
+ .test_payload_v3_zero_builder_boost_factor()
+ .await;
+}
+
+#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
+async fn post_validator_max_builder_boost_factor() {
+ ApiTester::new_mev_tester()
+ .await
+ .test_payload_v3_max_builder_boost_factor()
+ .await;
+}
+
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
async fn post_validator_register_valid_v3() {
ApiTester::new_mev_tester()
@@ -6232,25 +6226,9 @@ async fn builder_chain_health_optimistic_head_v3() {
.await;
}
-#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
-async fn builder_inadequate_builder_threshold() {
- ApiTester::new_mev_tester()
- .await
- .test_payload_rejects_inadequate_builder_threshold()
- .await;
-}
-
-#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
-async fn builder_inadequate_builder_threshold_v3() {
- ApiTester::new_mev_tester()
- .await
- .test_payload_v3_rejects_inadequate_builder_threshold()
- .await;
-}
-
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
async fn builder_payload_chosen_by_profit() {
- ApiTester::new_mev_tester_no_builder_threshold()
+ ApiTester::new_mev_tester_default_payload_value()
.await
.test_builder_payload_chosen_when_more_profitable()
.await
@@ -6262,7 +6240,7 @@ async fn builder_payload_chosen_by_profit() {
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
async fn builder_payload_chosen_by_profit_v3() {
- ApiTester::new_mev_tester_no_builder_threshold()
+ ApiTester::new_mev_tester_default_payload_value()
.await
.test_builder_payload_v3_chosen_when_more_profitable()
.await
@@ -6275,7 +6253,6 @@ async fn builder_payload_chosen_by_profit_v3() {
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
async fn builder_works_post_capella() {
let mut config = ApiTesterConfig {
- builder_threshold: Some(0),
retain_historic_states: false,
spec: E::default_spec(),
};
@@ -6296,7 +6273,6 @@ async fn builder_works_post_capella() {
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
async fn builder_works_post_deneb() {
let mut config = ApiTesterConfig {
- builder_threshold: Some(0),
retain_historic_states: false,
spec: E::default_spec(),
};
diff --git a/beacon_node/lighthouse_network/Cargo.toml b/beacon_node/lighthouse_network/Cargo.toml
index 356a6a203b..e1ae62be65 100644
--- a/beacon_node/lighthouse_network/Cargo.toml
+++ b/beacon_node/lighthouse_network/Cargo.toml
@@ -43,10 +43,11 @@ prometheus-client = "0.22.0"
unused_port = { workspace = true }
delay_map = { workspace = true }
void = "1"
-libp2p-mplex = "0.41.0"
+libp2p-mplex = { git = "https://github.com/sigp/rust-libp2p/", rev = "b96b90894faab0a1eed78e1c82c6452138a3538a" }
[dependencies.libp2p]
-version = "0.53"
+git = "https://github.com/sigp/rust-libp2p/"
+rev = "b96b90894faab0a1eed78e1c82c6452138a3538a"
default-features = false
features = ["identify", "yamux", "noise", "gossipsub", "dns", "tcp", "tokio", "plaintext", "secp256k1", "macros", "ecdsa", "metrics", "quic"]
diff --git a/beacon_node/lighthouse_network/src/config.rs b/beacon_node/lighthouse_network/src/config.rs
index 3c0b4c7235..169a061d20 100644
--- a/beacon_node/lighthouse_network/src/config.rs
+++ b/beacon_node/lighthouse_network/src/config.rs
@@ -5,7 +5,6 @@ use crate::{Enr, PeerIdSerialized};
use directory::{
DEFAULT_BEACON_NODE_DIR, DEFAULT_HARDCODED_NETWORK, DEFAULT_NETWORK_DIR, DEFAULT_ROOT_DIR,
};
-use discv5::{Discv5Config, Discv5ConfigBuilder};
use libp2p::gossipsub;
use libp2p::Multiaddr;
use serde::{Deserialize, Serialize};
@@ -91,7 +90,7 @@ pub struct Config {
/// Discv5 configuration parameters.
#[serde(skip)]
- pub discv5_config: Discv5Config,
+ pub discv5_config: discv5::Config,
/// List of nodes to initially connect to.
pub boot_nodes_enr: Vec,
@@ -324,7 +323,7 @@ impl Default for Config {
discv5::ListenConfig::from_ip(Ipv4Addr::UNSPECIFIED.into(), 9000);
// discv5 configuration
- let discv5_config = Discv5ConfigBuilder::new(discv5_listen_config)
+ let discv5_config = discv5::ConfigBuilder::new(discv5_listen_config)
.enable_packet_filter()
.session_cache_capacity(5000)
.request_timeout(Duration::from_secs(1))
diff --git a/beacon_node/lighthouse_network/src/discovery/enr.rs b/beacon_node/lighthouse_network/src/discovery/enr.rs
index 0ec7e2ab7a..b0e0a01eec 100644
--- a/beacon_node/lighthouse_network/src/discovery/enr.rs
+++ b/beacon_node/lighthouse_network/src/discovery/enr.rs
@@ -1,12 +1,11 @@
//! Helper functions and an extension trait for Ethereum 2 ENRs.
-pub use discv5::enr::{CombinedKey, EnrBuilder};
+pub use discv5::enr::CombinedKey;
use super::enr_ext::CombinedKeyExt;
use super::ENR_FILENAME;
use crate::types::{Enr, EnrAttestationBitfield, EnrSyncCommitteeBitfield};
use crate::NetworkConfig;
-use discv5::enr::EnrKey;
use libp2p::identity::Keypair;
use slog::{debug, warn};
use ssz::{Decode, Encode};
@@ -142,11 +141,13 @@ pub fn build_or_load_enr(
Ok(local_enr)
}
-pub fn create_enr_builder_from_config(
+/// Builds a lighthouse ENR given a `NetworkConfig`.
+pub fn build_enr(
+ enr_key: &CombinedKey,
config: &NetworkConfig,
- enable_libp2p: bool,
-) -> EnrBuilder {
- let mut builder = EnrBuilder::new("v4");
+ enr_fork_id: &EnrForkId,
+) -> Result {
+ let mut builder = discv5::enr::Enr::builder();
let (maybe_ipv4_address, maybe_ipv6_address) = &config.enr_address;
if let Some(ip) = maybe_ipv4_address {
@@ -165,63 +166,51 @@ pub fn create_enr_builder_from_config(
builder.udp6(udp6_port.get());
}
- if enable_libp2p {
- // Add QUIC fields to the ENR.
- // Since QUIC is used as an alternative transport for the libp2p protocols,
- // the related fields should only be added when both QUIC and libp2p are enabled
- if !config.disable_quic_support {
- // If we are listening on ipv4, add the quic ipv4 port.
- if let Some(quic4_port) = config.enr_quic4_port.or_else(|| {
- config
- .listen_addrs()
- .v4()
- .and_then(|v4_addr| v4_addr.quic_port.try_into().ok())
- }) {
- builder.add_value(QUIC_ENR_KEY, &quic4_port.get());
- }
-
- // If we are listening on ipv6, add the quic ipv6 port.
- if let Some(quic6_port) = config.enr_quic6_port.or_else(|| {
- config
- .listen_addrs()
- .v6()
- .and_then(|v6_addr| v6_addr.quic_port.try_into().ok())
- }) {
- builder.add_value(QUIC6_ENR_KEY, &quic6_port.get());
- }
- }
-
- // If the ENR port is not set, and we are listening over that ip version, use the listening port instead.
- let tcp4_port = config.enr_tcp4_port.or_else(|| {
+ // Add QUIC fields to the ENR.
+ // Since QUIC is used as an alternative transport for the libp2p protocols,
+ // the related fields should only be added when both QUIC and libp2p are enabled
+ if !config.disable_quic_support {
+ // If we are listening on ipv4, add the quic ipv4 port.
+ if let Some(quic4_port) = config.enr_quic4_port.or_else(|| {
config
.listen_addrs()
.v4()
- .and_then(|v4_addr| v4_addr.tcp_port.try_into().ok())
- });
- if let Some(tcp4_port) = tcp4_port {
- builder.tcp4(tcp4_port.get());
+ .and_then(|v4_addr| v4_addr.quic_port.try_into().ok())
+ }) {
+ builder.add_value(QUIC_ENR_KEY, &quic4_port.get());
}
- let tcp6_port = config.enr_tcp6_port.or_else(|| {
+ // If we are listening on ipv6, add the quic ipv6 port.
+ if let Some(quic6_port) = config.enr_quic6_port.or_else(|| {
config
.listen_addrs()
.v6()
- .and_then(|v6_addr| v6_addr.tcp_port.try_into().ok())
- });
- if let Some(tcp6_port) = tcp6_port {
- builder.tcp6(tcp6_port.get());
+ .and_then(|v6_addr| v6_addr.quic_port.try_into().ok())
+ }) {
+ builder.add_value(QUIC6_ENR_KEY, &quic6_port.get());
}
}
- builder
-}
-/// Builds a lighthouse ENR given a `NetworkConfig`.
-pub fn build_enr(
- enr_key: &CombinedKey,
- config: &NetworkConfig,
- enr_fork_id: &EnrForkId,
-) -> Result