Good morning shesek, > On Sat, May 7, 2022 at 5:08 PM ZmnSCPxj via bitcoin-dev > <bitcoin-dev@lists.linuxfoundation.org> wrote: > > * Even ***with*** `OP_CAT`, the following will enable non-recursive > > covenants without enabling recursive covenants: > > * `OP_CTV`, ... > > * With `OP_CAT`, the following would enable recursive covenants: > > * `OP_CHECKSIGFROMSTACK`, ... > > Why does CTV+CAT not enable recursive covenants while CSFS+CAT does? > > CTV+CAT lets you similarly assert against the outputs and verify that they > match some dynamically constructed script. > > Is it because CTV does not let you have a verified copy of the input's > prevout scriptPubKey on the stack [0], while with OP_CSFS you can because the > signature hash covers it? > > But you don't actually need this for recursion. Instead of having the user > supply the script in the witness stack and verifying it against the input to > obtain the quine, the script can simply contain a copy of itself as an > initial push (minus this push). You can then reconstruct the full script > quine using OP_CAT, as a PUSH(<script>) followed by the literal <script>.
<OP_PUSH_length-of-script> OP_SWAP OP_DUP OP_CAT OP_CAT <rest of script...> Ha, yes, looks like you are correct here. `OP_CAT` makes *all* covenant opcodes recursive, because you can always quine using `OP_CAT`. By itself it does not make recursive covenants, but with probably any opcode it would. Looks like `OP_CAT` is not getting enabled until after we are reasonably sure that recursive covenants are not really unsafe. Regards, ZmnSCPxj _______________________________________________ bitcoin-dev mailing list bitcoin-dev@lists.linuxfoundation.org https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev