What is Nostr?
Ole Henrik Skogstrøm [ARCHIVE] /
npub1pj5…9hcq
2023-06-09 13:03:51
in reply to nevent1q…t8ww

Ole Henrik Skogstrøm [ARCHIVE] on Nostr: 📅 Original date posted:2021-09-21 📝 Original message: Hi I have found a way of ...

📅 Original date posted:2021-09-21
📝 Original message:
Hi

I have found a way of opening balanced channels using LND's psbt option
when opening channels. What I'm doing is essentially just joining funded
PSBTs before signing and submitting them. This makes it possible to open a
balanced channel between two nodes or open a ring of balanced channels
between multiple nodes (ROF).

I found this interesting, however I don't know if this is somehow unsafe or
for some other reason a bad idea. If not, then it could be an interesting
alternative to only being able to open unbalanced channels.

To do this efficiently, nodes need to collaborate by sending PSBTs back and
forth to each other and doing this manually is a pain, so if this makes
sense to do, it would be best to automate it through a client.

----------------------
--- Here is an example of the complete flow for a single channel:
----------------------

** Node A: generates a new address and sends address to Node B *(lncli
newaddress p2wkh)

** Node A starts an Interactive channel **open** to Node B* *using psbt*
(lncli openchannel --psbt <node_b_pubkey> 2000000 1000000)

** Node A funds the channel address *(bitcoin-cli walletcreatefundedpsbt []
'[{"<channel_address>":0.02}]')

** Node B funds the refund transaction to Node A and sends PSBT back to
Node A (*bitcoin-cli walletcreatefundedpsbt []
'[{"<node_a_return_address>":0.01}]')

* *Node A joins the two PSBTs and sends it back to Node B (*bitcoin-cli
joinpsbts '["<channel_open_psbt>", "<node_b_return_to_node_a_psbt>"]')

** Node B verifies the content and signs the joined PSBT before sending it
back to Node A *(bitcoin-cli walletprocesspsbt <joined_psbt>)

** Node A: Verifies the content and signs the joined PSBT *(bitcoin-cli
walletprocesspsbt <joined_psbt>)

** Node A: Completes channel open by publishing the fully signed PSBT*


----------------------
--- Here is an example of the complete flow for a ring of channels between
multiple nodes:
----------------------

** Node A starts an Interactive open channel to Node B using psbt* (lncli
openchannel --psbt --no_publish <node_b_pubkey> 2000000 1000000)
** Node A funds the channel address* (bitcoin-cli walletcreatefundedpsbt []
'[{"<channel_address>":0.02}]')

** Node B starts an Interactive open channel to Node C using psbt* (lncli
openchannel --psbt --no_publish <node_b_pubkey> 2000000 1000000)
** Node B funds the channel address* (bitcoin-cli walletcreatefundedpsbt []
'[{"<channel_address>":0.02}]')

** Node C starts an Interactive open channel to Node A using psbt* (lncli
openchannel --psbt <node_b_pubkey> 2000000 1000000)
** Node C funds the channel address *(bitcoin-cli walletcreatefundedpsbt []
'[{"<channel_address>":0.02}]')

** Node B and C sends Node A their PSBTs*

** Node A joins all the PSBTs* (bitcoin-cli joinpsbts
'["<A_funded_channel_psbt>", "<B_funded_channel_psbt>",
"<C_funded_channel_psbt>"]')

Using (bitcoin-cli walletprocesspsbt <joined_psbt>):



** Node A verifies and signs the PSBT and sends it to Node B (1/3
signatures)* Node B verifies and signs the PSBT and sends it to Node C (2/3
signatures)* Node C verifies and signs the PSBT (3/3 signatures) before
sending it to Node A and B.*


** Node A completes channel open (no_publish)* Node B completes channel
open (no_publish)* Node C completes channel open and publishes the
transaction.*

--
Ole Henrik Skogstrøm
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20210921/f3803583/attachment.html>;
Author Public Key
npub1pj5jph09cn6fsmhgmehguf8fmhu4rj8edj8m4heyfjw24saynkesa59hcq