Skip to content

Latest commit

 

History

History
75 lines (51 loc) · 3.14 KB

bip-0008.mediawiki

File metadata and controls

75 lines (51 loc) · 3.14 KB

  BIP: 8
  Title: Version bits extension with guaranteed lock-in
  Author: Shaolin Fry <shaolinfry@protonmail.ch>
  Comments-Summary: No comments yet.
  Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-????
  Status: Draft
  Type: Informational
  Created: 2017-02-01
  License: BSD-3-Clause
           CC0-1.0

Table of Contents

Abstract

This document specifies an extension to BIP9 that introduces an additional activation parameter to guarantee activation of backward-compatible changes (further called "soft forks").

Motivation

BIP9 introduced a mechanism for doing parallel soft forking deployments based on repurposing the block nVersion field. Activation is dependent on near unanimous hashrate signalling which may be impractical and is also subject to veto by a small minority of non-signalling hashrate.

This specification provides a way to optionally guarantee lock-in at the end of the BIP9 timeout, and therefore activation, while still allowing a hashrate super majority to trigger activation earlier.

Specification

This specification adds a new per-chain deployment parameter to the BIP9 specification as follows:

  1. The lockinontimeout boolean if set to true, will transition state to LOCKED_IN at timeout if not already LOCKED_IN or ACTIVE.

State transitions

The state transition workflow is exactly the same as in BIP9 with an additional rule: During the STARTED state if the lockinontimeout is set to true, the state will transition to LOCKED_IN when timeout is reached.

        case STARTED:
            // BIP9 specification follows
            if (GetMedianTimePast(block.parent) >= timeout) {
                return (fLockInOnTimeout == true) ? THRESHOLD_LOCKED_IN : THRESHOLD_FAILED
            }
            int count = 0;
            walk = block;
            for (i = 0; i < 2016; i++) {
                walk = walk.parent;
                if (walk.nVersion & 0xE0000000 == 0x20000000 && (walk.nVersion >> bit) & 1 == 1) {
                    count++;
                }
            }
            if (count >= threshold) {
                return LOCKED_IN;
            }
            return STARTED;

Reference implementation

https://github.com/bitcoin/bitcoin/compare/master...shaolinfry:bip-uaversionbits

Backwards compatibility

If lockinontimeout boolean is set to false this BIP is compatible with nodes that implement BIP9. If lockinontimeout boolean is set to true, nodes that only implement BIP9 will not activate the soft fork if hashpower threshold is not reached by timeout, however, those nodes will still accept the blocks generated by activated nodes.

Deployments

A living list of deployment proposals can be found here.

References

BIP9

Mailing list discussion

Copyright

This document is dual licensed as BSD 3-clause, and Creative Commons CC0 1.0 Universal.