现在我们可以在本机上建立第二个节点,第二个节点的建立有一些不同,我们一步一步来。
将第一个节点的比特币同步目录复制一份作为第二个节点的同步目录
在我这里是将f:\temp\btctestnet
复制为f:\temp\btctestnet2
,复制同步目录可以免于再次同步区块链。新开一个
ubuntu
窗口,并新建一个用户
a.sudo adduser nu
新建一个nu
用户
b.su - nu
切换到这个用户-
开启
bitcoind
,并同步区块链bitcoind -daemon -testnet -port=17195 -rpcport=17495 -datadir=/mnt/f/temp/btctestnet2
注意这里为了避免端口冲突,重新设置了两个绑定的端口。
-
等待区块链同步完成
因为区块链目录是被复制的,所以同步过程会很快完成,同样可以用getblockchaininfo
可以看到同步进度bitcoin-cli -testnet -rpcport=17495 -datadir=/mnt/f/temp/btctestnet2 getblockchaininfo
注意这里的rpc
端口需要指定,datadir
指向新的目录
- 安装
c-lightning
这一步的过程与第一个节点相同
注:如果你遇到
user is not in sudoer list
错误,可以用sudo -i
切换到root
用户,并将nu
用户添加到/etc/sudoers
中。
-
启动
c-lightning
,并连接bitcoind
lightningd/lightningd --testnet --bitcoin-datadir=/mnt/f/temp/btctestnet2 --log-level=debug --bitcoin-rpcport=17495
注意这里的端口和目录
新建地址
这一步也与第一个节点相同-
获取测试比特币
之前那个faucet
再次转账需要12小时,但是我们可以从第一个节点直接转账到第二个节点。
在第一个节点的ubuntu
窗口中输入:cli/lightning-cli withdraw 第二个节点中某个比特币地址 50000
这里转账50000
,单位也是聪(satoshis
)
命令会输出一个txid
,这个是交易id
,可以在这里查到,等待交易确认就可以用listfunds
来查看
sky@willw:~/lightning$ cli/lightning-cli withdraw tb1qh7r74r4mck729arzs36ua070p7v0w9dlfqp5tl 50000
{
"tx": "02000000000101ddcde054e19e805b711ba1adc2914f66f884bd0d72dc666d8365518ba8e606ca0100000000ffffffff0250c3000000000000160014bf87ea8ebbc5bca2f4628475cebfcf0f98f715bfba11fe00000000001600144e4cf8601882533d6b227a5454498c5d6b7a90d9024730440220120b850487bbe944e1311d52e9b96e8033eb08bc8a81b461cfe2ac66b137bc6b02206726c473fb79fb75f10638fcc5f2f5c30d607cf379a5d801291586acb72dd6460121020e974fa6300b34cc1b3039358456a141db8284d8feb81171ebef9a61231d603d00000000",
"txid": "0fda9d772cd6b8c391f3663643502a6428f014dcaaed69b3bcd60e00b8c6a32a"
}
-
连接第一个节点
在第二个节点的窗口中输入:cli/lightning-cli connect 第一个节点id 127.0.0.1
还记得第一个节点的id
怎么得到吗?这里就能用上了。
nu@willw:~/lightning$ cli/lightning-cli connect 03707f3ba87336a4571750f7d1f17d7261843ccf1310c122afbf70c01f0e22fe89 127.0.0.1
{
"id": "03707f3ba87336a4571750f7d1f17d7261843ccf1310c122afbf70c01f0e22fe89"
}
-
为
channel
充值
在第二个节点的窗口中用fundchannel
命令充值cli/lightning-cli fundchannel 第一个节点id 10000
这里为这个channel
充值了10000聪(satoshis
)。
这个命令也会输出一个txid
,需要等待交易确认以后才能继续。
nu@willw:~/lightning$ cli/lightning-cli fundchannel 03707f3ba87336a4571750f7d1f17d7261843ccf1310c122afbf70c01f0e22fe89 10000
{
"tx": "020000000001012aa3c6b8000ed6bcb369edaadc14f028642a50433666f391c3b8d62c779dda0f0000000000ffffffff0210270000000000002200209199e26614f58b9321d077dc42f3c2aad8bbacb0133be81907abde8c650226d8a69b000000000000160014b70812f7bd6bedfa30da060c4a968cbb2882f6a602483045022100e687d9748798dced679a40313e5b35bb2aecc60e904e235a307a3470188ecca10220707dfd4c195c9c25e0f380df1b0f49a567b6adc48ddaab1fdba7553423fe10a10121036e97de798004bf2fc8ff32da429cbde9684f8842b1bab30dcb2db207457c288100000000",
"txid": "43b71852606ae1571f183285d380680352e560b6896d940ffd4d764cbdcbf1ce",
"channel_id": "cef1cbbd4c764dfd0f946d89b660e552036880d38532181f57e16a605218b743"
}
交易确认后可以用listpeers
命令来确认channel
是否已经建立。
nu@willw:~/lightning$ cli/lightning-cli listpeers
{
"peers": [
{
"id": "03707f3ba87336a4571750f7d1f17d7261843ccf1310c122afbf70c01f0e22fe89",
"connected": true,
"netaddr": [
"127.0.0.1:9735"
],
"global_features": "",
"local_features": "88",
"globalfeatures": "",
"localfeatures": "88",
"channels": [
{
"state": "CHANNELD_NORMAL",
"scratch_txid": "5e5807030d060842332100980d0bcddd23ffdca4f4fed8a2f04cd894e28b03e7",
"owner": "lightning_channeld",
"short_channel_id": "1452473:32:0",
"channel_id": "cef1cbbd4c764dfd0f946d89b660e552036880d38532181f57e16a605218b743",
"funding_txid": "43b71852606ae1571f183285d380680352e560b6896d940ffd4d764cbdcbf1ce",
"private": false,
"msatoshi_to_us": 10000000,
"msatoshi_to_us_min": 10000000,
"msatoshi_to_us_max": 10000000,
"msatoshi_total": 10000000,
"dust_limit_satoshis": 546,
"max_htlc_value_in_flight_msat": 18446744073709551615,
"their_channel_reserve_satoshis": 546,
"our_channel_reserve_satoshis": 546,
"spendable_msatoshi": 9454000,
"htlc_minimum_msat": 0,
"their_to_self_delay": 6,
"our_to_self_delay": 6,
"max_accepted_htlcs": 483,
"status": [
"CHANNELD_NORMAL:Funding transaction locked."
],
"in_payments_offered": 0,
"in_msatoshi_offered": 0,
"in_payments_fulfilled": 0,
"in_msatoshi_fulfilled": 0,
"out_payments_offered": 0,
"out_msatoshi_offered": 0,
"out_payments_fulfilled": 0,
"out_msatoshi_fulfilled": 0,
"htlcs": [
]
}
]
}
]
}
这是从第二个节点窗口看到的,如果是第一个节点窗口输出会稍有不同。注意这里的参数,另外有一个msatoshi
单位,表示聪的千分之一。
-
在第一个节点窗口中生成
invoice
sky@willw:~/lightning$ cli/lightning-cli invoice 10000 mypay6 mypay6 { "payment_hash": "69d53d2fff8dfddc6ba98e92a6ad5d2989af9c69cc517a8c4f0035550bb00616", "expires_at": 1547534361, "bolt11": "lntb100n1pwr6usfpp5d82n6tll3h7ac6af36f2dt2a9xy6l8rfe3gh4rz0qq642zasqctqdq2d4uhqctexccqp2rzjqf6n68zzwwktgqjqf320msfm8a5q3mpuavekmx0p732cqdpv08vvg93fhyqqqgqqqqqqqqqpqqqqqzsqqc4xz7tzg4j583zg97gt8x7tuzxgxy86ym9dvpgfqkr4vy9ndhgedqhtgq07sawunung2sslg3hq5g4g9pju68v3fe6np7ssle96h933gpxzquj8" }
这里的数值是10
聪,但是单位是msatoshi
,所以数值是10000
两个mypay6
的前一个是invoice
的名字,必须唯一,后一个是描述,可以为空。
执行的结果是这个支付请求被编码成了bolt11
字符串,将这个字符串提供给支付者就行了。
-
在第二个节点窗口中完成支付
将上一步的bolt11
字符串拷贝到第二个节点窗口中,用pay
命令进行支付nu@willw:~/lightning$ cli/lightning-cli pay lntb100n1pwr6usfpp5d82n6tll3h7ac6af36f2dt2a9xy6l8rfe3gh4rz0qq642zasqctqdq2d4uhqctexccqp2rzjqf6n68zzwwktgqjqf320msfm8a5q3mpuavekmx0p732cqdpv08vvg93fhyqqqgqqqqqqqqqpqqqqqzsqqc4xz7tzg4j583zg97gt8x7tuzxgxy86ym9dvpgfqkr4vy9ndhgedqhtgq07sawunung2sslg3hq5g4g9pju68v3fe6np7ssle96h933gpxzquj8 { "id": 5, "payment_hash": "69d53d2fff8dfddc6ba98e92a6ad5d2989af9c69cc517a8c4f0035550bb00616", "destination": "028cc127521a107e4e3b29ff802493b7bb976c99b3dfb3f2003b868f8139081962", "msatoshi": 10000, "msatoshi_sent": 10006, "created_at": 1547530776, "status": "complete", "payment_preimage": "ae901b2d5370987f1ea30de5291922e6193fb3a4c9bffa46b25a6e3207bfa303", "description": "mypay6", "getroute_tries": 1, "sendpay_tries": 1, "route": [ { "id": "028cc127521a107e4e3b29ff802493b7bb976c99b3dfb3f2003b868f8139081962", "channel": "1452473:32:0", "msatoshi": 10006, "delay": 10 } ], "failures": [ ] }
出现这个输出表示支付成功。
在第一个节点窗口中可以查询到:
sky@willw:~/lightning$ cli/lightning-cli listinvoices
{
"invoices": [
{
"label": "mypay6",
"bolt11": "lntb100n1pwr6usfpp5d82n6tll3h7ac6af36f2dt2a9xy6l8rfe3gh4rz0qq642zasqctqdq2d4uhqctexccqp2rzjqf6n68zzwwktgqjqf320msfm8a5q3mpuavekmx0p732cqdpv08vvg93fhyqqqgqqqqqqqqqpqqqqqzsqqc4xz7tzg4j583zg97gt8x7tuzxgxy86ym9dvpgfqkr4vy9ndhgedqhtgq07sawunung2sslg3hq5g4g9pju68v3fe6np7ssle96h933gpxzquj8",
"payment_hash": "69d53d2fff8dfddc6ba98e92a6ad5d2989af9c69cc517a8c4f0035550bb00616",
"msatoshi": 10000,
"status": "paid",
"pay_index": 1,
"msatoshi_received": 10006,
"paid_at": 1547530776,
"description": "mypay6",
"expires_at": 1547534361
}
]
}
status
为paid
表示支付成功。
-
关闭
channel
支付完成后,任意一方可以关闭channel
,这里我们让第二个节点窗口来关闭。nu@willw:~/lightning$ cli/lightning-cli close 1452473:32:0 { "tx": "0200000001cef1cbbd4c764dfd0f946d89b660e552036880d38532181f57e16a605218b7430000000000ffffffff014e26000000000000160014d2f93e6a259a0596cf633f561546d3c739d1119200000000", "txid": "ce8c6b9b27ce9becd2264b9e5e64bdb857a79f39a855e69b7e9d2cdf3429bbfd", "type": "mutual" }
close
命令后面的1452473:32:0
为channel
的短id
,实际上提供对方节点id
,链id
都可以。
根据txid
可以去链上查看比特币到账情况。
至此最简单的闪电网络支付完成,实际中由于c-lightning
自身的一些问题,支付过程可能并不顺利,欢迎大家到官网提issue
,帮助c-lightning
发展。