diff --git a/bip-csfs.mediawiki b/bip-csfs.mediawiki new file mode 100644 index 0000000000..941e99e9e6 --- /dev/null +++ b/bip-csfs.mediawiki @@ -0,0 +1,90 @@ +
+  BIP: TBD
+  Layer: Consensus (soft fork)
+  Title: CHECKSIGFROMSTACK
+  Author: Brandon Black 
+  Comments-Summary: No comments yet.
+  Status: Draft
+  Type: Standards Track
+  Created: 2023-12-22
+  License: PD
+
+ +==Abstract== + +This BIP describes two new opcode for the purpose of checking cryptographic +signatures in bitcoin scripts against data other than bitcoin transactions. + +==Specification== + +We propose replacing OP_NOP5 in bitcoin script with +'''OP_CHECKSIGFROMSTACKVERIFY'''. When verifying taproot script spends having +leaf version 0xc0 (as defined in BIP342), we propose '''OP_CHECKSIGFROMSTACK''' +to replace '''OP_SUCCESS188''' (0xbc). + +'''OP_CHECKSIGFROMSTACK''' and '''OP_CHECKSIGFROMSTACKVERIFY''' have identical +semantics to '''OP_CHECKSIG''' and '''OP_CHECKSIGVERIFY''' respectively, +except: + +* On success the arguments to '''OP_CHECKSIGFROMSTACKVERIFY''' are left unchanged on the stack. +* They read (or pop, respectively) 3 arguments (rather than 2) from the stack in the following order: ''' ''' +* Signatures must not have a sighash byte appended +* The message being verified is '''''' +** '''''' may be any length. +** For ECDSA signature verification '''''' is SHA256 hashed before being used as the message. + +==Resource Limits== + +These opcodes are treated identically to other signature checking opcodes and +count against the various sigops limits in their respective script types. + +==Motivation== + +===LN Symmetry=== + +When combined with '''OP_CHECKTEMPLATEVERIFY''' (BIP119/CTV), +'''OP_CHECKSIGFROMSTACK''' (CSFS) can be used in Lightning Symmetry channels. +The construction '''OP_CHECKTEMPLATEVERIFY OP_CHECKSIGFROMSTACK''' is +logically equivalent to ''' OP_CHECKSIG''' and a signature over +'''SIGHASH_ALL|SIGHASH_ANYPREVOUTANYSCRIPT'''. The '''OP_CHECKSIGFROMSTACK''' +construction is 8 vBytes larger. + +===Delegation=== + +Using a script like: +'''OP_DUP OP_CHECKSIGFROMSTACK OP_DROP OP_CHECKSIG''' +A script can delegate signing to another key. + +==Reference Implementation== + +A reference implementation is provided in provided here: + +https://github.com/brandonblack/bitcoin/commit/fd57785b99442df092488135752112586597b756 + +==Backward Compatibility== + +By constraining the behavior of an OP_SUCCESS opcode and an OP_NOP 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_SUCCESS188, +OP_CHECKSIGFROMSTACk would invalidate their spend. + +==Deployment== + +TBD + +==Credits== + +Reference implementation was made with reference to the implementation in +Elements and started by moonsettler. + +==References== + +[https://github.com/bitcoin/bips/blob/master/bip-0119.mediawiki BIP 119] CHECKTEMPLATEVERIFY + +[https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki BIP 341] Taproot + +[https://github.com/bitcoin/bips/blob/master/bip-0342.mediawiki BIP 342] Tapscript + +==Copyright== + +This document is placed in the public domain.