1
1
# Ethereum Wire Protocol (ETH)
2
2
3
3
'eth' is a protocol on the [ RLPx] transport that facilitates exchange of Ethereum
4
- blockchain information between peers. The current protocol version is ** eth/66 ** . See end
4
+ blockchain information between peers. The current protocol version is ** eth/67 ** . See end
5
5
of document for a list of changes in past protocol versions.
6
6
7
7
### Basic Operation
@@ -44,16 +44,15 @@ concurrently.
44
44
45
45
### State Synchronization (a.k.a. "fast sync")
46
46
47
- Protocol versions eth/63 and later also allow synchronizing transaction execution results
48
- (i.e. state tree and receipts). This may be faster than re-executing all historical
49
- transactions but comes at the expense of some security .
47
+ Protocol versions eth/63 through eth/66 also allowed synchronizing the state tree. Since
48
+ protocol version eth/67, the Ethereum state tree can no longer be retrieved using the eth
49
+ protocol, and state downloads are provided by the auxiliary [ snap protocol ] instead .
50
50
51
51
State synchronization typically proceeds by downloading the chain of block headers,
52
52
verifying their validity. Block bodies are requested as in the Chain Synchronization
53
- section but block transactions aren't executed, only their 'data validity' is verified.
54
- The client picks a block near the head of the chain and downloads merkle tree nodes and
55
- contract code incrementally by requesting the root node, its children, grandchildren, ...
56
- using [ GetNodeData] until the entire tree is synchronized.
53
+ section but transactions aren't executed, only their 'data validity' is verified. The
54
+ client picks a block near the head of the chain (the 'pivot block') and downloads the
55
+ state of that block.
57
56
58
57
### Block Propagation
59
58
@@ -424,25 +423,6 @@ request.
424
423
A peer may respond with an empty list iff none of the hashes match transactions in its
425
424
pool.
426
425
427
- ### GetNodeData (0x0d)
428
-
429
- ` [request-id: P, [hash₁: B_32, hash₂: B_32, ...]] `
430
-
431
- Require peer to return a [ NodeData] message containing state tree nodes or contract code
432
- matching the requested hashes.
433
-
434
- ### NodeData (0x0e)
435
-
436
- ` [request-id: P, [value₁: B, value₂: B, ...]] `
437
-
438
- Provide a set of state tree nodes or contract code blobs which correspond to previously
439
- requested hashes from [ GetNodeData] . Does not need to contain all; best effort is fine.
440
- This message may be an empty list if the peer doesn't know about any of the previously
441
- requested hashes. The number of items that can be requested in a single message may be
442
- subject to implementation-defined limits.
443
-
444
- The recommended soft limit for NodeData responses is 2 MiB.
445
-
446
426
### GetReceipts (0x0f)
447
427
448
428
` [request-id: P, [blockhash₁: B_32, blockhash₂: B_32, ...]] `
@@ -463,6 +443,15 @@ The recommended soft limit for Receipts responses is 2 MiB.
463
443
464
444
## Change Log
465
445
446
+ ### eth/67 ([ EIP-4938] , March 2022)
447
+
448
+ Version 67 removed the GetNodeData and NodeData messages.
449
+
450
+ - GetNodeData (0x0d)
451
+ ` [request_id: P, [hash_0: B_32, hash_1: B_32, ...]] `
452
+ - NodeData (0x0e)
453
+ ` [request_id: P, [value_0: B, value_1: B, ...]] `
454
+
466
455
### eth/66 ([ EIP-2481] , April 2021)
467
456
468
457
Version 66 added the ` request-id ` element in messages [ GetBlockHeaders] , [ BlockHeaders] ,
@@ -532,6 +521,7 @@ Version numbers below 60 were used during the Ethereum PoC development phase.
532
521
533
522
[ block propagation ] : #block-propagation
534
523
[ state synchronization ] : #state-synchronization-aka-fast-sync
524
+ [ snap protocol ] : ./snap.md
535
525
[ Status ] : #status-0x00
536
526
[ NewBlockHashes ] : #newblockhashes-0x01
537
527
[ Transactions ] : #transactions-0x02
@@ -543,8 +533,6 @@ Version numbers below 60 were used during the Ethereum PoC development phase.
543
533
[ NewPooledTransactionHashes ] : #newpooledtransactionhashes-0x08
544
534
[ GetPooledTransactions ] : #getpooledtransactions-0x09
545
535
[ PooledTransactions ] : #pooledtransactions-0x0a
546
- [ GetNodeData ] : #getnodedata-0x0d
547
- [ NodeData ] : #nodedata-0x0e
548
536
[ GetReceipts ] : #getreceipts-0x0f
549
537
[ Receipts ] : #receipts-0x10
550
538
[ RLPx ] : ../rlpx.md
@@ -557,5 +545,6 @@ Version numbers below 60 were used during the Ethereum PoC development phase.
557
545
[ EIP-2481 ] : https://eips.ethereum.org/EIPS/eip-2481
558
546
[ EIP-2718 ] : https://eips.ethereum.org/EIPS/eip-2718
559
547
[ EIP-2976 ] : https://eips.ethereum.org/EIPS/eip-2976
548
+ [ EIP-4938 ] : https://eips.ethereum.org/EIPS/eip-4938
560
549
[ London hard fork ] : https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/london.md
561
550
[ Yellow Paper ] : https://ethereum.github.io/yellowpaper/paper.pdf
0 commit comments