美文网首页
在win10上搭建比特币闪电网络单机双节点测试环境(二)

在win10上搭建比特币闪电网络单机双节点测试环境(二)

作者: sky2016 | 来源:发表于2019-01-15 13:57 被阅读29次

现在我们可以在本机上建立第二个节点,第二个节点的建立有一些不同,我们一步一步来。

  1. 将第一个节点的比特币同步目录复制一份作为第二个节点的同步目录
    在我这里是将f:\temp\btctestnet复制为f:\temp\btctestnet2,复制同步目录可以免于再次同步区块链。

  2. 新开一个ubuntu窗口,并新建一个用户
    a. sudo adduser nu新建一个nu用户
    b. su - nu切换到这个用户

  3. 开启bitcoind,并同步区块链

     bitcoind -daemon -testnet -port=17195 -rpcport=17495 -datadir=/mnt/f/temp/btctestnet2
    

注意这里为了避免端口冲突,重新设置了两个绑定的端口。

  1. 等待区块链同步完成
    因为区块链目录是被复制的,所以同步过程会很快完成,同样可以用getblockchaininfo可以看到同步进度

     bitcoin-cli -testnet -rpcport=17495 -datadir=/mnt/f/temp/btctestnet2 getblockchaininfo
    

注意这里的rpc端口需要指定,datadir指向新的目录

  1. 安装c-lightning
    这一步的过程与第一个节点相同

注:如果你遇到user is not in sudoer list错误,可以用sudo -i切换到root用户,并将nu用户添加到/etc/sudoers中。

  1. 启动c-lightning,并连接bitcoind

     lightningd/lightningd --testnet --bitcoin-datadir=/mnt/f/temp/btctestnet2 --log-level=debug --bitcoin-rpcport=17495
    

注意这里的端口和目录

  1. 新建地址
    这一步也与第一个节点相同

  2. 获取测试比特币
    之前那个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"
}
  1. 连接第一个节点
    第二个节点的窗口中输入:

     cli/lightning-cli connect 第一个节点id 127.0.0.1
    

还记得第一个节点的id怎么得到吗?这里就能用上了。

nu@willw:~/lightning$ cli/lightning-cli connect 03707f3ba87336a4571750f7d1f17d7261843ccf1310c122afbf70c01f0e22fe89 127.0.0.1
{
"id": "03707f3ba87336a4571750f7d1f17d7261843ccf1310c122afbf70c01f0e22fe89"
}
  1. 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单位,表示聪的千分之一。

  1. 第一个节点窗口中生成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字符串,将这个字符串提供给支付者就行了。

  1. 第二个节点窗口中完成支付
    将上一步的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
    }
]
}

statuspaid表示支付成功。

  1. 关闭channel
    支付完成后,任意一方可以关闭channel,这里我们让第二个节点窗口来关闭。

    nu@willw:~/lightning$ cli/lightning-cli close 1452473:32:0
    {
    "tx": "0200000001cef1cbbd4c764dfd0f946d89b660e552036880d38532181f57e16a605218b7430000000000ffffffff014e26000000000000160014d2f93e6a259a0596cf633f561546d3c739d1119200000000",
    "txid": "ce8c6b9b27ce9becd2264b9e5e64bdb857a79f39a855e69b7e9d2cdf3429bbfd",
    "type": "mutual"
    }
    

close命令后面的1452473:32:0channel的短id,实际上提供对方节点id,链id都可以。
根据txid可以去链上查看比特币到账情况。

至此最简单的闪电网络支付完成,实际中由于c-lightning自身的一些问题,支付过程可能并不顺利,欢迎大家到官网issue,帮助c-lightning发展。

相关文章

网友评论

      本文标题:在win10上搭建比特币闪电网络单机双节点测试环境(二)

      本文链接:https://www.haomeiwen.com/subject/zyuedqtx.html