闪电网络实操,从最简单的比特币第二层闪电网络付款开始

2019-12-09 16:59:50 浏览数 (1)

来源 | Hackernoon

编译 | 火火酱

责编 | Carol

出品 | 区块链大本营(blockchain_camp)

好久不见的实操演练,又来了!

在本文中,我们将用测试网作为示范,利用比特币第二层闪电网络进行付款。

我们将会使用命令行工具,因为我发现这是使用网络的最可靠的方法,同时也可以让你对网络的运行方式有更加深入的了解。

俗话说,磨刀不误砍柴工。为了能够完成今天的实操,你需要提前安装好以下环境。

你要能够访问满足以下两个条件的闪电网络节点:

  1. 正在运行bitcoind和lightningd,并且已与testnet区块链同步。
  2. 已安装blockstream的c-lightning cli工具lightning-cli,并且可以访问其$PATH。

生成地址和资金钱包

第一层BTC交易=1。等待时间=60分钟。

创建一个新地址。

到测试网Faucet中给自己发送一些比特币,使用支持IPV6的Chrome浏览器可以获得70%的额外津贴!

点击下面的交易ID链接,就可以进入包含交易详细信息的区块链浏览器。

交易 ID 链接:

https://testnet.blockchain.info/

你需要等待6次确认——大约需要1个小时,资金才会显示在你的钱包中。

代码语言:javascript复制

连接到对等方并且建立支付通道

第1层BTC交易=1。等待时间= 60分钟。

要想在网络上进行付款,需要先连接到网络中。如何能够找到另一个要连接的节点呢?前往Acinq的闪电网络浏览器。

搜索连接状态良好的对等点(有很多通道的对等点),然后复制其URI。最初,我在连接到几个节点的过程中超时了,但只要继续尝试,总能找到一个可以立即进行连接的节点。

代码语言:javascript复制

现在,我们可以与刚刚连接到的对等节点建立支付通道。打开和关闭通道都需要与主区块链进行交互,因此我们要为其提供足够的资金(以millisatoshis为单位),以便将其用于多次付款。

代码语言:javascript复制

同样,在比特币测试网浏览器中搜索txid,并等待3-6次确认,然后该通道将会被视为已开放。这时,你应该看到状态更改为CHANNELD_NORMAL。

代码语言:javascript复制
$ lightning-cli listpeers
{
 "peers": [{
  "id": "03e5f9d1935c67a029bf0a26af5f63109f4f4c45993a8f45177a8f2f39bcb46144",
  "connected": true,
  "netaddr": ["84.246.200.122:9735"],
  "alias": "IslandDSP",
  "color": "3399ff",
  "channels": [{
   "state": "CHANNELD_NORMAL",
   "owner": "lightning_channeld",
   "short_channel_id": "1289768:416:0",
   "channel_id": "ba95c71228ce3f57e25f6ac9c4a7418a52a056435b2276dd47437c7521ebda8e",
   "funding_txid": "8edaeb21757c4347dd76225b4356a0528a41a7c4c96a5fe2573fce2812c795ba",
   "msatoshi_to_us": 100000000,
   "msatoshi_total": 100000000,
   "dust_limit_satoshis": 546,
   "max_htlc_value_in_flight_msat": 18446744073709552000,
   "channel_reserve_satoshis": 0,
   "htlc_minimum_msat": 0,
   "their_to_self_delay": 6,
   "our_to_self_delay": 144,
   "to_self_delay": 6,
   "max_accepted_htlcs": 483,
   "status": ["CHANNELD_NORMAL:Funding transaction locked. Channel announced."],
   "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
  }]
 }]
}

生成付款请求

现在我们已经建好了一个支付通道,那么就可以开始使用闪电网络进行交易了。

