Are higher versions of segregated witness script non-standard?

0

My understanding is that only version 0 is defined but other versions are considered valid to allow extensions using soft forks, but are they non-standard at the moment?

Wapac

Posted 2018-08-13T16:19:37.847

Reputation: 869

what's the difference between "considered valid" and considered standard in this context?JBaczuk 2018-08-13T16:28:50.303

Answers

1

See @Pieter Wuille's comment, currently all witness programs with versions other than 0 will be rejected as non-standard. See interpreter.cpp L1447

Edit: As of v0.16.2, it appears that all version bytes will at least enter the mempool, provided the rules for version 0x0 (if used) are followed. See BIP 141 - Witness Program, BIP 143 - Restrictions on Public Key Type and policy.cpp#L232

Currently, versions bytes higher than 0 will cause the VerifyWitnessProgram function to always return true (for future softfork compatibility). Currently version bytes 1-16 are reserved for future use, but, "for any version byte from 0 to 16, the script must fail if the witness program has a CastToBool value of zero."

JBaczuk

Posted 2018-08-13T16:19:37.847

Reputation: 6 172

1Non-standard in this context means that such transactions won't be relayed, enter the mempool, or be mined by common software (despite being valid in blocks, if put there by a miner).Pieter Wuille 2018-08-13T17:12:32.883

This is not correct, I'm afraid. The standardness policy consists of various pieces of code, and the most important one is through a verify flag that rejects opcodes/templates intended for future extensions. For mempool acceptable this flag is used, and it will cause script validation for any non-0 witness versionPieter Wuille 2018-08-13T18:37:25.617