I understand the motivation for SIGHASH_NOINPUT - it would help with offchain payment channels. It was proposed already in the Lightning paper but Eltoo will effectively work just with something like that. But what exactly is the ANYPREVOUT BIP about? It seems like some extension to be used with taproot scripts. But I don't seem to get why you need a special public key type and chaperone signatures. Can anyone explain this part in plain english please?
-
I guess this is some sort of additional opt-in as it could be dangerous to not commit to at least one previous tx, preventing replay of known signature. But what I am struggling with is why isn't the special sighash flag enough for this - if you specify it you probably know what you are doing, no? Probably I'd also need a bit of explanation on taproot scripts - I believe taproot is meant so that unless the special condition is used everything looks like a normal P2(W)PKH spend. How does different public key fit into this?– fictionCommented Dec 26, 2019 at 10:40
-
Perhaps just an update, there is another similar solution Inherited IDs github.com/JohnLaw2/btc-iids/blob/main/iids13.pdf– fictionCommented Sep 24, 2021 at 12:20
1 Answer
The differences between SIGHASH_NOINPUT (BIP 118) and SIGHASH_ANYPREVOUT (proposed update to BIP 118) were discussed at the Sydney Socratic Seminar in July 2020.
There is not a real conflict between the proposals apart from the naming. The NOINPUT original proposal was we want to have this functionality and we’ll do it when the next version of SegWit comes along. The next version of SegWit is hopefully Taproot. The original way it was proposed meant that eltoo would’ve had to have been a CHECKMULTISIG script path rather than key aggregation Schnorr key path potentially. It is not technically any worse than what the original concept was by having to go through the script path. It is just the next progression now that we have some idea what the next version of SegWit should look like.
-
Clarification: SIGHASH_NOINPUT effectively became SIGHASH_ANYPREVOUT. The change was a change in a name to reflect that certain parts of the input were committed still being committed to [nSequence], just not the signature. Commented Feb 21, 2023 at 19:11