如何制作你的专属便携闪电网络模块!
Lightning Network

如何制作你的专属便携闪电网络模块!

Grubles

目录:

·      简介/要求

·      数据包传输设置

·      搭建c-lightning和bitcoin-cli

·      安装Lightning Charge

·      为POS解决方案安装nanopos

相较于目前市面上流行的系统芯片硬件,如树莓派和Rock64,Inverse Path USB Armory算是一个较为独特的产品。和其他的系统一样,Inverse Path USB Armory在计算能力上相对较弱,它的独特之处来自于其紧凑的外形和组件。Armory不需要电源适配器或者墙面插座,只需要一个USB接口即可工作。Armory可通过USB充电,同时通过模拟以太网络连接来与主设备传递信息。Armory使用NXP i.MX53 ARM®Cortex™-A8处理器,速度可达到800 Mhz。此外它还拥有512 MB的DDR3内存以及一个用于储存数据的MicroSD卡槽。

该USB armory主板由Inverse Path生产,用于支持各类安全应用的开发。

USB armory能够模拟任意USB设备,达到i.MX53系统芯片速度,还拥有安全功能以及灵活可定制的操作环境,这些功能使得USB armory成为各式私人安全应用开发的理想平台。

USB armory硬件开源透明、极简的设计使其易于审计,并且极大地降低了供应链攻击的可能性。来源:https://inversepath.com/usbarmory

对于该外形紧凑、可通过USB充电、可模拟以太网络的USB,一个极佳的使用案例就是便携比特币闪电网络钱包。有了这个配置,用户可以自行搭建一个设备,在一个便携的平台上运行c-lightning并储存私钥,这个便携平台可以很方便地插入其他运行bitcoind的硬件,如树莓派等。另一个使用场景是,如果用户在笔记本电脑上运行全节点,可以直接将Armory插到笔记本电脑上,用户便能够通过闪电网络来进行交易,或者使用闪电网络应用LApp。

另一个应用案例是为能力不足的设备——如旧电脑或者树莓派——提高处理能力,Armory可以作为闪电网络的联合处理器!

要求

Inverse Path USB Armory一台

•容量4GB或以上的microSD卡,安装有官方Debian基本图像

• USB主设备(笔记本电脑、工作站或者树莓派之类)

•    在你的LAN网或者其他能够连接RPC的网络上运行bitcoind

为Armory做好安装准备:

要让lightningd能够与bitcoind远程沟通只需要一个bitcoin-cli,它能够大大降低在Armory上创建所需时间。我们可以使用交叉编译的方法,但本指南暂时不谈这个方法。要创建bitcoin-cli就要从Github的存储库中调用比特币代码。在调用代码之前,必须先开启Armory所插入的主设备上的数据包传输功能。

网络:

Armory(如果使用了官方Debian基本图像的话)插入主设备并启动后,将会创建一个虚拟用户界面来模拟以太网络连接。配置完成后,Armory及其USB主设备就能像在同一个LAN网络上一样相互沟通了(理论上讲他们确实是在同一个LAN网络上)。USB主设备可以决定是否允许Armory将数据包传送至该设备,如果允许的话,Armory就能和本地网络外的其他节点一起开启闪电网络频道。要安装构建工具和依赖项同样也需要开启数据包传输功能。

Windows:

在Windows 7、8和10上开启数据包传输功能(即无线网络共享)的操作指导可以查看这里

MacOS:

MacOS上的操作指导可以查看这里

Linux:

注意:在Ubuntu 16.04上,网络管理员并没有阻止,但是其他分布配置可能会阻止。

Linux系统上的操作指南:

为向外传输的连接开启伪装功能:

# iptables -t nat -A POSTROUTING -s 10.0.0.2/32 -o wlan0 -j MASQUERADE

开启IP传输:

# echo 1 > /proc/sys/net/ipv4/ip_forward

将Armory插入主设备,白色LED闪烁这表明Armory已成功运行。随着Armory的利用,LED灯闪烁越快。

使用ssh登录进入Armory,Debian基本图像的用户名和初始密码都为usbarmory。

$ ssh usbarmory@10.0.0.1

Ping一个公开地址来检查Armory路线是否设置正确:

$ ping 8.8.8.8

如果成功则将受到如下回复:

PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.

64 bytes from 8.8.8.8: icmp_seq=1 ttl=60 time=46.3 ms

64 bytes from 8.8.8.8: icmp_seq=2 ttl=60 time=48.0 ms

64 bytes from 8.8.8.8: icmp_seq=3 ttl=60 time=48.1 ms

64 bytes from 8.8.8.8: icmp_seq=4 ttl=60 time=71.5 ms

太棒了!

搭建c-lightning:

$ sudo apt update && sudo apt -y upgrade

完成后重启Armory以防出现内核升级:

$ sudo reboot

现在开始安装用来编辑bitcoin-cli和c-lightning的构建工具和依赖项:

$ sudo apt-get install -y \

autoconf automake build-essential git libtool libgmp-dev \

libsqlite3-dev python python3 net-tools libsodium-dev \

pkg-config libssl-dev libevent-dev \

libboost-system-dev libboost-filesystem-dev \

libboost-chrono-dev libboost-program-options-dev \

libboost-test-dev libboost-thread-dev tmux curl

复制c-lightning数据库:

$ git clone https://github.com/ElementsProject/lightning.git

跳转至本地数据库:

$ cd lightning

运行构建工具:

$ make

完成后跳转至usbarmory用户的主目录:

$ cd ~/

下载Bitcoin Core 0.16.0源代码文件SHA256SUMS.asc,然后输入Core维护者的gpg密钥来验证哈希。最后解压文档:

$ wget https://bitcoincore.org/bin/bitcoin-core-0.16.0/bitcoin-0.16.0.tar.gz

