闪电网络部署指南
闪电网络部署
闪电网络是构建在比特币网络上的第二层支付协议,用来解决比特币网络堵塞问题。其理念是,在区块链之外开通一条“绿色通道”,将大量高频的、小额的交易在区块链外进行,从而实现快速支付。
闪电网络优点
即时支付
闪电网络交易不需等待网络确认,因而交易可于几秒内迅速完成。
低成本
由于交易结算于链下进行,因而闪电网络转账手续费极低。
小额支付
手续费系按付款额比例来计算,因而对于小额交易不会产生不合理的高昂手续费。
可扩展性
闪电网络让比特币网络处理数百万笔交易变得可能。
环境要求
部署测试环境,磁盘空间要求不高,内存越高越好
系统:Ubuntu Server 21.10
配置:2H4G
磁盘:100GB
固态硬盘
开始部署
为方便操作,已经切换为 root
用户身份
部署 Zeromq
cd /usr/local/src/
wget https://github.com/zeromq/libzmq/releases/download/v4.3.4/zeromq-4.3.4.tar.gz
tar xvf zeromq-4.3.4.tar.gz
cd zeromq-4.3.4/ && ./configure && make && make install
部署 bitcoin
测试节点
wget https://bitcoincore.org/bin/bitcoin-core-23.0/bitcoin-23.0-x86_64-linux-gnu.tar.gz
tar xvf bitcoin-23.0-x86_64-linux-gnu.tar.gz
mv bitcoin-23.0 /usr/local/
vim /etc/profile
export PATH=$PATH:/usr/local/bitcoin-23.0/bin
source /etc/profile
mkdir -p /data/btc/data
vim /data/btc/bitcoin.conf
datadir=/data/btc/data
testnet=1
server=1
timeout=6000
datacache=10240
rpcuser=testnet
rpcpassword=ITsupport
zmqpubrawblock=tcp://127.0.0.1:28332
zmqpubrawtx=tcp://127.0.0.1:28333
nohup bitcoind -conf=/data/btc/bitcoin.conf >> /data/btc/output.log 2>&1 &
此时 BTC
测试节点就开始同步了,等待同步完成再继续下一步操作。
部署 Lnd (Lightning Network Daemon)
# 安装 go
wget https://dl.google.com/go/go1.18.linux-amd64.tar.gz
sha256sum go1.18.linux-amd64.tar.gz | awk -F " " '{ print $1 }'
tar -C /usr/local -xzf go1.18.linux-amd64.tar.gz
vim /etc/profile
export GO111MODULE=on
export GOPROXY=https://goproxy.cn
export PATH=$PATH:/usr/local/bitcoin-23.0/bin:/usr/local/go/bin
source /etc/profile
# 安装 lnd
cd /usr/local/src/
git clone https://github.com/lightningnetwork/lnd
cd lnd/
make install tags="signrpc walletrpc routerrpc invoicesrpc chainrpc"
mkdir -p /data/lnd
vim /data/lnd/lnd.conf
# Lnd 数据数据目录及日志目录
datadir=/data/lnd/data
logdir=/data/lnd/logs
# 修改默认端口为 9736,可不改,根据实际需求
listen=0.0.0.0:9736
# bitcoin 相关配置
bitcoin.active=true
bitcoin.testnet=true
bitcoin.node=bitcoind
bitcoind.rpcuser=testnet
bitcoind.rpcpass=ITsupport
bitcoind.zmqpubrawblock=tcp://127.0.0.1:28332
bitcoind.zmqpubrawtx=tcp://127.0.0.1:28333
# 外网 IP
externalip=183.2.xxx.xxx
vim /etc/profile
export PATH=$PATH:/usr/local/go/bin:/usr/local/bitcoin-23.0/bin:/root/go/bin
source /etc/profile
# 启动 lnd
nohup lnd -C /data/lnd/lnd.conf >> /data/lnd/output.log 2>&1 &
# 初始化配置
tail -f /data/lnd/output.log
2022-05-12 06:03:23.563 [INF] LTND: Waiting for wallet encryption password. Use `lncli create` to create a wallet, `lncli unlock` to unlock an existing wallet, or `lncli changepassword` to change the password of an existing wallet and unlock it.
# 按照提示创建 lnd 钱包
lncli create
Input wallet password:
Confirm password:
Do you have an existing cipher seed mnemonic or extended master root key you want to use?
Enter 'y' to use an existing cipher seed mnemonic, 'x' to use an extended master root key
or 'n' to create a new seed (Enter y/x/n): n
Your cipher seed can optionally be encrypted.
Input your passphrase if you wish to encrypt it (or press enter to proceed without a cipher seed passphrase):
Generating fresh cipher seed...
!!!YOU MUST WRITE DOWN THIS SEED TO BE ABLE TO RESTORE THE WALLET!!!
---------------BEGIN LND CIPHER SEED---------------
1. abandon 2. XXX 3. element 4. business
5. drip 6. outside 7. XXX 8. deer
9. XXX 10. extra 11. summer 12. faint
13. auto 14. XXX 15. miss 16. emotion
17. habit 18. barrel 19. XXX 20. angle
21. bright 22. glare 23. sad 24. XXX
---------------END LND CIPHER SEED-----------------
!!!YOU MUST WRITE DOWN THIS SEED TO BE ABLE TO RESTORE THE WALLET!!!
lnd successfully initialized!
ln -sf /data/lnd/data/chain/ /root/.lnd/data/
常用命令
# 停止 lnd
lncli --network testnet stop
# 生成钱包地址
lncli --network testnet newaddress np2wkh
{
"address": "2MxBbzCHz*********68dQFNn"
}
# 查看 lnd 节点相关信息
lncli --network testnet getinfo
# 连接节点
lncli --network testnet connect {Public Key}@{IP}
# 打开通道
lncli --network testnet openchannel --node_key={Public Key} --local_amt=100000
# 确认通道信息
lncli --network testnet pendingchannels
部署 Tor
Tor
本身不是科学上网,所以部署 Tor
的前提是,得先部署好科学上网(此处不详述)。
Tor
可以使你的闪电网络节点匿名运行,提高安全性。
官网下载最新的 Tor
安装包:https://www.torproject.org/download/tor/
然后上传到服务器的 /usr/local/src
目录,再执行安装命令
cd /usr/local/src/ && tar xvf tor-0.4.7.7.tar.gz && cd tor-0.4.7.7/
apt-get install libevent-dev libssl-dev zlib1g-dev
./configure && make && make install
# 生成 HashedControlPassword
tor --hash-password ITsupport.0
May 12 07:18:41.619 [warn] You are running Tor as root. You don't need to, and you probably shouldn't.
16:1226B8802630808260**********1C0B8FF2C9267D
# 配置 Tor 配置文件
vim /usr/local/etc/tor/torrc
ControlPort 0.0.0.0:9051
SOCKSPort 0.0.0.0:9050
HashedControlPassword 16:1226B8802630808260**********1C0B8FF2C9267D
# 科学上网的地址
Socks5Proxy 10.18.193.105:1080
# 启用美国 Tor 节点,禁用中国 Tor 节点
ExitNodes {us}
ExcludeExitNodes {cn}
# 启动 Tor
# 进度条达到100%时,说明正常启动了 Tor
nohup tor >> /data/tor.logs.file 2>&1 &
tail -f /data/tor.logs.file
# 测试是否启动,可见 IP 已经变更
apt install torsocks
torify curl http://icanhazip.com/
199.249.230.147
# 因为 Ubuntu 源安装 torsocks 时会默认安装旧版本 tor,所以需要禁用旧版本的 tor
systemctl stop tor && systemctl disable tor
Lnd (Lightning Network Daemon)
接入 Tor
网络
# 停止 Lnd 节点
lncli --network testnet stop
# 修改配置文件
vim /data/lnd/lnd.conf
# 配置文件最后面添加 Tor 相关配置信息
tor.active=true
tor.socks=10.18.193.104:9050
tor.password=ITsupport.0
tor.v3=true
tor.control=10.18.193.104:9051
# 启用混合模式,即 Tor 网络、普通网络均可连接该闪电网络节点
tor.skip-proxy-for-clearnet-targets=1
# 启动 Lnd 节点
nohup lnd -C /data/lnd/lnd.conf >> /data/lnd/output.log 2>&1 &
tail -f /data/lnd/output.log
# 提示以下信息则说明当前闪电网络节点已经接入到 Tor 网络
Onion services are accessible via Tor! NOTE: Traffic to clearnet services is not routed via Tor.
至此,部署一个可用的并运行在 Tor
网络中的测试网闪电网络节点已经完成!
后续建立 Channal
、支付、收款等操作,请自行参考官方文档!
参考资料
https://docs.lightning.engineering/lightning-network-tools/lnd/quick-tor-setup
https://hugongai.github.io/2020/02/10/tor代理搭建/
https://github.com/lightningnetwork/lnd/blob/master/docs/configuring_tor.md
https://github.com/lightningnetwork/lnd/blob/master/docs/INSTALL.md