Opening this PR for feedback & discussion on the specification for OP_TWEAKADD.
Mailing list post: https://groups.google.com/g/bitcoindev/c/-_geIB25zrg
Opening this PR for feedback & discussion on the specification for OP_TWEAKADD.
Mailing list post: https://groups.google.com/g/bitcoindev/c/-_geIB25zrg
235+This proposal extends the Taproot tweak mechanism (BIP340/341) into script, inspired by prior work on scriptless scripts and key-evolution constructions. There has been various discussion of OP_TWEAKADD over the years, including by Russell O'Connor and Steven Roose.
236+
237+## References
238+
239+- [CATT: Thoughts about an alternative covenant softfork proposal](https://delvingbitcoin.org/t/catt-thoughts-about-an-alternative-covenant-softfork-proposal/125)
240+- [Bitcoindev mailing list discussion](https://gnusha.org/pi/bitcoindev/e98d76f2-6f2c-9c3a-6a31-bccb34578c31@roose.io/)
32+
33+Input (top last):
34+
35+```
36+
37+... \[h32] \[pubkey32] OP\_TWEAKADD -> ... \[pubkey32\_out]
I think these backslashes are unnecessary in the preformatted code. At least they render for me in the preview.
34+
35+```
36+
37+... \[h32] \[pubkey32] OP\_TWEAKADD -> ... \[pubkey32\_out]
38+
39+````
0@@ -0,0 +1,317 @@
1+```
2+BIP: TBD
3+Layer: Consensus (soft fork)
4+Title: OP_TWEAKADD - x-only key tweak addition
5+Author: Jeremy Rubin <jeremy@char.network>
6+Status: Draft
7+Type: Standards Track
8+Created: 2025-08-22
9+License: BSD-3-Clause
24+## Specification
25+
26+### Applicability and opcode number
27+
28+- Context: Only valid in tapscript (witness version 1, leaf version 0xc0). In legacy or segwit v0 script, `OP_TWEAKADD` is disabled and causes script failure.
29+- Opcode: OP_TWEAKADD (0xBE, or TBD, any unused OP_SUCCESSx, preferably one which might never be restored in the future).
E.g., it’s desirable to not use 0x7f because that’s OP_SUBSTR and if we ever did a soft fork like that, it’s simpler to not change those opcodes.
from bip-347:
We specifically choose to use OP_SUCCESS126 rather than another OP_SUCCESSx as OP_SUCCESS126 uses the same opcode value (126 in decimal and 0x7e in hexadecimal) that was used for OP_CAT prior to it being disabled in Bitcoin. This removes a potential source of confusion that would exist if we had a opcode value different from the one used in the original OP_CAT opcode.