<oembed><type>rich</type><version>1.0</version><title>ZmnSCPxj [ARCHIVE] wrote</title><author_name>ZmnSCPxj [ARCHIVE] (npub1g5…3ms3l)</author_name><author_url>https://yabu.me/npub1g5zswf6y48f7fy90jf3tlcuwdmjn8znhzaa4vkmtxaeskca8hpss23ms3l</author_url><provider_name>njump</provider_name><provider_url>https://yabu.me</provider_url><html>📅 Original date posted:2018-11-13&#xA;📝 Original message:&#xA;Good morning Rusty,&#xA;&#xA;Someone pointed out to me that `intended_payment_amount` is unnecessary.&#xA;On reflection, this is correct.&#xA;Both intermediate nodes and the payee node need not have `intended_payment_amount`.&#xA;&#xA;Therefore....&#xA;&#xA;&gt; &gt; I propose the below to support Base AMP.&#xA;&gt;&#xA;&gt; I think the complexity outweighs the benefits for the moment. The&#xA;&gt; sender would have to make the onions identical past the merge point (so&#xA;&gt; any one of them could be used), the merge point has to now create a&#xA;&gt; many:1 map for HTLC redemption.&#xA;&gt;&#xA;&gt; For the moment, I think we should stick with:&#xA;&gt;&#xA;&gt; BOLT #4:&#xA;&gt;&#xA;&gt; 1.  type: `per_hop`&#xA;&gt; 2.  data:&#xA;&gt;     -   [`8`:`short_channel_id`]&#xA;&gt;     -   [`8`:`amt_to_forward`]&#xA;&gt;     -   [`4`:`outgoing_cltv_value`]&#xA;&gt;&#xA;&gt; -   -   [`12`:`padding`]&#xA;&gt;&#xA;&gt; -   -   [`1`:`flags`]&#xA;&gt; -   -   [`11`:`padding`]&#xA;&gt;&#xA;&gt;         And define bit 0 of `flags` as `incomplete_payment`. For the moment, it&#xA;&gt;         is only allowed for final nodes, and only if they put it in their BOLT11&#xA;&gt;         field.&#xA;&gt;&#xA;&#xA;We can do something even simpler.&#xA;&#xA;If `amt_to_forward` plus the fees charged by this node is greater than the actual incoming HTLC, this is an AMP attempt.&#xA;No additional flag needs to be added.&#xA;For final payment nodes, if the `amt_to_forward` is greater than the incoming HTLC value, this is an AMP attempt.&#xA;&#xA;The previous node could try to probe this by offering a smaller amount than it was instructed to give, but cannot differentiate between a stall because the payee is waiting for an AMP, or a stall due to some other unrelated error.&#xA;&#xA;---&#xA;&#xA;Of course, an explicit flag is more sensible as it is more explicit.&#xA;&#xA;For myself, I would rather a new `per_hop_type`, but whether to use a separate `per_hop_type` vs a byte in padding is largely a bikeshed issue and either is fine with me.&#xA;A concern is that nothing in our current spec requires that `padding` be all 0, such that reinterpreting byte 0 to be flags could cause interoperability problems.&#xA;So perhaps a new `per_hop_type` which has a 2-byte `flags` (for more future expansion) and a `padding` of 10 bytes which MUST be explicitly specced as &#34;MUST be all 0&#34;.&#xA;&#xA;An explicit flags field would also allow delivery of higher-layer application data in each payment, for whatever purpose a higher-layer application may want.  E.g. bit 1 could mean &#34;the next hop 65 bytes is actually a 32-byte application ID and a 33-byte payload; this flag is valid only if this is the last hop.&#34;&#xA;Another bit can also be used to provide spontaneous payment, so e.g. bit 2 could mean &#34;this hop is the final hop (even if HMAC is nonzero); the HMAC of this hop is really the preimage to claim this payment.&#34;&#xA;&#xA;Regards,&#xA;ZmnSCPxj</html></oembed>