This change makes SCRIPT_VERIFY_UPGRADABLE_NOPS
not apply to OP_CHECKLOCKTIMEVERIFY
and OP_CHECKSEQUENCEVERIFY
. This is a no-op as UPGRADABLE_NOPS
is only set for mempool transactions, and those always have SCRIPT_VERIFY_CHECKLOCKTIMEVERIFY
and SCRIPT_VERIFY_CHECKSEQUENCEVERIFY
set as well. The advantage is that setting more flags now always results in a reduction in acceptable scripts (=softfork).
This results in a nice and testable property for validation, for which a new test is added.
This also means that the introduction of a new definition for a NOP or witness version will likely need the following procedure (example OP_NOP8 here)
- Remove OP_NOP8 from being affected by
SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_NOPS
. - Add a
SCRIPT_VERIFY_DISCOURAGE_NOP8
, which only applies toOP_NOP8
. - Add a
SCRIPT_VERIFY_NOP8
which implements the new consensus logic. - Before activation, add
SCRIPT_VERIFY_DISCOURAGE_NOP8
to the mempool flags. - After activation, add
SCRIPT_VERIFY_NOP8
to both the mempool and consensus flags.