既为支付而生,何必舍本逐末:人人都能上手的闪电网络实战
2018这一年,笔者一直在思考一个问题:区块链行业最强需求(应用)场景是什么?
我的结论是--支付!前不久以太坊创始人VB发表言论,也认为当前环境下,支付是数字货币最强需求。既为支付而生,何必舍本逐末,挖空心思,研究如何用它来养猪。
数字支付,似乎讳莫如深。但事实并非如此,如果我说,只要你有比特币,不需要登陆/认证,输个手机号,扫个二维码,你就能给任何手机充值,你信吗?
本文试图用最简单的语言和方式:
教会大家使用闪电网络,完成一笔真实的现网支付;
如果你懂点技术,进而可以创建自己的LN node,在网上收取手续费;
可以创建自己的支持闪电网络支付的网店和实体店。
简单的闪电网络
闪电网络(Lightning Network,简称LN),2015年就已经发布了技术白皮书,2017年底上线比特币主网,可以实现“即时到账”的比特币“微支付”,是比特币的侧链技术,理论上费用可以是0,实际现网中,基本是每字节1聪(1BTC=1亿聪)。
如果你只想看看现网怎么完成一笔真实的闪电网络支付,可以直接跳到第三节。
有人通过闪电网络支付了千分之一聪,用以证明LN微支付能力:
旧时王谢堂前燕,飞入寻常百姓家
读者们都听说过比特币,但真正用比特币去支付的却寥寥无几,更不要说用过闪电网络。其实,闪电网络支付非常简单,下面通过这个视频,让我们了解一下:
这是一个在比特币测试网络上完成的LN支付过程,其中通过手机仿真软件,把手机上App的操作也录屏在视频里面了,可以清晰的看到支付的全过程。后面会给大家介绍真实网络的支付。
闪电网络的由来和现状
2017年下半年的比特币扩容之争,大家分道扬镳:比特币核心团队(core)发展闪电网络,矿工分叉了大区块BCH。2018年底,闪电网络上线主网已经有1年的时间,节点数呈现指数级增长,达到了近5000,相关应用和钱包也呈现爆发式增长。同时,2019年去中心化交易会逐步普及,除了支付,闪电网络也是去中心化交易所的实现之一。
闪电网络现状:近5000节点(node),15000支付通道(channel),500BTC能力。
闪电网络支付比对
如果从安装软件开始,整个过程还是比较复杂的。LN支付相对而言,没有认证,登陆等过程,会更简单。
复杂的闪电网络
操作复杂
一年前,闪电网络刚刚上线的时候,还没有可以安装在手机上的App钱包支持,当时也只有BlockStream(BS)公司提供网店可以尝试。笔者尝试买了几件衣服,大概过程是这样的:
在笔记本上搭建了一个Linux环境;
在Linux上安装一个BTC全节点,同步将近200GB的数据,当时大概用了不到2天同步完成;
下载BlockStream公司的LN实现软件(C语言编写),没有安装包,需要自己编译;
运行LN node服务进程;
命令行生成一个BTC地址,用自己另外一个手机比特币钱包转账到这个地址;
执行LN命令,跟BS公司的LN node建立一个channel,在channel上充值一定量的BTC。当然,这些都是linux上的命令行操作,完全没有图形化管理;
打开浏览器,在BS商店选择商品,生成一个LN支付invoice(就是一长串字符),把这段字符复制下来;
在linux上继续调用LN支付命令,命令参数带上上面生成的invoice,完成支付。果然是秒确认。之后会收到邮件确认,等待收货。
完成以上内容,成就感满满,你感觉不是完成了一次支付,而是做了一个登月工程!这种要是能推而广之,真是见鬼了。
当然,随着手机侧App普及,这个过程变成了扫一扫,点一点就能够完成。
技术实现复杂
要理解闪电网络后台的实现技术,你需要很多的技术知识,比如隔离见证(SW)/多重签名/哈希时间锁合约等等,每一个技术要想讲明白,透彻,都要很大的篇幅。这里简单描述,不想让大家读不下去的感觉。
闪电网络首先是把资金存入一个2 of 2的多重签名地址,双方签名确认最初的状态,然后每一次支付,都是消耗这里面的资金,每次会根据交易后双方新的金额生成一个新的双方签名的交易,而不是在原有交易上追加。
有路由(routing)的概念,类似于BGP路由协议,理论上你可以通过中间node把一笔钱支付给网络上的任何一个node。而中间经过每一个node,就要生成一个哈希时间锁交易(HTLC),在时间锁到期时间内,最终收款方确认到账,中间所有交易一步步确认,保证过程中没有欺诈。
由于LN支付过程可能产生大量交易,交易的主要标识就是交易hash,为了使这个值唯一,引入了隔离见证(SW),把交易签名部分拉出来放到交易最后。
是不是很复杂,真的不能再说了,否则讲不完了。
实战
闲话少叙,过程大概如下:先安装一个支持LN的钱包,开通一条支付通道(channel),同时在channel上存入一定的btc,然后就可以扫码支付了。如果不想玩了,关闭通道,剩余的币就回到钱包。
完成一次真实的闪电网络支付
我们以支付话费为例展开介绍。
1. 安装钱包
下载一个支持闪电网络的钱包,这里有几乎所有钱包的汇总:
http://lightningnetworkstores.com/wallets
笔者强烈建议使用第一个钱包:Eclair,当前只有安卓版,开源软件。Github下载地址:https://github.com/ACINQ/eclair-wallet/releases
Google应用商店下载地址:
https://play.google.com/store/apps/details?id=fr.acinq.eclair.wallet.mainnet2&hl=en_US
使用钱包大家务必谨慎,一些恶意钱包可能造成资金被盗。除此之外,个别钱包我也测试过,可能不够稳定,闪退,不知道现在好了没有。上面推荐的这个钱包很稳定。
安装后发送一点点BTC到钱包地址,大概0.003BTC左右即可。
2. 开通一条支付通道(channel)
去https://1ml.com/,随便选择一个活跃(active)的节点(node),比如Bitrefill这个LN Node:
030c3f19d742ca294a55c00376b3b355c3c90d61c6b6b39554dbc7ac19b141c14f@52.50.244.44:9735
注意要选择后面带有@IP:端口的这种,这种是有公网IP的节点,没有公网IP的没办法跟它建立channel。
钱包滑到最右边“lightning channels”,点击右下角的“+”,出现下面界面:
4个选项任选其一。最简单的就是选择最后一个“acinq node”,这个是跟Eclair的node建立channel。本处选择第二个扫描二维码方式建立。输入channel绑定的金额(比如0.002BTC),交易费可以选择1聪/字节,点击“确定”即可。不要把钱包所有的钱都充值到channel,会失败,原因是你需要付矿工费。如果你钱包里面有0.003BTC,可以在这里输入0.002BTC。需要6个主网上的区块确认,channel才能显示为正常可用状态“normal”,这个时间当前大概在1小时左右。
这里需要特别说明,选择建立channel的node,哪个都没有关系,只要是活跃的(active)即可,如果没有公网ip的,会提示你不能建立channel。闪电网络通过技术保证了整个过程不需要对其他node有任何信任(trustless),理论上任何一个active的node都一样,通过routing路由方式到其他node完全可达。
同时,开通channel不需要对端node的确认,你想连谁就连谁。
3. 扫码
在channel显示“normal”后,进入要购买商品或者服务的网店。这里我们选择https://www.bitrefill.com/vouchers/lightning——LN上最著名的网店。不需要注册,找到“China”,然后在输入栏输入自己的手机号码,建议是中国移动的号码(电信和联通我没有尝试成功,有兴趣可以试试),点击后面的对号。
选择话费金额,选择第一个支付方式“lightning btc”,出现支付二维码和对应的具体支付BTC数量,这个数值是根据交易所的实时报价所得,15分钟内有效。
钱包界面向左滑动到“transaction history”,点击右下角的箭头,出现下图界面:
一般选择第二个扫描二维码方式:“scan a payment request”,扫描网店提供的支付二维码既可以完成。
稍等几秒钟,界面还没有显示成功,你很可能已经收到中国移动发来的充值成功确认短信了。
不要认为是中国移动支持btc支付,其实就是国内的某个代理的充值,而且代理收到的也不是btc,而是普通的人民币,所有转换由Bitrefill这个网店完成。
支付的BTC数量,不能超过你存入channel的数量,跟你Eclair钱包有多少BTC无关。你可以多次支付,直到channel里面的btc用光为止。
4. 关闭channel
当你不再想支付的时候,记得关闭channel,这样,剩余在channel上的钱,才能重新回到你的钱包。
Channel关闭通常有3种情况,最后钱都会回到你的钱包:双方协商关闭/一方已经下线,另一方强制关闭/channel到期,通常是开通的时候约定的,默认30天。
最好的方式第一种:协商关闭,钱瞬间结算并产生比特币主网交易,返回钱包。
钱包滑动到最右“lightning channels”,点击你之前建立的channel,选择“close channel”,显示如下:
不要选择“I want to force-close this channel”,这个是在对方node已经不在线的情况下强制关闭channel,你的币会在默认144个区块(大概24小时)确认后到账,很慢,直接点击“close channel”,大概几秒钟后会产生一个比特币主网的交易,channel里面没有用完的钱会发送到你的钱包地址,已经支付给商家的币,会发送给商家。
构建一个LN node(类似server)
Lightning Labs – this is the company that develops LND (Lightning Network Daemon)
ACINQ — a French company whose product is called Eclair
Blockstream team — they are implementing the c-lightning client and Lightning gateway for e-commerce services
https://github.com/PierreRochard/node-launcher Bitcoin and Lightning node launcher for macOS, and Windows
上一节介绍的Eclair只是一个闪电网络的轻钱包,要想建设一个在线实时提供服务的LN node,类似server的概念,以上4个产品可以实现。相对而言,闪电网络的钱包就多了去了。
无论哪一个实现,前提都是要在同一台机器上先安装一个BTC全节点,同步完将近200GB的数据,否则LN进程启动会失败。当然你也可以在测试网络上实现,只要同步9GB左右的数据即可。
BS公司的c-lightning应该是第一个闪电网络实现,Linux下安装执行,需要自己编译,Github地址如下:https://github.com/ElementsProject/lightning
ACINQ跟Eclair是同一家公司的产品,可以在windows下安装实现,对于很多入门者更加简单直观。
node-launcher可以在苹果Mac和windows上安装实现。
Lightning Labs的LND需要Linux环境。
有兴趣的可以选择上面任何一个进行测试。
当然,以上实现都可以借助docker方式,快速部署,省去了很多繁琐的配置。
另外,如果你要建立一个能够被别人连接建立channel的node,需要有一个公网IP地址,私网nat地址在LN网络上看不到。
建立LN node的意义是什么呢,跟普通闪电网络钱包的差异在哪里?
建立LN node后,你可以服务他人,同时收取一定的手续费,类似于比特币主网上的矿工的角色。闪电网络上的node越多,就越健康,不会因为个别node下线造成支付失败。
支付的场景和周边
下文介绍几个闪电网络的扩展:
去中心化交易是当前一个热门发展方向,而闪电网络就是其中的实现方式之一。我知道bitfinex很早就上线了,而且用的是以太坊技术。最近发现BS公司公布的合作伙伴中也有bitfinex,说明交易所也在多方面尝试这个新鲜事物。
BTCpay,一键开店,支持闪电网络和多种数字货币支付的平台。可以构建一个去中心化的支付公司。
最早接受比特币支付的实体店,往往是店员拿来计算器,把客户选择商品对应的法币根据自己认为合理的兑换价格,换算成比特币,然后打开自己的比特币钱包,输入付款金额,用户扫描完成付款。
这种情况在BTCpay出现后一去不复返了。这个软件平台通过web方式,可以让商家一键开店,简单输入自己商品的描述和法币的价格,输入自己接受数字货币的钱包地址,然后就可以让用户在web界面点击支付,当前已经支持闪电网络支付方式。
产品通过自动查询币安和hitbtc两个交易所的价格实时更新网店商品法币对应数字货币的价格,国内无法查询,如果测试,最好在国外的云平台上测试。由于开源,比价的交易所可以自己随意选择。
树莓派上构建LN node
树莓派,售价大概300~500人民币,可以理解成一个开放式的“手机”,使用arm cpu,可以搭建一个几乎零功耗的LN node,24小时现网在线。一般会建议配合一个移动硬盘存储BTC全节点数据(200GB左右),笔者刚刚查询,当前一个400GB的SD卡也就500多块钱,就不用外挂硬盘了。
搭建方式可参考如下链接:
https://medium.com/@jacobsteeves/raspberry-pi-lightning-network-w-no-external-drive-5-steps-d4fba98ac8cb
作者:Bob,安全行业老兵,对加解密技术烂熟于胸,看不到传统安全行业有任何新意,拥抱区块链的原因是想找点好玩的。自认为,一个东西你真的懂了,你会把它很简单的讲解出来,如果说得云里雾里,天花乱坠,要么是吹牛的需要,要么就是不懂!
— END —
推荐阅读:
CSDN公众号精选
点击“阅读原文”,打开 APP 获取更多干货哟!