$ wget https://bitcoincore.org/bin/bitcoin-core-0.16.0/SHA256SUMS.asc

$ gpg --recv-key 90C8019E36C2E964

$ gpg --verify SHA256SUMS.asc

$ sha256sum -c --ignore-missing SHA256SUMS.asc

# should output an "OK"

$ tar zxvf bitcoin-0.16.0.tar.gz

太棒了!

现在可以开始创建bitcoin-cli了。

创建bitcoin-cli:

跳转至比特币源代码目录,开始创建:

$ cd bitcoin-0.16.0/

$ ./autogen.sh

运行autogen.sh的时候可能会收到一大串关于地区的警告信息,可以通过设定地区来解决:

$ sudo dpkg-reconfigure locales

# 选择像en_US.UTF-8之类的文件然后点击“OK”

继续进行创建:

$ CFLAGS="-march=native" ./configure --disable-wallet

-march=native能够指挥编译者gcc自动检测Armory的处理器,并且根据该处理器进行优化,这能够最大化地利用ARM处理器的性能,这一点很重要,因为这个处理器的速度相对来说比较慢。

这一步还没有开始创建bitcoind,所以不需要libdb。通过--disable-wallet来进行创建而不需要钱包支持(在这个配置下c-lightning可以当做钱包)。

现在可以开始创建bitcoin-cli了:

$ make src/bitcoin-cli

最后将刚刚创建好的bitcoin-cli代码复制到/usr/local/bin :

$ sudo cp src/bitcoin-cli /usr/local/bin

$ whereis bitcoin-cli

# 应该返回"/usr/local/bin/bitcoin-cli"

通过RPC将Armory连接至bitcoind:

c-lightning通过bitcoin-cli将未经处理的交易发送至bitcoind,其原因有很多,如开放通道、强力关闭通道或协商一致关闭通道。因为c-lightning在Armory上运行,所以也需要bitcoin-cli。 Bitcoin-cli需要能够与bitcoind沟通,所以需要创建相关项目到Armory以及USB主设备的bitcoin.conf上:

在USB主设备或有bitcoind运行的其他设备上,在bitcoin.conf文件中输入以下项目:

rpcuser= <username>
rpcpassword= <yourpasswordnotthisone>
rpcallowip= <the Armory's IP address>

保存修改,并创建Armory的bitcoin.conf文件,添加下列项目:

$ nano ~/.bitcoin/bitcoin.conf

在bitcoin.conf文件中:

rpcuser= <username from before>
rpcpassword= <password from before>
rpcconnect= <USB hosts's IP (10.0.0.2)>

将bitcoind可能的IP地址(如192.168.0.254)替换为10.0.0.2

尝试向Armory要求bitcoind:

$ bitcoin-cli -getinfo

如果成功则会返回相关信息(区块高度、难度等)

太棒了!

运行c-lightning:

所有软件都已创建好、配置完成并且网络正确,就可以运行c-lightning了。

开始tmux会话,然后运行lightningd:

$ tmux
$ ./lightning/lightningd/lightningd --network testnet --log-level debug
$ ./lightning/cli/lightning-cli getinfo

注意: 还在beta版本,需要承担风险。

如果lightningd开始输出Adding block <block number>,并且lightning-cli返回正确的现时区块高度(以及其他信息),则表明已经成功安装了Armory!现在可以使用lightning-cli来生成用来接收和发送比特币的地址了,也可以用来开放或关闭闪电网络通道!

Lightning Charge:

LApp是一系列闪电网络应用,使用闪电网络提供的即时转账服务。读者可以在Blockstream的博客上查看最近发行的LApp。

要运行这些LApp就需要在Armory上安装Lightning Charge。

Lightning Charge是使用node.js编写的小额付款处理系统,通过REST API来实现c-lightning的功能。他的REST API可以在JavaScriptPHP库里找到。来源:https://blockstream.com/2018/01/16/lightning-charge.html

Lightning Charge需要c-lightning以及nodejs。现在我们来安装他们:

$ curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -

$ sudo apt-get install -y nodejs

Nodesource.com提供的nodejs包裹可能会出现权限错误,修补的办法如下:

$ mkdir ~/.npm-global
$ npm config set prefix '~/.npm-global'

将以下项目添加到~/.profile:

$ export PATH=~/.npm-global/bin:$PATH

最后:

$ source ~/.profile

接下来只需用npm来安装Lightning Charge,然后运行charged:

$ npm install -g lightning-charge

$ charged --api-token <a secret token>

Charged将会在默认接口9112上运行!

安装nanopos LApp,即可将你的闪电网络模块变成一个迷你POS机:

通过npm即可轻松安装nanopos:

$ npm install -g nanopos

将所要销售的产品编写入items.yaml文档中,用—currency来指定货币,然后运行nanopos:

$ nanopos -t <charge API token> --items-path items.yaml --currency USD

要修改标题可以使用—title,在bootswatch.com还可以找到各种主题界面,可以通过-m来调用。

现在c-lightning、charged,以及nanopos LApp都能够在编写Armory上运行了!

交易结束后,只需要关闭Armory然后从主设备上拔出即可随身带走。需要交易时将其再次插入,ssh登入,即可再次运行c-lightning。也可以使用在虚拟专用服务器或其他面向公众的托管服务来运行bitcoind,更进一步提高便携性(只需要Armory,而不再需要拥有bitcoind的workstation/laptop/主设备)。

Armory也可以以“独立模式”运行,不需要通过USB接入主设备或电源(但仍然需要通过USB充电)。这就使得更多超酷的应用场景得以实现,比如可以通过电池供电从而更加便携,只要连接上WiFi即可进行配置!

感谢阅读!

-Grubles​​​​

If you have specific preferences, please, mark the topic(s) you would like to read: