P2P Networking #005
Transcript
- Raúl Kripalani
hello!
- Kamil Salakhiev
- jxs
will take a look Kamil
- Kamil Salakhiev
Reacted to "will take a look Kamil" with ❤️
- Bosul Mun
- Raúl Kripalani
ordering doesn't really matter within a topic either but causal order between control messages and data messages does however, gossipsub has no notion of that
- Raúl Kripalani
how does this solve HoL with mplex or yamux? (or i might have misunderstood what you said?)
- Sukun Tarachandani
This (shadow test) requires yamux / mplex interleaving?
- Raúl Kripalani
i don't think either does?
- jxs
Replying to "how does this solv..." solves HoL at the gs level, due to gs using only a single stream by the original spec AFAIU
- Raúl Kripalani
or yamux does unless a stream is backlogged
- FLCL (Nethermind)
which layer shoud be potentially aware of topic priority?
- Csaba
Yamux implementation I remember does RR
- Csaba
At least this is how I remember.
- marco
github.com/libp2p/specs/pull/729
- kasey
Could topics be as granular as a block hash within a logical topic (block, attestation etc)? That would be interesting from a priority perspective, eg I want data columns for the block root I already believe will be canonical.
- Raúl Kripalani
fun fact: ethp2p broadcast separates control, session, and chunk streams: https://github.com/ethp2p/ethp2p/blob/main/specs/002-ec-broadcast.md
- kasey
I think to Marco’s point, the partial message serves this role, although it’s replicated across multiple topics.
- marco
My slides: https://gist.github.com/MarcoPolo/3cecb65486eb1321ce1c277421adbc93
- marco
more simulators == better obviously
- Raúl Kripalani
Replying to "I think to Marco’s p..." i didn't get this part, but i'm a fan of simple solutions
- marco
especially for the JVM, having a JVM process per node is crazy overhead relative to a single JVM for many nodes.
- Kamil Salakhiev
wish I also had m3 ultra🙂
- Sukun Tarachandani
Reacted to "wish I also had m3 ultra🙂" with 😂
- yiannisbot
Reacted to "wish I also had m3 u..." with 😂
- marco
that's awesome. I've thought about this experiment too
- Csaba
Reacted to "wish I also had m3 ultra🙂" with 😂
- marco
Reacted to "wish I also had m3 u..." with 😂
- marco
That's enough ram to buy a house!
- FLCL (Nethermind)
Unrelated q: bbrv3 is must have for ethp2p?
- marco
I wouldn't think so?
- FLCL (Nethermind)
Reacted to "I wouldn't think so?" with 👍
- marco
bbrv3 could help, but probably not the lowest hanging fruit.
- marco
Q: Did you profile the many nodes test? If so, what was the bottleneck?
- marco
Q: could you explain a bit more on the latency -> parallel execution a bit? I didn't catch the details
- FLCL (Nethermind)
Reacted to "wish I also had m3 ultra🙂" with 😂
- marco
I think Quinn supports passing in time.
- marco
Q: what is breaking determinism?
- marco
Q: Is this multithreaded? Is scheduling deterministic?
- marco
Thought: Run this within Shadow to get determinism
- Sukun Tarachandani
Does it not depend on who else sends it (node A) data?
- Raúl Kripalani
@Anton Nashatyrev btw, you can force deterministic randomness in that 3rd party lib by instrumenting the bytecode, it's not very hard
- kasey
For instance Node A and Node B are both writing to Node C. Node C buffer fills, A or B could be blocked which changes the timing of things.
- marco
Reacted to "For instance Node A ..." with 👍
- Raúl Kripalani
then take it one level deeper: eBPF ftw 😄
- marco
Reacted to "then take it one lev..." with 🐢
- Raúl Kripalani
yeah we can see your seed phrase
- Kamil Salakhiev
Reacted to "yeah we can see your seed phrase" with 😂
- Daniel Knopik
Reacted to "yeah we can see yo..." with 😂
- Anton Nashatyrev
Reacted to "For instance Node A and Node B are both writing to Node C. Node C buffer fills, A or B could be blocked which changes the timing of things." with 👍
- Anton Nashatyrev
Replying to "wish I also had m3 u..." It’s actually my colleague’s Alex beast
- Anton Nashatyrev
Reacted to "wish I also had m3 ultra🙂" with 😂
- Anton Nashatyrev
Reacted to "especially for the JVM, having a JVM process per node is crazy overhead relative to a single JVM for many nodes." with 👍
- kasey
What is bor?
- Kamil Salakhiev
I see frozen screen
- Sukun Tarachandani
Reacted to "I see frozen screen" with 👍
- Daniel Knopik
Reacted to "I see frozen screen" with 👍
- yiannisbot
Reacted to "I see frozen screen" with 👍
- Anton Nashatyrev
Reacted to "yeah we can see your seed phrase" with 😂
- Kamil Salakhiev
didn’t know that polygon has more nodes than mainnet
- Sukun Tarachandani
How do you estimate BW?
- Raúl Kripalani
Replying to "How do you estimate ..." probably inferred from ASN?
- Anton Nashatyrev
Reacted to "That's enough ram to buy a house!" with 😃
- marco
wow, that's quite high!
- yiannisbot
Incredible tool! Super interesting! Well done! 👏 👏
- marco
Reacted to "Incredible tool! Sup..." with 💯
- Daniel Knopik
i can haz access?
- yiannisbot
Replying to "i can haz access?" Yes, that’s also my question. Is it live online?
- Daniel Knopik
Reacted to "Incredible tool! S..." with 💯
- Daniel Knopik
Replying to "wow, that's quite ..." i assume this was on partial message support. note that advertised partial message support is not the same as also advertising support for partial columns
- Csaba
Much better. Remember to use this mic next time :-)
- marco
unrelated, did you use typst for this?
- Csaba
Replying to "wow, that's quite hi..." Yes, this is just advertising the extension support
- Csaba
Replying to "didn’t know that pol..." It goes head-to-head, depends on the day :-)
- Csaba
Replying to "What is bor?" Bor is a Geth fork, running Polygon.
- kasey
Reacted to "Bor is a Geth fork, running Polygon." with 👍
- Sukun Tarachandani
https://github.com/ethereum/consensus-specs/pull/5464 https://github.com/ethereum/EIPs/pull/11905
- Csaba
I measure packet size and inter-packet time of FINDNODE responses. Very rough estimate, and also debatable what it measures …. but it is actually measured.
- marco
Replying to "How do you estimate ..." is this not just measuring slow start?
- Sukun Tarachandani
Replying to "How do you estimate ..." Isn’t it all UDP?
- marco
Replying to "How do you estimate ..." then measuring their slow start equivalent and pacing
- Csaba
Replying to "How do you estimate ..." It is UDP only, no slow-start in the way. But it depends on many factors, including UDP stack, discv5 stack, FINDNODE response composition pipeline, … and then the packets flowing in the network through bottleneck bw to us.
- marco
Replying to "How do you estimate ..." does discv5 have any congestion control?
- Csaba
Replying to "How do you estimate ..." If I measure someone e.g. 100Mbps, then a pipe that is at least 100Mbps is most probably there between us. But that’s the most you can say, it is not an exact measurement.
- Sukun Tarachandani
This helps a lot with gossip
- Csaba
Replying to "How do you estimate ..." On congestion control: not at the level of a FINDNODE response, and also not defined in the protocol, just in implementations (and even part of that is only in a branch of mine, not yet merged).
- kasey
You could still do the same thing with the ids, for instance organize them into a binary tree by their validator index.
- Sukun Tarachandani
But in this case we can also send the aggregated signature in reply to gossip, thus getting multiple attestations via 1 signature.
- kasey
Replying to "You could still do t..." I think the idea of the tree is that you can walk up until you find a disjoint set. You can do the same thing with a binary tree, I think?
- kasey
Replying to "You could still do t..." *walk down
- Raúl Kripalani
yep
- kasey
To the point about index adjacency - if the tree is organized such that the high order bits are closer to the root, left hand nodes are older than right hand nodes, so there could be a nice logical partitioning of which paths need to get de-aggregated (there would be more churn as you go right vs left because newer vals are more active).
Call summary
Targets
- •Chainscope public URL — within days of July 29, 2026 - 01:16:27
Decisions
- •Geth V4 discovery shutdown considered viable pending broader client V5 migration confirmation - 00:11:23
Highlights
- Chainscope:
- ·Chainscope: continuous Ethereum network scanner — 120+ chains, 80K reachable nodes, client distribution, latency, bandwidth, churn, protocol version matrices - 00:49:04
- ·Chainscope shows partial messages extension adoption level on mainnet; execution payload envelope protocol already visible - 01:12:59
- ·Chainscope public URL coming soon; ping Csaba for early access - 01:16:27
- Client Updates:
- ·Lighthouse: Gloas partial data columns support deployed to PeerDAS devnet-7 - 00:04:18
- ·Prysm: Gloas support implemented + internal review done; revamping peer scoring for observability - 00:05:43
- ·Geth: sparse blob pool merged; bug fixed in Kurtosis cross-client testing with Nethermind - 00:07:37
- ·Geth: peer quality protection (builder/pool metrics) merged; V5-only migration Kurtosis testing complete — V4 shutdown feasible - 00:10:52
- ·Nethermind: V4+V5 dual activation planned for mainnet; topic-based discovery + bot-node test harness in progress - 00:11:54
- Attestation Bundling:
- ·EIP PR #11905: attestation bundling via partial messages — deduplicates attestation data, ~45-50% bandwidth saving, bundles up to ~10 attestations; no fork required, independently deployable - 01:17:30
- ·Daniel (Lighthouse): tree-structured in-network aggregation explored — ~70% bandwidth saving in simulation; compatible with bundling EIP - 01:21:42
- ·Raul's EIP-8243 (pre-aggregated attestations at source) discussed as complementary; SEAL mechanism enables privacy-preserving validator channeling - 01:29:42
- Networking Simulator:
- ·JVM QUIC-based simulator (Anton/Consensys): mainnet-scale gossip simulation — 8,000 nodes, 16,000 messages in ~20 min, ~500 GB RAM - 00:30:25
- ·Validated against Shadow with ~1% cumulative error; parallelized via per-component local simulated time - 00:33:13
- ·Currently non-deterministic due to Quiche TLS internals; pure-JVM QUIC impl considered for future determinism - 00:38:00
- Topic Streams Extension:
- ·GossipSub topic streams extension (spec PR #729): each topic gets a long-lived stream; topic name sent once as header, eliminating per-message overhead - 00:13:14
- ·Solves head-of-line blocking across topics; works with yamux/MPLEX interleaving and QUIC; backwards-compatible extension - 00:13:53
- ·Go implementation complete with Shadow interop test; seeking second implementation for interop validation - 00:18:02
Action Items
- •All CL client teams - Implement topic streams extension (spec PR #729) for interop testing against Go reference impl - 00:29:46
- •Sukun, Daniel, Raúl - Collaborate on attestation bundling EIP (PR #11905) to incorporate in-network aggregation and batching-at-source compatibility - 01:47:57
Key decisions
Geth V4 discovery shutdown considered viable pending broader client V5 migration confirmation
pending broader client V5 migration confirmation
AI Disclaimer: Some content or metadata on EIPsInsight may be AI-inferred or automatically compiled. If you find any discrepancy, please contact us at dev@avarch.org.