ECIP 1082: Fork identifier (`forkid`) protocol fork list specification Source

AuthorMr. Meows D. Bits
Discussions-Tohttps://github.com/ethereumclassic/ECIPs/issues/294
StatusSuperseded
TypeStandards Track
CategoryNetworking
Created2019-12-18
Superseded by 1091

Abstract

EIP-2124 (forkid) and EIP-2364 (eth/64) propose discovery protocol modifications which depend on lists of fork values. In case these changes are adopted and implemented on Ethereum Classic networks, this ECIP defines canonical lists of forks numbers for inclusion in the generation and validation steps of these “ForkID” schemes.

  • https://eips.ethereum.org/EIPS/eip-2124
  • https://eips.ethereum.org/EIPS/eip-2364

This specification describes a set of forks which exclude TheDAO fork event block(s) from forkid calculations, as well as excluding all forthcoming blockNumber % 5000000 == 0 blocks that, according to the algorithmdescribed in ECIP-1017 and enabled on ETC Mainnet and some testnets, will see reduced block reward values.

Motivation

Specify parameters for forkid generation and validation, so that in the case nodes on Ethereum Classic networks implement eth/64, they can do so in a consistent way.

As documented in EIP-2364, implementation for eth/64 does not demand consensus nor require any fork for node or network implementation.

Notwithstanding, it would be good for Ethereum Classic networks and clients to be able to implement the protocol change, if they want, according to a standard specification. Failure for clients to agree on forkid implementation could result in difficulty discovering each other.

Specification

Generally

Don’t include TheDAO fork blocks (eg. 1920000 on Mainnet, 1885000 on Morden) as a forkid parameter as specified in EIP-2124.

Don’t include any blocks subsequent and incidental to consensus-facing calculations according to accepted and implemented algorithms, eg. ECIP-1017.

Applied

The following data points are valid at time of writing (see ECIP’s created-at metadata).

Ethereum Classic Mainnet (ETC)
  • Genesis Hash: 0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3
  • Forks: 1150000,2500000,3000000,5000000,5900000,8772000,9573000,10500839
Head Block Number FORK_HASH FORK_NEXT RLP Encoded (Hex)
head=0 FORK_HASH=fc64ec04 FORK_NEXT=1150000 c984fc64ec0483118c30
head=1149999 FORK_HASH=fc64ec04 FORK_NEXT=1150000 c984fc64ec0483118c30
head=1150000 FORK_HASH=97c2c34c FORK_NEXT=2500000 c98497c2c34c832625a0
head=1150001 FORK_HASH=97c2c34c FORK_NEXT=2500000 c98497c2c34c832625a0
head=2499999 FORK_HASH=97c2c34c FORK_NEXT=2500000 c98497c2c34c832625a0
head=2500000 FORK_HASH=db06803f FORK_NEXT=3000000 c984db06803f832dc6c0
head=2500001 FORK_HASH=db06803f FORK_NEXT=3000000 c984db06803f832dc6c0
head=2999999 FORK_HASH=db06803f FORK_NEXT=3000000 c984db06803f832dc6c0
head=3000000 FORK_HASH=aff4bed4 FORK_NEXT=5000000 c984aff4bed4834c4b40
head=3000001 FORK_HASH=aff4bed4 FORK_NEXT=5000000 c984aff4bed4834c4b40
head=4999999 FORK_HASH=aff4bed4 FORK_NEXT=5000000 c984aff4bed4834c4b40
head=5000000 FORK_HASH=f79a63c0 FORK_NEXT=5900000 c984f79a63c0835a06e0
head=5000001 FORK_HASH=f79a63c0 FORK_NEXT=5900000 c984f79a63c0835a06e0
head=5899999 FORK_HASH=f79a63c0 FORK_NEXT=5900000 c984f79a63c0835a06e0
head=5900000 FORK_HASH=744899d6 FORK_NEXT=8772000 c984744899d68385d9a0
head=5900001 FORK_HASH=744899d6 FORK_NEXT=8772000 c984744899d68385d9a0
head=8771999 FORK_HASH=744899d6 FORK_NEXT=8772000 c984744899d68385d9a0
head=8772000 FORK_HASH=518b59c6 FORK_NEXT=9573000 c984518b59c683921288
head=8772001 FORK_HASH=518b59c6 FORK_NEXT=9573000 c984518b59c683921288
head=9572999 FORK_HASH=518b59c6 FORK_NEXT=9573000 c984518b59c683921288
head=9573000 FORK_HASH=7ba22882 FORK_NEXT=10500839 c9847ba2288283a03ae7
head=9573001 FORK_HASH=7ba22882 FORK_NEXT=10500839 c9847ba2288283a03ae7
head=10500838 FORK_HASH=7ba22882 FORK_NEXT=10500839 c9847ba2288283a03ae7
head=10500839 FORK_HASH=9007bfcc FORK_NEXT=0 c6849007bfcc80
head=10500840 FORK_HASH=9007bfcc FORK_NEXT=0 c6849007bfcc80
Kotti
  • Genesis Hash: 0x14c2283285a88fe5fce9bf5c573ab03d6616695d717b12a127188bcacfc743c4
  • Forks: 716617,1705549,2000000,2200013,5000000
