<oembed><type>rich</type><version>1.0</version><author_name>npub1g5zswf6y48f7fy90jf3tlcuwdmjn8znhzaa4vkmtxaeskca8hpss23ms3l</author_name><author_url>https://nostr.ae/npub1g5zswf6y48f7fy90jf3tlcuwdmjn8znhzaa4vkmtxaeskca8hpss23ms3l</author_url><provider_name>njump</provider_name><provider_url>https://nostr.ae</provider_url><html>📅 Original date posted:2023-01-03&#xA;🗒️ Summary of this message: A new protocol called swap-in-potentiam allows for immediate transfer of onchain funds to Lightning Network, reducing the time required for confirmation.&#xA;📝 Original message:&#xA;Subject: Swap-in-Potentiam: Moving Onchain Funds &#34;Instantly&#34; To Lightning&#xA;&#xA;by Jesse Posner, ZmnSCPxj&#xA;&#xA;Introduction&#xA;============&#xA;&#xA;Moving funds from an onchain-only address to Lightning Network is slow,&#xA;especially if you desire trust-minimization (which removes solutions&#xA;relying on 0-conf).&#xA;&#xA;Basically, to reduce trust requirements in all onchain transactions,&#xA;onchain receivers *MUST* ensure confirmation of the onchain transaction&#xA;that creates their UTXO.&#xA;In practice, the minimum should be at least 3 blocks, since reorgs of&#xA;up to 2 blocks are common occurences, but even 1 confirmation can&#xA;take an inordinately long time in the real world due to the random&#xA;nature of mining.&#xA;&#xA;This is particularly acute for mobile phone use-cases.&#xA;As mobile phones run on a battery, mobile phone OSs often greatly&#xA;restrict CPU and other resource consumption when an app is not&#xA;currently open by the user.&#xA;&#xA;Now consider this user story, for a wallet app that supports both&#xA;Bitcoin blockchain and Lightning Network operations:&#xA;&#xA;* The user wants to be paid over the Bitcoin blockchain.&#xA;* The user gets an address from their wallet and provides it to&#xA;  some other party to receive their payment.&#xA;* The user closes their wallet app, which causes the mobile phone&#xA;  OS to kill all its threads.&#xA;* The other party sends their payment over blockchain while the&#xA;  user is asleep.&#xA;* The blockchain transaction confirms and time passes.&#xA;* The user wakes up and checks their favorite blockchain explorer,&#xA;  and sees they received funds on their wallet address.&#xA;* The user opens their wallet app and decides they need a coffee,&#xA;  so they buy coffee over Lightning.&#xA;&#xA;For current solutions to move funds from the blockchain layer to&#xA;Lightning, however, the above user story would need to complete&#xA;over a long time, possibly measurable in dozens of minutes or&#xA;even hours in the worst case, due to the need for confirmation:&#xA;&#xA;* Channel open: Requires confirmation, many nodes require 6 or&#xA;  more confirmations.&#xA;* Submarine swap/peerswap: Requires confirmation before the swap&#xA;  service will send out the HTLC on Lightning.&#xA;* Splice-in: Channel remains operational, but until the splice&#xA;  transaction confirms, the channel operates in &#34;dual mode&#34;&#xA;  where both pre-splice and post-splice state is valid, and&#xA;  that means only the lower amount of the pre-splice and&#xA;  post-splice can be used in the mean time.&#xA;  For splice-in, the pre-splice amount will be lower, thus&#xA;  the amount being spliced in will not be credited until&#xA;  the splice transaction is confirmed.&#xA;&#xA;In this writeup, we present a novel protocol, swap-in-potentiam,&#xA;that can be used for immediate transfer from the blockchain&#xA;layer to the Lightning layer, in the above user story.&#xA;&#xA;Advantages And Limitations&#xA;--------------------------&#xA;&#xA;To whet your appetite, here are the advantages:&#xA;&#xA;* Immediate transfer of already-confirmed-received onchain&#xA;  funds to Lightning.&#xA;* Onchain funds can also be transferred to another onchain&#xA;  address (subject to normal onchain confirmation rules).&#xA;  * This can be &#34;immediate&#34; if sending to a receiver that&#xA;    accepts the risk of 0-conf onchain transactions.&#xA;* Minimized trust requirement.&#xA;&#xA;The disadvantages, to help convince you that yes, this is&#xA;technology and not magic beans (and to not oversell this&#xA;tech, Bitcoin media reporting often tend to oversell&#xA;new technologies because the disadvantages are often&#xA;hidden away behind technical minutae):&#xA;&#xA;* Requires a cooperating LSP.&#xA;  If LSP is down or refuses to cooperate, onchain funds&#xA;  are locked for some time.&#xA;  This has a timeout (so if the LSP never comes online&#xA;  again, you just wait out the timeout) and the timeout&#xA;  starts from when the receiving UTXO is confirmed in a&#xA;  blocks, so it will not cause loss of funds, only loss&#xA;  of opportunity (i.e. &#34;involuntary HODLing&#34;).&#xA;* If you have multiple LSPs, when you generate an address&#xA;  you *have to* select one of them at that point, you&#xA;  *cannot* commit to multiple LSPs and select one of them&#xA;  later when your phone wakes up again.&#xA;  This exacerbates the above disadvantage, since you have&#xA;  to select one of your LSPs and hope that when your&#xA;  phone wakes up the LSP you selected is also up and&#xA;  cooperative.&#xA;* The onchain-received funds have to be confirmed first,&#xA;  otherwise we still need to wait for confirmation of the&#xA;  onchain-received funds.&#xA;  This is generally true for many blockchain-only wallets&#xA;  anyway and is thus not a worsening, but is also not an&#xA;  improvement.&#xA;* If the timeout is too near, actions must be performed&#xA;  onchain that require confirmation.&#xA;&#xA;Swap-in-Potentiam&#xA;=================&#xA;&#xA;All onchain fund movements, as noted, require confirmation.&#xA;These include onchain fund movements to the Lightning network.&#xA;&#xA;If the onchain address that the wallet provides was controlled&#xA;solely by that wallet, then any action that requires cooperation&#xA;with a Lightning Network participant --- channel open, swap, or&#xA;splice --- would require an onchain transaction that commits to&#xA;that specific Lightning Network participant.&#xA;Only when the new onchain transaction is confirmed, can that&#xA;Lightning participant rely on the transaction output without&#xA;having to trust the initiator.&#xA;&#xA;&gt;From there, we can consider: what if the wallet provides an&#xA;address that *already* commits to that specific Lightning Network&#xA;participant?&#xA;&#xA;If so, then the &#34;timer for confirmation&#34; starts as soon as&#xA;the wallet receives on the blockchain, not as soon as the wallet&#xA;decides to move funds from blockchain to Lightning.&#xA;&#xA;This is a significant difference for a mobile wallet: the mobile&#xA;environment does not support the mobile wallet being online for&#xA;long.&#xA;Thus, the mobile wallet may not have any CPU to make the decision&#xA;to move funds from blockchain to Lightning, until the actual user&#xA;explicitly opens the mobile wallet app.&#xA;&#xA;It has already been generally accepted that due to the limitations&#xA;of the mobile phone environment, a mobile phone wallet with&#xA;Lightning support would need some LSP anyway.&#xA;Thus, a mobile wallet that can receive on the blockchain layer&#xA;and then send on the Lightning layer can commit to a specific,&#xA;different, Lightning participant: the LSP it has channels with.&#xA;&#xA;Thus, the mobile wallet can provide an address that commits to&#xA;one particular Lightning Network participant: its LSP.&#xA;&#xA;The mobile wallet can then initiate a single-hop swap with the&#xA;LSP when the mobile wallet app is in the foreground and has CPU&#xA;to think with.&#xA;If it received funds into the address that have already been&#xA;confirmed, then it can do this single-hop swap immediately with&#xA;its LSP.&#xA;The LSP can immediately resolve this swap, crediting funds to&#xA;channel, while atomically ensuring it has sole claim to the&#xA;onchain UTXO.&#xA;&#xA;The Contract&#xA;------------&#xA;&#xA;The contract has two participants: Alice the funds owner, and&#xA;Bob its potential swap partner.&#xA;&#xA;Once *any* funds have been confirmed received into an address&#xA;committing to this contract, Alice owns the funds and can&#xA;dispose of them as it likes (with cooperation from Bob).&#xA;The source of the funds need not be Alice, it could be a third&#xA;party that has an obligation to pay Alice onchain.&#xA;&#xA;The contract has only 2 branches:&#xA;&#xA;* Onchain/channel branch: Alice and Bob.&#xA;* Timelock branch: Alice plus a relative timelock (`OP_CSV`)&#xA;  measurable in weeks.&#xA;&#xA;Astute readers will realize that the above is really a variant&#xA;of [CLTV-style unidirectional time-limited channels][1],&#xA;themselves a variant of Spilman-style channels:&#xA;&#xA;* Uses an explicit opcode to simplify channel setup (no need&#xA;  to pre-sign a timeout transaction between Alice and Bob,&#xA;  can just send funds directly to the address).&#xA;* Uses a relative locktime instead of an absolute one to&#xA;  allow funding of the channel address (= receive onchain&#xA;  funds ready to spend over Lightning) at any time.&#xA;&#xA;The use-cases this enables are:&#xA;&#xA;* If Alice wants to pay to another onchain address, and Bob&#xA;  is also online and cooperative, Alice can ask Bob to help&#xA;  sign the Onchain/channel branch to move the funds in any&#xA;  arbitrary onchain manner.&#xA;* If Alice wants to pay to a Lightning invoice / keysend, and&#xA;  has insufficient Lightning outgoing capacity (but has&#xA;  sufficient *total* capacity), it can swap with Bob, by&#xA;  offerring a transaction that spends via the Onchain/channel&#xA;  branch and instantiates a fresh onchain HTLC that Bob can&#xA;  then forward over Lightning.&#xA;  As soon as Alice offers its signature of that transaction,&#xA;  Bob can immediately offer an in-Lightning HTLC to Alice on&#xA;  their channel, and then Alice can immediately resolve it&#xA;  (thus immediately getting its funds into Lightning).&#xA;* If Bob is offline or uncooperative, Alice can unilterally&#xA;  recover its funds after the timeout in the Timelock&#xA;  branch.&#xA;&#xA;Trust is required only to the extent that Alice trusts Bob to&#xA;be cooperative so that Alice can dispose of its funds immediately.&#xA;In case Bob turns out to be non-trustworthy, Alice can recover&#xA;its funds via the timelock branch after the timeout period.&#xA;There is no scope for Bob to steal funds (indeed, it is easier&#xA;for Bob to steal Lightning funds than to steal swap-in-potentiam&#xA;funds).&#xA;&#xA;The intent here is that the mobile wallet is Alice, while the&#xA;LSP is Bob.&#xA;&#xA;### Bob Security&#xA;&#xA;Bob *MUST* ensure that, for each UTXO, it is either asked to&#xA;sign an arbitrary onchain transaction (i.e the first use-case&#xA;above) *OR* it gets offered an onchain HTLC from that UTXO.&#xA;Once Alice has asked Bob to cooperate in either case for a&#xA;particular UTXO, Bob *MUST* ensure that it does not sign the other&#xA;case (and Bob *MUST* refuse to cooperate in the other case once&#xA;one case has been requested).&#xA;&#xA;In addition, Bob *MUST* ensure that, if it is used in the&#xA;&#34;channel&#34; case (i.e. the second use-case above), the timeout of&#xA;the Timelock branch is far enough in the future that it is likely&#xA;that spends using the Onchain/channel branch have confirmed by&#xA;then.&#xA;&#xA;With both invariants enforced by Bob, Bob can ensure that, if&#xA;Alice requests a swap using the Onchain/channel branch, only Bob&#xA;can spend the UTXO (at least before the timeout), and thus can&#xA;safely offer a Lightning HTLC to Alice immediately without any&#xA;additional waiting for onchain confirmations.&#xA;&#xA;As Bob needs to know the UTXO in the first use-case above, this&#xA;requirement prevents the use of blind signing techniques when&#xA;implementing the first use-case.&#xA;Basically, when being asked to sign, Bob must generate the entire&#xA;`SIGHASH` from data that Alice provides, so that Bob is able to&#xA;keep track of UTXOs it is signing for.&#xA;&#xA;### Remote Swap&#xA;&#xA;While Bob is generally considered &#34;the&#34; LSP of the mobile wallet&#xA;Alice, nothing in the Lightning protocol actually requires that&#xA;Bob be a direct peer of Alice.&#xA;The only real requirement is that Bob is able to send funds to&#xA;Alice over Lightning in exchange for possession of the equivalent&#xA;onchain funds.&#xA;&#xA;Against this, we should note that the mobile wallet is already&#xA;dependent on one or more LSPs anyway, so it may as well just use&#xA;its direct peer LSPs instead of a remote node.&#xA;&#xA;### Address Derivation&#xA;&#xA;Swap-in-potentiam addresses can be derived from a root public or&#xA;private key.&#xA;&#xA;We only need one keypair each from Alice and Bob.&#xA;Alice can use standard derivation paths for its keypair.&#xA;&#xA;As Bob is intended to be an LSP, we can just use its Lightning&#xA;node ID as the public key.&#xA;Bob needs to be in possession of the corresponding private key&#xA;anyway in order to set up BOLT 8 encrypted transports.&#xA;&#xA;As LSPs are part of the public network, Alice can simply try to&#xA;scan for all published nodes that advertise support for&#xA;swap-in-potentiam.&#xA;Alternately if the wallet has a short list of fixed LSPs it&#xA;will use, it can simply refer to that list.&#xA;&#xA;Thus:&#xA;&#xA;* Alice uses a derived keypair.&#xA;* Bob uses a fixed keypair (its Lightning node ID).&#xA;&#xA;The above is sufficient to derive swap-in-potentiam addresses&#xA;from an `xprv` or `xpub` root key.&#xA;&#xA;Swap-in-potentiam For LSPs&#xA;==========================&#xA;&#xA;While the original design of swap-in-potentiam has the mobile&#xA;wallet in the &#34;Alice&#34; role and its LSP in the &#34;Bob&#34; role, it&#xA;turns out that LSPs can provide special service to improve&#xA;receiving mobile wallets.&#xA;&#xA;Suppose that the LSP keeps track of statistics, and thus has&#xA;an idea of which of its mobile wallet clients are likely to&#xA;be net receivers.&#xA;&#xA;Net receivers will often have low inbound capacity (since the&#xA;inbound capacity has been used up during previous LN receives).&#xA;&#xA;During times of low onchain fees, an LSP can check which of its&#xA;offline mobile wallet clients have low inbound capacity, and are&#xA;likely to come online in the future to receive.&#xA;In those cases, the LSP can commit funds to a swap-in-potentiam&#xA;with the mobile client, with the LSP as &#34;Alice&#34; and the mobile&#xA;client as &#34;Bob&#34;.&#xA;This at least lets the LSP set up half of a swap during a time of&#xA;low fees.&#xA;&#xA;If the transfer to swap-in-potentiam addresses is confirmed by&#xA;the time the mobile wallet client comes online, the LSP can&#xA;immediately initiate a swap, giving inbound capacity towards the&#xA;mobile client.&#xA;This swap can be immediately resolved, and allows the mobile&#xA;wallet client to immediately receive funds over Lightning.&#xA;&#xA;In particular, if &#34;offline receive&#34; as designed by TheBlueMatt&#xA;is implemented, then the LSP already has indication of a pending&#xA;payment towards an offline mobile wallet client.&#xA;The LSP can check if the offline mobile wallet client has&#xA;insufficient incoming capacity to receive the funds, and if so,&#xA;arrange to fund a swap-in-potentiam with that client.&#xA;Then, when the mobile wallet client comes online, the LSP can&#xA;initiate the swap with them, and once the swap completes (and&#xA;thus the mobile wallet client has sufficient incoming capacity)&#xA;the LSP can contact the sender LSP to complete the payment.&#xA;&#xA;In particular, this use-case allows for *immediate* receives as&#xA;soon as the mobile wallet client gets foregrounded and has CPU&#xA;time, **without** requiring 0-conf trusted transactions and&#xA;thus without requiring any kind of semi-custodial trust, even&#xA;if the mobile wallet client had insufficient incoming capacity.&#xA;A channel still has to be set up beforehand (without 0-conf, if&#xA;trusting funds to the LSP is undesirable).&#xA;&#xA;Implementation Sketch&#xA;=====================&#xA;&#xA;The intent is to use Taproot with Schnorr signatures, but&#xA;**without** using the keyspend path (at least initially).&#xA;&#xA;The plan currently is to use a `MuSig(A, B)` as the internal&#xA;pubkey, but with the branches still explicitly laid out as&#xA;tapleaves.&#xA;That is, there are two tapleaf SCRIPTs corresponding to the&#xA;two branches described above:&#xA;&#xA;* `&lt;A&gt; OP_CHECKSIGVERIFY &lt;B&gt; OP_CHECKSIG`&#xA;* `&lt;timelock&gt; OP_CHECKSEQUENCEVERIFY OP_DROP &lt;A&gt; OP_CHECKSIG`&#xA;&#xA;Using an explicit 2-of-2 branch rather than a MuSig allows&#xA;for a simple protocol at least for initial deployment:&#xA;we can have Alice send the signature using `A` in a single&#xA;half-round without having to engage in a 2-round MuSig2 signing&#xA;ritual.&#xA;&#xA;We intend to use Taproot since the mobile wallet client&#xA;may need to use a 2-of-3 or 2-of-2 signing scheme, similar&#xA;to Blockstream Green.&#xA;This allows either Alice or Bob in the contract to secretly&#xA;be a FROST 2-of-3 or MuSig 2-of-2 (or any FROST k-of-n or&#xA;MuSig n-of-n).&#xA;This is also another reason for avoiding a 2-of-2 MuSig&#xA;keyspend path between Alice and Bob, as there is (to our&#xA;knowledge) no publicly-reviewed security proof that&#xA;FROST-in-MuSig and MuSig-in-MuSig are safe (or the&#xA;corresponding variants using MuSig2 for the signing&#xA;ritual).&#xA;&#xA;Later, when we are more confident of the use of MuSig2 and&#xA;FROST inside a MuSig2, and with using MuSig2 with possibly&#xA;untrusted outsiders (who might exploit any mis-implementation&#xA;of the MuSig2 signing protocol if we are not careful with&#xA;designing it), we can seamlessly upgrade the protocol&#xA;to use the keyspend path later, to save witness bytes.&#xA;&#xA;For the Onchain use-case (i.e. Alice wants to spend the UTXO&#xA;to an onchain address), the protocol betweeen Alice and Bob&#xA;would be:&#xA;&#xA;* `request_arbitrary_signature` Alice-&gt;Bob: Requests Bob&#xA;  to sign a PSBT spending a swap-in-potentiam address&#xA;  using the Onchain branch.&#xA;* `response_arbitrary_signature` Bob-&gt;Alice: Response to&#xA;  the above, returning the requested signature.&#xA;* `reject_arbitrary_signature` Bob-&gt;Alice: Sent in&#xA;  response to `request_arbitary_signature` if Bob refuses&#xA;  to cooperate (e.g. the UTXO being spent has already&#xA;  been accepted by Bob in a Channel use-case below).&#xA;&#xA;For the Channel use-case (i.e. Alice wants to spend the UTXO&#xA;to a Lightning receiver), we operate the swap-in-potentiam&#xA;UTXO(s) as a Spilman-like channel over two states:&#xA;&#xA;* HTLC-offering: Offering an amount `N` HTLC from Alice to&#xA;  Bob, with any remaining amount to a change address to&#xA;  Alice.&#xA;* Resolved: Giving the amount `N` outright to Bob, with any&#xA;  remaining amount to a change address to Alice.&#xA;&#xA;The intention is that the channel is initially put into&#xA;the HTLC-offerring state.&#xA;Then Bob offers a corresponding in-Lightning HTLC to Alice&#xA;over their channel.&#xA;When Alice resolves the in-Lightning HTLC, it can then&#xA;send a new signature for the Resolved state.&#xA;Once the channel is in a Resolved state, Bob *SHOULD* sign&#xA;the last state and broadcast it on the blockchain, thereby&#xA;closing the Spilman-like channel.&#xA;&#xA;The protocol messages for the Channel use-case are:&#xA;&#xA;* `request_swap_in` Alice-&gt;Bob: Tell Bob the UTXOs with&#xA;  the same swap-in-potentiam address to spend, how&#xA;  much to put into the Alice-&gt;Bob channel direction,&#xA;  what channel to move into, and (optionally) a change&#xA;  address for Alice.&#xA;* `reject_swap_in` Bob-&gt;Alice: Sent in response to&#xA;  `request_swap_in` if Bob refuses to cooperate (e.g.&#xA;  one of the UTXOs on offer was already signed with&#xA;  `response_arbitrary_signature`, or Bob cannot legally&#xA;  accept control of funds from one or more of the UTXOs&#xA;  offerred).&#xA;* `accept_swap_in` Bob-&gt;Alice: Sent in response to&#xA;  `request_swap_in`, containing the Bob-side address to&#xA;  send funds to later once the state is Resolved.&#xA;* `swap_in_signed` Alice-&gt;Bob: Response to&#xA;  `accept_swap_in`, containing the Alice-side signature&#xA;  for the HTLC-offering state transaction.&#xA;  Once Bob receives this, Bob can safely construct a&#xA;  new on-Lightning HTLC using BOLT1&#xA;  `update_offer_htlc`.&#xA;* `swap_in_resolved` Alice-&gt;Bob: Sent after Alice has&#xA;  acquired the funds via `update_fulfill_htlc` of the&#xA;  corresponding on-Lightning HTLC, containing the&#xA;  Alice-side signature for the Resolved state&#xA;  transaction.&#xA;  The Resolved state transaction spends to the Bob-side&#xA;  address given in `accept_swap_in`, and any change to&#xA;  the Alice-side change address in `request_swap_in`.&#xA;&#xA;The plan is to reserve only one odd BOLT1 message ID,&#xA;and to embed the actual swap-in-potentiam message ID&#xA;as the first 2 bytes of the BOLT1 message, to reduce&#xA;pollution of the limited BOLT1 message ID space and to&#xA;allow more flexibility for swap-in-potentiam to expand&#xA;to new messages inside its own message ID space.&#xA;&#xA;For a richer future protocol, we will want to consider&#xA;how a swap-in can be combined with a splice-in.&#xA;This is useful if the current total capacity of the&#xA;channel is lower than the available onchain funds.&#xA;The swap-in can be credited immediately (and is limited&#xA;to the current total capacity) while additional funds&#xA;can be added to the channel via splice-in (which is&#xA;credited only once the splice-in is confirmed).&#xA;&#xA;As-is, a similar result can be obtained using openv1,&#xA;wherein a swap-in is combined with a channel open,&#xA;with the swap-in immediately credited while the channel&#xA;open is awaiting confirmation:&#xA;&#xA;* Alice and Bob currently have one or more existing&#xA;  channels, and Alice has a UTXO in a swap-in-potentiam&#xA;  address whose value exceeds the incoming capacity of&#xA;  the existing channel(s).&#xA;* Alice-&gt;Bob `open_channel`.&#xA;* Bob-&gt;Alice `accept_channel`.&#xA;* Alice-&gt;Bob `request_swap_in` with the &#34;change address&#34;&#xA;  being the funding address of the channel.&#xA;* Bob-&gt;Alice `accept_swap_in` provides the TXID of the&#xA;  funding transaction (Alice now knows the &#34;change&#xA;  address&#34; and the Bob final Resolved address, letting it&#xA;  know the final Resolved state transaction TXID).&#xA;* Alice-&gt;Bob `funding_created` with the TXID.&#xA;* Bob-&gt;Alice `funding_signed`.&#xA;* Alice-&gt;Bob `swap_in_signed` to provide the signature&#xA;  spending the swap-in-potentiam address to Bob.&#xA;* Bob then constructs an HTLC over the existing channel,&#xA;  which Alice claims, revealing the preimage.&#xA;* Alice-&gt;Bob `swap_in_resolved`.&#xA;* Bob then broadcasts the Resolved state transaction,&#xA;  which is also the funding transaction of the new channel.&#xA;* Both Alice and Bob await confirmation of the transaction&#xA;  in order to use the new channel.&#xA;  Alice can still use the existing channel, which has been&#xA;  topped-up with fresh outgoing capacity by the swap-in.&#xA;&#xA;(The above is not safe, as Bob can complete the protocol&#xA;by using the HTLC-offerring state transaction; this can&#xA;be fixed by having Alice open *2* channels with the same&#xA;amount, one with the HTLC-offering state transaction as&#xA;the funding tx, the other with the Resolved state&#xA;transaction as the funding tx, and later `error`ing the&#xA;channel corresponding to the transaction that is not&#xA;confirmed; this is left as an exercise to the reader,&#xA;though note that it requires two different change addresses&#xA;for Alice for both HTLC-offerring and Resolved states,&#xA;which can be arranged for the protocol)&#xA;&#xA;--&#xA;&#xA;[1]: https://en.bitcoin.it/wiki/Payment_channels#CLTV-style_payment_channels</html></oembed>