转至Y’alls 上的这篇文章(https://yalls.org/),然后单击“continue reading继续阅读”生成付款请求。这实际上是序列化的凭证,将其解码后表示你没被多收费。

代码语言:javascript复制


$ lightning-cli decodepay lntb1500n1pdvp7t9pp5k5mvp8u045pdnumnt89cdc7l90lpvff7sjzkrvawg93ju3mgg3nsdp62fjkzepqg9e8g6trd3jn5gzfyp9kummhyptksmeq2dshgmmndp5jqjtnp5cqzyskw8lzg7w4hcfyhncczcaexlpx3tdefm0vjnh9dkqev23g94tdta8jjqzp87v6r9q8xwe3mnjf0tryaa7zkxxj4gwgfcqea32j0x069qqsjyjhz
{
 "currency": "tb",
 "timestamp": 1522596197,
 "created_at": 1522596197,
 "expiry": 3600,
 "payee": "039cc950286a8fa99218283d1adc2456e0d5e81be558da77dd6e85ba9a1fff5ad3",
 "msatoshi": 150000,
 "description": "Read Article: I Know Who Satoshi Isr",
 "min_final_cltv_expiry": 144,
 "payment_hash": "b536c09f8fad02d9f37359cb86e3df2bfe16253e848561b3ae41632e47684467",
 "signature": "3045022100b38ff123ceadf0925e78c0b1dc9be13456dca76f64a772b6c0cb151416ab6afa022079480209fccd0ca0399d98ee724bd63277be158c69550e42700cf62a93ccfd14"
}

进行支付

第2层 BTC 交易= 1 等待时间 = 毫秒。

现在我们已经准备好进行第二次比特币交易了,第一次比特币交易已经建立了闪电网络,因此第二次交易应该立即就能得到确认。

代码语言:javascript复制

回到Y’alls,然后点击“check for payment检查付款”以显示该文章。但不幸的是,这一步我没成功。我回去检查命令行的时候才发现我确实没付款。

代码语言:javascript复制
为了解决这个问题,我尝试用Y’alls直接创建一个支付通道。

显然,这是lnd的一个bug,Y’alls必须用做他们的闪电后台驻留程序。

作为备份计划,我们将使用闪电网络钱包向自己付款。转到htlc.me(https://htlc.me/)并生成钱包,然后单击“receive接收”标签,请求支付0.0001 tBTC($0.65 tUSD)。复制序列化的凭证并且在发送之前进行核实。

代码语言:javascript复制

这次,当我试着付款的时候,收到了多个错误。

代码语言:javascript复制

然而,当我刷新htlc.me网页时,我发现付款实际上已经成功了。在控制台检查确认已付款。

代码语言:javascript复制

我们这次付款只付了2020 millisatoshi(比特币的计量单位)的交易费用(在写本文时是0.00013美元)。

最后,我们尝试直接连接到htlc.me。这样我们在付款的时候就不会出现任何控制台错误。从上面的解码付款命令输出中复制付款人ID,并在闪电网络浏览器中进行搜索。复制URI,然后连接并创建一个通道。

代码语言:javascript复制

但我们需要等待交易在区块链上确认,通道才可用。

一个小时后,我们可以看到通道已经建立——状态显示CHANNELD_NORMAL

代码语言:javascript复制

这时在htlc.me上生成另一张凭证,这次是0.00020000 tBTC ($1.31 tUSD),并且记得在付款前检查详细信息是否正确。

代码语言:javascript复制
代码语言:javascript复制
$ lightning-cli decodepay lntb200u1pdvzvf8pp5tyjfw9ma9uj8hhrhqvmum9vzvaun45qg6mmesu3c08zkhmgl44ssdqqcqzysah4qe4zef3rssusa42cyx0gxxq6q06g50m38w7chz50en80dfh45fj7kdgpx474udehq22mv2pwxfky66kdjdrw88z34w8hjjdjdu6sq6zy2a4

最后付款。

代码语言:javascript复制

这次没有出现任何控制台错误。你在htlc.me的网络钱包应该会立即检测到已付款。现在,你应该可以以十分低廉的费用进行任意金额的付款了,直到你耗尽通道中的资金,或该笔款项到期为止。

总结

如你所见,测试网上的节点至少还能用。三个主要的闪电软件实现(lnd, c-lightning, eclair)仍都处于开发的早期阶段,因此有一些错误也不足为奇。但这至少能让你了解:将来,随着网络的不断扩大以及运行它的软件不断成熟完善,交易也将会变的更加便宜又快速。

0 人点赞