LNDでCPFPをPSBTで行う

uenohiro4
Nayuta エンジニアブログ
3 min readMar 10, 2024

私はしばしばCPFPを行ってBitcoinの実効手数料を引き上げることがある。以前書いた記事はこちらである。

LNDから実行する場合はチャネルのオープンやクローズに関してのCPFPが多いのだが、Nayuta Wallet では Submarine Swap によって on-chain Bitcoin 支払いを off-chain Bitcoin と交換する機能があるため、LND を一部改造して Submarine Swap用のアドレスへの送金も LND の UTXO として認識できるようにしている。

Submarine Swap だったり LND の改造だったりはあるものの、今回のタイトルである PSBT での CPFP には実は関係ない。単純に、LND が持つウォレットへの送金が unconfirm なトランザクションを INPUT として使いたい、というだけである。

PSBTコマンドのhelpを確認する。

$ lncli wallet psbt fund
NAME:
lncli wallet psbt fund - Fund a Partially Signed Bitcoin Transaction (PSBT).
...
--change_type value (optional) the type of the change address to use to create/fund the PSBT. If no address type is provided, p2wpkh will be used for default accounts and single imported public keys. No custom address type should be provided for custom accounts as we will always use the coin selection key scope to generate the change address
--min_confs value (optional) the minimum number of confirmations each input used for the PSBT transaction must satisfy (default: 1)

最後のオプション --min_confs が今回のポイントである。トランザクションの input として使うトランザクションがいくつ以上の confirmation を必要とするかという値で、デフォルトは 1 になっている。
つまり、confirm していないと input として使えないことになる。ならば CPFP したい場合はまだ input が confirm していないので --min_confs 0 とすればよいということになる。

今回の概要はこれだけである。

注意する点は、CPFP なので手数料率を計算して設定することである。PSBT なので CPFP であることを忘れがちなためである。実際、私はこの記事を書く前に普通のトランザクションと考えて展開してしまったのだ。結果として、そのトランザクションは指定した手数料率になったものの、CPFPした全体としてはかなり下がってしまった(mempool.space では実効手数料と表記される)。

--

--