<oembed><type>rich</type><version>1.0</version><title>Antoine Riard [ARCHIVE] wrote</title><author_name>Antoine Riard [ARCHIVE] (npub1vj…4x8dd)</author_name><author_url>https://yabu.me/npub1vjzmc45k8dgujppapp2ue20h3l9apnsntgv4c0ukncvv549q64gsz4x8dd</author_url><provider_name>njump</provider_name><provider_url>https://yabu.me</provider_url><html>📅 Original date posted:2020-01-30&#xA;📝 Original message:&#xA;&gt; The funding transaction sig would actually fail verification if tip&#xA;differs between funder and fundee&#xA;&#xA;Yes that&#39;s the reason I wrote the initiator can just&#xA;announce its own and receiver use it to sign the funding tx,&#xA;even if receiver tip is backward. Funding tx won&#39;t propagate&#xA;from receiver mempool but that&#39;s fine if it does from the initiator&#xA;one.&#xA;&#xA;Or are you talking about the commitment tx (different issue and there is&#xA;broader privacy leaks there) ?&#xA;&#xA;&gt; Darosior ( i&#39;ll stick with my pseudo, first names definitely don&#39;t have&#xA;enough entropy :-) )&#xA;&#xA;Ahaha yeah this pseudo-random-name-generator is definitely not trustworthy&#xA;:p&#xA;&#xA;&#xA;Le jeu. 30 janv. 2020 à 13:19, darosior &lt;darosior at protonmail.com&gt; a écrit :&#xA;&#xA;&gt; Sorry I wasn&#39;t clear enough in the `(cdecker)` paragraph.&#xA;&gt;&#xA;&gt;&#xA;&gt; The funding transaction sig would actually fail verification if tip&#xA;&gt; differs between funder and fundee.&#xA;&gt;&#xA;&gt;&#xA;&gt; Darosior ( i&#39;ll stick with my pseudo, first names definitely don&#39;t have&#xA;&gt; enough entropy :-) )&#xA;&gt; -------- Original Message --------&#xA;&gt; On Jan 30, 2020, 19:09, Antoine Riard &lt; antoine.riard at gmail.com&gt; wrote:&#xA;&gt;&#xA;&gt;&#xA;&gt; Hey Darosior,&#xA;&gt;&#xA;&gt; You don&#39;t need a strict synchronization between both peers,&#xA;&gt; just let nLocktime picked up by initiator and announce it at&#xA;&gt; same time than feerate or at `tx_complete`. Worst-case,&#xA;&gt; a slow-block-processing receiver may not be able to get&#xA;&gt; the transaction accepted by its local mempool, but IMO that&#39;s&#xA;&gt; fine if at least the initiator is able to do so. We are requiring peers&#xA;&gt; to be weakly in sync before operating channel anyway (`funding_locked`&#xA;&gt; exchange).&#xA;&gt;&#xA;&gt; Funding_tx can already be drop from mempool for others&#xA;&gt; reasons like mempool shrinks or expiry so broadcaster&#xA;&gt; should always be ready to re-send it or bump feerate.&#xA;&gt;&#xA;&gt; Or are you describing another issue ?&#xA;&gt;&#xA;&gt; Le jeu. 30 janv. 2020 à 04:06, darosior &lt;darosior at protonmail.com&gt; a&#xA;&gt; écrit :&#xA;&gt;&#xA;&gt;&gt; Hi Antoine and all,&#xA;&gt;&gt;&#xA;&gt;&gt;&#xA;&gt;&gt; About nLockTime fun thing is Lisa, Cdecker and I had this conversation to&#xA;&gt;&gt; integrate it to C-lightning just yesterday.&#xA;&gt;&gt;&#xA;&gt;&gt;&#xA;&gt;&gt; Unfortunately you need to add a &#34;My tip is xxxx&#34; to the openchannel msg,&#xA;&gt;&gt; otherwise if you set nLockTime to tip. (cdecker)&#xA;&gt;&gt;&#xA;&gt;&gt;&#xA;&gt;&gt; Moreover in case of reorg the funding tx (now non-final) would be dropped&#xA;&gt;&gt; from mempool ? But you could set nLockTime to, say, tip - 6. (niftynei)&#xA;&gt;&gt;&#xA;&gt;&gt;&#xA;&gt;&gt; Antoine&#xA;&gt;&gt;&#xA;&gt;&gt;&#xA;&gt;&gt; -------- Original Message --------&#xA;&gt;&gt; On Jan 30, 2020, 01:21, Antoine Riard &lt; antoine.riard at gmail.com&gt; wrote:&#xA;&gt;&gt;&#xA;&gt;&gt;&#xA;&gt;&gt; Hey thanks for this proposal!&#xA;&gt;&gt;&#xA;&gt;&gt; 2 high-level questions:&#xA;&gt;&gt;&#xA;&gt;&gt; What about multi-party tx construction ? By multi-party, let&#39;s define&#xA;&gt;&gt; Alice initiate a tx construction to Bob and then Bob announce a&#xA;&gt;&gt; construction to Caroll and &#34;bridge&#34; all inputs/outputs&#xA;&gt;&gt; additions/substractions&#xA;&gt;&gt; in both directions. I think the current proposal hold, if you are a bit&#xA;&gt;&gt; more&#xA;&gt;&gt; tolerant and bridge peer don&#39;t send a tx_complete before receiving ones&#xA;&gt;&gt; from all its peers.&#xA;&gt;&gt;&#xA;&gt;&gt; What about transactions format ? I think we should coordinate with&#xA;&gt;&gt; Coinjoin&#xA;&gt;&gt; people to converge to a common one to avoid leaking protocol usage when&#xA;&gt;&gt; we can hinder under Taproot. Like setting the nLocktime or sorting inputs&#xA;&gt;&gt; in some protocol-specific fashion. Ideally we should have a BIP for format&#xA;&gt;&gt; but every layer 2 protocols its own set of messages concerning the&#xA;&gt;&gt; construction.&#xA;&gt;&gt;&#xA;&gt;&gt; &gt; nLocktime is always set to 0x000000&#xA;&gt;&gt; Maybe we can implement anti-fee sniping and mask among wallet core&#xA;&gt;&gt; txn set:&#xA;&gt;&gt; https://github.com/bitcoin/bitcoin/blob/aabec94541e23a67a9f30dc2c80dab3383a01737/src/wallet/wallet.cpp#L2519&#xA;&gt;&gt; ?&#xA;&gt;&gt;&#xA;&gt;&gt; &gt; In the case of a close, a failed collaborative close would result in an&#xA;&gt;&gt; error and a uninlateral close&#34;&#xA;&gt;&gt; Or can we do first a mutual closing tx, hold tx broadcast for a bit if&#xA;&gt;&gt; &#34;opt_dual_fund&#34;&#xA;&gt;&gt; is signaled to see if a tx_construction + add_funding_input for the&#xA;&gt;&gt; channel is received&#xA;&gt;&gt; soon ? At least that would be a dual opt-in to know than one party can&#xA;&gt;&gt; submit a funding-outpoint&#xA;&gt;&gt; as part of a composed tx ?&#xA;&gt;&gt;&#xA;&gt;&gt; Antoine&#xA;&gt;&gt;&#xA;&gt;&gt; Le lun. 27 janv. 2020 à 20:51, lisa neigut &lt;niftynei at gmail.com&gt; a écrit :&#xA;&gt;&gt;&#xA;&gt;&gt;&gt; Some of the feedback I received from the check-in for the dual-funding&#xA;&gt;&gt;&gt; proposal this past Monday was along the lines that we look at simplifying&#xA;&gt;&gt;&gt; for breaking it into smaller, more manageable chunks.&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; The biggest piece of the dual-funding protocol update is definitely the&#xA;&gt;&gt;&gt; move from a single peer constructing a transaction to two participants.&#xA;&gt;&gt;&gt; We&#39;re also going to likely want to reuse this portion of the protocol&#xA;&gt;&gt;&gt; for batched closings and splicing. To that extent, it seemed useful to&#xA;&gt;&gt;&gt; highlight it in a separate email.&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; This is a change from the existing proposal in the dual-funding PR #524&#xA;&gt;&gt;&gt; &lt;https://github.com/lightningnetwork/lightning-rfc/pull/524&gt; -- it&#xA;&gt;&gt;&gt; allows for the removal of inputs and outputs.&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; The set of messages are as follows.&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; Note that the &#39;initiation&#39; of this protocol will be different depending&#xA;&gt;&gt;&gt; on the case of the transaction (open, close or splice):&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; 1. type:   440 `tx_add_input`&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; 2. data:&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;     * [`32*byte`:`channel_identifier`]&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;     * [`u64`:`sats`]&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;     * [`sha256`:`prevtx_txid`]&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;     * [`u32`:`prevtx_vout`]&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;     * [`u16`:`prevtx_scriptpubkey_len`]&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;     * [`prevtx_scriptpubkey_len*byte`:`prevtx_scriptpubkey`]&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;     * [`u16`:`max_witness_len`]&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;     * [`u16`:`scriptlen`]&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;     * [`scriptlen*byte`:`script`]&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;     * [`byte`:`signal_rbf`]&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; 1. type: 442 `tx_add_output`&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; 2. data:&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;     * [`32*byte`:`channel_identifier`]&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;     * [`u64`:`sats`]&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;     * [`u16`:`scriptlen`]&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;     * [`scriptlen*byte`:`script`]&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; 1. type: 444 `tx_remove_input`&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; 2. data:&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;     * [`32*byte`:`channel_identifier`]&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;     * [`sha256`:`prevtx_txid`]&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;     * [`u32`:`prevtx_vout`]&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; 1. type: 446 `tx_remove_output`&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; 2. data:&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;     * [`32*byte`:`channel_identifier`]&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;     * [`u64`:`sats`]&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;     * [`u16`:`scriptlen`]&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;     * [`scriptlen*byte`:`script`]&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; 1. type: 448 `tx_complete`&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; 2. data:&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;     * [`32*byte`:`channel_identifier`]&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;     * [`u16`:`num_inputs`]&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;     * [`u16`:`num_outputs`]&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; 1. type:  448 `tx_sigs`&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; 2. data:&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;     * [`channel_id`:`channel_identifier`]&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;     * [`u16`:`num_witnesses`]&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;     * [`num_witnesses*witness_stack`:`witness_stack`]&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; 1. subtype: `witness_stack`&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; 2. data:&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;     * [`sha256`:`prevtx_txid`]&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;     * [`u32`:`prevtx_vout`]&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;     * [`u16`:`num_input_witness`]&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;     * [`num_input_witness*witness_element`:`witness_element`]&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; 1. subtype: `witness_element`&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; 2. data:&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;     * [`u16`:`len`]&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;     * [`len*byte`:`witness`]&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; ## General Notes&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; - Validity of inputs/outputs is not checked until both peers have sent&#xA;&gt;&gt;&gt; consecutive `tx_complete`  messages.&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; - Duplicate inputs or outputs is a protocol error.&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; - Feerate is set by the initiator, or in the case of a closing&#xA;&gt;&gt;&gt; transaction, negotiated before the transaction construction is initiated.&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; - Every peer pays fees for the inputs + outputs they contribute, plus&#xA;&gt;&gt;&gt; enough to cover the maximum estimate of their witnesses. Overpayment of&#xA;&gt;&gt;&gt; fees is permissible.&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; - Initiator is responsible for contributing the output/input in&#xA;&gt;&gt;&gt; question, i.e. the&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;   funding output in the case of an opening, or the funding input in the&#xA;&gt;&gt;&gt; case of a close.&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;   (This means that the opener will pay for the opening output). In the&#xA;&gt;&gt;&gt; case of a splice,&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;   the initiator of the splice pays for the funding tx&#39;s inclusion as an&#xA;&gt;&gt;&gt; input and the&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;   new &#39;funding tx&#39; output.&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; - Any contributor may signal that their input is RBF&#39;able. The nSequence&#xA;&gt;&gt;&gt; for this input should be set to 0xFEFF FFFF, 0xFFFFFFFF otherwise.&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; - The initiating peer is understood to be paying the fee for the shared&#xA;&gt;&gt;&gt; transaction fields (nVersion [4], segwit marker + flag [2], input + output&#xA;&gt;&gt;&gt; counts [2-18], witness count [1-9], nLocktime [4]; total [13-40bytes])&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; - Inputs MUST be segwit compatible (PW* or P2SH-PW*)&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; - All output scripts must be standard&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; - nLocktime is always set to 0x00000000.&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; - The `num_inputs` and `num_outputs` in `tx_complete` is a count of that&#xA;&gt;&gt;&gt; peer’s final input and output contributions, net any removals.&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; - Either peer may add or remove inputs and outputs until both peers have&#xA;&gt;&gt;&gt; successfully&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;   exchanged a `tx_complete` message in succession.&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; - Either peer may only add or remove their own input or output.&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; - In the case that a `tx_complete` agreement cannot be reached, either&#xA;&gt;&gt;&gt; peer may&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;   fail the channel or open protocol (whatever is reasonable for the&#xA;&gt;&gt;&gt; particular case)&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;   - In the case of a splice, this would be a soft error (channel returns&#xA;&gt;&gt;&gt; to normal operation until&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;     otherwise failed or closed.)&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;   - In the case of an open, this would be a failure to open the channel.&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;   - In the case of a close, a failed collaborative close would result in&#xA;&gt;&gt;&gt; an error and a unilateral close.&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; ### Considering the Simple Open case (2 parties)&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; - Both peers signal `opt_dual_fund`&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; - Opener initiates a channel open with `open_channel2` message,&#xA;&gt;&gt;&gt; indicating the feerate for the opening transaction&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; - Accepter signals acceptance of channel open as proposed, including&#xA;&gt;&gt;&gt; proposed feerate, via `accept_channel2`&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; - Opener sends `tx_add_output`, with the funding output for the sum of&#xA;&gt;&gt;&gt; both peer’s funding_amount&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; - Opener sends `tx_add_input` for each input the wish to add to the&#xA;&gt;&gt;&gt; funding transaction&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; - Opener sends `tx_add_output` for their change&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; - Opener sends `tx_complete`&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; - Accepter sends `tx_add_input` for each input they wish to add to the&#xA;&gt;&gt;&gt; funding transaction&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; - Accepter sends `tx_add_output` for their change.&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; - Accepter sends `tx_complete`&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; - Opener sends `tx_complete`&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; - Opener and accepter exchange commitment signatures; etc.&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; ### Considering the Splice case:&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; - Both peers signal `opt_splice_ok`&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; - One peer initiates a splice, also signaling the feerate for the&#xA;&gt;&gt;&gt; transaction. Exact protocol unspecified herein.&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; - Initiator sends `tx_add_input` with the original funding output&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; - Initiator sends `tx_add_output` with the new, post-splice funding&#xA;&gt;&gt;&gt; output&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; - Initiator sends `tx_add_input/output` as needed to add all desired&#xA;&gt;&gt;&gt; inputs + outputs&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; - Initiator sends `tx_complete`&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; - Peer sends `tx_add_input/output` as needed to add all desired inputs +&#xA;&gt;&gt;&gt; outputs&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; - Initiator sends `tx_complete`&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; - Peer sends `tx_complete`&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; - Initiator + peer exchange commitment signatures, etc.&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; ### Considering the Close case:&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; - Both peers signal `opt_collaborative_close` in their&#xA;&gt;&gt;&gt; `node_announcement`.&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; - A peer initiates a close sending a `shutdown`, as per usual.&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; - A feerate is negotiated. Out of band for this particular portion of&#xA;&gt;&gt;&gt; the protocol.&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; -The closing initiator (peer which first sent `shutdown`), sends&#xA;&gt;&gt;&gt; `tx_add_input` to spend the funding output and `tx_add_output` to add their&#xA;&gt;&gt;&gt; output for the channel closure.&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; - The peer responds with `tx_add_output`, adding their output to the&#xA;&gt;&gt;&gt; close transaction.&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; - If `option_upfront_shutdown_script` is flagged but no such output with&#xA;&gt;&gt;&gt; a value at or within a reasonable feerate gap of the peer&#39;s funding output&#xA;&gt;&gt;&gt; is present, then the peer must fail the channel.&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; ## Updating a collaborative transaction with RBF:&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; - If any input is flagged as RBF’able, then the transaction is&#xA;&gt;&gt;&gt; considered eligible for RBF&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; - RBF can be initiated by either party, and serves as an initiation for&#xA;&gt;&gt;&gt; another round of transaction composition, as outlined above.&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; - Note that this section has been cribbed and re-purposed from the&#xA;&gt;&gt;&gt; original RBF proposal for splicing, see&#xA;&gt;&gt;&gt; https://lists.linuxfoundation.org/pipermail/lightning-dev/2018-November/001621.html&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; 1. type: 45 (`init_rbf`) (`option_collaborative_rbf`)&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; 2. data:&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;    * [`32`:`channel_id`]&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;    * [`4`:`fee_step`]&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; Each `fee_step` adds 1/4 (rounded down) to the initial&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; transaction feerate. eg. if the initial feerate was 512 satoshis per&#xA;&gt;&gt;&gt; kiloweight, `fee_step` 1&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; is  512 + 512 / 4 = 640, `fee_step` 2 is 640 + 640 / 4 = 800.&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; The sender:&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;   - MUST set `fee_step` greater than zero and greater than any prior&#xA;&gt;&gt;&gt; `fee_step`.&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; The recipient:&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;   - if the new fee exceeds the sender&#39;s current balance minus reserve&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;     after it is applied to the splice transaction:&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;     - MUST error.&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; NOTES:&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; 1. 1/4 is a reasonable minimal RBF, but as each one requires more&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;    tracking by the recipient, serves to limit the number you can create.&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; 2. Rule 4 of BIP125 requires a feerate increase to at least surpass the&#xA;&gt;&gt;&gt; minimum transaction relay setting. Ratcheting by 25% should satisfy this&#xA;&gt;&gt;&gt; requirement&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; 3. An additional rule will be added to the checks of an RBF transaction&#xA;&gt;&gt;&gt; that it must include at least one identical, replaceable input as the&#xA;&gt;&gt;&gt; original transaction.&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; _______________________________________________&#xA;&gt;&gt;&gt; Lightning-dev mailing list&#xA;&gt;&gt;&gt; Lightning-dev at lists.linuxfoundation.org&#xA;&gt;&gt;&gt; https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&#xA;-------------- next part --------------&#xA;An HTML attachment was scrubbed...&#xA;URL: &lt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20200130/98cbf857/attachment-0001.html&gt;</html></oembed>