What exactly is bound in CSFS, IK+CSFS, and CHECKSIG?

Follow-up after running some APO experiments:

Adding SIGHASH_ANYPREVOUT to the table:

Pattern Binding target Replayable?
OP_CHECKSIGFROMSTACK Message (stack-supplied) Yes
OP_INTERNALKEY + OP_CHECKSIGFROMSTACK Identity (internal key) Yes, same key
OP_CHECKSIG Transaction sighash No
SIGHASH_ANYPREVOUT (BIP118) Transaction sighash minus outpoint Yes, same script + amount

APO seems to sit somewhere between CHECKSIG and CSFS in terms of what gets bound. It removes the outpoint commitment but keeps the rest — amount, script, outputs. So the same signature can be reused across different prevouts, as long as those match. Not “unbound,” just selectively unbound on the input side.

One thing this made concrete for me: APO + CTV split the commitment problem across two surfaces — APO relaxes the input side (no outpoint), CTV fixes the output side (template). Neither is sufficient on its own, but together they form a workable constraint system.

This came up directly while building a Braidpool-style covenant demo — APO handles Eltoo-style RCA updates and CTV commits the UHPO payout template per round.

Maybe the question is not just what is bound, but what is fixed vs what is left open — and on which side. The table above is one attempt to make that more explicit.

See the construction here::https://delvingbitcoin.org/t/challenge-covenants-for-braidpool/1370/2

1 Like