Core Lightning release v23.08 live exploration
In this live we explore Core Lightning release v23.08 with Vincenzo Palazzo core contribor of CLN. We see how to use setconfig
new rpc command and listconfigs
. We talk about experimental features that can be enable/disable at runtime. We do a Lightning Network splice in to resize a channel and add it 100000sat. We talk about the support for taproot addresses in CLN wallet. Then we look at the new renepay
plugin implementing Pickhardt R. and Richter S. paper "Optimally Reliable & Cheap Payment Flows on the Lightning Network". And finally we do a self-payment with the command pay
because in v23.08 it's possible.
Transcript with corrections and improvements
For this live we have Vincenzo Palazzo CLN core contributor as guest.
Tony
: How are you doing Vincenzo?
Vincenzo
: Hey thanks for having me, all good.
The goal of this session is to learn how to use all the new/updated features of Core Lightning v23.08. This should be complementary to the X/Twitter space that Rusty Russell, Shahana Farooqi and Alex Myers did last week and also the three blog posts presenting CLN v23.08 written by Rusty Russell:
Preliminary question to Vincenzo Palazzo
Tony
: When did you started to contribute to Core Lightning?
Vincenzo
: I started in 2019 by writing a Java library. I found some
bugs, I patched some bugs and I never stopped.
Tony
: 4 years ago, so you start to know well the software!
Vincenzo
: Yes but they're still some parts that are like black boxes,
like the wallet part.
Tony
: Can you give us some advices on how to start contributing to CLN?
Vincenzo
: It depends. I was quite familiar with C, but not that is in
Core Lightning which uses ccan allocator (written by Rusty). I started
from building tools for Core Lightning, I found some bugs and
contributed back. And when you contributed back, usually you find
some other stuffs that you want to do in CLN. And you implement it,
you push it up on git and open a Github pull request. Usually the
patch get merged (or maybe not). I think it's the best way to
contribute. I know that some persons are scared of C (I've seen that
by doing mentoring in Summer of Bitcoin). Don't be shy, Core
Lightning makes a little bit better that usual C, I think. Maybe start
by building tools and then contribute on the parts you like in the
repository.
Tony
: And with the plugin system there is some doors to enter in Core
Lightning eco-system without having to write C code.
Vincenzo
: Yeah, I started with Java. It was a difficult language to
put inside Core Lightning but one of my plugin that I use for the
Bitcoin backend on my cloud machine is written in Kotlin. He is still
running. Yeah, the plugin system is super friendly when you
understand how it works, because you take your language and start
building tool for Core Lightning. They are people that write plugins
in Haskell.
Tony
: Thank you for those explanations. Now, let's talk a little bit
more about that release. Two more questions before we jump into
setconfig
. What was the most exciting feature or bug fix or anything
on the release v23.08?
Vincenzo
: I will tell my best feature is setconfig
. But I think one
of the really important feature is splicing for Core lightning and
also in general for the Lightning Network. The Taproot support is
also interesting because we'll implement some protocol improvement,
and improving the protocol is always good. But my personal feature is
setconfig
.
Tony
: Great! And this is the one we are going to talk about, but just
before you continue talking about setconfig
, last question. What was
the most challenging thing (maybe for you or for the team) to get into
the release, if there is one?
Vincenzo
: I will tell you the most difficult to review from my side
was splicing. Because, I was not familiar with the proposal, I didn't
help much on review splicing, and splicing touches a lot of parts of
the code. And another difficult feature to do was the experimental
feature at runtime. With the previous version of Core Lightning, when
you wanted an experimental feature you had to compile the code and run
it. Now you are able to say I want this at runtime. And this is very
importants for tools like lnprotest. This is a a very huge
performance improvement.
setconfig
Vincenzo
: setconfig
is a new RPC method that allows to modify the Core
Lightning configuration at runtime. Maybe everybody is familiar that
Core Lightning has configuration files where you say "hey I want to do
have that field to be equal to this". Also plugins can have
configuration options, right. This is my favorite RPC command because
I am building coffee
plugin manager for Core Lightning and with this
RPC command you can have a plugin manager that asks to the user what is
the value that you want for this configuration. So you have a very
interactive way to do this at runtime. And also if I remember
correctly, this also modify the configuration files. It's perfect for
me. I love this feature.
Let's see how to use setconfig
command.
Start 2 Lightning nodes running on regtest
Let's start two Lightning nodes running on the Bitcoin regtest
chain
by sourcing the script lightning/contrib/startup_regtest.sh
provided
in CLN repository and by running the command start_ln
:
◉ tony@tony:~/clnlive:
$ source lightning/contrib/startup_regtest.sh
...
◉ tony@tony:~/clnlive:
$ start_ln
...
We can check that l1-cli
is just an alias for lightning-cli
with the
base directory being /tmp/l1-regtest
:
◉ tony@tony:~/clnlive:
$ alias l1-cli
alias l1-cli='lightning-cli --lightning-dir=/tmp/l1-regtest'
Let's also verify that we are running the new release of CLN:
◉ tony@tony:~/clnlive:
$ l1-cli --version
v23.08
We can also have a look at l1
's config file /tmp/l1-regtest/config
:
network=regtest
log-level=debug
log-file=/tmp/l1-regtest/log
addr=localhost:7171
allow-deprecated-apis=false
Before CLN v23.08 to change any config option we had to modified that
config file and restart our node. Now, for the config options that
are dynamic this is no longer needed, we can do this at runtime using
setconfig
command.
Let's take the example of min-capacity-sat
dynamic config option that
defines the minimum value a node accepts for channel open requests.
We can change it and set it to 20000sat by running the following command:
◉ tony@tony:~/clnlive:
$ l1-cli setconfig min-capacity-sat 20000
{
"config": {
"config": "min-capacity-sat",
"value_int": 20000,
"source": "/tmp/l1-regtest/regtest/config:2",
"dynamic": true
}
}
Note that while this option has been change dynamically, its new value has been written to the appropriate config file and becomes persistent accross node restart:
◉ tony@tony:~/clnlive:
$ cat /tmp/l1-regtest/regtest/config
# Inserted by setconfig Thu Aug 31 16:22:14 2023
min-capacity-sat=20000
We can also look for the word dynamic
in the lightningd-config man page to
know about builtin config options that are dynamic.
Let's do this again with the option autoclean-cycle
from autoclean
plugin:
◉ tony@tony:~/clnlive:
$ l1-cli setconfig autoclean-cycle 10
{
"config": {
"config": "autoclean-cycle",
"value_int": 10,
"source": "/tmp/l1-regtest/regtest/config:4",
"plugin": "/usr/local/libexec/c-lightning/plugins/autoclean",
"dynamic": true
}
}
And we can check again that this new value for autoclean-cycle
is
persistent accross node restart:
◉ tony@tony:~/clnlive:
$ cat /tmp/l1-regtest/regtest/config
# Inserted by setconfig Thu Aug 31 16:22:14 2023
min-capacity-sat=20000
# Inserted by setconfig Thu Aug 31 16:23:59 2023
autoclean-cycle=10
Before we continue with the improvement on listconfigs
command, let's
mentioned that if a plugin wants to declare some of its options to be
dymanic, this can be done in the getmanifest
response by setting the
dynamic
field for the option to true
. See Plugin: The getmanifest
method:
{
"options": [
{
"name": "greeting",
"type": "string",
"default": "World",
"description": "What name should I call you?",
"deprecated": false,
"dynamic": false
}
],
"rpcmethods": [...],
"subscriptions": [...],
"hooks": [...],
"featurebits": {...},
"notifications": [...],
"nonnumericids": ...,
"dynamic": ...
}
listconfigs
Vincenzo
: listconfigs
is a very important command because it makes
the config of the running node accessible to the plugins. Plugins
sometimes want to know if you've set a server port, for instance the
grpc
plugin works in this way. If you want to know if there is some
configuration set in the config file which are not related to the
plugin itself, listconfigs
is the only method that you have to check
the value of this configuration.
Back to our terminal, let's try the listconfigs
command:
◉ tony@tony:~/clnlive:
$ l1-cli listconfigs
{
"configs": {
"lightning-dir": {
"value_str": "/tmp/l1-regtest",
"source": "cmdline"
},
"network": {
"value_str": "regtest",
"source": "cmdline"
},
"testnet": {
"set": false,
"source": "default"
},
"signet": {
"set": false,
"source": "default"
},
"mainnet": {
"set": false,
"source": "default"
},
"regtest": {
"set": false,
"source": "default"
},
"rpc-file": {
"value_str": "lightning-rpc",
"source": "default"
},
"allow-deprecated-apis": {
"value_bool": false,
"source": "/tmp/l1-regtest/config:5"
},
"plugin": {
"values_str": [],
"sources": []
},
"plugin-dir": {
"values_str": [],
"sources": []
},
"clear-plugins": {
"set": false,
"source": "default"
},
"disable-plugin": {
"values_str": [],
"sources": []
},
"important-plugin": {
"values_str": [],
"sources": []
},
"always-use-proxy": {
"value_bool": false,
"source": "default"
},
"daemon": {
"set": false,
"source": "default"
},
"large-channels": {
"set": false,
"source": "default"
},
"experimental-dual-fund": {
"set": false,
"source": "default"
},
"experimental-splicing": {
"set": false,
"source": "default"
},
"experimental-onion-messages": {
"set": false,
"source": "default"
},
"experimental-offers": {
"set": false,
"source": "default"
},
"experimental-shutdown-wrong-funding": {
"set": false,
"source": "default"
},
"experimental-peer-storage": {
"set": false,
"source": "default"
},
"experimental-quiesce": {
"set": false,
"source": "default"
},
"experimental-anchors": {
"set": false,
"source": "default"
},
"rgb": {
"value_str": "02acf0",
"source": "default"
},
"alias": {
"value_str": "LATENTWATER",
"source": "default"
},
"pid-file": {
"value_str": "/tmp/l1-regtest/lightningd-regtest.pid",
"source": "default"
},
"ignore-fee-limits": {
"value_bool": true,
"source": "default"
},
"watchtime-blocks": {
"value_int": 6,
"source": "default"
},
"max-locktime-blocks": {
"value_int": 2016,
"source": "default"
},
"funding-confirms": {
"value_int": 1,
"source": "default"
},
"require-confirmed-inputs": {
"value_bool": false,
"source": "default"
},
"cltv-delta": {
"value_int": 6,
"source": "default"
},
"cltv-final": {
"value_int": 10,
"source": "default"
},
"commit-time": {
"value_int": 10,
"source": "default"
},
"fee-base": {
"value_int": 1,
"source": "default"
},
"rescan": {
"value_int": 30,
"source": "default"
},
"fee-per-satoshi": {
"value_int": 10,
"source": "default"
},
"htlc-minimum-msat": {
"value_msat": 0,
"source": "default"
},
"htlc-maximum-msat": {
"value_msat": 18446744073709552000,
"source": "default"
},
"max-concurrent-htlcs": {
"value_int": 483,
"source": "default"
},
"max-dust-htlc-exposure-msat": {
"value_msat": 50000000,
"source": "default"
},
"min-capacity-sat": {
"value_int": 20000,
"source": "/tmp/l1-regtest/regtest/config:2",
"dynamic": true
},
"addr": {
"values_str": [
"localhost:7171"
],
"sources": [
"/tmp/l1-regtest/config:4"
]
},
"bind-addr": {
"values_str": [],
"sources": []
},
"announce-addr": {
"values_str": [],
"sources": []
},
"announce-addr-discovered": {
"value_str": "auto",
"source": "default"
},
"announce-addr-discovered-port": {
"value_int": 19846,
"source": "default"
},
"offline": {
"set": false,
"source": "default"
},
"autolisten": {
"value_bool": false,
"source": "default"
},
"accept-htlc-tlv-type": {
"values_int": [],
"sources": []
},
"disable-dns": {
"set": false,
"source": "default"
},
"encrypted-hsm": {
"set": false,
"source": "default"
},
"rpc-file-mode": {
"value_str": "0600",
"source": "default"
},
"commit-fee": {
"value_int": 100,
"source": "default"
},
"min-emergency-msat": {
"value_msat": 25000000,
"source": "default"
},
"subdaemon": {
"values_str": [],
"sources": []
},
"experimental-upgrade-protocol": {
"set": false,
"source": "default"
},
"database-upgrade": {
"value_bool": true,
"source": "cmdline"
},
"log-level": {
"value_str": "debug",
"source": "/tmp/l1-regtest/config:2"
},
"log-timestamps": {
"value_bool": true,
"source": "default"
},
"log-file": {
"values_str": [
"/tmp/l1-regtest/log"
],
"sources": [
"/tmp/l1-regtest/config:3"
]
},
"renepay-debug-mcf": {
"set": false,
"source": "default",
"plugin": "/usr/local/libexec/c-lightning/plugins/cln-renepay"
},
"renepay-debug-payflow": {
"set": false,
"source": "default",
"plugin": "/usr/local/libexec/c-lightning/plugins/cln-renepay"
},
"bitcoin-datadir": {
"value_str": "/home/tony/.bitcoin",
"source": "cmdline",
"plugin": "/usr/local/libexec/c-lightning/plugins/bcli"
},
"disable-mpp": {
"set": false,
"source": "default",
"plugin": "/usr/local/libexec/c-lightning/plugins/pay"
},
"autoclean-cycle": {
"value_int": 10,
"source": "/tmp/l1-regtest/regtest/config:4",
"plugin": "/usr/local/libexec/c-lightning/plugins/autoclean",
"dynamic": true
}
}
}
Note that if an option has the dynamic
field sets (this will always be
to true
) then it can be set dynamically with setconfig
command.
If we want to filter that list and only keep the dynamic options we
can use jq
and this following one-liner:
◉ tony@tony:~/clnlive:
$ l1-cli listconfigs | jq '.configs | map(select(.. | .dynamic?))'
[
{
"value_int": 20000,
"source": "/tmp/l1-regtest/regtest/config:2",
"dynamic": true
},
{
"value_int": 10,
"source": "/tmp/l1-regtest/regtest/config:4",
"plugin": "/usr/local/libexec/c-lightning/plugins/autoclean",
"dynamic": true
}
]
And to play a little more with setconfig
and listconfigs
commands, let
set the value of min-capacity-sat
to 30000 and list again the dynamic
config options:
◉ tony@tony:~/clnlive:
$ l1-cli setconfig min-capacity-sat 30000
{
"config": {
"config": "min-capacity-sat",
"value_int": 30000,
"source": "/tmp/l1-regtest/regtest/config:2",
"dynamic": true
}
}
◉ tony@tony:~/clnlive:
$ l1-cli listconfigs | jq '.configs | map(select(.. | .dynamic?))'
[
{
"value_int": 30000,
"source": "/tmp/l1-regtest/regtest/config:2",
"dynamic": true
},
{
"value_int": 10,
"source": "/tmp/l1-regtest/regtest/config:4",
"plugin": "/usr/local/libexec/c-lightning/plugins/autoclean",
"dynamic": true
}
]
Note: I found out after the live that this jq
filter is not exactly
what I wanted because it doesn't return the keys of the key/value
pairs we match. And we need recursive descent as dynamic
presence/absence can be tested directly. Here a is a better jq
filter:
◉ tony@tony:~/work/rich/db:[git»master]
$ l1-cli listconfigs | jq '.configs | map_values(select(.dynamic?))'
{
"min-capacity-sat": {
"value_int": 20000,
"source": "/tmp/l1-regtest/regtest/config:2",
"dynamic": true
},
"autoclean-cycle": {
"value_int": 10,
"source": "/tmp/l1-regtest/regtest/config:4",
"plugin": "/usr/local/libexec/c-lightning/plugins/autoclean",
"dynamic": true
}
}
Experimental features at runtime-enabled
Vincenzo
: Before this release, to enable exerimental features we had
to run ./configure --enable-experimental-features
in the CLN
repository and recompile it. This was a little bit a pain from the
user point of view, because if you wanted to use something new for
just one time you need to recompile Core Lightning. It is not a
trivial stuff if you are Raspberry Pi, it can takes 20 to 30 minutes.
So it's not user-friendly. And I have Core Lightning in Raspberry Pi
0 and this is not something that I loved. But now we are able to say "I
want that feature at runtime and have it". I will use that feature a
lot in integration testing with Core Lightning because you just need
to specify the experimental feature at runtime if you want. It will
be interesting with lnprotest, no need anymore to recompile Core
Lightning. This is nice.
For those who have never compiled CLN, the steps are the following (assuming all depencies installed):
◉ tony@tony:~/clnlive/lightning:[git»(HEAD detached at v23.08)]
$ ./configure
◉ tony@tony:~/clnlive/lightning:[git»(HEAD detached at v23.08)]
$ make
The option that can be passed to ./configure
are the following:
◉ tony@tony:~/clnlive/lightning:[git»(HEAD detached at v23.08)]
$ ./configure --help
Usage: ./configure [--reconfigure] [setting=value] [options]
If --reconfigure is specified, config.vars will set defaults.
Default settings:
CSANFLAGS =
CC (default cc)
CWARNFLAGS (default -Wall -Wundef -Wmissing-prototypes -Wmissing-declarations -Wstrict-prototypes -Wold-style-definition -Werror -Wno-maybe-uninitialized -Wshadow=local)
COPTFLAGS (default -Og)
CDEBUGFLAGS (default -std=gnu11 -g -fstack-protector-strong)
CONFIGURATOR_CC (default cc)
To override compile line for configurator itself
PYTEST (default python3 -m pytest)
VALGRIND (default 1)
Options include:
--prefix= (default /usr/local)
Prefix for make install
--enable/disable-developer (default disable)
Developer mode, good for testing
--enable/disable-debug (default disable)
Extra debug checks in the build, good for testing
--enable/disable-compat (default enable)
Compatibility mode, good to disable to see if your software breaks
--enable/disable-valgrind (default (autodetect))
Run tests with Valgrind
--enable/disable-static (default disable)
Static link sqlite3 and zlib libraries
--enable/disable-coverage (default disable)
Compile with Clang coverage instrumentation
--enable/disable-address-sanitizer (default disable)
Compile with address-sanitizer
--enable/disable-ub-sanitizer (default disable)
Compile with undefined behaviour sanitizer
--enable/disable-fuzzing (default disable)
Compile with fuzzing
--enable/disable-rust (default enable)
Compile with Rust support
Before CLN v23.08, to enable experimental features we had to call
./configure
like this
$ ./configure --enable-experimental-features
before running make
.
We'll see in the next section an example of experimental feature
enable at runtime with experimental-splicing
.
The experimental features are listed in lightningd-config man page in the section "Experimental Options".
experimental-splicing
Vincenzo
: Splicing enables to add funds and increase the maximum
capacity of a channel at runtime without opening a new channel or
closing a previous one. This is what splicing is for me. I think for
other people splicing is more than that. I guess also Phoenix wallet
is using this feature to enable the single balance in our wallet.
Because we always talk about onchain and offchain balance. But with
this feature you also improve the wallet, you say "there is no anymore
onchain and offchain but there is a single balance".
If you want to know more about Lightning Network splicing you can check:
Steps to do a splice in of 100000sat
To do a splice in Core Lightning we need to use the command fundpsbt
,
signpsbt
and the new splice commands splice_init
, splice_update
,
splice_signed
and run them in the following order:
◉ tony@tony:~/clnlive:
$ l1-cli -k fundpsbt satoshi=110000sat feerate=slow startweight=166 excess_as_change=true
{
"psbt": "<psbt_0>",
...
}
◉ tony@tony:~/clnlive:
$ l1-cli -k splice_init channel_id=<channel_id> \
► relative_amount=100000 \
► initialpsbt=<psbt_0>
{
"psbt": "<psbt_1>"
}
◉ tony@tony:~/clnlive:
$ l1-cli -k splice_update channel_id=<channel_id> \
► psbt=<psbt_1>
{
"psbt": "<psbt_2>",
"commitments_secured": true
}
◉ tony@tony:~/clnlive:
$ l1-cli -k signpsbt psbt=<psbt_2>
{
"signed_psbt": "<psbt_3>"
}
◉ tony@tony:~/clnlive:
$ l1-cli -k splice_signed channel_id=<channel_id> \
► psbt=<psbt_3>
{
"tx": "...",
"txid": "..."
}
Fund a channel from the node l1 to the node l2 of 1000000sat
Let's fund a channel of 1000000sat from the node l1
to the node l2
using fund_nodes
command from the lightning/contrib/startup_regtest.sh
script:
◉ tony@tony:~/clnlive:
$ fund_nodes
Mining into address bcrt1qx0kcnjvdmw6ehw0vm90pln5k7mwacg0tz0grg3... done.
bitcoind balance: 50.00000000
Waiting for lightning node funds... found.
Funding channel from node 1 to node 2. Waiting for confirmation... done.
Restart l1 and l2 with experimental-splicing
We can check using listconfigs
command that l1
is not running
experimental-splicing
feature:
◉ tony@tony:~/clnlive:
$ l1-cli listconfigs experimental-splicing | jq
{
"configs": {
"experimental-splicing": {
"set": false,
"source": "default"
}
}
}
Before restarting l1
with experimental-splicing
let's check features
supported by the node l2
he advertized to use previously:
◉ tony@tony:~/clnlive:
$ l1-cli listpeers
{
"peers": [
{
"id": "0205b3210eb490efd5debbed87df4b507f50dbbde9ab7980faf0367bbe8d27c734",
"connected": true,
"num_channels": 1,
"netaddr": [
"127.0.0.1:7272"
],
"features": "08a0000a0269a2"
}
]
}
Now let's print out the channel we're going to resize in a moment:
◉ tony@tony:~/clnlive:
$ l1-cli listfunds
{
"outputs": [
{
"txid": "205e997c9b7a887a4e05ccee6eb76efd4d2c458d7c40b7ef6bc6861574e56423",
"output": 1,
"amount_msat": 98999834000,
"scriptpubkey": "51207879d6347cd943f6bc54c21d820f61e5a4e12a557923f8c53629fc38bf4f2332",
"address": "bcrt1p0puavdrum9pld0z5cgwcyrmpukjwz2j40y3l33fk987r3060yveqdj4cyk",
"status": "confirmed",
"blockheight": 103,
"reserved": false
}
],
"channels": [
{
"peer_id": "0205b3210eb490efd5debbed87df4b507f50dbbde9ab7980faf0367bbe8d27c734",
"connected": true,
"state": "CHANNELD_NORMAL",
"channel_id": "2364e5741586c66befb7407c8d452c4dfd6eb76eeecc054e7a887a9b7c995e20",
"short_channel_id": "103x1x0",
"our_amount_msat": 1000000000,
"amount_msat": 1000000000,
"funding_txid": "205e997c9b7a887a4e05ccee6eb76efd4d2c458d7c40b7ef6bc6861574e56423",
"funding_output": 0
}
]
}
Let's stop the node l1
and restart it with experimental-splicing
at
the command line:
◉ tony@tony:~/clnlive:
$ l1-cli stop
"Shutdown complete"
◉ tony@tony:~/clnlive:
$ lightningd --lightning-dir=/tmp/l1-regtest --experimental-splicing --daemon
Finally, we can verify l1
is now running with experimental-splicing
enabled:
◉ tony@tony:~/clnlive:
$ l1-cli listconfigs experimental-splicing
{
"configs": {
"experimental-splicing": {
"set": true,
"source": "cmdline"
}
}
}
Note that we didn't have to recompile Core Lightning to make this work.
Both nodes need to support splicing to be able to resize the channel
using splicing. Hence, we have to restart the node l2
with
experimental-splicing
.
First we stop the node l2
:
◉ tony@tony:~/clnlive:
$ l2-cli stop
"Shutdown complete"
Then we add the line experimental-splicing
in the config file
/tmp/l2-regtest/config
network=regtest
log-level=debug
log-file=/tmp/l2-regtest/log
addr=localhost:7272
allow-deprecated-apis=false
experimental-splicing
and we restart l2
like this:
◉ tony@tony:~/clnlive:
$ lightningd --lightning-dir=/tmp/l2-regtest --daemon
Finally, we can verify l2
is now running with experimental-splicing
enabled:
◉ tony@tony:~/clnlive:
$ l2-cli listconfigs experimental-splicing
{
"configs": {
"experimental-splicing": {
"set": true,
"source": "/tmp/l2-regtest/config:6"
}
}
}
We can also verify that features supported by the node l2
have changed
accordingly with the fact that it now supports splicing:
◉ tony@tony:~/clnlive:
$ l1-cli listpeers
{
"peers": [
{
"id": "0205b3210eb490efd5debbed87df4b507f50dbbde9ab7980faf0367bbe8d27c734",
"connected": true,
"num_channels": 1,
"netaddr": [
"127.0.0.1:7272"
],
"features": "080000000000000000000000000008a0080a0269a2"
}
]
}
Splice in to add 100000sat to channel between the node l1 and l2
First the node l1
funds a PSBT with some extra sats to pay the fees:
◉ tony@tony:~/clnlive:
$ l1-cli -k fundpsbt satoshi=110000sat feerate=slow startweight=166 excess_as_change=true
{
"psbt": "cHNidP8BAF4CAAAAASNk5XQVhsZr77dAfI1FLE39brdu7swFTnqIept8mV4gAQAAAAD9////AdDv5AUAAAAAIlEgdjlq+ZV//+qV0BlYZXttczsmC1VMXl5CjZytIOPnejlsAAAAAAEA9gIAAAAAAQE7i4rb7WoWAP1XDc235eIuKj0OnsKjE/WcynVL4SItUgAAAAAA/f///wJAQg8AAAAAACIAIJ2p+5U0CvA9A/dX+m8UD7YL2wheSd4SDxoBJJwP0YKhGp7mBQAAAAAiUSB4edY0fNlD9rxUwh2CD2HlpOEqVXkj+MU2Kfw4v08jMgJHMEQCIDgMDt3Sz7MUMCWbkB1rLwlu8ZwiRXgys5qW25vQmgz/AiBZjSp24vvRdW3koA/WZjP7sUnOPkdKfl/sVqqbDw7SywEhA1WBoZj3zB0lL9+dWZa5fuJPWJwqGv90hkenMMrujLZHZgAAAAEBKxqe5gUAAAAAIlEgeHnWNHzZQ/a8VMIdgg9h5aThKlV5I/jFNin8OL9PIzIAAA==",
"feerate_per_kw": 253,
"estimated_final_weight": 609,
"excess_msat": 0,
"change_outnum": 0,
"reservations": [
{
"txid": "205e997c9b7a887a4e05ccee6eb76efd4d2c458d7c40b7ef6bc6861574e56423",
"vout": 1,
"was_reserved": false,
"reserved": true,
"reserved_to_block": 180
}
]
}
Then the node l1
uses that previous PSBT as value of the key
initialpsbt
in the command splice_init
:
◉ tony@tony:~/clnlive:
$ l1-cli -k splice_init channel_id=2364e5741586c66befb7407c8d452c4dfd6eb76eeecc054e7a887a9b7c995e20 \
► relative_amount=100000 \
► initialpsbt=cHNidP8BAF4CAAAAASNk5XQVhsZr77dAfI1FLE39brdu7swFTnqIept8mV4gAQAAAAD9////AdDv5AUAAAAAIlEgdjlq+ZV//+qV0BlYZXttczsmC1VMXl5CjZytIOPnejlsAAAAAAEA9gIAAAAAAQE7i4rb7WoWAP1XDc235eIuKj0OnsKjE/WcynVL4SItUgAAAAAA/f///wJAQg8AAAAAACIAIJ2p+5U0CvA9A/dX+m8UD7YL2wheSd4SDxoBJJwP0YKhGp7mBQAAAAAiUSB4edY0fNlD9rxUwh2CD2HlpOEqVXkj+MU2Kfw4v08jMgJHMEQCIDgMDt3Sz7MUMCWbkB1rLwlu8ZwiRXgys5qW25vQmgz/AiBZjSp24vvRdW3koA/WZjP7sUnOPkdKfl/sVqqbDw7SywEhA1WBoZj3zB0lL9+dWZa5fuJPWJwqGv90hkenMMrujLZHZgAAAAEBKxqe5gUAAAAAIlEgeHnWNHzZQ/a8VMIdgg9h5aThKlV5I/jFNin8OL9PIzIAAA==
{
"psbt": "cHNidP8BAgQCAAAAAQMEbAAAAAEEAQIBBQECAQYBAwH7BAIAAAAAAQD2AgAAAAABATuLitvtahYA/VcNzbfl4i4qPQ6ewqMT9ZzKdUvhIi1SAAAAAAD9////AkBCDwAAAAAAIgAgnan7lTQK8D0D91f6bxQPtgvbCF5J3hIPGgEknA/RgqEanuYFAAAAACJRIHh51jR82UP2vFTCHYIPYeWk4SpVeSP4xTYp/Di/TyMyAkcwRAIgOAwO3dLPsxQwJZuQHWsvCW7xnCJFeDKzmpbbm9CaDP8CIFmNKnbi+9F1beSgD9ZmM/uxSc4+R0p+X+xWqpsPDtLLASEDVYGhmPfMHSUv351Zlrl+4k9YnCoa/3SGR6cwyu6MtkdmAAAAAQErQEIPAAAAAAAiACCdqfuVNArwPQP3V/pvFA+2C9sIXkneEg8aASScD9GCoQEFR1IhAuEaqjleV/QHeAYbOYXFjlYyMjI0jkjC4ZSGdWFwsRkMIQPuF0K/Nyv334JI8U9sLDOz65B5Yj6CBWN1R/KhZiKUmVKuAQ4gI2TldBWGxmvvt0B8jUUsTf1ut27uzAVOeoh6m3yZXiABDwQAAAAAARAEAAAAAAz8CWxpZ2h0bmluZwEINPAjtW3bj34AAQD2AgAAAAABATuLitvtahYA/VcNzbfl4i4qPQ6ewqMT9ZzKdUvhIi1SAAAAAAD9////AkBCDwAAAAAAIgAgnan7lTQK8D0D91f6bxQPtgvbCF5J3hIPGgEknA/RgqEanuYFAAAAACJRIHh51jR82UP2vFTCHYIPYeWk4SpVeSP4xTYp/Di/TyMyAkcwRAIgOAwO3dLPsxQwJZuQHWsvCW7xnCJFeDKzmpbbm9CaDP8CIFmNKnbi+9F1beSgD9ZmM/uxSc4+R0p+X+xWqpsPDtLLASEDVYGhmPfMHSUv351Zlrl+4k9YnCoa/3SGR6cwyu6MtkdmAAAAAQErGp7mBQAAAAAiUSB4edY0fNlD9rxUwh2CD2HlpOEqVXkj+MU2Kfw4v08jMgEOICNk5XQVhsZr77dAfI1FLE39brdu7swFTnqIept8mV4gAQ8EAQAAAAEQBP3///8M/AlsaWdodG5pbmcBCNha7AErWMyuAAEDCNDv5AUAAAAAAQQiUSB2OWr5lX//6pXQGVhle21zOyYLVUxeXkKNnK0g4+d6OQz8CWxpZ2h0bmluZwEI40TubF/EhR4AAQMIAAAAAAAAAAABBCIAIJ2p+5U0CvA9A/dX+m8UD7YL2wheSd4SDxoBJJwP0YKhDPwJbGlnaHRuaW5nAQjrDjTtqP057AA="
}
Then l1
update the splice with the command splice_update
using the
PSBT of the previous output:
◉ tony@tony:~/clnlive:
$ l1-cli -k splice_update channel_id=2364e5741586c66befb7407c8d452c4dfd6eb76eeecc054e7a887a9b7c995e20 \
► psbt=cHNidP8BAgQCAAAAAQMEbAAAAAEEAQIBBQECAQYBAwH7BAIAAAAAAQD2AgAAAAABATuLitvtahYA/VcNzbfl4i4qPQ6ewqMT9ZzKdUvhIi1SAAAAAAD9////AkBCDwAAAAAAIgAgnan7lTQK8D0D91f6bxQPtgvbCF5J3hIPGgEknA/RgqEanuYFAAAAACJRIHh51jR82UP2vFTCHYIPYeWk4SpVeSP4xTYp/Di/TyMyAkcwRAIgOAwO3dLPsxQwJZuQHWsvCW7xnCJFeDKzmpbbm9CaDP8CIFmNKnbi+9F1beSgD9ZmM/uxSc4+R0p+X+xWqpsPDtLLASEDVYGhmPfMHSUv351Zlrl+4k9YnCoa/3SGR6cwyu6MtkdmAAAAAQErQEIPAAAAAAAiACCdqfuVNArwPQP3V/pvFA+2C9sIXkneEg8aASScD9GCoQEFR1IhAuEaqjleV/QHeAYbOYXFjlYyMjI0jkjC4ZSGdWFwsRkMIQPuF0K/Nyv334JI8U9sLDOz65B5Yj6CBWN1R/KhZiKUmVKuAQ4gI2TldBWGxmvvt0B8jUUsTf1ut27uzAVOeoh6m3yZXiABDwQAAAAAARAEAAAAAAz8CWxpZ2h0bmluZwEINPAjtW3bj34AAQD2AgAAAAABATuLitvtahYA/VcNzbfl4i4qPQ6ewqMT9ZzKdUvhIi1SAAAAAAD9////AkBCDwAAAAAAIgAgnan7lTQK8D0D91f6bxQPtgvbCF5J3hIPGgEknA/RgqEanuYFAAAAACJRIHh51jR82UP2vFTCHYIPYeWk4SpVeSP4xTYp/Di/TyMyAkcwRAIgOAwO3dLPsxQwJZuQHWsvCW7xnCJFeDKzmpbbm9CaDP8CIFmNKnbi+9F1beSgD9ZmM/uxSc4+R0p+X+xWqpsPDtLLASEDVYGhmPfMHSUv351Zlrl+4k9YnCoa/3SGR6cwyu6MtkdmAAAAAQErGp7mBQAAAAAiUSB4edY0fNlD9rxUwh2CD2HlpOEqVXkj+MU2Kfw4v08jMgEOICNk5XQVhsZr77dAfI1FLE39brdu7swFTnqIept8mV4gAQ8EAQAAAAEQBP3///8M/AlsaWdodG5pbmcBCNha7AErWMyuAAEDCNDv5AUAAAAAAQQiUSB2OWr5lX//6pXQGVhle21zOyYLVUxeXkKNnK0g4+d6OQz8CWxpZ2h0bmluZwEI40TubF/EhR4AAQMIAAAAAAAAAAABBCIAIJ2p+5U0CvA9A/dX+m8UD7YL2wheSd4SDxoBJJwP0YKhDPwJbGlnaHRuaW5nAQjrDjTtqP057AA=
{
"psbt": "cHNidP8BAgQCAAAAAQMEbAAAAAEEAQIBBQECAQYBAwH7BAIAAAAAAQD2AgAAAAABATuLitvtahYA/VcNzbfl4i4qPQ6ewqMT9ZzKdUvhIi1SAAAAAAD9////AkBCDwAAAAAAIgAgnan7lTQK8D0D91f6bxQPtgvbCF5J3hIPGgEknA/RgqEanuYFAAAAACJRIHh51jR82UP2vFTCHYIPYeWk4SpVeSP4xTYp/Di/TyMyAkcwRAIgOAwO3dLPsxQwJZuQHWsvCW7xnCJFeDKzmpbbm9CaDP8CIFmNKnbi+9F1beSgD9ZmM/uxSc4+R0p+X+xWqpsPDtLLASEDVYGhmPfMHSUv351Zlrl+4k9YnCoa/3SGR6cwyu6MtkdmAAAAAQErQEIPAAAAAAAiACCdqfuVNArwPQP3V/pvFA+2C9sIXkneEg8aASScD9GCoQEOICNk5XQVhsZr77dAfI1FLE39brdu7swFTnqIept8mV4gAQ8EAAAAAAEQBAAAAAAM/AlsaWdodG5pbmcBCDTwI7Vt249+AAEA9gIAAAAAAQE7i4rb7WoWAP1XDc235eIuKj0OnsKjE/WcynVL4SItUgAAAAAA/f///wJAQg8AAAAAACIAIJ2p+5U0CvA9A/dX+m8UD7YL2wheSd4SDxoBJJwP0YKhGp7mBQAAAAAiUSB4edY0fNlD9rxUwh2CD2HlpOEqVXkj+MU2Kfw4v08jMgJHMEQCIDgMDt3Sz7MUMCWbkB1rLwlu8ZwiRXgys5qW25vQmgz/AiBZjSp24vvRdW3koA/WZjP7sUnOPkdKfl/sVqqbDw7SywEhA1WBoZj3zB0lL9+dWZa5fuJPWJwqGv90hkenMMrujLZHZgAAAAEBKxqe5gUAAAAAIlEgeHnWNHzZQ/a8VMIdgg9h5aThKlV5I/jFNin8OL9PIzIBDiAjZOV0FYbGa++3QHyNRSxN/W63bu7MBU56iHqbfJleIAEPBAEAAAABEAT9////DPwJbGlnaHRuaW5nAQjYWuwBK1jMrgABAwjQ7+QFAAAAAAEEIlEgdjlq+ZV//+qV0BlYZXttczsmC1VMXl5CjZytIOPnejkM/AlsaWdodG5pbmcBCONE7mxfxIUeAAEDCODIEAAAAAAAAQQiACCdqfuVNArwPQP3V/pvFA+2C9sIXkneEg8aASScD9GCoQz8CWxpZ2h0bmluZwEI6w407aj9OewA",
"commitments_secured": true
}
As the commitments_secured
is true
the node l1
can proceed and signed
the PSBT returned by splice_update
command:
◉ tony@tony:~/clnlive:
$ l1-cli -k signpsbt psbt=cHNidP8BAgQCAAAAAQMEbAAAAAEEAQIBBQECAQYBAwH7BAIAAAAAAQD2AgAAAAABATuLitvtahYA/VcNzbfl4i4qPQ6ewqMT9ZzKdUvhIi1SAAAAAAD9////AkBCDwAAAAAAIgAgnan7lTQK8D0D91f6bxQPtgvbCF5J3hIPGgEknA/RgqEanuYFAAAAACJRIHh51jR82UP2vFTCHYIPYeWk4SpVeSP4xTYp/Di/TyMyAkcwRAIgOAwO3dLPsxQwJZuQHWsvCW7xnCJFeDKzmpbbm9CaDP8CIFmNKnbi+9F1beSgD9ZmM/uxSc4+R0p+X+xWqpsPDtLLASEDVYGhmPfMHSUv351Zlrl+4k9YnCoa/3SGR6cwyu6MtkdmAAAAAQErQEIPAAAAAAAiACCdqfuVNArwPQP3V/pvFA+2C9sIXkneEg8aASScD9GCoQEOICNk5XQVhsZr77dAfI1FLE39brdu7swFTnqIept8mV4gAQ8EAAAAAAEQBAAAAAAM/AlsaWdodG5pbmcBCDTwI7Vt249+AAEA9gIAAAAAAQE7i4rb7WoWAP1XDc235eIuKj0OnsKjE/WcynVL4SItUgAAAAAA/f///wJAQg8AAAAAACIAIJ2p+5U0CvA9A/dX+m8UD7YL2wheSd4SDxoBJJwP0YKhGp7mBQAAAAAiUSB4edY0fNlD9rxUwh2CD2HlpOEqVXkj+MU2Kfw4v08jMgJHMEQCIDgMDt3Sz7MUMCWbkB1rLwlu8ZwiRXgys5qW25vQmgz/AiBZjSp24vvRdW3koA/WZjP7sUnOPkdKfl/sVqqbDw7SywEhA1WBoZj3zB0lL9+dWZa5fuJPWJwqGv90hkenMMrujLZHZgAAAAEBKxqe5gUAAAAAIlEgeHnWNHzZQ/a8VMIdgg9h5aThKlV5I/jFNin8OL9PIzIBDiAjZOV0FYbGa++3QHyNRSxN/W63bu7MBU56iHqbfJleIAEPBAEAAAABEAT9////DPwJbGlnaHRuaW5nAQjYWuwBK1jMrgABAwjQ7+QFAAAAAAEEIlEgdjlq+ZV//+qV0BlYZXttczsmC1VMXl5CjZytIOPnejkM/AlsaWdodG5pbmcBCONE7mxfxIUeAAEDCODIEAAAAAAAAQQiACCdqfuVNArwPQP3V/pvFA+2C9sIXkneEg8aASScD9GCoQz8CWxpZ2h0bmluZwEI6w407aj9OewA
{
"signed_psbt": "cHNidP8BAgQCAAAAAQMEbAAAAAEEAQIBBQECAQYBAwH7BAIAAAAAAQD2AgAAAAABATuLitvtahYA/VcNzbfl4i4qPQ6ewqMT9ZzKdUvhIi1SAAAAAAD9////AkBCDwAAAAAAIgAgnan7lTQK8D0D91f6bxQPtgvbCF5J3hIPGgEknA/RgqEanuYFAAAAACJRIHh51jR82UP2vFTCHYIPYeWk4SpVeSP4xTYp/Di/TyMyAkcwRAIgOAwO3dLPsxQwJZuQHWsvCW7xnCJFeDKzmpbbm9CaDP8CIFmNKnbi+9F1beSgD9ZmM/uxSc4+R0p+X+xWqpsPDtLLASEDVYGhmPfMHSUv351Zlrl+4k9YnCoa/3SGR6cwyu6MtkdmAAAAAQErQEIPAAAAAAAiACCdqfuVNArwPQP3V/pvFA+2C9sIXkneEg8aASScD9GCoQEOICNk5XQVhsZr77dAfI1FLE39brdu7swFTnqIept8mV4gAQ8EAAAAAAEQBAAAAAAM/AlsaWdodG5pbmcBCDTwI7Vt249+AAEA9gIAAAAAAQE7i4rb7WoWAP1XDc235eIuKj0OnsKjE/WcynVL4SItUgAAAAAA/f///wJAQg8AAAAAACIAIJ2p+5U0CvA9A/dX+m8UD7YL2wheSd4SDxoBJJwP0YKhGp7mBQAAAAAiUSB4edY0fNlD9rxUwh2CD2HlpOEqVXkj+MU2Kfw4v08jMgJHMEQCIDgMDt3Sz7MUMCWbkB1rLwlu8ZwiRXgys5qW25vQmgz/AiBZjSp24vvRdW3koA/WZjP7sUnOPkdKfl/sVqqbDw7SywEhA1WBoZj3zB0lL9+dWZa5fuJPWJwqGv90hkenMMrujLZHZgAAAAEBKxqe5gUAAAAAIlEgeHnWNHzZQ/a8VMIdgg9h5aThKlV5I/jFNin8OL9PIzIBDiAjZOV0FYbGa++3QHyNRSxN/W63bu7MBU56iHqbfJleIAEPBAEAAAABEAT9////ARNAn1ief1Bc2LsrPQTcSdg7A4zbvw1Qht1ujTxnFQ4FK6Zg/vqEk6w4hEV04Pw5TKwjcyTs4Py0tRSnpTb+c4L2RyEWSM4xYkzRqLmfsVqnRrODxgXc/lzgKrbsicGdcjurlOYJAEepcUUAAAAADPwJbGlnaHRuaW5nAQjYWuwBK1jMrgABAwjQ7+QFAAAAAAEEIlEgdjlq+ZV//+qV0BlYZXttczsmC1VMXl5CjZytIOPnejkhB8V1yT0zJd1z6oZgSQuMvSicMlABXx/NnR40UgvEyK2ZCQB2TDivBAAAAAz8CWxpZ2h0bmluZwEI40TubF/EhR4AAQMI4MgQAAAAAAABBCIAIJ2p+5U0CvA9A/dX+m8UD7YL2wheSd4SDxoBJJwP0YKhDPwJbGlnaHRuaW5nAQjrDjTtqP057AA="
}
Finally, to terminate the splice, the node l1
uses the command
splice_signed
and passes it the previous signed_psbt
as imput along
with the channel id of the channel being spliced:
◉ tony@tony:~/clnlive:
$ l1-cli -k splice_signed channel_id=2364e5741586c66befb7407c8d452c4dfd6eb76eeecc054e7a887a9b7c995e20 \
► psbt=cHNidP8BAgQCAAAAAQMEbAAAAAEEAQIBBQECAQYBAwH7BAIAAAAAAQD2AgAAAAABATuLitvtahYA/VcNzbfl4i4qPQ6ewqMT9ZzKdUvhIi1SAAAAAAD9////AkBCDwAAAAAAIgAgnan7lTQK8D0D91f6bxQPtgvbCF5J3hIPGgEknA/RgqEanuYFAAAAACJRIHh51jR82UP2vFTCHYIPYeWk4SpVeSP4xTYp/Di/TyMyAkcwRAIgOAwO3dLPsxQwJZuQHWsvCW7xnCJFeDKzmpbbm9CaDP8CIFmNKnbi+9F1beSgD9ZmM/uxSc4+R0p+X+xWqpsPDtLLASEDVYGhmPfMHSUv351Zlrl+4k9YnCoa/3SGR6cwyu6MtkdmAAAAAQErQEIPAAAAAAAiACCdqfuVNArwPQP3V/pvFA+2C9sIXkneEg8aASScD9GCoQEOICNk5XQVhsZr77dAfI1FLE39brdu7swFTnqIept8mV4gAQ8EAAAAAAEQBAAAAAAM/AlsaWdodG5pbmcBCDTwI7Vt249+AAEA9gIAAAAAAQE7i4rb7WoWAP1XDc235eIuKj0OnsKjE/WcynVL4SItUgAAAAAA/f///wJAQg8AAAAAACIAIJ2p+5U0CvA9A/dX+m8UD7YL2wheSd4SDxoBJJwP0YKhGp7mBQAAAAAiUSB4edY0fNlD9rxUwh2CD2HlpOEqVXkj+MU2Kfw4v08jMgJHMEQCIDgMDt3Sz7MUMCWbkB1rLwlu8ZwiRXgys5qW25vQmgz/AiBZjSp24vvRdW3koA/WZjP7sUnOPkdKfl/sVqqbDw7SywEhA1WBoZj3zB0lL9+dWZa5fuJPWJwqGv90hkenMMrujLZHZgAAAAEBKxqe5gUAAAAAIlEgeHnWNHzZQ/a8VMIdgg9h5aThKlV5I/jFNin8OL9PIzIBDiAjZOV0FYbGa++3QHyNRSxN/W63bu7MBU56iHqbfJleIAEPBAEAAAABEAT9////ARNAn1ief1Bc2LsrPQTcSdg7A4zbvw1Qht1ujTxnFQ4FK6Zg/vqEk6w4hEV04Pw5TKwjcyTs4Py0tRSnpTb+c4L2RyEWSM4xYkzRqLmfsVqnRrODxgXc/lzgKrbsicGdcjurlOYJAEepcUUAAAAADPwJbGlnaHRuaW5nAQjYWuwBK1jMrgABAwjQ7+QFAAAAAAEEIlEgdjlq+ZV//+qV0BlYZXttczsmC1VMXl5CjZytIOPnejkhB8V1yT0zJd1z6oZgSQuMvSicMlABXx/NnR40UgvEyK2ZCQB2TDivBAAAAAz8CWxpZ2h0bmluZwEI40TubF/EhR4AAQMI4MgQAAAAAAABBCIAIJ2p+5U0CvA9A/dX+m8UD7YL2wheSd4SDxoBJJwP0YKhDPwJbGlnaHRuaW5nAQjrDjTtqP057AA=
{
"tx": "020000000001022364e5741586c66befb7407c8d452c4dfd6eb76eeecc054e7a887a9b7c995e200000000000000000002364e5741586c66befb7407c8d452c4dfd6eb76eeecc054e7a887a9b7c995e200100000000fdffffff02d0efe4050000000022512076396af9957fffea95d01958657b6d733b260b554c5e5e428d9cad20e3e77a39e0c81000000000002200209da9fb95340af03d03f757fa6f140fb60bdb085e49de120f1a01249c0fd182a104004730440220337b56db83160c533bdd5b01242b29da84ea696d0b7dd7b6102b1def3b19cc5b02206c5776636228c7e04cda1978b4b71ef284bddd17bd6945402d01dcccc654bc7b01473044022051e1b63ffea311220364fc5114cdf75f021d49bd8029a621633a44fe882c99ab022034823947f72faa85b4f3b6b5b0240295e44fb6246b7e9eddaa84f12e8b36b2870147522102e11aaa395e57f40778061b3985c58e56323232348e48c2e19486756170b1190c2103ee1742bf372bf7df8248f14f6c2c33b3eb9079623e8205637547f2a16622949952ae01409f589e7f505cd8bb2b3d04dc49d83b038cdbbf0d5086dd6e8d3c67150e052ba660fefa8493ac38844574e0fc394cac237324ece0fcb4b514a7a536fe7382f6476c000000",
"txid": "a02600e06daee79e8fc8c4cb4f9ceea56eb24701bddc2833c225773ff4e32b29"
}
At that point, to make the splice effective and the channel resized,
both nodes are waiting for the transaction 02000...
with txid
a0260...32b29
to be including in a block and to get confirmed 6 times:
As we run the regtest chain by ourself, we can first check that the
transaction with the txid a0260...32b29
is in the mempool and then
mine 6 blocks:
◉ tony@tony:~/clnlive:
$ alias bt-cli
alias bt-cli='bitcoin-cli -datadir=$PATH_TO_BITCOIN -regtest'
◉ tony@tony:~/clnlive:
$ bt-cli getrawmempool
[
"a02600e06daee79e8fc8c4cb4f9ceea56eb24701bddc2833c225773ff4e32b29"
]
◉ tony@tony:~/clnlive:
$ bt-cli -rpcwallet=default getnewaddress
bcrt1qnk2vd6xz48my456tt009q6j4yuxx9hz8akhy7a
◉ tony@tony:~/clnlive:
$ bt-cli generatetoaddress 6 bcrt1qnk2vd6xz48my456tt009q6j4yuxx9hz8akhy7a
[
"2be57cd5b3a071f0e8274da6248c59da7128b6f3161a8d43fea682638f8f2509",
"326f91e5918abbdbcd397055584575604f922d0ec609e9de5547dae4d44ef7d7",
"303bcea6fc15c2d59cf07fe258f04a640e0f1f65b3fc1e274730ff8f5418e797",
"7f5bd209094c494c88a97174c230f779c6d814c4f3867f89f5a631c555f719d0",
"3fe52d447e2c411dc32d6076d643d0707d329139d67337869ed552e8fed200ee",
"6da9764ecef5f8576180b162bb22afbbe04d744a6e9a1cdba480bb7925b2dd7b"
]
As CLN takes some time to get (maybe every 30s, I don't know the
numbers) data from the bitcoin backend, we can quickly check that
the channel we are resizing is in the state CHANNELD_AWAITING_SPLICE
:
◉ tony@tony:~/clnlive:
$ l1-cli listfunds
{
"outputs": [
{
"txid": "a02600e06daee79e8fc8c4cb4f9ceea56eb24701bddc2833c225773ff4e32b29",
"output": 0,
"amount_msat": 98889680000,
"scriptpubkey": "512076396af9957fffea95d01958657b6d733b260b554c5e5e428d9cad20e3e77a39",
"address": "bcrt1pwcuk47v40ll749wsr9vx27mdwvajvz64f309us5dnjkjpcl80gusm0x226",
"status": "unconfirmed",
"reserved": false
},
{
"txid": "205e997c9b7a887a4e05ccee6eb76efd4d2c458d7c40b7ef6bc6861574e56423",
"output": 1,
"amount_msat": 98999834000,
"scriptpubkey": "51207879d6347cd943f6bc54c21d820f61e5a4e12a557923f8c53629fc38bf4f2332",
"address": "bcrt1p0puavdrum9pld0z5cgwcyrmpukjwz2j40y3l33fk987r3060yveqdj4cyk",
"status": "confirmed",
"blockheight": 103,
"reserved": true,
"reserved_to_block": 180
}
],
"channels": [
{
"peer_id": "0205b3210eb490efd5debbed87df4b507f50dbbde9ab7980faf0367bbe8d27c734",
"connected": true,
"state": "CHANNELD_AWAITING_SPLICE",
"channel_id": "2364e5741586c66befb7407c8d452c4dfd6eb76eeecc054e7a887a9b7c995e20",
"short_channel_id": "103x1x0",
"our_amount_msat": 1000000000,
"amount_msat": 1000000000,
"funding_txid": "205e997c9b7a887a4e05ccee6eb76efd4d2c458d7c40b7ef6bc6861574e56423",
"funding_output": 0
}
]
}
And after a few more seconds we see that the channel between the node
l1
and l2
has been resized:
◉ tony@tony:~/clnlive:
$ l1-cli listfunds
{
"outputs": [
{
"txid": "a02600e06daee79e8fc8c4cb4f9ceea56eb24701bddc2833c225773ff4e32b29",
"output": 0,
"amount_msat": 98889680000,
"scriptpubkey": "512076396af9957fffea95d01958657b6d733b260b554c5e5e428d9cad20e3e77a39",
"address": "bcrt1pwcuk47v40ll749wsr9vx27mdwvajvz64f309us5dnjkjpcl80gusm0x226",
"status": "confirmed",
"blockheight": 109,
"reserved": false
}
],
"channels": [
{
"peer_id": "0205b3210eb490efd5debbed87df4b507f50dbbde9ab7980faf0367bbe8d27c734",
"connected": true,
"state": "CHANNELD_NORMAL",
"channel_id": "2364e5741586c66befb7407c8d452c4dfd6eb76eeecc054e7a887a9b7c995e20",
"short_channel_id": "109x1x1",
"our_amount_msat": 1100000000,
"amount_msat": 1100000000,
"funding_txid": "a02600e06daee79e8fc8c4cb4f9ceea56eb24701bddc2833c225773ff4e32b29",
"funding_output": 1
}
]
}
Taproot addresses / p2tr
Vincenzo
: This is a very cool feature and the first step to include
taproot in the Lightning Network. Basically, Taproot was enable 1 or
more years ago. In Core Lightning, Taproot is just used a the wallet
level.
Note that Taproot addresses (p2tr) on Bitcoin mainnet start with bc1p
and bech32 addresses on mainnet start with bc1q
.
If we look the outputs
field of the JSON objects returned by listfunds
we used so far in that presentation, the addresses was p2tr addresses.
Some examples of newaddr
command and p2tr addresses:
◉ tony@tony:~/clnlive:
$ l1-cli newaddr
{
"bech32": "bcrt1q0esx06yg3t09u9n4wdl753tsz4v79f05czrqs2"
}
◉ tony@tony:~/clnlive:
$ l1-cli newaddr p2tr
{
"p2tr": "bcrt1pkw5pysm32pyc64s8gahwvy2py86wwhj78kd4tl9y8thyjlwewlcqzwj2qx"
}
◉ tony@tony:~/clnlive:
$ l1-cli newaddr all
{
"bech32": "bcrt1qsqk8j872je446lpkgtg9d3ke664qyd87t5yu0w",
"p2tr": "bcrt1pau9p4jgu4jhfgqaa9pz6qzucuu4qc9jj88k9zt0dpyz5jhtyrv4qvc0ew5"
}
renepay plugin
Vincenzo
: renepay
is an experimental plugin that implements Pickhardt
R. and Richter S. research about improving the path finding around the
Lightning Network. Currently all the implementation are using the
basic Dijkstra algorithm. The renepay
uses something a little more
technical I would say, in the sense that we use an algorithm that is
the min cost flow and we don't use anymore Dijkstra. And I think it
is also a probabilistic algorithm. Eduardo Quintana-Miranda
implemented all the math of that plugin. But renepay
is a plugin that
needs more usage from the people using the Lightning Network because
we are collecting bug reports to improve it. This plugin is
experimental because we don't know how far we can get better. I think
we will get better with this algorithm but currently there are no
open data. There is simulation but no open data. I think CLN is the
first implementation that implement the full Rene proposal. So if
someone want to try this new way of paying, it is good moment to
report the bugs. Something to add is if the plugin crash, Core
Lightning doesn't crash, so don't worry about that. When I try a
payment, usually I try renepay
, if it works okay, if crash I will try
pay
.
Even if in our little network of only 2 nodes running on regtest,
using renepay
doesn't make much sens, let's do it just to demonstrate
that in its most simple use case, its interface is the same as pay
command: we just pass it a bolt11 invoice we want to pay as argument.
Back to our terminal, the node l2
generates the following invoice
◉ tony@tony:~/clnlive:
$ l2-cli invoice 10000sat label pizza
{
"payment_hash": "3a315c41cae8a32ad86d16914b8a3edd27baa2ad9b262c651f9bb05d8bfe40ad",
"expires_at": 1694100167,
"bolt11": "lnbcrt100u1pj0pvz8sp5ed2wdf08knan6wzkqnld93f35h2khlh3pnsryrqdxckg3rxt65tspp58gc4csw2az3j4krdz6g5hz37m5nm4g4dnvnzceglnwc9mzl7gzksdqgwp5h57npxqyjw5qcqp29qxpqysgq35e3htpwntwtnh7usnh5v0nypk9ju77932zn49rkma436t64ltj8dvetrh9ekmpm4fxs42ejzs6zlv4pz5tccq7vsme5s4ct07jesvqp0hav94",
"payment_secret": "cb54e6a5e7b4fb3d385604fed2c531a5d56bfef10ce0320c0d362c888ccbd517",
"created_index": 1,
"warning_capacity": "Insufficient incoming channel capacity to pay invoice"
}
that the node l1
pays using renepay
command:
◉ tony@tony:~/clnlive:
$ l1-cli renepay lnbcrt100u1pj0pvz8sp5ed2wdf08knan6wzkqnld93f35h2khlh3pnsryrqdxckg3rxt65tspp58gc4csw2az3j4krdz6g5hz37m5nm4g4dnvnzceglnwc9mzl7gzksdqgwp5h57npxqyjw5qcqp29qxpqysgq35e3htpwntwtnh7usnh5v0nypk9ju77932zn49rkma436t64ltj8dvetrh9ekmpm4fxs42ejzs6zlv4pz5tccq7vsme5s4ct07jesvqp0hav94
# we have computed a set of 1 flows with probability 1.000, fees 0msat and delay 10
# Flow 1: amount=10000000msat prob=1.000 fees=0msat delay=0 path=-109x1x1/1(min=max=1088360000msat)->
# Flow 1: Success
{
"payment_preimage": "cd3d5f225feaa7edbb920e2ec25b106ad0ba3ea014dc768c3f13d8a173d6fbd0",
"payment_hash": "3a315c41cae8a32ad86d16914b8a3edd27baa2ad9b262c651f9bb05d8bfe40ad",
"created_at": 1693495380.440,
"parts": 1,
"amount_msat": 10000000,
"amount_sent_msat": 10000000,
"status": "complete",
"destination": "0205b3210eb490efd5debbed87df4b507f50dbbde9ab7980faf0367bbe8d27c734"
}
self-payment with the pay command
Vincenzo
: This is actually a feature I requested Rusty to implement
and I tried to implement it but it was a bit tricky. This allows a
node to pay an invoice that it also generated. It doesn't make sense
if you think of a single Lightning node or a normal network of nodes,
but this is the kind of payment that are useful for applications like
Fedimint where the logics of an invoice has different meaning.
Sometime the invoice is generated by the same node and the payment is
for confirmation. This feature is just allowing an invoice to be paid
by the same node.
Let's make a self-payment.
Let's stop the node l2
that no longer need for the demo of today:
◉ tony@tony:~/clnlive:
$ l2-cli stop
"Shutdown complete"
The node l1
does a sefl-payment by first generating an invoice, then
paying that invoice and finally we list the l1
's invoices to be sure
the self-payment did really happened:
◉ tony@tony:~/clnlive:
$ l1-cli invoice 20000sat label pizza
{
"payment_hash": "97e344f53a5eadd650cd1fb2ac87a2c268f358e0fb70022194e896ea9dfe0f48",
"expires_at": 1694100463,
"bolt11": "lnbcrt200u1pj0pvt0sp5wszfgmzp5ccymdnc4getzdw0m7tryn82458hlq7gq4tqnnwr86kspp5jl35faf6t6kav5xdr7e2epazcf50xk8qldcqygv5aztw4807payqdqgwp5h57npxqyjw5qcqp29qxpqysgqey60xcj9gkt7s6vjy8fpptfw6dnefcq3n7qzrnrz9ycmza6hxsq4p4x3kqll3cuzhcl9z7v7c3e2pnypkv952ml93qc76jqdmr3h75spd4xxtw",
"payment_secret": "7404946c41a6304db678aa32b135cfdf96324ceaad0f7f83c8055609cdc33ead",
"created_index": 1,
"warning_capacity": "Insufficient incoming channel capacity to pay invoice"
}
◉ tony@tony:~/clnlive:
$ l1-cli pay lnbcrt200u1pj0pvt0sp5wszfgmzp5ccymdnc4getzdw0m7tryn82458hlq7gq4tqnnwr86kspp5jl35faf6t6kav5xdr7e2epazcf50xk8qldcqygv5aztw4807payqdqgwp5h57npxqyjw5qcqp29qxpqysgqey60xcj9gkt7s6vjy8fpptfw6dnefcq3n7qzrnrz9ycmza6hxsq4p4x3kqll3cuzhcl9z7v7c3e2pnypkv952ml93qc76jqdmr3h75spd4xxtw
{
"destination": "02acf0a36ce2e27d13489a202bafc7065494b39650fbac2060ec9b0f6bd2c749c6",
"payment_hash": "97e344f53a5eadd650cd1fb2ac87a2c268f358e0fb70022194e896ea9dfe0f48",
"created_at": 1693495677.905,
"parts": 1,
"amount_msat": 20000000,
"amount_sent_msat": 20000000,
"payment_preimage": "5cc445be2a358359421267bcd65be03d45fe48e37508a0d83dbbfe80e96980fc",
"status": "complete"
}
◉ tony@tony:~/clnlive:
$ l1-cli listinvoices
{
"invoices": [
{
"label": "label",
"bolt11": "lnbcrt200u1pj0pvt0sp5wszfgmzp5ccymdnc4getzdw0m7tryn82458hlq7gq4tqnnwr86kspp5jl35faf6t6kav5xdr7e2epazcf50xk8qldcqygv5aztw4807payqdqgwp5h57npxqyjw5qcqp29qxpqysgqey60xcj9gkt7s6vjy8fpptfw6dnefcq3n7qzrnrz9ycmza6hxsq4p4x3kqll3cuzhcl9z7v7c3e2pnypkv952ml93qc76jqdmr3h75spd4xxtw",
"payment_hash": "97e344f53a5eadd650cd1fb2ac87a2c268f358e0fb70022194e896ea9dfe0f48",
"amount_msat": 20000000,
"status": "paid",
"pay_index": 1,
"amount_received_msat": 20000000,
"paid_at": 1693495677,
"payment_preimage": "5cc445be2a358359421267bcd65be03d45fe48e37508a0d83dbbfe80e96980fc",
"description": "pizza",
"expires_at": 1694100463,
"created_index": 1,
"updated_index": 1
}
]
}
Terminal session
We ran the following commands in this order:
$ ls
$ source lightning/contrib/startup_regtest.sh
$ start_ln
$ alias l1-cli
$ l1-cli --version
$ l1-cli setconfig min-capacity-sat 20000
$ cat /tmp/l1-regtest/regtest/config
$ l1-cli setconfig autoclean-cycle 10
$ cat /tmp/l1-regtest/regtest/config
$ l1-cli listconfigs | jq
$ l1-cli listconfigs | jq '.configs | map(select(.. | .dynamic?))'
$ l1-cli setconfig min-capacity-sat 30000
$ l1-cli listconfigs | jq '.configs | map(select(.. | .dynamic?))'
$ cd lightning/
$ ./configure --help
$ ./configure
$ cd ..
$ fund_nodes
$ l1-cli listconfigs experimental-splicing | jq
$ l1-cli listpeers
$ l1-cli listfunds
$ alias l1-cli
$ l1-cli stop
$ lightningd --lightning-dir=/tmp/l1-regtest --experimental-splicing --daemon
$ l1-cli getinfo
$ l1-cli listconfigs experimental-splicing | jq
$ l2-cli stop
$ lightningd --lightning-dir=/tmp/l2-regtest --daemon
$ l2-cli listconfigs experimental-splicing | jq
$ l1-cli listpeers
$ l1-cli listpeers
$ l1-cli listfunds
$ l1-cli -k fundpsbt satoshi=110000sat feerate=slow startweight=166 excess_as_change=true
$ l1-cli -k splice_init channel_id=2364e5741586c66befb7407c8d452c4dfd6eb76eeecc054e7a887a9b7c995e20 relative_amount=100000 initialpsbt=cHNidP8BAF4CAAAAASNk5XQVhsZr77dAfI1FLE39brdu7swFTnqIept8mV4gAQAAAAD9////AdDv5AUAAAAAIlEgdjlq+ZV//+qV0BlYZXttczsmC1VMXl5CjZytIOPnejlsAAAAAAEA9gIAAAAAAQE7i4rb7WoWAP1XDc235eIuKj0OnsKjE/WcynVL4SItUgAAAAAA/f///wJAQg8AAAAAACIAIJ2p+5U0CvA9A/dX+m8UD7YL2wheSd4SDxoBJJwP0YKhGp7mBQAAAAAiUSB4edY0fNlD9rxUwh2CD2HlpOEqVXkj+MU2Kfw4v08jMgJHMEQCIDgMDt3Sz7MUMCWbkB1rLwlu8ZwiRXgys5qW25vQmgz/AiBZjSp24vvRdW3koA/WZjP7sUnOPkdKfl/sVqqbDw7SywEhA1WBoZj3zB0lL9+dWZa5fuJPWJwqGv90hkenMMrujLZHZgAAAAEBKxqe5gUAAAAAIlEgeHnWNHzZQ/a8VMIdgg9h5aThKlV5I/jFNin8OL9PIzIAAA==
$ l1-cli -k splice_update channel_id=2364e5741586c66befb7407c8d452c4dfd6eb76eeecc054e7a887a9b7c995e20 psbt=cHNidP8BAgQCAAAAAQMEbAAAAAEEAQIBBQECAQYBAwH7BAIAAAAAAQD2AgAAAAABATuLitvtahYA/VcNzbfl4i4qPQ6ewqMT9ZzKdUvhIi1SAAAAAAD9////AkBCDwAAAAAAIgAgnan7lTQK8D0D91f6bxQPtgvbCF5J3hIPGgEknA/RgqEanuYFAAAAACJRIHh51jR82UP2vFTCHYIPYeWk4SpVeSP4xTYp/Di/TyMyAkcwRAIgOAwO3dLPsxQwJZuQHWsvCW7xnCJFeDKzmpbbm9CaDP8CIFmNKnbi+9F1beSgD9ZmM/uxSc4+R0p+X+xWqpsPDtLLASEDVYGhmPfMHSUv351Zlrl+4k9YnCoa/3SGR6cwyu6MtkdmAAAAAQErQEIPAAAAAAAiACCdqfuVNArwPQP3V/pvFA+2C9sIXkneEg8aASScD9GCoQEFR1IhAuEaqjleV/QHeAYbOYXFjlYyMjI0jkjC4ZSGdWFwsRkMIQPuF0K/Nyv334JI8U9sLDOz65B5Yj6CBWN1R/KhZiKUmVKuAQ4gI2TldBWGxmvvt0B8jUUsTf1ut27uzAVOeoh6m3yZXiABDwQAAAAAARAEAAAAAAz8CWxpZ2h0bmluZwEINPAjtW3bj34AAQD2AgAAAAABATuLitvtahYA/VcNzbfl4i4qPQ6ewqMT9ZzKdUvhIi1SAAAAAAD9////AkBCDwAAAAAAIgAgnan7lTQK8D0D91f6bxQPtgvbCF5J3hIPGgEknA/RgqEanuYFAAAAACJRIHh51jR82UP2vFTCHYIPYeWk4SpVeSP4xTYp/Di/TyMyAkcwRAIgOAwO3dLPsxQwJZuQHWsvCW7xnCJFeDKzmpbbm9CaDP8CIFmNKnbi+9F1beSgD9ZmM/uxSc4+R0p+X+xWqpsPDtLLASEDVYGhmPfMHSUv351Zlrl+4k9YnCoa/3SGR6cwyu6MtkdmAAAAAQErGp7mBQAAAAAiUSB4edY0fNlD9rxUwh2CD2HlpOEqVXkj+MU2Kfw4v08jMgEOICNk5XQVhsZr77dAfI1FLE39brdu7swFTnqIept8mV4gAQ8EAQAAAAEQBP3///8M/AlsaWdodG5pbmcBCNha7AErWMyuAAEDCNDv5AUAAAAAAQQiUSB2OWr5lX//6pXQGVhle21zOyYLVUxeXkKNnK0g4+d6OQz8CWxpZ2h0bmluZwEI40TubF/EhR4AAQMIAAAAAAAAAAABBCIAIJ2p+5U0CvA9A/dX+m8UD7YL2wheSd4SDxoBJJwP0YKhDPwJbGlnaHRuaW5nAQjrDjTtqP057AA=
$ l1-cli -k signpsbt psbt=cHNidP8BAgQCAAAAAQMEbAAAAAEEAQIBBQECAQYBAwH7BAIAAAAAAQD2AgAAAAABATuLitvtahYA/VcNzbfl4i4qPQ6ewqMT9ZzKdUvhIi1SAAAAAAD9////AkBCDwAAAAAAIgAgnan7lTQK8D0D91f6bxQPtgvbCF5J3hIPGgEknA/RgqEanuYFAAAAACJRIHh51jR82UP2vFTCHYIPYeWk4SpVeSP4xTYp/Di/TyMyAkcwRAIgOAwO3dLPsxQwJZuQHWsvCW7xnCJFeDKzmpbbm9CaDP8CIFmNKnbi+9F1beSgD9ZmM/uxSc4+R0p+X+xWqpsPDtLLASEDVYGhmPfMHSUv351Zlrl+4k9YnCoa/3SGR6cwyu6MtkdmAAAAAQErQEIPAAAAAAAiACCdqfuVNArwPQP3V/pvFA+2C9sIXkneEg8aASScD9GCoQEOICNk5XQVhsZr77dAfI1FLE39brdu7swFTnqIept8mV4gAQ8EAAAAAAEQBAAAAAAM/AlsaWdodG5pbmcBCDTwI7Vt249+AAEA9gIAAAAAAQE7i4rb7WoWAP1XDc235eIuKj0OnsKjE/WcynVL4SItUgAAAAAA/f///wJAQg8AAAAAACIAIJ2p+5U0CvA9A/dX+m8UD7YL2wheSd4SDxoBJJwP0YKhGp7mBQAAAAAiUSB4edY0fNlD9rxUwh2CD2HlpOEqVXkj+MU2Kfw4v08jMgJHMEQCIDgMDt3Sz7MUMCWbkB1rLwlu8ZwiRXgys5qW25vQmgz/AiBZjSp24vvRdW3koA/WZjP7sUnOPkdKfl/sVqqbDw7SywEhA1WBoZj3zB0lL9+dWZa5fuJPWJwqGv90hkenMMrujLZHZgAAAAEBKxqe5gUAAAAAIlEgeHnWNHzZQ/a8VMIdgg9h5aThKlV5I/jFNin8OL9PIzIBDiAjZOV0FYbGa++3QHyNRSxN/W63bu7MBU56iHqbfJleIAEPBAEAAAABEAT9////DPwJbGlnaHRuaW5nAQjYWuwBK1jMrgABAwjQ7+QFAAAAAAEEIlEgdjlq+ZV//+qV0BlYZXttczsmC1VMXl5CjZytIOPnejkM/AlsaWdodG5pbmcBCONE7mxfxIUeAAEDCODIEAAAAAAAAQQiACCdqfuVNArwPQP3V/pvFA+2C9sIXkneEg8aASScD9GCoQz8CWxpZ2h0bmluZwEI6w407aj9OewA
$ l1-cli -k splice_signed channel_id=2364e5741586c66befb7407c8d452c4dfd6eb76eeecc054e7a887a9b7c995e20 psbt=cHNidP8BAgQCAAAAAQMEbAAAAAEEAQIBBQECAQYBAwH7BAIAAAAAAQD2AgAAAAABATuLitvtahYA/VcNzbfl4i4qPQ6ewqMT9ZzKdUvhIi1SAAAAAAD9////AkBCDwAAAAAAIgAgnan7lTQK8D0D91f6bxQPtgvbCF5J3hIPGgEknA/RgqEanuYFAAAAACJRIHh51jR82UP2vFTCHYIPYeWk4SpVeSP4xTYp/Di/TyMyAkcwRAIgOAwO3dLPsxQwJZuQHWsvCW7xnCJFeDKzmpbbm9CaDP8CIFmNKnbi+9F1beSgD9ZmM/uxSc4+R0p+X+xWqpsPDtLLASEDVYGhmPfMHSUv351Zlrl+4k9YnCoa/3SGR6cwyu6MtkdmAAAAAQErQEIPAAAAAAAiACCdqfuVNArwPQP3V/pvFA+2C9sIXkneEg8aASScD9GCoQEOICNk5XQVhsZr77dAfI1FLE39brdu7swFTnqIept8mV4gAQ8EAAAAAAEQBAAAAAAM/AlsaWdodG5pbmcBCDTwI7Vt249+AAEA9gIAAAAAAQE7i4rb7WoWAP1XDc235eIuKj0OnsKjE/WcynVL4SItUgAAAAAA/f///wJAQg8AAAAAACIAIJ2p+5U0CvA9A/dX+m8UD7YL2wheSd4SDxoBJJwP0YKhGp7mBQAAAAAiUSB4edY0fNlD9rxUwh2CD2HlpOEqVXkj+MU2Kfw4v08jMgJHMEQCIDgMDt3Sz7MUMCWbkB1rLwlu8ZwiRXgys5qW25vQmgz/AiBZjSp24vvRdW3koA/WZjP7sUnOPkdKfl/sVqqbDw7SywEhA1WBoZj3zB0lL9+dWZa5fuJPWJwqGv90hkenMMrujLZHZgAAAAEBKxqe5gUAAAAAIlEgeHnWNHzZQ/a8VMIdgg9h5aThKlV5I/jFNin8OL9PIzIBDiAjZOV0FYbGa++3QHyNRSxN/W63bu7MBU56iHqbfJleIAEPBAEAAAABEAT9////ARNAn1ief1Bc2LsrPQTcSdg7A4zbvw1Qht1ujTxnFQ4FK6Zg/vqEk6w4hEV04Pw5TKwjcyTs4Py0tRSnpTb+c4L2RyEWSM4xYkzRqLmfsVqnRrODxgXc/lzgKrbsicGdcjurlOYJAEepcUUAAAAADPwJbGlnaHRuaW5nAQjYWuwBK1jMrgABAwjQ7+QFAAAAAAEEIlEgdjlq+ZV//+qV0BlYZXttczsmC1VMXl5CjZytIOPnejkhB8V1yT0zJd1z6oZgSQuMvSicMlABXx/NnR40UgvEyK2ZCQB2TDivBAAAAAz8CWxpZ2h0bmluZwEI40TubF/EhR4AAQMI4MgQAAAAAAABBCIAIJ2p+5U0CvA9A/dX+m8UD7YL2wheSd4SDxoBJJwP0YKhDPwJbGlnaHRuaW5nAQjrDjTtqP057AA=
$ alias bt-cli
$ bt-cli getrawmempool
$ bt-cli -rpcwallet=default getnewaddress
$ bt-cli generatetoaddress 6 bcrt1qnk2vd6xz48my456tt009q6j4yuxx9hz8akhy7a
$ l1-cli listfunds
$ l1-cli listfunds
$ l1-cli newaddr
$ l1-cli newaddr p2tr
$ l1-cli newaddr all
$ ps -ax | rg lightn
$ l2-cli invoice 10000sat label pizza
$ l1-cli renepay lnbcrt100u1pj0pvz8sp5ed2wdf08knan6wzkqnld93f35h2khlh3pnsryrqdxckg3rxt65tspp58gc4csw2az3j4krdz6g5hz37m5nm4g4dnvnzceglnwc9mzl7gzksdqgwp5h57npxqyjw5qcqp29qxpqysgq35e3htpwntwtnh7usnh5v0nypk9ju77932zn49rkma436t64ltj8dvetrh9ekmpm4fxs42ejzs6zlv4pz5tccq7vsme5s4ct07jesvqp0hav94
$ l2-cli stop
$ l1-cli invoice 20000sat label pizza
$ l1-cli pay lnbcrt200u1pj0pvt0sp5wszfgmzp5ccymdnc4getzdw0m7tryn82458hlq7gq4tqnnwr86kspp5jl35faf6t6kav5xdr7e2epazcf50xk8qldcqygv5aztw4807payqdqgwp5h57npxqyjw5qcqp29qxpqysgqey60xcj9gkt7s6vjy8fpptfw6dnefcq3n7qzrnrz9ycmza6hxsq4p4x3kqll3cuzhcl9z7v7c3e2pnypkv952ml93qc76jqdmr3h75spd4xxtw
$ l1-cli listinvoices
And below you can read the terminal session (command lines and outputs):
◉ tony@tony:~/clnlive:
$ ls
clnlive-scratch/ lightning/ notes.org
◉ tony@tony:~/clnlive:
$ source lightning/contrib/startup_regtest.sh
lightning-cli is /usr/local/bin/lightning-cli
lightningd is /usr/local/bin/lightningd
Useful commands:
start_ln 3: start three nodes, l1, l2, l3
connect 1 2: connect l1 and l2
fund_nodes: connect all nodes with channels, in a row
stop_ln: shutdown
destroy_ln: remove ln directories
◉ tony@tony:~/clnlive:
$ start_ln
Bitcoin Core starting
awaiting bitcoind...
Making "default" bitcoind wallet.
error code: -35
error message:
Wallet "default" is already loaded.
[1] 693143
[2] 693187
WARNING: eatmydata not found: install it for faster testing
Commands:
l1-cli, l1-log,
l2-cli, l2-log,
bt-cli, stop_ln, fund_nodes
◉ tony@tony:~/clnlive:
$ alias l1-cli
alias l1-cli='lightning-cli --lightning-dir=/tmp/l1-regtest'
◉ tony@tony:~/clnlive:
$ l1-cli --version
v23.08
◉ tony@tony:~/clnlive:
$ l1-cli setconfig min-capacity-sat 20000
{
"config": {
"config": "min-capacity-sat",
"value_int": 20000,
"source": "/tmp/l1-regtest/regtest/config:2",
"dynamic": true
}
}
◉ tony@tony:~/clnlive:
$ cat /tmp/l1-regtest/regtest/config
# Inserted by setconfig Thu Aug 31 16:22:14 2023
min-capacity-sat=20000
◉ tony@tony:~/clnlive:
$ l1-cli setconfig autoclean-cycle 10
{
"config": {
"config": "autoclean-cycle",
"value_int": 10,
"source": "/tmp/l1-regtest/regtest/config:4",
"plugin": "/usr/local/libexec/c-lightning/plugins/autoclean",
"dynamic": true
}
}
◉ tony@tony:~/clnlive:
$ cat /tmp/l1-regtest/regtest/config
# Inserted by setconfig Thu Aug 31 16:22:14 2023
min-capacity-sat=20000
# Inserted by setconfig Thu Aug 31 16:23:59 2023
autoclean-cycle=10
◉ tony@tony:~/clnlive:
$ l1-cli listconfigs | jq
{
"configs": {
"lightning-dir": {
"value_str": "/tmp/l1-regtest",
"source": "cmdline"
},
"network": {
"value_str": "regtest",
"source": "cmdline"
},
"testnet": {
"set": false,
"source": "default"
},
"signet": {
"set": false,
"source": "default"
},
"mainnet": {
"set": false,
"source": "default"
},
"regtest": {
"set": false,
"source": "default"
},
"rpc-file": {
"value_str": "lightning-rpc",
"source": "default"
},
"allow-deprecated-apis": {
"value_bool": false,
"source": "/tmp/l1-regtest/config:5"
},
"plugin": {
"values_str": [],
"sources": []
},
"plugin-dir": {
"values_str": [],
"sources": []
},
"clear-plugins": {
"set": false,
"source": "default"
},
"disable-plugin": {
"values_str": [],
"sources": []
},
"important-plugin": {
"values_str": [],
"sources": []
},
"always-use-proxy": {
"value_bool": false,
"source": "default"
},
"daemon": {
"set": false,
"source": "default"
},
"large-channels": {
"set": false,
"source": "default"
},
"experimental-dual-fund": {
"set": false,
"source": "default"
},
"experimental-splicing": {
"set": false,
"source": "default"
},
"experimental-onion-messages": {
"set": false,
"source": "default"
},
"experimental-offers": {
"set": false,
"source": "default"
},
"experimental-shutdown-wrong-funding": {
"set": false,
"source": "default"
},
"experimental-peer-storage": {
"set": false,
"source": "default"
},
"experimental-quiesce": {
"set": false,
"source": "default"
},
"experimental-anchors": {
"set": false,
"source": "default"
},
"rgb": {
"value_str": "02acf0",
"source": "default"
},
"alias": {
"value_str": "LATENTWATER",
"source": "default"
},
"pid-file": {
"value_str": "/tmp/l1-regtest/lightningd-regtest.pid",
"source": "default"
},
"ignore-fee-limits": {
"value_bool": true,
"source": "default"
},
"watchtime-blocks": {
"value_int": 6,
"source": "default"
},
"max-locktime-blocks": {
"value_int": 2016,
"source": "default"
},
"funding-confirms": {
"value_int": 1,
"source": "default"
},
"require-confirmed-inputs": {
"value_bool": false,
"source": "default"
},
"cltv-delta": {
"value_int": 6,
"source": "default"
},
"cltv-final": {
"value_int": 10,
"source": "default"
},
"commit-time": {
"value_int": 10,
"source": "default"
},
"fee-base": {
"value_int": 1,
"source": "default"
},
"rescan": {
"value_int": 30,
"source": "default"
},
"fee-per-satoshi": {
"value_int": 10,
"source": "default"
},
"htlc-minimum-msat": {
"value_msat": 0,
"source": "default"
},
"htlc-maximum-msat": {
"value_msat": 18446744073709552000,
"source": "default"
},
"max-concurrent-htlcs": {
"value_int": 483,
"source": "default"
},
"max-dust-htlc-exposure-msat": {
"value_msat": 50000000,
"source": "default"
},
"min-capacity-sat": {
"value_int": 20000,
"source": "/tmp/l1-regtest/regtest/config:2",
"dynamic": true
},
"addr": {
"values_str": [
"localhost:7171"
],
"sources": [
"/tmp/l1-regtest/config:4"
]
},
"bind-addr": {
"values_str": [],
"sources": []
},
"announce-addr": {
"values_str": [],
"sources": []
},
"announce-addr-discovered": {
"value_str": "auto",
"source": "default"
},
"announce-addr-discovered-port": {
"value_int": 19846,
"source": "default"
},
"offline": {
"set": false,
"source": "default"
},
"autolisten": {
"value_bool": false,
"source": "default"
},
"accept-htlc-tlv-type": {
"values_int": [],
"sources": []
},
"disable-dns": {
"set": false,
"source": "default"
},
"encrypted-hsm": {
"set": false,
"source": "default"
},
"rpc-file-mode": {
"value_str": "0600",
"source": "default"
},
"commit-fee": {
"value_int": 100,
"source": "default"
},
"min-emergency-msat": {
"value_msat": 25000000,
"source": "default"
},
"subdaemon": {
"values_str": [],
"sources": []
},
"experimental-upgrade-protocol": {
"set": false,
"source": "default"
},
"database-upgrade": {
"value_bool": true,
"source": "cmdline"
},
"log-level": {
"value_str": "debug",
"source": "/tmp/l1-regtest/config:2"
},
"log-timestamps": {
"value_bool": true,
"source": "default"
},
"log-file": {
"values_str": [
"/tmp/l1-regtest/log"
],
"sources": [
"/tmp/l1-regtest/config:3"
]
},
"renepay-debug-mcf": {
"set": false,
"source": "default",
"plugin": "/usr/local/libexec/c-lightning/plugins/cln-renepay"
},
"renepay-debug-payflow": {
"set": false,
"source": "default",
"plugin": "/usr/local/libexec/c-lightning/plugins/cln-renepay"
},
"bitcoin-datadir": {
"value_str": "/home/tony/.bitcoin",
"source": "cmdline",
"plugin": "/usr/local/libexec/c-lightning/plugins/bcli"
},
"disable-mpp": {
"set": false,
"source": "default",
"plugin": "/usr/local/libexec/c-lightning/plugins/pay"
},
"autoclean-cycle": {
"value_int": 10,
"source": "/tmp/l1-regtest/regtest/config:4",
"plugin": "/usr/local/libexec/c-lightning/plugins/autoclean",
"dynamic": true
}
}
}
◉ tony@tony:~/clnlive:
$ l1-cli listconfigs | jq '.configs | map(select(.. | .dynamic?))'
[
{
"value_int": 20000,
"source": "/tmp/l1-regtest/regtest/config:2",
"dynamic": true
},
{
"value_int": 10,
"source": "/tmp/l1-regtest/regtest/config:4",
"plugin": "/usr/local/libexec/c-lightning/plugins/autoclean",
"dynamic": true
}
]
◉ tony@tony:~/clnlive:
$ l1-cli setconfig min-capacity-sat 30000
{
"config": {
"config": "min-capacity-sat",
"value_int": 30000,
"source": "/tmp/l1-regtest/regtest/config:2",
"dynamic": true
}
}
◉ tony@tony:~/clnlive:
$ l1-cli listconfigs | jq '.configs | map(select(.. | .dynamic?))'
[
{
"value_int": 30000,
"source": "/tmp/l1-regtest/regtest/config:2",
"dynamic": true
},
{
"value_int": 10,
"source": "/tmp/l1-regtest/regtest/config:4",
"plugin": "/usr/local/libexec/c-lightning/plugins/autoclean",
"dynamic": true
}
]
◉ tony@tony:~/clnlive:
$ cd lightning/
◉ tony@tony:~/clnlive/lightning:[git»(HEAD detached at v23.08)]
$ ./configure --help
Usage: ./configure [--reconfigure] [setting=value] [options]
If --reconfigure is specified, config.vars will set defaults.
Default settings:
CSANFLAGS =
CC (default cc)
CWARNFLAGS (default -Wall -Wundef -Wmissing-prototypes -Wmissing-declarations -Wstrict-prototypes -Wold-style-definition -Werror -Wno-maybe-uninitialized -Wshadow=local)
COPTFLAGS (default -Og)
CDEBUGFLAGS (default -std=gnu11 -g -fstack-protector-strong)
CONFIGURATOR_CC (default cc)
To override compile line for configurator itself
PYTEST (default python3 -m pytest)
VALGRIND (default 1)
Options include:
--prefix= (default /usr/local)
Prefix for make install
--enable/disable-developer (default disable)
Developer mode, good for testing
--enable/disable-debug (default disable)
Extra debug checks in the build, good for testing
--enable/disable-compat (default enable)
Compatibility mode, good to disable to see if your software breaks
--enable/disable-valgrind (default (autodetect))
Run tests with Valgrind
--enable/disable-static (default disable)
Static link sqlite3 and zlib libraries
--enable/disable-coverage (default disable)
Compile with Clang coverage instrumentation
--enable/disable-address-sanitizer (default disable)
Compile with address-sanitizer
--enable/disable-ub-sanitizer (default disable)
Compile with undefined behaviour sanitizer
--enable/disable-fuzzing (default disable)
Compile with fuzzing
--enable/disable-rust (default enable)
Compile with Rust support
◉ tony@tony:~/clnlive/lightning:[git»(HEAD detached at v23.08)]
$ ./configure
...
◉ tony@tony:~/clnlive/lightning:[git»(HEAD detached at v23.08)]
$ cd ..
◉ tony@tony:~/clnlive:
$ fund_nodes
Mining into address bcrt1qx0kcnjvdmw6ehw0vm90pln5k7mwacg0tz0grg3... done.
bitcoind balance: 50.00000000
Waiting for lightning node funds... found.
Funding channel from node 1 to node 2. Waiting for confirmation... done.
◉ tony@tony:~/clnlive:
$ l1-cli listconfigs experimental-splicing | jq
{
"configs": {
"experimental-splicing": {
"set": false,
"source": "default"
}
}
}
◉ tony@tony:~/clnlive:
$ l1-cli listpeers
{
"peers": [
{
"id": "0205b3210eb490efd5debbed87df4b507f50dbbde9ab7980faf0367bbe8d27c734",
"connected": true,
"num_channels": 1,
"netaddr": [
"127.0.0.1:7272"
],
"features": "08a0000a0269a2"
}
]
}
◉ tony@tony:~/clnlive:
$ l1-cli listfunds
{
"outputs": [
{
"txid": "205e997c9b7a887a4e05ccee6eb76efd4d2c458d7c40b7ef6bc6861574e56423",
"output": 1,
"amount_msat": 98999834000,
"scriptpubkey": "51207879d6347cd943f6bc54c21d820f61e5a4e12a557923f8c53629fc38bf4f2332",
"address": "bcrt1p0puavdrum9pld0z5cgwcyrmpukjwz2j40y3l33fk987r3060yveqdj4cyk",
"status": "confirmed",
"blockheight": 103,
"reserved": false
}
],
"channels": [
{
"peer_id": "0205b3210eb490efd5debbed87df4b507f50dbbde9ab7980faf0367bbe8d27c734",
"connected": true,
"state": "CHANNELD_NORMAL",
"channel_id": "2364e5741586c66befb7407c8d452c4dfd6eb76eeecc054e7a887a9b7c995e20",
"short_channel_id": "103x1x0",
"our_amount_msat": 1000000000,
"amount_msat": 1000000000,
"funding_txid": "205e997c9b7a887a4e05ccee6eb76efd4d2c458d7c40b7ef6bc6861574e56423",
"funding_output": 0
}
]
}
◉ tony@tony:~/clnlive:
$ alias l1-cli
alias l1-cli='lightning-cli --lightning-dir=/tmp/l1-regtest'
◉ tony@tony:~/clnlive:
$ l1-cli stop
"Shutdown complete"
◉ tony@tony:~/clnlive:
$ lightningd --lightning-dir=/tmp/l1-regtest --experimental-splicing --daemon
◉ tony@tony:~/clnlive:
$ l1-cli getinfo
{
"id": "02acf0a36ce2e27d13489a202bafc7065494b39650fbac2060ec9b0f6bd2c749c6",
"alias": "LATENTWATER",
"color": "02acf0",
"num_peers": 1,
"num_pending_channels": 0,
"num_active_channels": 1,
"num_inactive_channels": 0,
"address": [],
"binding": [
{
"type": "ipv4",
"address": "127.0.0.1",
"port": 7171
}
],
"version": "v23.08",
"blockheight": 108,
"network": "regtest",
"fees_collected_msat": 0,
"lightning-dir": "/tmp/l1-regtest/regtest",
"our_features": {
"init": "080000000000000000000000000008a0080a0269a2",
"node": "080000000000000000000000000088a0080a0269a2",
"channel": "",
"invoice": "02000002024100"
}
}
◉ tony@tony:~/clnlive:
$ l1-cli listconfigs experimental-splicing | jq
{
"configs": {
"experimental-splicing": {
"set": true,
"source": "cmdline"
}
}
}
◉ tony@tony:~/clnlive:
$ l2-cli stop
"Shutdown complete"
◉ tony@tony:~/clnlive:
$ lightningd --lightning-dir=/tmp/l2-regtest --daemon
◉ tony@tony:~/clnlive:
$ l2-cli listconfigs experimental-splicing | jq
{
"configs": {
"experimental-splicing": {
"set": true,
"source": "/tmp/l2-regtest/config:6"
}
}
}
◉ tony@tony:~/clnlive:
$ l1-cli listpeers
{
"peers": [
{
"id": "0205b3210eb490efd5debbed87df4b507f50dbbde9ab7980faf0367bbe8d27c734",
"connected": true,
"num_channels": 1,
"netaddr": [
"127.0.0.1:7272"
],
"features": "080000000000000000000000000008a0080a0269a2"
}
]
}
◉ tony@tony:~/clnlive:
$ l1-cli listpeers
{
"peers": [
{
"id": "0205b3210eb490efd5debbed87df4b507f50dbbde9ab7980faf0367bbe8d27c734",
"connected": true,
"num_channels": 1,
"netaddr": [
"127.0.0.1:7272"
],
"features": "080000000000000000000000000008a0080a0269a2"
}
]
}
◉ tony@tony:~/clnlive:
$ l1-cli listfunds
{
"outputs": [
{
"txid": "205e997c9b7a887a4e05ccee6eb76efd4d2c458d7c40b7ef6bc6861574e56423",
"output": 1,
"amount_msat": 98999834000,
"scriptpubkey": "51207879d6347cd943f6bc54c21d820f61e5a4e12a557923f8c53629fc38bf4f2332",
"address": "bcrt1p0puavdrum9pld0z5cgwcyrmpukjwz2j40y3l33fk987r3060yveqdj4cyk",
"status": "confirmed",
"blockheight": 103,
"reserved": false
}
],
"channels": [
{
"peer_id": "0205b3210eb490efd5debbed87df4b507f50dbbde9ab7980faf0367bbe8d27c734",
"connected": true,
"state": "CHANNELD_NORMAL",
"channel_id": "2364e5741586c66befb7407c8d452c4dfd6eb76eeecc054e7a887a9b7c995e20",
"short_channel_id": "103x1x0",
"our_amount_msat": 1000000000,
"amount_msat": 1000000000,
"funding_txid": "205e997c9b7a887a4e05ccee6eb76efd4d2c458d7c40b7ef6bc6861574e56423",
"funding_output": 0
}
]
}
◉ tony@tony:~/clnlive:
$ l1-cli -k fundpsbt satoshi=110000sat feerate=slow startweight=166 excess_as_change=true
{
"psbt": "cHNidP8BAF4CAAAAASNk5XQVhsZr77dAfI1FLE39brdu7swFTnqIept8mV4gAQAAAAD9////AdDv5AUAAAAAIlEgdjlq+ZV//+qV0BlYZXttczsmC1VMXl5CjZytIOPnejlsAAAAAAEA9gIAAAAAAQE7i4rb7WoWAP1XDc235eIuKj0OnsKjE/WcynVL4SItUgAAAAAA/f///wJAQg8AAAAAACIAIJ2p+5U0CvA9A/dX+m8UD7YL2wheSd4SDxoBJJwP0YKhGp7mBQAAAAAiUSB4edY0fNlD9rxUwh2CD2HlpOEqVXkj+MU2Kfw4v08jMgJHMEQCIDgMDt3Sz7MUMCWbkB1rLwlu8ZwiRXgys5qW25vQmgz/AiBZjSp24vvRdW3koA/WZjP7sUnOPkdKfl/sVqqbDw7SywEhA1WBoZj3zB0lL9+dWZa5fuJPWJwqGv90hkenMMrujLZHZgAAAAEBKxqe5gUAAAAAIlEgeHnWNHzZQ/a8VMIdgg9h5aThKlV5I/jFNin8OL9PIzIAAA==",
"feerate_per_kw": 253,
"estimated_final_weight": 609,
"excess_msat": 0,
"change_outnum": 0,
"reservations": [
{
"txid": "205e997c9b7a887a4e05ccee6eb76efd4d2c458d7c40b7ef6bc6861574e56423",
"vout": 1,
"was_reserved": false,
"reserved": true,
"reserved_to_block": 180
}
]
}
◉ tony@tony:~/clnlive:
$ l1-cli -k splice_init channel_id=2364e5741586c66befb7407c8d452c4dfd6eb76eeecc054e7a887a9b7c995e20 \
► relative_amount=100000 \
► initialpsbt=cHNidP8BAF4CAAAAASNk5XQVhsZr77dAfI1FLE39brdu7swFTnqIept8mV4gAQAAAAD9////AdDv5AUAAAAAIlEgdjlq+ZV//+qV0BlYZXttczsmC1VMXl5CjZytIOPnejlsAAAAAAEA9gIAAAAAAQE7i4rb7WoWAP1XDc235eIuKj0OnsKjE/WcynVL4SItUgAAAAAA/f///wJAQg8AAAAAACIAIJ2p+5U0CvA9A/dX+m8UD7YL2wheSd4SDxoBJJwP0YKhGp7mBQAAAAAiUSB4edY0fNlD9rxUwh2CD2HlpOEqVXkj+MU2Kfw4v08jMgJHMEQCIDgMDt3Sz7MUMCWbkB1rLwlu8ZwiRXgys5qW25vQmgz/AiBZjSp24vvRdW3koA/WZjP7sUnOPkdKfl/sVqqbDw7SywEhA1WBoZj3zB0lL9+dWZa5fuJPWJwqGv90hkenMMrujLZHZgAAAAEBKxqe5gUAAAAAIlEgeHnWNHzZQ/a8VMIdgg9h5aThKlV5I/jFNin8OL9PIzIAAA==
{
"psbt": "cHNidP8BAgQCAAAAAQMEbAAAAAEEAQIBBQECAQYBAwH7BAIAAAAAAQD2AgAAAAABATuLitvtahYA/VcNzbfl4i4qPQ6ewqMT9ZzKdUvhIi1SAAAAAAD9////AkBCDwAAAAAAIgAgnan7lTQK8D0D91f6bxQPtgvbCF5J3hIPGgEknA/RgqEanuYFAAAAACJRIHh51jR82UP2vFTCHYIPYeWk4SpVeSP4xTYp/Di/TyMyAkcwRAIgOAwO3dLPsxQwJZuQHWsvCW7xnCJFeDKzmpbbm9CaDP8CIFmNKnbi+9F1beSgD9ZmM/uxSc4+R0p+X+xWqpsPDtLLASEDVYGhmPfMHSUv351Zlrl+4k9YnCoa/3SGR6cwyu6MtkdmAAAAAQErQEIPAAAAAAAiACCdqfuVNArwPQP3V/pvFA+2C9sIXkneEg8aASScD9GCoQEFR1IhAuEaqjleV/QHeAYbOYXFjlYyMjI0jkjC4ZSGdWFwsRkMIQPuF0K/Nyv334JI8U9sLDOz65B5Yj6CBWN1R/KhZiKUmVKuAQ4gI2TldBWGxmvvt0B8jUUsTf1ut27uzAVOeoh6m3yZXiABDwQAAAAAARAEAAAAAAz8CWxpZ2h0bmluZwEINPAjtW3bj34AAQD2AgAAAAABATuLitvtahYA/VcNzbfl4i4qPQ6ewqMT9ZzKdUvhIi1SAAAAAAD9////AkBCDwAAAAAAIgAgnan7lTQK8D0D91f6bxQPtgvbCF5J3hIPGgEknA/RgqEanuYFAAAAACJRIHh51jR82UP2vFTCHYIPYeWk4SpVeSP4xTYp/Di/TyMyAkcwRAIgOAwO3dLPsxQwJZuQHWsvCW7xnCJFeDKzmpbbm9CaDP8CIFmNKnbi+9F1beSgD9ZmM/uxSc4+R0p+X+xWqpsPDtLLASEDVYGhmPfMHSUv351Zlrl+4k9YnCoa/3SGR6cwyu6MtkdmAAAAAQErGp7mBQAAAAAiUSB4edY0fNlD9rxUwh2CD2HlpOEqVXkj+MU2Kfw4v08jMgEOICNk5XQVhsZr77dAfI1FLE39brdu7swFTnqIept8mV4gAQ8EAQAAAAEQBP3///8M/AlsaWdodG5pbmcBCNha7AErWMyuAAEDCNDv5AUAAAAAAQQiUSB2OWr5lX//6pXQGVhle21zOyYLVUxeXkKNnK0g4+d6OQz8CWxpZ2h0bmluZwEI40TubF/EhR4AAQMIAAAAAAAAAAABBCIAIJ2p+5U0CvA9A/dX+m8UD7YL2wheSd4SDxoBJJwP0YKhDPwJbGlnaHRuaW5nAQjrDjTtqP057AA="
}
◉ tony@tony:~/clnlive:
$ l1-cli -k splice_update channel_id=2364e5741586c66befb7407c8d452c4dfd6eb76eeecc054e7a887a9b7c995e20 \
► psbt=cHNidP8BAgQCAAAAAQMEbAAAAAEEAQIBBQECAQYBAwH7BAIAAAAAAQD2AgAAAAABATuLitvtahYA/VcNzbfl4i4qPQ6ewqMT9ZzKdUvhIi1SAAAAAAD9////AkBCDwAAAAAAIgAgnan7lTQK8D0D91f6bxQPtgvbCF5J3hIPGgEknA/RgqEanuYFAAAAACJRIHh51jR82UP2vFTCHYIPYeWk4SpVeSP4xTYp/Di/TyMyAkcwRAIgOAwO3dLPsxQwJZuQHWsvCW7xnCJFeDKzmpbbm9CaDP8CIFmNKnbi+9F1beSgD9ZmM/uxSc4+R0p+X+xWqpsPDtLLASEDVYGhmPfMHSUv351Zlrl+4k9YnCoa/3SGR6cwyu6MtkdmAAAAAQErQEIPAAAAAAAiACCdqfuVNArwPQP3V/pvFA+2C9sIXkneEg8aASScD9GCoQEFR1IhAuEaqjleV/QHeAYbOYXFjlYyMjI0jkjC4ZSGdWFwsRkMIQPuF0K/Nyv334JI8U9sLDOz65B5Yj6CBWN1R/KhZiKUmVKuAQ4gI2TldBWGxmvvt0B8jUUsTf1ut27uzAVOeoh6m3yZXiABDwQAAAAAARAEAAAAAAz8CWxpZ2h0bmluZwEINPAjtW3bj34AAQD2AgAAAAABATuLitvtahYA/VcNzbfl4i4qPQ6ewqMT9ZzKdUvhIi1SAAAAAAD9////AkBCDwAAAAAAIgAgnan7lTQK8D0D91f6bxQPtgvbCF5J3hIPGgEknA/RgqEanuYFAAAAACJRIHh51jR82UP2vFTCHYIPYeWk4SpVeSP4xTYp/Di/TyMyAkcwRAIgOAwO3dLPsxQwJZuQHWsvCW7xnCJFeDKzmpbbm9CaDP8CIFmNKnbi+9F1beSgD9ZmM/uxSc4+R0p+X+xWqpsPDtLLASEDVYGhmPfMHSUv351Zlrl+4k9YnCoa/3SGR6cwyu6MtkdmAAAAAQErGp7mBQAAAAAiUSB4edY0fNlD9rxUwh2CD2HlpOEqVXkj+MU2Kfw4v08jMgEOICNk5XQVhsZr77dAfI1FLE39brdu7swFTnqIept8mV4gAQ8EAQAAAAEQBP3///8M/AlsaWdodG5pbmcBCNha7AErWMyuAAEDCNDv5AUAAAAAAQQiUSB2OWr5lX//6pXQGVhle21zOyYLVUxeXkKNnK0g4+d6OQz8CWxpZ2h0bmluZwEI40TubF/EhR4AAQMIAAAAAAAAAAABBCIAIJ2p+5U0CvA9A/dX+m8UD7YL2wheSd4SDxoBJJwP0YKhDPwJbGlnaHRuaW5nAQjrDjTtqP057AA=
{
"psbt": "cHNidP8BAgQCAAAAAQMEbAAAAAEEAQIBBQECAQYBAwH7BAIAAAAAAQD2AgAAAAABATuLitvtahYA/VcNzbfl4i4qPQ6ewqMT9ZzKdUvhIi1SAAAAAAD9////AkBCDwAAAAAAIgAgnan7lTQK8D0D91f6bxQPtgvbCF5J3hIPGgEknA/RgqEanuYFAAAAACJRIHh51jR82UP2vFTCHYIPYeWk4SpVeSP4xTYp/Di/TyMyAkcwRAIgOAwO3dLPsxQwJZuQHWsvCW7xnCJFeDKzmpbbm9CaDP8CIFmNKnbi+9F1beSgD9ZmM/uxSc4+R0p+X+xWqpsPDtLLASEDVYGhmPfMHSUv351Zlrl+4k9YnCoa/3SGR6cwyu6MtkdmAAAAAQErQEIPAAAAAAAiACCdqfuVNArwPQP3V/pvFA+2C9sIXkneEg8aASScD9GCoQEOICNk5XQVhsZr77dAfI1FLE39brdu7swFTnqIept8mV4gAQ8EAAAAAAEQBAAAAAAM/AlsaWdodG5pbmcBCDTwI7Vt249+AAEA9gIAAAAAAQE7i4rb7WoWAP1XDc235eIuKj0OnsKjE/WcynVL4SItUgAAAAAA/f///wJAQg8AAAAAACIAIJ2p+5U0CvA9A/dX+m8UD7YL2wheSd4SDxoBJJwP0YKhGp7mBQAAAAAiUSB4edY0fNlD9rxUwh2CD2HlpOEqVXkj+MU2Kfw4v08jMgJHMEQCIDgMDt3Sz7MUMCWbkB1rLwlu8ZwiRXgys5qW25vQmgz/AiBZjSp24vvRdW3koA/WZjP7sUnOPkdKfl/sVqqbDw7SywEhA1WBoZj3zB0lL9+dWZa5fuJPWJwqGv90hkenMMrujLZHZgAAAAEBKxqe5gUAAAAAIlEgeHnWNHzZQ/a8VMIdgg9h5aThKlV5I/jFNin8OL9PIzIBDiAjZOV0FYbGa++3QHyNRSxN/W63bu7MBU56iHqbfJleIAEPBAEAAAABEAT9////DPwJbGlnaHRuaW5nAQjYWuwBK1jMrgABAwjQ7+QFAAAAAAEEIlEgdjlq+ZV//+qV0BlYZXttczsmC1VMXl5CjZytIOPnejkM/AlsaWdodG5pbmcBCONE7mxfxIUeAAEDCODIEAAAAAAAAQQiACCdqfuVNArwPQP3V/pvFA+2C9sIXkneEg8aASScD9GCoQz8CWxpZ2h0bmluZwEI6w407aj9OewA",
"commitments_secured": true
}
◉ tony@tony:~/clnlive:
$ l1-cli -k signpsbt psbt=cHNidP8BAgQCAAAAAQMEbAAAAAEEAQIBBQECAQYBAwH7BAIAAAAAAQD2AgAAAAABATuLitvtahYA/VcNzbfl4i4qPQ6ewqMT9ZzKdUvhIi1SAAAAAAD9////AkBCDwAAAAAAIgAgnan7lTQK8D0D91f6bxQPtgvbCF5J3hIPGgEknA/RgqEanuYFAAAAACJRIHh51jR82UP2vFTCHYIPYeWk4SpVeSP4xTYp/Di/TyMyAkcwRAIgOAwO3dLPsxQwJZuQHWsvCW7xnCJFeDKzmpbbm9CaDP8CIFmNKnbi+9F1beSgD9ZmM/uxSc4+R0p+X+xWqpsPDtLLASEDVYGhmPfMHSUv351Zlrl+4k9YnCoa/3SGR6cwyu6MtkdmAAAAAQErQEIPAAAAAAAiACCdqfuVNArwPQP3V/pvFA+2C9sIXkneEg8aASScD9GCoQEOICNk5XQVhsZr77dAfI1FLE39brdu7swFTnqIept8mV4gAQ8EAAAAAAEQBAAAAAAM/AlsaWdodG5pbmcBCDTwI7Vt249+AAEA9gIAAAAAAQE7i4rb7WoWAP1XDc235eIuKj0OnsKjE/WcynVL4SItUgAAAAAA/f///wJAQg8AAAAAACIAIJ2p+5U0CvA9A/dX+m8UD7YL2wheSd4SDxoBJJwP0YKhGp7mBQAAAAAiUSB4edY0fNlD9rxUwh2CD2HlpOEqVXkj+MU2Kfw4v08jMgJHMEQCIDgMDt3Sz7MUMCWbkB1rLwlu8ZwiRXgys5qW25vQmgz/AiBZjSp24vvRdW3koA/WZjP7sUnOPkdKfl/sVqqbDw7SywEhA1WBoZj3zB0lL9+dWZa5fuJPWJwqGv90hkenMMrujLZHZgAAAAEBKxqe5gUAAAAAIlEgeHnWNHzZQ/a8VMIdgg9h5aThKlV5I/jFNin8OL9PIzIBDiAjZOV0FYbGa++3QHyNRSxN/W63bu7MBU56iHqbfJleIAEPBAEAAAABEAT9////DPwJbGlnaHRuaW5nAQjYWuwBK1jMrgABAwjQ7+QFAAAAAAEEIlEgdjlq+ZV//+qV0BlYZXttczsmC1VMXl5CjZytIOPnejkM/AlsaWdodG5pbmcBCONE7mxfxIUeAAEDCODIEAAAAAAAAQQiACCdqfuVNArwPQP3V/pvFA+2C9sIXkneEg8aASScD9GCoQz8CWxpZ2h0bmluZwEI6w407aj9OewA
{
"signed_psbt": "cHNidP8BAgQCAAAAAQMEbAAAAAEEAQIBBQECAQYBAwH7BAIAAAAAAQD2AgAAAAABATuLitvtahYA/VcNzbfl4i4qPQ6ewqMT9ZzKdUvhIi1SAAAAAAD9////AkBCDwAAAAAAIgAgnan7lTQK8D0D91f6bxQPtgvbCF5J3hIPGgEknA/RgqEanuYFAAAAACJRIHh51jR82UP2vFTCHYIPYeWk4SpVeSP4xTYp/Di/TyMyAkcwRAIgOAwO3dLPsxQwJZuQHWsvCW7xnCJFeDKzmpbbm9CaDP8CIFmNKnbi+9F1beSgD9ZmM/uxSc4+R0p+X+xWqpsPDtLLASEDVYGhmPfMHSUv351Zlrl+4k9YnCoa/3SGR6cwyu6MtkdmAAAAAQErQEIPAAAAAAAiACCdqfuVNArwPQP3V/pvFA+2C9sIXkneEg8aASScD9GCoQEOICNk5XQVhsZr77dAfI1FLE39brdu7swFTnqIept8mV4gAQ8EAAAAAAEQBAAAAAAM/AlsaWdodG5pbmcBCDTwI7Vt249+AAEA9gIAAAAAAQE7i4rb7WoWAP1XDc235eIuKj0OnsKjE/WcynVL4SItUgAAAAAA/f///wJAQg8AAAAAACIAIJ2p+5U0CvA9A/dX+m8UD7YL2wheSd4SDxoBJJwP0YKhGp7mBQAAAAAiUSB4edY0fNlD9rxUwh2CD2HlpOEqVXkj+MU2Kfw4v08jMgJHMEQCIDgMDt3Sz7MUMCWbkB1rLwlu8ZwiRXgys5qW25vQmgz/AiBZjSp24vvRdW3koA/WZjP7sUnOPkdKfl/sVqqbDw7SywEhA1WBoZj3zB0lL9+dWZa5fuJPWJwqGv90hkenMMrujLZHZgAAAAEBKxqe5gUAAAAAIlEgeHnWNHzZQ/a8VMIdgg9h5aThKlV5I/jFNin8OL9PIzIBDiAjZOV0FYbGa++3QHyNRSxN/W63bu7MBU56iHqbfJleIAEPBAEAAAABEAT9////ARNAn1ief1Bc2LsrPQTcSdg7A4zbvw1Qht1ujTxnFQ4FK6Zg/vqEk6w4hEV04Pw5TKwjcyTs4Py0tRSnpTb+c4L2RyEWSM4xYkzRqLmfsVqnRrODxgXc/lzgKrbsicGdcjurlOYJAEepcUUAAAAADPwJbGlnaHRuaW5nAQjYWuwBK1jMrgABAwjQ7+QFAAAAAAEEIlEgdjlq+ZV//+qV0BlYZXttczsmC1VMXl5CjZytIOPnejkhB8V1yT0zJd1z6oZgSQuMvSicMlABXx/NnR40UgvEyK2ZCQB2TDivBAAAAAz8CWxpZ2h0bmluZwEI40TubF/EhR4AAQMI4MgQAAAAAAABBCIAIJ2p+5U0CvA9A/dX+m8UD7YL2wheSd4SDxoBJJwP0YKhDPwJbGlnaHRuaW5nAQjrDjTtqP057AA="
}
◉ tony@tony:~/clnlive:
$ l1-cli -k splice_signed channel_id=2364e5741586c66befb7407c8d452c4dfd6eb76eeecc054e7a887a9b7c995e20 \
► psbt=cHNidP8BAgQCAAAAAQMEbAAAAAEEAQIBBQECAQYBAwH7BAIAAAAAAQD2AgAAAAABATuLitvtahYA/VcNzbfl4i4qPQ6ewqMT9ZzKdUvhIi1SAAAAAAD9////AkBCDwAAAAAAIgAgnan7lTQK8D0D91f6bxQPtgvbCF5J3hIPGgEknA/RgqEanuYFAAAAACJRIHh51jR82UP2vFTCHYIPYeWk4SpVeSP4xTYp/Di/TyMyAkcwRAIgOAwO3dLPsxQwJZuQHWsvCW7xnCJFeDKzmpbbm9CaDP8CIFmNKnbi+9F1beSgD9ZmM/uxSc4+R0p+X+xWqpsPDtLLASEDVYGhmPfMHSUv351Zlrl+4k9YnCoa/3SGR6cwyu6MtkdmAAAAAQErQEIPAAAAAAAiACCdqfuVNArwPQP3V/pvFA+2C9sIXkneEg8aASScD9GCoQEOICNk5XQVhsZr77dAfI1FLE39brdu7swFTnqIept8mV4gAQ8EAAAAAAEQBAAAAAAM/AlsaWdodG5pbmcBCDTwI7Vt249+AAEA9gIAAAAAAQE7i4rb7WoWAP1XDc235eIuKj0OnsKjE/WcynVL4SItUgAAAAAA/f///wJAQg8AAAAAACIAIJ2p+5U0CvA9A/dX+m8UD7YL2wheSd4SDxoBJJwP0YKhGp7mBQAAAAAiUSB4edY0fNlD9rxUwh2CD2HlpOEqVXkj+MU2Kfw4v08jMgJHMEQCIDgMDt3Sz7MUMCWbkB1rLwlu8ZwiRXgys5qW25vQmgz/AiBZjSp24vvRdW3koA/WZjP7sUnOPkdKfl/sVqqbDw7SywEhA1WBoZj3zB0lL9+dWZa5fuJPWJwqGv90hkenMMrujLZHZgAAAAEBKxqe5gUAAAAAIlEgeHnWNHzZQ/a8VMIdgg9h5aThKlV5I/jFNin8OL9PIzIBDiAjZOV0FYbGa++3QHyNRSxN/W63bu7MBU56iHqbfJleIAEPBAEAAAABEAT9////ARNAn1ief1Bc2LsrPQTcSdg7A4zbvw1Qht1ujTxnFQ4FK6Zg/vqEk6w4hEV04Pw5TKwjcyTs4Py0tRSnpTb+c4L2RyEWSM4xYkzRqLmfsVqnRrODxgXc/lzgKrbsicGdcjurlOYJAEepcUUAAAAADPwJbGlnaHRuaW5nAQjYWuwBK1jMrgABAwjQ7+QFAAAAAAEEIlEgdjlq+ZV//+qV0BlYZXttczsmC1VMXl5CjZytIOPnejkhB8V1yT0zJd1z6oZgSQuMvSicMlABXx/NnR40UgvEyK2ZCQB2TDivBAAAAAz8CWxpZ2h0bmluZwEI40TubF/EhR4AAQMI4MgQAAAAAAABBCIAIJ2p+5U0CvA9A/dX+m8UD7YL2wheSd4SDxoBJJwP0YKhDPwJbGlnaHRuaW5nAQjrDjTtqP057AA=
{
"tx": "020000000001022364e5741586c66befb7407c8d452c4dfd6eb76eeecc054e7a887a9b7c995e200000000000000000002364e5741586c66befb7407c8d452c4dfd6eb76eeecc054e7a887a9b7c995e200100000000fdffffff02d0efe4050000000022512076396af9957fffea95d01958657b6d733b260b554c5e5e428d9cad20e3e77a39e0c81000000000002200209da9fb95340af03d03f757fa6f140fb60bdb085e49de120f1a01249c0fd182a104004730440220337b56db83160c533bdd5b01242b29da84ea696d0b7dd7b6102b1def3b19cc5b02206c5776636228c7e04cda1978b4b71ef284bddd17bd6945402d01dcccc654bc7b01473044022051e1b63ffea311220364fc5114cdf75f021d49bd8029a621633a44fe882c99ab022034823947f72faa85b4f3b6b5b0240295e44fb6246b7e9eddaa84f12e8b36b2870147522102e11aaa395e57f40778061b3985c58e56323232348e48c2e19486756170b1190c2103ee1742bf372bf7df8248f14f6c2c33b3eb9079623e8205637547f2a16622949952ae01409f589e7f505cd8bb2b3d04dc49d83b038cdbbf0d5086dd6e8d3c67150e052ba660fefa8493ac38844574e0fc394cac237324ece0fcb4b514a7a536fe7382f6476c000000",
"txid": "a02600e06daee79e8fc8c4cb4f9ceea56eb24701bddc2833c225773ff4e32b29"
}
◉ tony@tony:~/clnlive:
$ alias bt-cli
alias bt-cli='bitcoin-cli -datadir=$PATH_TO_BITCOIN -regtest'
◉ tony@tony:~/clnlive:
$ bt-cli getrawmempool
[
"a02600e06daee79e8fc8c4cb4f9ceea56eb24701bddc2833c225773ff4e32b29"
]
◉ tony@tony:~/clnlive:
$ bt-cli -rpcwallet=default getnewaddress
bcrt1qnk2vd6xz48my456tt009q6j4yuxx9hz8akhy7a
◉ tony@tony:~/clnlive:
$ bt-cli generatetoaddress 6 bcrt1qnk2vd6xz48my456tt009q6j4yuxx9hz8akhy7a
[
"2be57cd5b3a071f0e8274da6248c59da7128b6f3161a8d43fea682638f8f2509",
"326f91e5918abbdbcd397055584575604f922d0ec609e9de5547dae4d44ef7d7",
"303bcea6fc15c2d59cf07fe258f04a640e0f1f65b3fc1e274730ff8f5418e797",
"7f5bd209094c494c88a97174c230f779c6d814c4f3867f89f5a631c555f719d0",
"3fe52d447e2c411dc32d6076d643d0707d329139d67337869ed552e8fed200ee",
"6da9764ecef5f8576180b162bb22afbbe04d744a6e9a1cdba480bb7925b2dd7b"
]
◉ tony@tony:~/clnlive:
$ l1-cli listfunds
{
"outputs": [
{
"txid": "a02600e06daee79e8fc8c4cb4f9ceea56eb24701bddc2833c225773ff4e32b29",
"output": 0,
"amount_msat": 98889680000,
"scriptpubkey": "512076396af9957fffea95d01958657b6d733b260b554c5e5e428d9cad20e3e77a39",
"address": "bcrt1pwcuk47v40ll749wsr9vx27mdwvajvz64f309us5dnjkjpcl80gusm0x226",
"status": "unconfirmed",
"reserved": false
},
{
"txid": "205e997c9b7a887a4e05ccee6eb76efd4d2c458d7c40b7ef6bc6861574e56423",
"output": 1,
"amount_msat": 98999834000,
"scriptpubkey": "51207879d6347cd943f6bc54c21d820f61e5a4e12a557923f8c53629fc38bf4f2332",
"address": "bcrt1p0puavdrum9pld0z5cgwcyrmpukjwz2j40y3l33fk987r3060yveqdj4cyk",
"status": "confirmed",
"blockheight": 103,
"reserved": true,
"reserved_to_block": 180
}
],
"channels": [
{
"peer_id": "0205b3210eb490efd5debbed87df4b507f50dbbde9ab7980faf0367bbe8d27c734",
"connected": true,
"state": "CHANNELD_AWAITING_SPLICE",
"channel_id": "2364e5741586c66befb7407c8d452c4dfd6eb76eeecc054e7a887a9b7c995e20",
"short_channel_id": "103x1x0",
"our_amount_msat": 1000000000,
"amount_msat": 1000000000,
"funding_txid": "205e997c9b7a887a4e05ccee6eb76efd4d2c458d7c40b7ef6bc6861574e56423",
"funding_output": 0
}
]
}
◉ tony@tony:~/clnlive:
$ l1-cli listfunds
{
"outputs": [
{
"txid": "a02600e06daee79e8fc8c4cb4f9ceea56eb24701bddc2833c225773ff4e32b29",
"output": 0,
"amount_msat": 98889680000,
"scriptpubkey": "512076396af9957fffea95d01958657b6d733b260b554c5e5e428d9cad20e3e77a39",
"address": "bcrt1pwcuk47v40ll749wsr9vx27mdwvajvz64f309us5dnjkjpcl80gusm0x226",
"status": "confirmed",
"blockheight": 109,
"reserved": false
}
],
"channels": [
{
"peer_id": "0205b3210eb490efd5debbed87df4b507f50dbbde9ab7980faf0367bbe8d27c734",
"connected": true,
"state": "CHANNELD_NORMAL",
"channel_id": "2364e5741586c66befb7407c8d452c4dfd6eb76eeecc054e7a887a9b7c995e20",
"short_channel_id": "109x1x1",
"our_amount_msat": 1100000000,
"amount_msat": 1100000000,
"funding_txid": "a02600e06daee79e8fc8c4cb4f9ceea56eb24701bddc2833c225773ff4e32b29",
"funding_output": 1
}
]
}
◉ tony@tony:~/clnlive:
$ l1-cli newaddr
{
"bech32": "bcrt1q0esx06yg3t09u9n4wdl753tsz4v79f05czrqs2"
}
◉ tony@tony:~/clnlive:
$ l1-cli newaddr p2tr
{
"p2tr": "bcrt1pkw5pysm32pyc64s8gahwvy2py86wwhj78kd4tl9y8thyjlwewlcqzwj2qx"
}
◉ tony@tony:~/clnlive:
$ l1-cli newaddr all
{
"bech32": "bcrt1qsqk8j872je446lpkgtg9d3ke664qyd87t5yu0w",
"p2tr": "bcrt1pau9p4jgu4jhfgqaa9pz6qzucuu4qc9jj88k9zt0dpyz5jhtyrv4qvc0ew5"
}
◉ tony@tony:~/clnlive:
$ ps -ax | rg lightn
696891 ? Ss 0:00 lightningd --lightning-dir=/tmp/l1-regtest --experimental-splicing --daemon
696892 pts/0 S 0:00 /usr/local/libexec/c-lightning/plugins/autoclean
696893 pts/0 S 0:00 /usr/local/libexec/c-lightning/plugins/chanbackup
696894 pts/0 S 0:00 /usr/local/libexec/c-lightning/plugins/bcli
696895 pts/0 S 0:00 /usr/local/libexec/c-lightning/plugins/commando
696897 pts/0 S 0:00 /usr/local/libexec/c-lightning/plugins/funder
696898 pts/0 S 0:00 /usr/local/libexec/c-lightning/plugins/topology
696899 pts/0 S 0:00 /usr/local/libexec/c-lightning/plugins/keysend
696900 pts/0 S 0:00 /usr/local/libexec/c-lightning/plugins/offers
696901 pts/0 S 0:00 /usr/local/libexec/c-lightning/plugins/pay
696902 pts/0 S 0:00 /usr/local/libexec/c-lightning/plugins/txprepare
696903 pts/0 S 0:00 /usr/local/libexec/c-lightning/plugins/cln-renepay
696904 pts/0 S 0:00 /usr/local/libexec/c-lightning/plugins/spenderp
696905 pts/0 S 0:00 /usr/local/libexec/c-lightning/plugins/sql
696907 pts/0 S 0:00 /usr/local/libexec/c-lightning/plugins/bookkeeper
696918 pts/0 SL 0:00 /usr/local/libexec/c-lightning/lightning_hsmd
696919 pts/0 S 0:00 /usr/local/libexec/c-lightning/lightning_connectd
696929 pts/0 S 0:00 /usr/local/libexec/c-lightning/lightning_gossipd
697158 ? Ss 0:00 lightningd --lightning-dir=/tmp/l2-regtest --daemon
697159 pts/0 S 0:00 /usr/local/libexec/c-lightning/plugins/autoclean
697160 pts/0 S 0:00 /usr/local/libexec/c-lightning/plugins/chanbackup
697161 pts/0 S 0:00 /usr/local/libexec/c-lightning/plugins/bcli
697162 pts/0 S 0:00 /usr/local/libexec/c-lightning/plugins/commando
697164 pts/0 S 0:00 /usr/local/libexec/c-lightning/plugins/funder
697165 pts/0 S 0:00 /usr/local/libexec/c-lightning/plugins/topology
697166 pts/0 S 0:00 /usr/local/libexec/c-lightning/plugins/keysend
697167 pts/0 S 0:00 /usr/local/libexec/c-lightning/plugins/offers
697168 pts/0 S 0:00 /usr/local/libexec/c-lightning/plugins/pay
697169 pts/0 S 0:00 /usr/local/libexec/c-lightning/plugins/txprepare
697170 pts/0 S 0:00 /usr/local/libexec/c-lightning/plugins/cln-renepay
697171 pts/0 S 0:00 /usr/local/libexec/c-lightning/plugins/spenderp
697172 pts/0 S 0:00 /usr/local/libexec/c-lightning/plugins/sql
697174 pts/0 S 0:00 /usr/local/libexec/c-lightning/plugins/bookkeeper
697184 pts/0 SL 0:00 /usr/local/libexec/c-lightning/lightning_hsmd
697185 pts/0 S 0:00 /usr/local/libexec/c-lightning/lightning_connectd
697195 pts/0 S 0:00 /usr/local/libexec/c-lightning/lightning_gossipd
697272 ? S 0:00 /usr/local/libexec/c-lightning/lightning_channeld
697273 ? S 0:00 /usr/local/libexec/c-lightning/lightning_channeld
698460 pts/0 S+ 0:00 rg lightn
◉ tony@tony:~/clnlive:
$ l2-cli invoice 10000sat label pizza
{
"payment_hash": "3a315c41cae8a32ad86d16914b8a3edd27baa2ad9b262c651f9bb05d8bfe40ad",
"expires_at": 1694100167,
"bolt11": "lnbcrt100u1pj0pvz8sp5ed2wdf08knan6wzkqnld93f35h2khlh3pnsryrqdxckg3rxt65tspp58gc4csw2az3j4krdz6g5hz37m5nm4g4dnvnzceglnwc9mzl7gzksdqgwp5h57npxqyjw5qcqp29qxpqysgq35e3htpwntwtnh7usnh5v0nypk9ju77932zn49rkma436t64ltj8dvetrh9ekmpm4fxs42ejzs6zlv4pz5tccq7vsme5s4ct07jesvqp0hav94",
"payment_secret": "cb54e6a5e7b4fb3d385604fed2c531a5d56bfef10ce0320c0d362c888ccbd517",
"created_index": 1,
"warning_capacity": "Insufficient incoming channel capacity to pay invoice"
}
◉ tony@tony:~/clnlive:
$ l1-cli renepay lnbcrt100u1pj0pvz8sp5ed2wdf08knan6wzkqnld93f35h2khlh3pnsryrqdxckg3rxt65tspp58gc4csw2az3j4krdz6g5hz37m5nm4g4dnvnzceglnwc9mzl7gzksdqgwp5h57npxqyjw5qcqp29qxpqysgq35e3htpwntwtnh7usnh5v0nypk9ju77932zn49rkma436t64ltj8dvetrh9ekmpm4fxs42ejzs6zlv4pz5tccq7vsme5s4ct07jesvqp0hav94
# we have computed a set of 1 flows with probability 1.000, fees 0msat and delay 10
# Flow 1: amount=10000000msat prob=1.000 fees=0msat delay=0 path=-109x1x1/1(min=max=1088360000msat)->
# Flow 1: Success
{
"payment_preimage": "cd3d5f225feaa7edbb920e2ec25b106ad0ba3ea014dc768c3f13d8a173d6fbd0",
"payment_hash": "3a315c41cae8a32ad86d16914b8a3edd27baa2ad9b262c651f9bb05d8bfe40ad",
"created_at": 1693495380.440,
"parts": 1,
"amount_msat": 10000000,
"amount_sent_msat": 10000000,
"status": "complete",
"destination": "0205b3210eb490efd5debbed87df4b507f50dbbde9ab7980faf0367bbe8d27c734"
}
◉ tony@tony:~/clnlive:
$ l2-cli stop
"Shutdown complete"
◉ tony@tony:~/clnlive:
$ l1-cli invoice 20000sat label pizza
{
"payment_hash": "97e344f53a5eadd650cd1fb2ac87a2c268f358e0fb70022194e896ea9dfe0f48",
"expires_at": 1694100463,
"bolt11": "lnbcrt200u1pj0pvt0sp5wszfgmzp5ccymdnc4getzdw0m7tryn82458hlq7gq4tqnnwr86kspp5jl35faf6t6kav5xdr7e2epazcf50xk8qldcqygv5aztw4807payqdqgwp5h57npxqyjw5qcqp29qxpqysgqey60xcj9gkt7s6vjy8fpptfw6dnefcq3n7qzrnrz9ycmza6hxsq4p4x3kqll3cuzhcl9z7v7c3e2pnypkv952ml93qc76jqdmr3h75spd4xxtw",
"payment_secret": "7404946c41a6304db678aa32b135cfdf96324ceaad0f7f83c8055609cdc33ead",
"created_index": 1,
"warning_capacity": "Insufficient incoming channel capacity to pay invoice"
}
◉ tony@tony:~/clnlive:
$ l1-cli pay lnbcrt200u1pj0pvt0sp5wszfgmzp5ccymdnc4getzdw0m7tryn82458hlq7gq4tqnnwr86kspp5jl35faf6t6kav5xdr7e2epazcf50xk8qldcqygv5aztw4807payqdqgwp5h57npxqyjw5qcqp29qxpqysgqey60xcj9gkt7s6vjy8fpptfw6dnefcq3n7qzrnrz9ycmza6hxsq4p4x3kqll3cuzhcl9z7v7c3e2pnypkv952ml93qc76jqdmr3h75spd4xxtw
{
"destination": "02acf0a36ce2e27d13489a202bafc7065494b39650fbac2060ec9b0f6bd2c749c6",
"payment_hash": "97e344f53a5eadd650cd1fb2ac87a2c268f358e0fb70022194e896ea9dfe0f48",
"created_at": 1693495677.905,
"parts": 1,
"amount_msat": 20000000,
"amount_sent_msat": 20000000,
"payment_preimage": "5cc445be2a358359421267bcd65be03d45fe48e37508a0d83dbbfe80e96980fc",
"status": "complete"
}
◉ tony@tony:~/clnlive:
$ l1-cli listinvoices
{
"invoices": [
{
"label": "label",
"bolt11": "lnbcrt200u1pj0pvt0sp5wszfgmzp5ccymdnc4getzdw0m7tryn82458hlq7gq4tqnnwr86kspp5jl35faf6t6kav5xdr7e2epazcf50xk8qldcqygv5aztw4807payqdqgwp5h57npxqyjw5qcqp29qxpqysgqey60xcj9gkt7s6vjy8fpptfw6dnefcq3n7qzrnrz9ycmza6hxsq4p4x3kqll3cuzhcl9z7v7c3e2pnypkv952ml93qc76jqdmr3h75spd4xxtw",
"payment_hash": "97e344f53a5eadd650cd1fb2ac87a2c268f358e0fb70022194e896ea9dfe0f48",
"amount_msat": 20000000,
"status": "paid",
"pay_index": 1,
"amount_received_msat": 20000000,
"paid_at": 1693495677,
"payment_preimage": "5cc445be2a358359421267bcd65be03d45fe48e37508a0d83dbbfe80e96980fc",
"description": "pizza",
"expires_at": 1694100463,
"created_index": 1,
"updated_index": 1
}
]
}