BIP: 349 Layer: Consensus (soft fork) Title: OP_INTERNALKEY Author: Brandon Black Jeremy Rubin Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0349 Status: Draft Type: Standards Track Created: 2024-11-14 License: BSD-3-Clause
This BIP describes a new tapscript opcode (OP_INTERNALKEY
) which
pushes the taproot internal key to the stack.
When verifying taproot script path spends having leaf version 0xc0
(as
defined in BIP 342), OP_INTERNALKEY
replaces OP_SUCCESS203
(0xcb).
OP_INTERNALKEY
pushes the 32-byte x-only representation of the taproot
internal key (referred to as p), as defined in BIP 341, to the stack.
When building taproot outputs, especially those secured by an aggregate key
representing more than one signer, the parties may wish to collaborate on
signing with the taproot internal key, but only with additional script
restrictions. In this case, OP_INTERNALKEY
saves 8 vBytes.
In cases where key path spending is not desired, the internal key may be set to a NUMS point whose bytes would otherwise be required in a tapscript. This could be used with any hash locked transaction, for example, to save 8 vBytes.
Note: The internal key must be the X coordinate of a point on the SECP256K1 curve, so any such hash must be checked and modified until it is such an X coordinate. This will typically take approximately 2 attempts.
A reference implementation is provided here:
By constraining the behavior of an OP_SUCCESS opcode, deployment of the BIP
can be done in a backwards compatible, soft-fork manner. If anyone were to
rely on the OP_SUCCESS behavior of OP_SUCCESS203
, OP_INTERNALKEY
would
invalidate their spend.
TBD
TODO
This document is licensed under the 3-clause BSD license.