diff --git a/docs/psbt.md b/docs/psbt.md index 910d6d3a0..d636ab0cc 100644 --- a/docs/psbt.md +++ b/docs/psbt.md @@ -582,6 +582,22 @@ signature from peer 2 to spend the funds now locked in a 2-of-2 multisig, the fund are lost (unless peer 2 cooperates in a complicated, manual recovery process). +### Privacy considerations when batch opening channels + +Opening private (non-announced) channels within a transaction that also contains +public channels that are announced to the network it is plausible for an outside +observer to assume that the non-announced P2WSH output might also be a channel +originating from the same node as the public channel. It is therefore +recommended to not mix public/private channels within the same batch +transaction. + +Batching multiple channels with the same state of the `private` flag can be +beneficial for privacy though. Such a transaction can't easily be distinguished +from a batch created by Pool or Loop for example. Also, because of the PSBT +funding flow, it is also not guaranteed that all channels within such a batch +transaction are actually being created for the same node. It is possible to +create coin join transactions that create channels for multiple different nodes. + ### Use --no_publish for batch transactions To mitigate the problem described in the section above, when open multiple @@ -589,3 +605,38 @@ channels in one batch transaction, it is **imperative to use the `--no_publish`** flag for each channel but the very last. This prevents the full batch transaction to be published before each and every single channel has fully completed its funding negotiation. + +### Use the BatchOpenChannel RPC for safe batch channel funding + +If `lnd`'s internal wallet should fund the batch channel open transaction then +the safest option is the `BatchOpenChannel` RPC (and its +`lncli batchopenchannel` counterpart). +The `BatchOpenChannel` RPC accepts a list of node pubkeys and amounts and will +try to atomically open channels in a single transaction to all of the nodes. If +any of the individual channel negotiations fails (for example because of a +minimum channel size not being met) then the whole batch is aborted and +lingering reservations/intents/pending channels are cleaned up. + +**Example using the CLI**: + +```shell +⛰ lncli batchopenchannel --sat_per_vbyte=5 '[{ + "node_pubkey": "02c95fd94d2a40e483e8a14be1625ad8a82263b37b6a32162170d8d4c13080bedb", + "local_funding_amount": 500000, + "private": true, + "close_address": "2NCJnjD4CZ5JvmkEo1D3QfDM57GX62LUbep" + }, { + "node_pubkey": "032d57116b92b5f64f022271ebd5e9e23826c0f34ff5ae3e742ad329e0dc5ddff8", + "local_funding_amount": 600000, + "remote_csv_delay": 288 + }, { + "node_pubkey": "03475f7b07f79672b9a1fd2a3a2350bc444980fe06eb3ae38b132c6f43f958947b", + "local_funding_amount": 700000 + }, { + "node_pubkey": "027f013b5cf6b7035744fd8d7d756e05675bf6e829bb75a80be5b9e8e641d20562", + "local_funding_amount": 800000 + }]' +``` + +**NOTE**: You must be connected to each of the nodes you want to open channels +to before you run the command. diff --git a/docs/release-notes/release-notes-0.14.0.md b/docs/release-notes/release-notes-0.14.0.md index 1f761e36c..89194b4f3 100644 --- a/docs/release-notes/release-notes-0.14.0.md +++ b/docs/release-notes/release-notes-0.14.0.md @@ -68,6 +68,15 @@ proposed channel type is used. avoid misleading error messages from dependent services if they use `After` systemd option. +### Batched channel funding + +[Multiple channels can now be opened in a single +transaction](https://github.com/lightningnetwork/lnd/pull/5356) in a safer and +more straightforward way by using the `BatchOpenChannel` RPC or the command line +version of that RPC called `lncli batchopenchannel`. More information can be +found in the [PSBT +documentation](../psbt.md#use-the-batchopenchannel-rpc-for-safe-batch-channel-funding). + ## Wallet * It is now possible to fund a psbt [without specifying any