Head Block Number FORK_HASH FORK_NEXT RLP Encoded (Hex)
head=0 FORK_HASH=0550152e FORK_NEXT=716617 c9840550152e830aef49
head=716616 FORK_HASH=0550152e FORK_NEXT=716617 c9840550152e830aef49
head=716617 FORK_HASH=a3270822 FORK_NEXT=1705549 c984a3270822831a064d
head=716618 FORK_HASH=a3270822 FORK_NEXT=1705549 c984a3270822831a064d
head=1705548 FORK_HASH=a3270822 FORK_NEXT=1705549 c984a3270822831a064d
head=1705549 FORK_HASH=8f3698e0 FORK_NEXT=2000000 c9848f3698e0831e8480
head=1705550 FORK_HASH=8f3698e0 FORK_NEXT=2000000 c9848f3698e0831e8480
head=1999999 FORK_HASH=8f3698e0 FORK_NEXT=2000000 c9848f3698e0831e8480
head=2000000 FORK_HASH=7faf51b5 FORK_NEXT=2200013 c9847faf51b5832191cd
head=2000001 FORK_HASH=7faf51b5 FORK_NEXT=2200013 c9847faf51b5832191cd
head=2200012 FORK_HASH=7faf51b5 FORK_NEXT=2200013 c9847faf51b5832191cd
head=2200013 FORK_HASH=595e180d FORK_NEXT=5000000 c984595e180d834c4b40
head=2200014 FORK_HASH=595e180d FORK_NEXT=5000000 c984595e180d834c4b40
head=4999999 FORK_HASH=595e180d FORK_NEXT=5000000 c984595e180d834c4b40
head=5000000 FORK_HASH=b5407fd6 FORK_NEXT=0 c684b5407fd680
head=5000001 FORK_HASH=b5407fd6 FORK_NEXT=0 c684b5407fd680
Mordor
  • Genesis Hash: 0xa68ebde7932eccb177d38d55dcc6461a019dd795a681e59b5a3e4f3a7259a3f1
  • Forks: 301243,999983
Head Block Number FORK_HASH FORK_NEXT RLP Encoded (Hex)
head=0 FORK_HASH=175782aa FORK_NEXT=301243 c984175782aa830498bb
head=301242 FORK_HASH=175782aa FORK_NEXT=301243 c984175782aa830498bb
head=301243 FORK_HASH=604f6ee1 FORK_NEXT=999983 c984604f6ee1830f422f
head=301244 FORK_HASH=604f6ee1 FORK_NEXT=999983 c984604f6ee1830f422f
head=999982 FORK_HASH=604f6ee1 FORK_NEXT=999983 c984604f6ee1830f422f
head=999983 FORK_HASH=f42f5539 FORK_NEXT=0 c684f42f553980
head=999984 FORK_HASH=f42f5539 FORK_NEXT=0 c684f42f553980
Morden
  • Genesis Hash: 0x0cd786a2425d16f152c658316c423e6ce1181e15c3295826d7c9904cba9ce303
  • Forks: 494000,1783000,1915000,2000000,2300000,4729274,5000381
Head Block Number FORK_HASH FORK_NEXT RLP Encoded (Hex)
head=0 FORK_HASH=417adbe7 FORK_NEXT=494000 c984417adbe7830789b0
head=493999 FORK_HASH=417adbe7 FORK_NEXT=494000 c984417adbe7830789b0
head=494000 FORK_HASH=aeb67dfb FORK_NEXT=1783000 c984aeb67dfb831b34d8
head=494001 FORK_HASH=aeb67dfb FORK_NEXT=1783000 c984aeb67dfb831b34d8
head=1782999 FORK_HASH=aeb67dfb FORK_NEXT=1783000 c984aeb67dfb831b34d8
head=1783000 FORK_HASH=6a495281 FORK_NEXT=1915000 c9846a495281831d3878
head=1783001 FORK_HASH=6a495281 FORK_NEXT=1915000 c9846a495281831d3878
head=1914999 FORK_HASH=6a495281 FORK_NEXT=1915000 c9846a495281831d3878
head=1915000 FORK_HASH=e893e32d FORK_NEXT=2000000 c984e893e32d831e8480
head=1915001 FORK_HASH=e893e32d FORK_NEXT=2000000 c984e893e32d831e8480
head=1999999 FORK_HASH=e893e32d FORK_NEXT=2000000 c984e893e32d831e8480
head=2000000 FORK_HASH=12a0ac82 FORK_NEXT=2300000 c98412a0ac8283231860
head=2000001 FORK_HASH=12a0ac82 FORK_NEXT=2300000 c98412a0ac8283231860
head=2299999 FORK_HASH=12a0ac82 FORK_NEXT=2300000 c98412a0ac8283231860
head=2300000 FORK_HASH=02a93060 FORK_NEXT=4729274 c98402a93060834829ba
head=2300001 FORK_HASH=02a93060 FORK_NEXT=4729274 c98402a93060834829ba
head=4729273 FORK_HASH=02a93060 FORK_NEXT=4729274 c98402a93060834829ba
head=4729274 FORK_HASH=4802d0c7 FORK_NEXT=5000381 c9844802d0c7834c4cbd
head=4729275 FORK_HASH=4802d0c7 FORK_NEXT=5000381 c9844802d0c7834c4cbd
head=5000380 FORK_HASH=4802d0c7 FORK_NEXT=5000381 c9844802d0c7834c4cbd
head=5000381 FORK_HASH=0b559b1d FORK_NEXT=0 c6840b559b1d80
head=5000382 FORK_HASH=0b559b1d FORK_NEXT=0 c6840b559b1d80

Rationale

The Ethereum Classic consensus protocol did not fork at block 1920000.

The Ethereum Classic disinflationary monetary policy is not considered a series of forks, it is the natural “stepping” behavior of a deterministic algorithm.

Implementation

Respective reference implementations for forkid generation are documented in EIP-2124 and EIP-2364.