We run a geth/prysm
on mainnet and extracted all information by
querying the nodes. The method used were:
EL client:
eth_getBlockByHash
eth_getTransactionReceipt
CL client:
/eth/v2/beacon/blocks/{block_id}
/eth/v1/beacon/states/{state_id}/validators/{validator_id}
Relay nodes APIs were also queried via the method /relay/v1/data/bidtraces/proposer_payload_delivered
From the EL we extracted Block, Transaction and Transaction Receipts for blocks between 15,313,393 to 15,761,393. For the CL we got the execution payload for the slots between 4,700,013 and 4,924,031. Relay nodes were queried for the same slots as the CL.
We calculated:
- For each block of the EL:
base_reward
based on EIP-1234 and EIP-649 and zero after The Merge.transaction_count
as the length of the array containing the transactionburnt_fees
asgasUsed * baseFeePerGas
transaction_fees
as the sum oftransaction_fee
in the transaction receiptsblock_reward
asbase_reward + transaction_fees - burnt_fees
- For each transaction in the EL:
transaction_last
as aboolean
that identifies if the transaction is the last transaction in the block
- For each transaction receipt in the EL:
transaction_fees
asgasUsed * effectiveGasPrice
transaction_last
as aboolean
that identifies if the transaction is the last transaction in the block
- For each block in the CL:
proposer_address
by querying the validators method/eth/v1/beacon/states/head/validators/{validator_id}
withvalidator_id
equal to theporposer_index
epoch
calculated from theslot
and theSLOTS_PER_EPOCH
from the specstransaction_count
as the length of the array oftransactions
This information became the basis of our analysis. Each section describes how the data was used and further transformed.