bitcoin-dev
Schnorr and taproot (etc) upgrade
Posted on: December 18, 2018 04:58 UTC
In a discussion between Russell O'Connor and Johnson Lau, it was suggested that if CHECKSIG* and CHECKMULTISIG* were disabled in favor of CHECKDLS, CHECKDLSVERIFY, and CHECKDLSADD with different names and opcodes, copying a script template opcode-for-opcode from v0 to v1 would always fail.
However, with taproot, this may not result in a loss of money even if the script is impossible to ever satisfy, since recovery may be possible via the direct signature path. Johnson Lau also suggested popping the stack after OP_CLTV and OP_CSV, which would save 1 WU per OP_CSV if implemented, as nearly every instance of OP_CSV is followed by an OP_DROP. While these suggestions are considered bikeshedding, it was noted that having precisely the same semantics for identical opcodes in v0 and v1.0 scripts would make things easier for everyone. However, constructions such as "CLTV CHECKSIGVERIFY" that avoid the DROP and work when a true value is expected on the stack will not work if an empty stack is required at the end.