Subject: [Bitcoin-development] Incorporating block validation rule modifications into the block chain

From: Raph Frank <[email-masked]>
Date: Tue, 12 Feb 2013 13:49:56 +0000

Has this been considered?

If made sufficiently general, older clients could support any
extension of the rules.

Various "hard" parameters within the protocol are defined in main.h of
the official client.

In BIP-34, there is a suggested way to make changes, based on consensus.
https://en.bitcoin.it/wiki/BIP_0034

These could be made into a rule for changing the parameters directly.

The process for updating could be handled by adding a new field to the
coinbase transaction, in the same way the height was added in BIP-34.

Something like
- miner proposed a change by by including proposal in a block (name of
parameter and new value)
- seconded by at least 6 of the next 10 blocks (proposal dies otherwise)
- active if 750 of the last 1000 blocks voted yes, or 950 of any
successive 1000 previous blocks voted yes (with reduced thresholds on
testnet)
- dies if more than 500 of the previous 1000 voted No
- blocks which don't reference the proposal are considered to abstain

This could also be used to update NOPs.  Complex signing algorithms
could be incorporated.  However, that would require a more complex
scripting language for defining opcode functions.  The proposal would
have opcode number + script description of algorithm.  This would also
allow methods <method name> + <script code>.  Once of the NOPs could
be "call method".

The rule would require that the script is valid under the current
rules (NOPs as nops) and under the latest rules.  This prevents
needing to try all possible permutations.  However, it reduces
security.

An compromise would be to have each new opcode change could as a
version and scripts must be valid under all versions in the chain, so
far.

Once an op-code is accepted, new clients implementations would
probably create dedicated functions for performing the calculation.
Older clients would have to perform the calculations using the
scripting language.