目录:
· 简介/要求
· 数据包传输设置
· 搭建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可以作为闪电网络的联合处理器!
要求:
•容量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可以在JavaScript和PHP库里找到。来源: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