既为支付而生,何必舍本逐末:人人都能上手的闪电网络实战

2018这一年,笔者一直在思考一个问题:区块链行业最强需求(应用)场景是什么? 我的结论是--支付!前不久以太坊创始人VB发表言论,也认为当前环境下,支付是数字货币最强需求。既为支付而生,何必舍本逐末,挖空心思,研究如何用它来养猪。 数字支付,似乎讳莫如深。但事实并非如此,如果我说,只要你有比特币,不需要登陆/认证,输个手机号,扫个二维码,你就能给任何手机充值,你信吗?

本文试图用最简单的语言和方式:

  1. 教会大家使用闪电网络,完成一笔真实的现网支付;
  2. 如果你懂点技术,进而可以创建自己的LN node,在网上收取手续费;
  3. 可以创建自己的支持闪电网络支付的网店和实体店。

简单的闪电网络

闪电网络(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 —

原文发布于微信公众号 - 区块链大本营(blockchain_camp)

原文发表时间:2018-12-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券