Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

EIP-1715: Generalized Version Bits Voting for Consensus Soft and Hard Forks #1715

Closed
wants to merge 3 commits into from

Conversation

sorpaas
Copy link
Contributor

@sorpaas sorpaas commented Jan 21, 2019

This was originally submitted as an ECIP (ethereumproject/ECIPs#62) back in 2017. I just saw this Ethereum Magicians (https://ethereum-magicians.org/t/will-we-need-an-eip-to-allow-hashpower-signaling-and-node-operator-signaling/1045/2) thread, in which the Ethereum community also seems to be willing to discuss solutions to hashpower signalings. So submitted an EIP here just in case it's useful.

@sorpaas sorpaas changed the title EIP-xxx: Generalized Version Bits Voting for Consensus Soft and Hard Forks EIP-1715: Generalized Version Bits Voting for Consensus Soft and Hard Forks Jan 21, 2019
@axic axic added istanbul and removed istanbul labels May 19, 2019
@axic
Copy link
Member

axic commented May 23, 2019

It was my mistake, this probably wasn't proposed for Istanbul.

@axic axic added the EIP label Jun 20, 2019
@axic
Copy link
Member

axic commented Jun 28, 2019

@sorpaas you can also mark this "Abandoned", but since there were so many discussions about versioning I'd suggest we do merge this.

@sorpaas
Copy link
Contributor Author

sorpaas commented Jun 28, 2019

@axic I think you meant #1891.

This EIP is about signaling (not account versioning!), and I'm not sure I want to abandon it yet!

Copy link
Contributor

@adlerjohn adlerjohn left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've made a number of change requests that fix formatting and change bits from one to two. This allows for more fine-grained signaling.


### Signaling bits

Ethereum's extraData field are 32-bytes, i.e. a 256-bit value. The field itself should be a RLP list that follows:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Ethereum's extraData field are 32-bytes, i.e. a 256-bit value. The field itself should be a RLP list that follows:
The [extraData](https://github.com/ethereum/wiki/wiki/Default-Extra-Data-Standard) field of Ethereum blocks is a 32-byte (_i.e._, 256-bit) value. The field itself should be a [RLP-encoded](https://github.com/ethereum/wiki/wiki/RLP) list in the following format:

Ethereum's extraData field are 32-bytes, i.e. a 256-bit value. The field itself should be a RLP list that follows:

```
[ version: P, signalingBits: S, clientIdentity: B ]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
[ version: P, signalingBits: S, clientIdentity: B ]
[ version: P, signalingBits: S ]

[ version: P, signalingBits: S, clientIdentity: B ]
```

For this EIP, `version` should equal to `1`, and `signalingBits` and `clientIdentity` fulfill the rest of the extraData field as long as it does not exceed the maximum size allowed. This allows us to have way more concurrent signalings and better backward compatibility than Bitcoin.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
For this EIP, `version` should equal to `1`, and `signalingBits` and `clientIdentity` fulfill the rest of the extraData field as long as it does not exceed the maximum size allowed. This allows us to have way more concurrent signalings and better backward compatibility than Bitcoin.
For this EIP, `version` should equal to `1`, with `signalingBits` filling the rest of the `extraData` field as long as it does not exceed the maximum size allowed (256 bits). This allows for more concurrent signalings and better backward compatibility than Bitcoin.

* **ACTIVE** for all blocks after the grace period conditions have been met.
* **FAILED** if past the timeout time and LOCKED_IN was not reached.

In accordance with BIP9, a block's state SHALL never depend on its own extraData; only on that of its ancestors.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
In accordance with BIP9, a block's state SHALL never depend on its own extraData; only on that of its ancestors.
In accordance with BIP9, a block's state SHALL never depend on its own `extraData`; only on that of its ancestors.


**Best practices from Bitcoin**. [BIP-9](https://github.com/bitcoin/bips/blob/master/bip-0009.mediawiki), which uses version bits mined in each blocks to vote for consensus soft fork has be successfully conducted for several. Its upgraded version, BIP-135, aims to deal with both soft forks and hard forks alike.

**Potentially faster adoption of new consensus hard fork**. When dealing with emergency consensus hard fork for preventing network attacks, the developer would not need to artificially insert a "hard fork block number" (which must leave enough time for everyone else to upgrade their clients, and then wait for that block). The ETC coin holders and miners collectively decide when the hard fork happens, which potentially could be faster than hard coded block numbers.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
**Potentially faster adoption of new consensus hard fork**. When dealing with emergency consensus hard fork for preventing network attacks, the developer would not need to artificially insert a "hard fork block number" (which must leave enough time for everyone else to upgrade their clients, and then wait for that block). The ETC coin holders and miners collectively decide when the hard fork happens, which potentially could be faster than hard coded block numbers.
**Potentially faster adoption of new consensus hard fork**. When dealing with emergency consensus hard fork for preventing network attacks, the developers would not need to artificially insert a "hard fork block number" (which must leave enough time for everyone else to upgrade their clients, and then wait for that block). Miners collectively decide when the hard fork happens, which could potentially be faster than hard coded block numbers.


### Signaling guidelines

An implementation SHOULD signal '0' on a bit if one of the following holds true:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
An implementation SHOULD signal '0' on a bit if one of the following holds true:
An implementation SHOULD signal `0b00` on appropriate bits if one of the following holds true:

* the deployment has succeeded (it has become ACTIVE)
* the deployment has FAILED

An implementation SHOULD enable the operator to choose (override) whether to signal '0' or '1' on a bit, once its deployment has at least reached the STARTED state.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
An implementation SHOULD enable the operator to choose (override) whether to signal '0' or '1' on a bit, once its deployment has at least reached the STARTED state.
An implementation SHOULD enable the operator to choose (override) whether to signal on bits, once its deployment has at least reached the STARTED state.


An implementation SHOULD enable the operator to choose (override) whether to signal '0' or '1' on a bit, once its deployment has at least reached the STARTED state.

A supporting miner SHOULD signal '1' on a bit for which the deployment is LOCKED_IN state so that uptake is visible. However, this has no effect on consensus rules. Once LOCKED_IN, a deployment proceeds to ACTIVE solely based on the configured grace period parameters (see 'Fork deployment parameters' above).
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
A supporting miner SHOULD signal '1' on a bit for which the deployment is LOCKED_IN state so that uptake is visible. However, this has no effect on consensus rules. Once LOCKED_IN, a deployment proceeds to ACTIVE solely based on the configured grace period parameters (see 'Fork deployment parameters' above).
A supporting miner SHOULD signal `0b11` on bits for which the deployment is LOCKED_IN state so that uptake is visible. However, this has no effect on consensus rules. Once LOCKED_IN, a deployment proceeds to ACTIVE solely based on the configured grace period parameters (see 'Fork deployment parameters' above).


A miner SHOULD signal '0' on a bit if they wish to suspend signaling of support for a fork that is DEFINED in their software.

It is NOT RECOMMENDED to signal '1' for bits where the meaning is undefined (i.e. bits which are unclaimed by proposals).
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
It is NOT RECOMMENDED to signal '1' for bits where the meaning is undefined (i.e. bits which are unclaimed by proposals).
It is NOT RECOMMENDED to signal non-zero for bits where the meaning is undefined (_i.e._, bits which are unclaimed by proposals).


A supporting miner SHOULD signal '1' on a bit for which the deployment is LOCKED_IN state so that uptake is visible. However, this has no effect on consensus rules. Once LOCKED_IN, a deployment proceeds to ACTIVE solely based on the configured grace period parameters (see 'Fork deployment parameters' above).

A miner SHOULD signal '0' on a bit if they wish to suspend signaling of support for a fork that is DEFINED in their software.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
A miner SHOULD signal '0' on a bit if they wish to suspend signaling of support for a fork that is DEFINED in their software.
A miner SHOULD signal `0b00` on bits if they wish to suspend signaling of support for a fork that is DEFINED in their software.

@github-actions
Copy link

There has been no activity on this pull request for two months. It will be closed in a week if no further activity occurs. If you would like to move this EIP forward, please respond to any outstanding feedback or add a comment indicating that you have addressed all required feedback and are ready for a review.

@github-actions github-actions bot added the stale label Sep 15, 2020
@github-actions
Copy link

This pull request was closed due to inactivity. If you are still pursuing it, feel free to reopen it and respond to any feedback or request a review in a comment.

@github-actions github-actions bot closed this Sep 22, 2020
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants