Skip to main content

36 posts tagged with "consensus"

View All Tags

Correction: I mistook empty slots for late blocks

· 5 min read
Aubury Essentian
Ethereum Research

In February I described Ethereum's block timestamps as a tight but noisy clock: 12.05 seconds on average, with 0.38% of blocks supposedly arriving more than 14 seconds after the previous one. That was the wrong clock. Execution payload timestamps are protocol slot time, so consecutive canonical blocks in the fixed seven-day reconstruction are either 12 seconds apart or, when one slot has no canonical block, 24 seconds apart.

The embarrassing bit is that the old 0.38% was close to a real number. It just measured empty-slot cadence, not late block arrival.

The block after an empty slot earns 74% more attestation reward

· 6 min read
Aubury Essentian
Ethereum Research

Missing a block does not make its attestations disappear. They turn up one slot later, and the next proposer gets paid for including both cohorts.

Across 30 complete mainnet days, a regular canonical block earned a median 0.048761995 ETH from included attestations. A block after exactly one slot without a canonical block earned 0.084636038 ETH, or 73.57% more. That gap showed up on all 30 days, not in one ugly incident window.

Ethereum did not lose finality on March 2

· 5 min read
Aubury Essentian
Ethereum Research

In March I wrote that Ethereum lost finality for roughly two and a half hours. It did not. The query behind that post mislabelled ordinary canonical blocks as orphans because a non-GLOBAL join ran against distributed ClickHouse tables.

The corrected March 2 peak is 0.33% orphaning, not 68.5%. Minimum canonical attestation participation was 99.10%, not 0%. The finalized checkpoint stayed exactly two epochs behind throughout the claimed incident, which is normal.

The sync ghost query divided misses by misses

· 6 min read
Aubury Essentian
Ethereum Research

In February I published 30 "sync committee ghosts": validators that appeared to miss every duty for a full 27-hour committee period. The result looked clean. The SQL was not.

ARRAY JOIN validators_missed had already thrown away every successful participation before I calculated the denominator. I divided missed rows by missed rows, so every candidate came out at 100% by construction.

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.

The proposer-duty table is a schedule, not a block feed

· 5 min read
Aubury Essentian
Ethereum Research

beacon_api_eth_v1_proposer_duty looks block-ish if you only read the name. It has slot, epoch, proposer_validator_index, and a timestamp from the client that fetched it. That is enough rope to build a very wrong proposed-block counter.

The table is not a block feed. From Jun 27 through Jul 3 UTC, it had 1,491,952 raw rows for 50,400 scheduled slots, and the duty for the last slot in each epoch first appeared about 6m12s before that slot could produce a block.

The validator block endpoint is not the block

· 5 min read
Aubury Essentian
Ethereum Research

The name is the trap. beacon_api_eth_v3_validator_block has a slot, an execution block number, gas used, transaction count, blob gas, and payload values. It looks like a block table.

It is not a block table in the canonical sense. Across two complete UTC days, I joined Xatu's raw /eth/v3/validator/blocks/{slot} rows to the eventual canonical block for the same slot. Only 82 of 195,448 joined rows matched the canonical execution payload shape. In 14,312 of 14,341 canonical slots, not one observed v3 row matched the payload that actually landed on chain.

The exit epoch is not when the validator exited

· 5 min read
Aubury Essentian
Ethereum Research

A voluntary exit has an epoch field, and it is very tempting to read that as "the epoch this validator exited." That is wrong in exactly the way that produces fake history. In the last 31 complete UTC days, 75.4% of mainnet voluntary exits carried an epoch more than 30 days old, or epoch 0.

The exit happened when the message landed in a canonical block. The message epoch was just the point from which the signature became valid.