This document describes how to open a channel with c-lightning
by using a PSBT as the funding transaction for my learning.
If you use lnd
please go to here that is well documented.
Also, here is the c-lightning offical document for each command that are shown below.
fundchannel_start
is a lower level RPC command that allows a user to initiate channel establishment with a connected peer.
Assume my node is already connected to 02b861cc95a061d0536a2e6d96992274c284490bc1e3782d5b59004a2aba7767a7
.
Below the command returns the funding_address
and the scriptpubkey
for the channel funding output with 200000 sats(=0.002btc).
$lightning-cli fundchannel_start 02b861cc95a061d0536a2e6d96992274c284490bc1e3782d5b59004a2aba7767a7 0.002btc
{
"funding_address": "tb1qt4dptguzw8x37eyj2vux6nzgsw9plr2k36hfkpn2q4g4huwn2s7qn7mle5",
"scriptpubkey": "00205d5a15a38271cd1f649253386d4c48838a1f8d568eae9b066a05515bf1d3543c"
}
In this example I use bitcoind
to create a psbt. Any kind of wallets that support psbt would work as well.
To create a funding psbt, copy and paste the funding_address
you obtained from the command above and execute the command as follows.
It returns a psbt.
$bitcoin-cli walletcreatefundedpsbt [] '[{"tb1qt4dptguzw8x37eyj2vux6nzgsw9plr2k36hfkpn2q4g4huwn2s7qn7mle5":0.00200000}]' 0 '{"conf_target": 30}'
{
"psbt": "cHNidP8BAH0CAAAAAdm2BuwAjQSz8GYHLSAPSbPqelX9EWQQSqNGKx26zjumAAAAAAD+////As96KwIAAAAAFgAU6Ek1f/tUxTxfZtekXauk39TsixdADQMAAAAAACIAIF1aFaOCcc0fZJJTOG1MSIOKH41Wjq6bBmoFUVvx01Q8AAAAAAABAH0CAAAAAT2puk++itvqayeJ+4qxx7BLMv3jvL/QCdKwPAzAV8U/AAAAAAD+////AqiILgIAAAAAFgAU5XLjruBCb++8zbFUAYl31bjYFmxBDQMAAAAAACIAIA1jAVaELf+zCHZJs4Ci0QSAQEkrypnRPtz/j+/FcCMzAAAAAAEBH6iILgIAAAAAFgAU5XLjruBCb++8zbFUAYl31bjYFmwiBgPvvXMmayUl0q1w91O1BYaDd9E23+k2fYEPP12Ux+a6uBCKPpeuAAAAgAEAAIAXAACAACICAxjIcIt7i2/gpsxwIr8lE3FhdzzlJWunYs9PW5dHUd5dEIo+l64AAACAAQAAgBkAAIAAAA==",
"fee": 0.00000153,
"changepos": 0
}
Sign the psbt as follows.
$bitcoin-cli walletprocesspsbt cHNidP8BAH0CAAAAAdm2BuwAjQSz8GYHLSAPSbPqelX9EWQQSqNGKx26zjumAAAAAAD+////As96KwIAAAAAFgAU6Ek1f/tUxTxfZtekXauk39TsixdADQMAAAAAACIAIF1aFaOCcc0fZJJTOG1MSIOKH41Wjq6bBmoFUVvx01Q8AAAAAAABAH0CAAAAAT2puk++itvqayeJ+4qxx7BLMv3jvL/QCdKwPAzAV8U/AAAAAAD+////AqiILgIAAAAAFgAU5XLjruBCb++8zbFUAYl31bjYFmxBDQMAAAAAACIAIA1jAVaELf+zCHZJs4Ci0QSAQEkrypnRPtz/j+/FcCMzAAAAAAEBH6iILgIAAAAAFgAU5XLjruBCb++8zbFUAYl31bjYFmwiBgPvvXMmayUl0q1w91O1BYaDd9E23+k2fYEPP12Ux+a6uBCKPpeuAAAAgAEAAIAXAACAACICAxjIcIt7i2/gpsxwIr8lE3FhdzzlJWunYs9PW5dHUd5dEIo+l64AAACAAQAAgBkAAIAAAA==
{
"psbt": "cHNidP8BAH0CAAAAAdm2BuwAjQSz8GYHLSAPSbPqelX9EWQQSqNGKx26zjumAAAAAAD+////As96KwIAAAAAFgAU6Ek1f/tUxTxfZtekXauk39TsixdADQMAAAAAACIAIF1aFaOCcc0fZJJTOG1MSIOKH41Wjq6bBmoFUVvx01Q8AAAAAAABAH0CAAAAAT2puk++itvqayeJ+4qxx7BLMv3jvL/QCdKwPAzAV8U/AAAAAAD+////AqiILgIAAAAAFgAU5XLjruBCb++8zbFUAYl31bjYFmxBDQMAAAAAACIAIA1jAVaELf+zCHZJs4Ci0QSAQEkrypnRPtz/j+/FcCMzAAAAAAEBH6iILgIAAAAAFgAU5XLjruBCb++8zbFUAYl31bjYFmwBCGsCRzBEAiBr1iwjMgkYsQi1oAugl9CJBi0Rf4dWNOZq9o4qxUe1bAIgeegA6U0sYExHj87QdZLC0+ElFEJEGd2hgyYQqxW1MaABIQPvvXMmayUl0q1w91O1BYaDd9E23+k2fYEPP12Ux+a6uAAiAgMYyHCLe4tv4KbMcCK/JRNxYXc85SVrp2LPT1uXR1HeXRCKPpeuAAAAgAEAAIAZAACAAAA=",
"complete": true
}
Finalize the inputs of the psbt and obtain a serialized transaction which can be broadcast.
!!! WARNING !!! DO NOT PUBLISH the finalized transaction yet until after channel establishment has been successfully completed.
$bitcoin-cli finalizepsbt cHNidP8BAH0CAAAAAdm2BuwAjQSz8GYHLSAPSbPqelX9EWQQSqNGKx26zjumAAAAAAD+////As96KwIAAAAAFgAU6Ek1f/tUxTxfZtekXauk39TsixdADQMAAAAAACIAIF1aFaOCcc0fZJJTOG1MSIOKH41Wjq6bBmoFUVvx01Q8AAAAAAABAH0CAAAAAT2puk++itvqayeJ+4qxx7BLMv3jvL/QCdKwPAzAV8U/AAAAAAD+////AqiILgIAAAAAFgAU5XLjruBCb++8zbFUAYl31bjYFmxBDQMAAAAAACIAIA1jAVaELf+zCHZJs4Ci0QSAQEkrypnRPtz/j+/FcCMzAAAAAAEBH6iILgIAAAAAFgAU5XLjruBCb++8zbFUAYl31bjYFmwBCGsCRzBEAiBr1iwjMgkYsQi1oAugl9CJBi0Rf4dWNOZq9o4qxUe1bAIgeegA6U0sYExHj87QdZLC0+ElFEJEGd2hgyYQqxW1MaABIQPvvXMmayUl0q1w91O1BYaDd9E23+k2fYEPP12Ux+a6uAAiAgMYyHCLe4tv4KbMcCK/JRNxYXc85SVrp2LPT1uXR1HeXRCKPpeuAAAAgAEAAIAZAACAAAA=
{
"hex": "02000000000101d9b606ec008d04b3f066072d200f49b3ea7a55fd1164104aa3462b1dbace3ba60000000000feffffff02cf7a2b0200000000160014e849357ffb54c53c5f66d7a45daba4dfd4ec8b17400d0300000000002200205d5a15a38271cd1f649253386d4c48838a1f8d568eae9b066a05515bf1d3543c0247304402206bd62c23320918b108b5a00ba097d089062d117f875634e66af68e2ac547b56c022079e800e94d2c604c478fced07592c2d3e12514424419dda1832610ab15b531a0012103efbd73266b2525d2ad70f753b505868377d136dfe9367d810f3f5d94c7e6bab800000000",
"complete": true
}
Now you need to find a txid to complete a funding process. Obtain a txid and vout as follows.
$bitcoin-cli decoderawtransaction 02000000000101d9b606ec008d04b3f066072d200f49b3ea7a55fd1164104aa3462b1dbace3ba60000000000feffffff02cf7a2b0200000000160014e849357ffb54c53c5f66d7a45daba4dfd4ec8b17400d0300000000002200205d5a15a38271cd1f649253386d4c48838a1f8d568eae9b066a05515bf1d3543c0247304402206bd62c23320918b108b5a00ba097d089062d117f875634e66af68e2ac547b56c022079e800e94d2c604c478fced07592c2d3e12514424419dda1832610ab15b531a0012103efbd73266b2525d2ad70f753b505868377d136dfe9367d810f3f5d94c7e6bab800000000
{
"txid": "011d9a25f4f6066e30f1c75f4f33efe02677949e63834332fdcb407da01784df",
"hash": "e4580eb88d9ed9e7c290dccdfbf2f73a665daf35ef216651f7987d5e7f62044e",
"version": 2,
"size": 234,
"vsize": 153,
"weight": 609,
"locktime": 0,
"vin": [
{
"txid": "a63bceba1d2b46a34a106411fd557aeab3490f202d0766f0b3048d00ec06b6d9",
"vout": 0,
"scriptSig": {
"asm": "",
"hex": ""
},
"txinwitness": [
"304402206bd62c23320918b108b5a00ba097d089062d117f875634e66af68e2ac547b56c022079e800e94d2c604c478fced07592c2d3e12514424419dda1832610ab15b531a001",
"03efbd73266b2525d2ad70f753b505868377d136dfe9367d810f3f5d94c7e6bab8"
],
"sequence": 4294967294
}
],
"vout": [
{
"value": 0.36403919,
"n": 0,
"scriptPubKey": {
"asm": "0 e849357ffb54c53c5f66d7a45daba4dfd4ec8b17",
"hex": "0014e849357ffb54c53c5f66d7a45daba4dfd4ec8b17",
"reqSigs": 1,
"type": "witness_v0_keyhash",
"addresses": [
"tb1qapyn2llm2nznchmx67j9m2ayml2wezch63vuwu"
]
}
},
{
"value": 0.00200000,
"n": 1,
"scriptPubKey": {
"asm": "0 5d5a15a38271cd1f649253386d4c48838a1f8d568eae9b066a05515bf1d3543c",
"hex": "00205d5a15a38271cd1f649253386d4c48838a1f8d568eae9b066a05515bf1d3543c",
"reqSigs": 1,
"type": "witness_v0_scripthash",
"addresses": [
"tb1qt4dptguzw8x37eyj2vux6nzgsw9plr2k36hfkpn2q4g4huwn2s7qn7mle5"
]
}
}
]
}
Set the peer id, txid and vout and then excute the command as follows. When you get errors like "Unknown peer" or "No channel funding in progress.", the peers disconnected by timeout.
$lightning-cli fundchannel_complete 02b861cc95a061d0536a2e6d96992274c284490bc1e3782d5b59004a2aba7767a7 011d9a25f4f6066e30f1c75f4f33efe02677949e63834332fdcb407da01784df 1
{
"channel_id": "df8417a07d40cbfd324383639e947726e0ef334f5fc7f1306e06f6f4259a1d00",
"commitments_secured": true
}
Now that you can broadcast the funding transaction as follows.
$bitcoin-cli sendrawtransaction 02000000000101d9b606ec008d04b3f066072d200f49b3ea7a55fd1164104aa3462b1dbace3ba60000000000feffffff02cf7a2b0200000000160014e849357ffb54c53c5f66d7a45daba4dfd4ec8b17400d0300000000002200205d5a15a38271cd1f649253386d4c48838a1f8d568eae9b066a05515bf1d3543c0247304402206bd62c23320918b108b5a00ba097d089062d117f875634e66af68e2ac547b56c022079e800e94d2c604c478fced07592c2d3e12514424419dda1832610ab15b531a0012103efbd73266b2525d2ad70f753b505868377d136dfe9367d810f3f5d94c7e6bab800000000
011d9a25f4f6066e30f1c75f4f33efe02677949e63834332fdcb407da01784df
You can check the channel status as follows. Wait until the channel is opened.
$lightning-cli listpeers 02b861cc95a061d0536a2e6d96992274c284490bc1e3782d5b59004a2aba7767a7
{
"peers": [
{
"id": "02b861cc95a061d0536a2e6d96992274c284490bc1e3782d5b59004a2aba7767a7",
"connected": true,
"netaddr": [
"212.24.106.109:9735"
],
"features": "0aa2a1",
"channels": [
{
"state": "CHANNELD_AWAITING_LOCKIN",
"scratch_txid": "d5a27fa679bdb3d2063a0ac95a8a1a3771e0df239580f61fdafed55e126d5f70",
"last_tx_fee": "183000msat",
"feerate": {
"perkw": 253,
"perkb": 1012
},
"owner": "channeld",
"channel_id": "df8417a07d40cbfd324383639e947726e0ef334f5fc7f1306e06f6f4259a1d00",
"funding_txid": "011d9a25f4f6066e30f1c75f4f33efe02677949e63834332fdcb407da01784df",
"close_to_addr": "tb1qvw5v9g93sphpqpvts5h7l2lu74svx7fvvdkczl",
"close_to": "001463a8c2a0b1806e10058b852fefabfcf560c3792c",
"private": false,
"opener": "local",
"closer": null,
"features": [
"option_static_remotekey"
],
"funding_allocation_msat": {
"02b861cc95a061d0536a2e6d96992274c284490bc1e3782d5b59004a2aba7767a7": 0,
"039c74062df59c7e0c92528ba068387eb99e43668ed42e1a2af58a557c6f019eb2": 200000000
},
"funding_msat": {
"02b861cc95a061d0536a2e6d96992274c284490bc1e3782d5b59004a2aba7767a7": "0msat",
"039c74062df59c7e0c92528ba068387eb99e43668ed42e1a2af58a557c6f019eb2": "200000000msat"
},
"msatoshi_to_us": 200000000,
"to_us_msat": "200000000msat",
"msatoshi_to_us_min": 200000000,
"min_to_us_msat": "200000000msat",
"msatoshi_to_us_max": 200000000,
"max_to_us_msat": "200000000msat",
"msatoshi_total": 200000000,
"total_msat": "200000000msat",
"fee_base_msat": "1msat",
"fee_proportional_millionths": 10,
"dust_limit_satoshis": 546,
"dust_limit_msat": "546000msat",
"max_htlc_value_in_flight_msat": 18446744073709551615,
"max_total_htlc_in_msat": "18446744073709551615msat",
"their_channel_reserve_satoshis": 2000,
"their_reserve_msat": "2000000msat",
"our_channel_reserve_satoshis": 2000,
"our_reserve_msat": "2000000msat",
"spendable_msatoshi": 197460000,
"spendable_msat": "197460000msat",
"receivable_msatoshi": 0,
"receivable_msat": "0msat",
"htlc_minimum_msat": 0,
"minimum_htlc_in_msat": "0msat",
"their_to_self_delay": 6,
"our_to_self_delay": 144,
"max_accepted_htlcs": 483,
"state_changes": [],
"status": [
"CHANNELD_AWAITING_LOCKIN:Funding needs 1 more confirmations for lockin."
],
"in_payments_offered": 0,
"in_msatoshi_offered": 0,
"in_offered_msat": "0msat",
"in_payments_fulfilled": 0,
"in_msatoshi_fulfilled": 0,
"in_fulfilled_msat": "0msat",
"out_payments_offered": 0,
"out_msatoshi_offered": 0,
"out_offered_msat": "0msat",
"out_payments_fulfilled": 0,
"out_msatoshi_fulfilled": 0,
"out_fulfilled_msat": "0msat",
"htlcs": []
}
]
}
]
}
Once the transaction is confirmed and the channel is opened you can make a payment.
You can use keysend
if the peer supporteds it so that you do not have to ask the peer an invoice.
$lightning-cli keysend 02b861cc95a061d0536a2e6d96992274c284490bc1e3782d5b59004a2aba7767a7 1000