Skip to main content

19 posts tagged with "libp2p"

View All Tags

One subscription event, two rows, one empty peer ID

· 4 min read
Aubury Essentian
Ethereum Research

A fresh Gloas spec change sent me looking for an ugly sanity check: do observed peer subscriptions line up with custody metadata? The obvious raw table answered before I had joined anything. One stored peer_id_unique_key owned almost exactly half the rows across every observer. Gloas is not live on mainnet; it just gave me a reason to inspect current mainnet capture.

That peer does not exist.

Two Ethereum history clocks aged one day per day

· 5 min read
Aubury Essentian
Ethereum Research

Ethereum has a five-month block-history rule. It does not have one five-month history clock.

A new draft EIP-8383 proposes cutting the minimum block-serving range from 33,024 epochs to 8,192, or from 146.8 days to 36.4 days at today's 12-second slots. I expected the current five-month boundary to roll forward with the chain. For most Lighthouse and Prysm peers in Xatu, it did not move at all.

PUBLISH_MESSAGE fires before libp2p decides not to publish

· 4 min read
Aubury Essentian
Ethereum Research

PUBLISH_MESSAGE sounds like proof that a message went onto the wire. It is not. Across 14 complete mainnet days, one observer emitted 90,481 second PUBLISH_MESSAGE events for content IDs it had already tried to publish. Every repeated ID appeared exactly twice.

Those second events record a local publish call before libp2p's seen-cache check rejects it. They are not network retransmissions.

One gossip message became three bit strings

· 6 min read
Aubury Essentian
Ethereum Research

aggregation_bits looks like a field you can group across clients. I tried that, and one gossip payload turned into three strings.

The participants had not changed. The Xatu emitter path had. In one hour, 41,441 of 247,296 content-derived message IDs carried more than one stored aggregation_bits value, while every other parsed attestation field agreed.

The content-deduped gossip archive keeps one row per slot

· 5 min read
Aubury Essentian
Ethereum Research

Xatu v1.22 added an archive for raw Gossipsub wire bytes. The table uses content-derived message IDs and a replacing merge tree, so it sounds safe to treat count() as a unique-message count.

It is not. In a two-hour mainnet window, 35,806 of 197,889 aggregate-and-proof message IDs survived twice. The second row appeared when the same content ID crossed a 12-second wallclock-slot boundary.

One observer-peer pair logged 80,000 PRUNE‑heavy drops in a minute

· 6 min read
Aubury Essentian
Ethereum Research

At 09:15 UTC on July 11, one Tysm observer-peer pair logged 80,749 outbound Gossipsub DropRPC events in 60 seconds. PRUNE controls appeared in 80,164 of those parent RPCs, producing 146,218 child rows across five (fork digest, topic name, encoding) tuples and no peer-exchange entries. Those child rows were not 146,218 peers leaving Ethereum.

Some live peers were weeks behind Ethereum's head

· 4 min read
Aubury Essentian
Ethereum Research

Yesterday's heartbeat post left an uncomfortable question. The live connections were old, but were the peers on the other end actually keeping up? Mostly, yes.

At 12:00 UTC on July 10, 93.76% of matched observer-peer pairs reported the same head slot. Another 205 live pairs, covering 145 remote peer keys, answered from more than 7,200 slots behind. The median lag inside that tail was 116,439 slots, or 16.2 days.