TAPLEAF_UPDATE_VERIFY covenant opcode



Summary:

The bitcoin-dev mailing list has been discussing the MERKLESUB proposal and how it compares to TLUV. One member notes that while MERKLESUB gains the ability to refer to non-corresponding outputs, it lacks certain abilities such as adding branches, preserving current scripts, or removing parent paths. Another member raises concerns about violating covenants by spending to an unencumbered witness v2 output. A proposed solution is to extend the signature digest algorithm to encompass the segwit version of the spending transaction outputs. However, this approach introduces a new covenant approach, which could be addressed by introducing a new opcode instead.The conversation then shifts to discussing the output position parameter and how it can be used to merge/split vault/pool balances. Various scenarios are discussed, including pre-negotiated economic equilibrium and emergency paths. It is suggested that without relying on key path interactivity, it may not be possible to inherit emergency paths for both forks. Additionally, any overhead cost in using a script should be kept in mind.The economic accessibility of off-chain contract/payment channels is also discussed and how it is affected by the size of tapscripts. The cost of a single byte of witness data can make script path spends infeasible, and fee-bumping reserves increase with bigger tapscripts, making such systems less economical. The introduction of a new tapscript version 0x20 for parity bit of spent internal pubkey is proposed, but changing the TapTweak calculation is a hard fork.The use of IN_OUT_AMOUNT opcode to specify authorized range for hot wallets to withdraw up to X is also discussed. Leverage of sighash allows updating a withdraw policy in real-time but seems like a very heavy weight construct where a more general approach would probably be better. Finally, a strategy to inherit removal of one-time path from merkle tree and tweak by 3 months all the usual withdraw path is discussed via S1 = Merkle( U, (D, N) ), S2 = Merkle( U, W ) and S3 = Merkle( N ).


Updated on: 2023-05-21T03:51:46.451486+00:00