bitcoin-dev

Continuing the discussion about noinput / anyprevout

Continuing the discussion about noinput / anyprevout

Original Postby ZmnSCPxj

Posted on: October 1, 2019 15:42 UTC

In a Bitcoin development mailing list, ZmnSCPxj proposed the creation of a new opcode, OP_CHECKSIG_WITHOUT_INPUT, which would ignore any SIGHASH flags present on a signature.

In response to this proposal, another member suggested that creating a new tapscript public key type might be a more effective solution. This would involve encoding the new code in the following manner: 3301AC [CHECKSIG of public key type 0x01] or 32B3 [CHECKSIG_WITHOUT_INPUT (replacing NOP4) of key]. Under tapscript v0, it is possible to reuse the internal Taproot pubkey by giving OP_1 as the public key to OP_CHECKSIG. The proposal suggests having a similar mechanism for copying the internal Taproot pubkey while also enabling new SIGHASH flags for a particular script only. This would allow update transactions to use MuSig(A,B,C) for signing along the "update" path, with unique "state" keys, and cooperative closes would sign using P + h(P | MAST( OPCHECKSIG)) * G, without revealing that it was a Decker-Russell-Osuntokun output.