编译 | 火火酱
责编 | Carol
出品 | 区块链大本营(blockchain_camp)
好久不见的实操演练,又来了!
在本文中,我们将用测试网作为示范,利用比特币第二层闪电网络进行付款。
我们将会使用命令行工具,因为我发现这是使用网络的最可靠的方法,同时也可以让你对网络的运行方式有更加深入的了解。
俗话说,磨刀不误砍柴工。为了能够完成今天的实操,你需要提前安装好以下环境。
你要能够访问满足以下两个条件的闪电网络节点:
生成地址和资金钱包
第一层BTC交易=1。等待时间=60分钟。
创建一个新地址。
到测试网Faucet中给自己发送一些比特币,使用支持IPV6的Chrome浏览器可以获得70%的额外津贴!
点击下面的交易ID链接,就可以进入包含交易详细信息的区块链浏览器。
交易 ID 链接:
https://testnet.blockchain.info/
你需要等待6次确认——大约需要1个小时,资金才会显示在你的钱包中。
连接到对等方并且建立支付通道
第1层BTC交易=1。等待时间= 60分钟。
要想在网络上进行付款,需要先连接到网络中。如何能够找到另一个要连接的节点呢?前往Acinq的闪电网络浏览器。
搜索连接状态良好的对等点(有很多通道的对等点),然后复制其URI。最初,我在连接到几个节点的过程中超时了,但只要继续尝试,总能找到一个可以立即进行连接的节点。
现在,我们可以与刚刚连接到的对等节点建立支付通道。打开和关闭通道都需要与主区块链进行交互,因此我们要为其提供足够的资金(以millisatoshis为单位),以便将其用于多次付款。
同样,在比特币测试网浏览器中搜索txid,并等待3-6次确认,然后该通道将会被视为已开放。这时,你应该看到状态更改为CHANNELD_NORMAL。
$ 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继续阅读”生成付款请求。这实际上是序列化的凭证,将其解码后表示你没被多收费。
$ lightning-cli decodepay lntb1500n1pdvp7t9pp5k5mvp8u045pdnumnt89cdc7l90lpvff7sjzkrvawg93ju3mgg3nsdp62fjkzepqg9e8g6trd3jn5gzfyp9kummhyptksmeq2dshgmmndp5jqjtnp5cqzyskw8lzg7w4hcfyhncczcaexlpx3tdefm0vjnh9dkqev23g94tdta8jjqzp87v6r9q8xwe3mnjf0tryaa7zkxxj4gwgfcqea32j0x069qqsjyjhz
{
"currency": "tb",
"timestamp": 1522596197,
"created_at": 1522596197,
"expiry": 3600,
"payee": "039cc950286a8fa99218283d1adc2456e0d5e81be558da77dd6e85ba9a1fff5ad3",
"msatoshi": 150000,
"description": "Read Article: I Know Who Satoshi Is\r",
"min_final_cltv_expiry": 144,
"payment_hash": "b536c09f8fad02d9f37359cb86e3df2bfe16253e848561b3ae41632e47684467",
"signature": "3045022100b38ff123ceadf0925e78c0b1dc9be13456dca76f64a772b6c0cb151416ab6afa022079480209fccd0ca0399d98ee724bd63277be158c69550e42700cf62a93ccfd14"
}
进行支付
第2层 BTC 交易= 1 等待时间 = 毫秒。
现在我们已经准备好进行第二次比特币交易了,第一次比特币交易已经建立了闪电网络,因此第二次交易应该立即就能得到确认。
回到Y’alls,然后点击“check for payment检查付款”以显示该文章。但不幸的是,这一步我没成功。我回去检查命令行的时候才发现我确实没付款。
为了解决这个问题,我尝试用Y’alls直接创建一个支付通道。
显然,这是lnd的一个bug,Y’alls必须用做他们的闪电后台驻留程序。
作为备份计划,我们将使用闪电网络钱包向自己付款。转到htlc.me(https://htlc.me/)并生成钱包,然后单击“receive接收”标签,请求支付0.0001 tBTC($0.65 tUSD)。复制序列化的凭证并且在发送之前进行核实。
这次,当我试着付款的时候,收到了多个错误。
然而,当我刷新htlc.me网页时,我发现付款实际上已经成功了。在控制台检查确认已付款。
我们这次付款只付了2020 millisatoshi(比特币的计量单位)的交易费用(在写本文时是0.00013美元)。
最后,我们尝试直接连接到htlc.me。这样我们在付款的时候就不会出现任何控制台错误。从上面的解码付款命令输出中复制付款人ID,并在闪电网络浏览器中进行搜索。复制URI,然后连接并创建一个通道。
但我们需要等待交易在区块链上确认,通道才可用。
一个小时后,我们可以看到通道已经建立——状态显示CHANNELD_NORMAL。
这时在htlc.me上生成另一张凭证,这次是0.00020000 tBTC ($1.31 tUSD),并且记得在付款前检查详细信息是否正确。
$ lightning-cli decodepay lntb200u1pdvzvf8pp5tyjfw9ma9uj8hhrhqvmum9vzvaun45qg6mmesu3c08zkhmgl44ssdqqcqzysah4qe4zef3rssusa42cyx0gxxq6q06g50m38w7chz50en80dfh45fj7kdgpx474udehq22mv2pwxfky66kdjdrw88z34w8hjjdjdu6sq6zy2a4
最后付款。
这次没有出现任何控制台错误。你在htlc.me的网络钱包应该会立即检测到已付款。现在,你应该可以以十分低廉的费用进行任意金额的付款了,直到你耗尽通道中的资金,或该笔款项到期为止。
总结
如你所见,测试网上的节点至少还能用。三个主要的闪电软件实现(lnd, c-lightning, eclair)仍都处于开发的早期阶段,因此有一些错误也不足为奇。但这至少能让你了解:将来,随着网络的不断扩大以及运行它的软件不断成熟完善,交易也将会变的更加便宜又快速。