DRAFT: interactive tx construction protocol

Posted by darosior

Jan 30, 2020/10:03 UTC

Antoine proposed a transaction chain construction as a solution to utxos snooping. The proposal involves the first input being signed by A with SIGHASH_SINGLE|SIGHASH_ANYONECANPAY and creating a first transaction txA1. A then creates and signs the funding transaction out of the first output of txA1 called txA2, which is signed with SINGLE|ANYONECANPAY allowing B to add inputs and outputs for its own change. This method requires more setup fees opener-side but avoids gratuitous probing by the accepter.Lisa Neigut shared feedback from the check-in for the dual-funding proposal suggesting simplifying it into smaller, more manageable chunks. The email highlights the biggest piece of the dual-funding protocol update as the move from a single peer constructing a transaction to two participants. The proposal aims to reuse this portion of the protocol for batched closings and splicing.The set of messages involved in the dual-funding proposal includes tx_add_input, tx_add_output, tx_remove_input, tx_remove_output, tx_complete, and tx_sigs with subtypes witness_stack and witness_element. Validity of inputs/outputs is not checked until both peers have sent consecutive tx_complete messages. Inputs must be segwit compatible (PW* or P2SH-PW*) and all output scripts must be standard. Either peer may add or remove inputs and outputs until both peers have successfully exchanged a tx_complete message in succession. In case of a failure to agree on tx_complete, either peer may fail the channel or open protocol.The Lightning Network protocol outlines the process for initiating a channel open with an open_channel2 message, which includes proposing a feerate for the opening transaction. The accepter then signals acceptance of the proposal via accept_channel2. In the case of a Splice, both peers signal opt_splice_ok and one peer initiates the splice, signaling the feerate for the transaction. The initiator sends tx_add_input with the original funding output, tx_add_output with the new post-splice funding output, and any additional tx_add_input/output as needed. The peer does the same and both parties send tx_complete. They then exchange commitment signatures and continue with the protocol. In the close case, both peers signal opt_collaborative_close in their node_announcement. A peer initiates a close by sending a shutdown, negotiates a feerate out of band, and then adds their output for the channel closure via tx_add_input and tx_add_output. The peer responds with tx_add_output, adding their output to the close transaction. If option_upfront_shutdown_script is flagged but no such output with a value at or within a reasonable feerate gap of the peer's funding output is present, then the peer must fail the channel.If any input is flagged as RBF’able, then the transaction is considered eligible for RBF. RBF can be initiated by either party, and serves as an initiation for another round of transaction composition, as outlined above. Each fee_step adds 1/4 (rounded down) to the initial transaction feerate. The sender MUST set fee_step greater than zero and greater than any prior fee_step. If the new fee exceeds the sender's current balance minus reserve after it is applied to the splice transaction, the recipient MUST error. An additional rule will be added to the checks of an RBF transaction that it must include at least one identical, replaceable input as the original transaction.

Link to Raw Post
Bitcoin Logo

TLDR

Join Our Newsletter

We’ll email you summaries of the latest discussions from authoritative bitcoin sources, like bitcoin-dev, lightning-dev, and Delving Bitcoin.

Explore all Products

ChatBTC imageBitcoin searchBitcoin TranscriptsSaving SatoshiBitcoin Transcripts Review
Built with 🧡 by the Bitcoin Dev Project
View our public visitor count

We'd love to hear your feedback on this project?

Give Feedback