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.
$lightning-cli fundchannel_start 02b861cc95a061d0536a2e6d96992274c284490bc1e3782d5b59004a2aba7767a7 200000
{
"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}]'
{
"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.
$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