主页 > imtoken最新版本下载 > 如何使用闪电网络构建应用程序堆栈
如何使用闪电网络构建应用程序堆栈
在一周的时间里,在构建第一个版本的 LightWork 网络应用程序时,我遇到了一些架构问题,主要与处理 ln 节点和我的网络应用程序之间的 bolt11 发票(核心到 ln)有关。 在经历了(大部分)这些障碍之后比特币文件什么样子,我想我应该写一些关于开发 LN 驱动的应用程序以及如何减少你们在开发时面临的主要障碍的文章。
应用堆栈
如今,大多数应用程序通常分为两个主要部分:客户端和服务器。 例如,客户端可以是移动应用程序或 JavaScript SPA,服务器可以由 NodeJS/Go/Rust 后端组成,主要是基于 RESTful 或 GraphQL 的 API。
向应用程序添加闪电网络支持通常会在应用程序堆栈中引入两部分:比特币节点和闪电网络节点。
对于比特币,有几种可用的节点实现,最广泛接受的两种是:
· 比特币核心——比特币
· BTCD-BTCD
基于社区共识、网络上活跃节点的数量以及各个代码库的维护统计数据,很明显,Bitcoin Core 是使用最广泛且维护得更好的——以及我们将要使用它的方式。
在闪电网络方面,(目前)有三个兼容的客户端都遵循相同的 BOLT 规范:
1. C-Lightning(C语言编写)
2. LND(Go语言编写)
3. Eclair(用Scala编写)
您应该评估每个客户并决定哪个对您最有意义。 我个人以前使用过 C-Lightning 和 LND,但也听说过很多关于 ECLAir 客户的信息。 对于 lightwork,我决定使用 lnd,因为它提供了一个友好且易于使用的 grpc/rest api,以及开箱即用的 Neutrino 轻客户端支持(现在是 testnet)。
是时候让节点启动并运行了。
比特币核心设置
当前的比特币主网区块链拥有约 260GB 的数据,已开采约 550,000 个区块。 由于我们的 lnd 节点依赖于访问底层链来打开和关闭通道交易,因此在本地机器/笔记本电脑上运行完整节点似乎是一项艰巨的任务。 不仅是 1/4TB 的数据,而且还需要数小时(或数天,具体取决于您的连接)才能完全同步。
比特币还有一个 testnet3 网络,允许开发人员在不影响主网的情况下测试协议的新功能和更改。 它也非常适合在比特币之上构建应用程序和服务的开发人员,它可以使用毫无价值的 TestNet BTC 硬币测试端到端流量。 测试网的大小较小,约为 25GB 和约 144,000 个区块。 如果您所做的只是处理与闪电网络接口的应用程序,那么同步 testnet3 仍然是一个很大的障碍。 这就是为什么 bitcoin core 给了我们另一个网络,这个网络叫做 regtest(btcd 用户的 simnet)。
RegTest 是区块链的测试应用程序版本,考虑到它的唯一目的是允许更快地开发协议,作为该节点的管理员,您可以随时挖掘任意数量的区块。 我在开发时使用我的 regtest 网络,它只占用大约 37MB。 这样比较符合我们的要求。
安装比特币核心节点
以下说明适用于在 MacOS 系统上运行比特币。有关 Windows 和 Linux 说明,请参阅
如果您尚未安装它,请运行以下命令在您的环境中安装 Bitcoin Core:
卷曲-O
如果您熟悉 PGP,我还建议您检查版本的签名哈希:01EA 5486 DE18 A882 D4C2 6845 90C8 019E 36C2 E964
现在您可以使用以下命令打开 tarball:
tar -zxf 比特币-0.17.0-osx64.tar.gz
然后使用以下命令使 bitcoind 二进制文件可用:
须藤 mkdir -p /usr/local/bin
sudo cp bitcoin-0.17.0/bin/bitcoin* /usr/local/bin/
要删除文件,您可以删除下载的文件夹:
rm -rf 比特币-0.17.0*
您现在应该可以在计算机上完全访问 bitcoind 和 bitcoin-cli 命令。
节点配置
一个比特币核心全节点有许多配置选项比特币文件什么样子,因此建议您使用 bitcoin.conf 配置文件,而不是每次运行二进制文件时都在命令行上传递所有这些参数。
要获得 bitcoind 支持的所有命令的列表,请运行 bitcoind --help。
这是一个示例配置文件,其中包含运行 regtest 节点(并连接到 LND 节点)的(必需)参数:
#守护进程选项
服务器=1
# 网络选项
注册测试=1
# RPC 选项
rpcport=8332
rpcuser=USERNAME_HERE
rpcpassword=PASSWORD_HERE
# ZMQ 选项
zmqpubrawblock=tcp://127.0.0.1:28332
zmqpubrawtx=tcp://127.0.0.1:28333
为简单起见,您可以在完整节点在系统中创建的主比特币文件夹中创建 bitcoin.conf 文件。 在 macOS 系统上,此文件夹位于 ~/Library/Application Support/Bitcoin。
记下您选择的 RPC 用户名和密码,因为我们在 LND 节点配置期间需要它。
然后,您可以在同一个比特币目录中运行以下步骤,并使用新创建的配置文件启动节点守护进程:
cd ~/图书馆/应用程序支持/比特币
bitcoind -datadir=./ -conf=./bitcoin.conf
您应该看到类似于以下内容的输出:
在单独的终端窗口中,您可以运行 bitcoin-cli getblockchaininfo,您将看到来自 regtest 比特币链的最新数据集,包括当前区块高度、难度级别和磁盘大小。 有关 bitcoin-cli 命令的完整列表,请运行 bitcoin-cli --help。
当你第一次运行 bitcoind 时,它会自动为你创建一个钱包。 所以在这一点上,任何通过挖矿奖励获得的 BTC 都会被发送到这个钱包。 为了挖掘 regtest 块,只需运行 bitcoin-cli 生成 100,其中 100 是要挖掘的块数。 如果您运行 bitcoin-cli getwalletinfo,您现在将在“余额”下获得该值。 这些是 regtest BTC 硬币,非常适合测试闪电网络应用程序。 现在我们已经运行了比特币核心守护进程并且我们知道如何挖掘 regtest 块,是时候设置我们的 LND 节点了。
LND节点设置
要连接到闪电网络,您只需要一个连接到底层链的 LND 节点。 但是为了能够在网络上发送资金,您必须让另一个节点发送或请求。 一种方法是启动多个具有不同比特币核心和 LND 节点的 VPS 盒子,然后在两个 VPS 盒子之间打开一个通道。 另一种更简单的方法是在你的机器上运行多个 LND 实例,连接到你可以完全控制的单个比特币注册测试节点。 用户可以在单一环境中运行任意数量的 LND 节点,只需三个要求:
每个节点必须有自己专用的数据目录
每个节点必须有自己的 gRPC/REST 端口
每个节点必须有自己的一套 TLS 证书和管理 Macaroon
LND 创建在启动时运行节点所需的所有必要数据文件,包括身份验证 macaroon 文件。 考虑到这一点,在启动第一个节点后,您可以简单地克隆它(并删除身份验证 macaroons/TLS 证书,以便在初始化第二个节点时重新创建它们)。 对于 macOS 用户,默认的 LND 文件夹位于 ~/Library/Application Support/Lnd(节点 A),因此我将其克隆到 ~/Library/Application Support/Lnd Test(节点 B)。
节点配置
与比特币核心类似,LND 节点接收一个名为 lnd.conf 的配置文件。 为了运行两个节点,我们需要两个文件,放置在每个相应的数据目录中,以配置节点连接到正确的 bitcoind 实例。
NODE A 将在默认数据目录和默认设置(RPC/REST/gRPC 端口)上运行。 我们将使用以下 conf 文件:
# LND 设置
调试级别=调试
debughtlc=真
别名 = YOUR_NODE_NAME
maxpendingchannels=10
颜色=#eeeeee
rpclisten=0.0.0.0:10009
休息听=0.0.0.0:8080
听=9735
外部IP=127.0.0.1:9735
数据目录=./
datatlscertpath=./tls.cert
tlskeypath=./tls.key
adminmacaroonpath=./data/chain/regtest/admin.macaroon
#比特币
bitcoin.active=1
比特币.regtest=1
bitcoin.node=比特币
#比特币
bitcoind.rpcuser=USERNAME_HERE
bitcoind.rpcpass=密码在这里
bitcoind.zmqpubrawblock=tcp://127.0.0.1:28332
bitcoind.zmqpubrawtx=tcp://127.0.0.1:28333
请注意,ZMQ 选项和 RPC 用户名和密码必须与先前配置的 bitcoind.conf 设置相匹配。
除了连接端口外,节点 B 的配置设置基本相同。 更具体地说,rpclisten、restlisten、listen 和 externalip 属性都接收新端口。
# LND 设置
调试级别=调试
debughtlc=真
别名 = YOUR_NODE_NAME
maxpendingchannels=10
颜色=#eeeeee
rpclisten=0.0.0.0:10008
休息听=0.0.0.0:8090
听=9736
外部IP=127.0.0.1:9736
数据目录=./
datatlscertpath=./tls.cert
tlskeypath=./tls.key
adminmacaroonpath=./data/chain/regtest/admin.macaroon
#比特币
bitcoin.active=1
比特币.regtest=1
bitcoin.node=比特币
#比特币
bitcoind.rpcuser=USERNAME_HERE
bitcoind.rpcpass=密码在这里
bitcoind.zmqpubrawblock=tcp://127.0.0.1:28332
bitcoind.zmqpubrawtx=tcp://127.0.0.1:28333
此时我们有两个 LND 节点运行在不同的数据目录上,它们有自己的一组 TLS 证书和身份验证宏,并且运行在不同的端口上。 是时候开始联网了。 在两个独立的终端 shell 中,使用以下命令启动 NODE A 和 NODE B:
lnd --configfile=./lnd.conf
在另外两个 shell 中,使用 lncli 工具向您的节点发送命令。 运行以下命令创建钱包。 对于NODE A,我们只需要运行创建命令如下:
lncli --network=regtest 创建
对于 NODE B,我们必须传递更多属性:
lncli --network=regtest --rpcserver=localhost:10008 --lnddir=./ --tlscertpath=./tls.cert 创建
添加该属性以确保第二个 lncli 调用与在端口 10008 上运行的节点 B 通信。运行钱包创建过程并为每个钱包创建您自己的密码。
请注意,创建钱包后,您只需运行解锁命令即可开始工作。
LND 节点实际上做了很多事情,要了解它所做的一切,请转到 LND 的文档或运行 lncli --help 查看一些命令。 一些使用更广泛的是:
# 钱包余额,中本聪
lncli钱包余额
# 在 Satoshis 中合并所有通道的余额
lncli通道平衡
# 生成发票
lncli addinvoice --amt=1000 --memo=testing
#支付发票
lncli payinvoice lnbcrt10u1pdlyp6fpp50xvlxjg...
# 连接到特定的节点 URI
lncli 连接 [emailprotected]:9735
# 打开特定节点的通道
lncli openchannel 03fbe39af6166273...1af2 100000
我们将使用这些命令中的每一个在我们的两个节点之间发送 LN 发票,但在我们这样做之前,我们需要在我们的一个钱包中有一些实际的 regtest BTC。
从 Bitcoin Core 发送 regtest BTC 到 LND 节点
您可以使用 bitcoin-cli 工具将挖出的 regtest BTC 发送到节点 A。首先从节点 A 中生成一个新地址:
lncli --network=regtest 新地址 np2wkh
然后转到 bitcoin core 并将一些 regtest BTC 发送到该地址。 确保生成多个块来挖掘和确认交易。
# 发送 250 BTC 到 LND 地址
比特币-cli 发送地址 2MuKLyJQn2UQ2BaVotWpCKAfXpkrsa96eL7 250
#矿块
比特币-cli 生成 10
现在回到节点 A,我们可以得到我们的钱包余额并看到我们的 BTC 已经正确转移。
两个 lnd 节点之间的开放通道
现在我们在节点 A 中有了 BTC,我们可以让节点 B 为节点 A 创建一些支付请求。作为闪电网络规范的一部分,如果一个节点想要发送和接收 Satoshis,它需要打开与其他节点的通道(路由通过其他间接节点的发票是 C 我们可以在实际网络场景中使用,而不是在我们的双节点 lnd regtest 网络中)。
要连接两个节点,您需要获取节点的公共 URI。 在节点 B 上,运行以下命令:
lncli --network=regtest --rpcserver=localhost:10008 --lnddir=./
--tlscertpath=./tls.cert 获取信息
突出显示的部分是我们需要用来连接到该节点的 URI。 如果您没有看到列出的 URI,可能是因为您没有在 LND 配置文件中设置 externalip 属性。
要打开节点之间的通道,首先我们需要连接它们。 使用节点 B 的 URI 在节点 A 上运行以下命令。
lncli --network=regtest 连接 [emailprotected]:9736
我们仍然没有打开任何渠道,所以即使我们尝试支付发票,我们也会遇到路由问题:
作为开通通道的一部分,LND 将在链上创建资金交易,设置一定数量的聪来锁定这个新创建的通道。
lncli --network=regtest openchannel NODE_PUB_KEY 数量
为了使资金交易正常进行,您需要运行 bitcoin-cli generate 10 以在比特币核心中挖掘更多区块。 此时,您可以在 NODE A 中运行 listchannels 以查看两个节点之间打开的通道:
lncli --network=regtest 列表通道
处理发票(BOLT11 付款请求)
现在 NODE A 已经用一些 regtest BTC 提供资金,并且我们在两个节点之间有一个活跃的开放通道,我们可以创建一个发票来处理一些 BTC。
发票是任何闪电网络交易的核心。 要了解有关 LN 发票(付款请求)和 BOLT11 规范的更多信息,请阅读我的其他文章。
从节点 B 生成 300 satoshis 的发票,其中包含“测试”说明:
lncli --network=regtest --rpcserver=localhost:10008 --lnddir=./
--tlscertpath=./tls.cert addinvoice --amt=300 --memo=testing
突出显示的部分是 BOLT11 支付请求哈希。 要了解有关此发票的更多信息以及我们可以从中解码的数据类型,请转到 Lightning Decoder 并粘贴您的发票。
从节点 A,我们可以支付这张新创建的发票,并通过我们刚刚开通的通道通过闪电网络路由支付。
lncli --network=regtest payinvoice lnbcrt3u1pdlygj221k0x...c0h503tpr
节点 B 现在应该在通道一侧列出 300 聪。 我们可以使用 channelbalance 命令来检查它。
lncli --network=regtest --rpcserver=localhost:10008 --lnddir=./
--tlscertpath=./tls.cert 通道平衡
瞧,我们的 300 satoshis 已经转移了。
您已成功连接两个运行在同一个 regtest BTC 网络上的 LND 节点,在它们之间打开通道,并通过支付 BOLT11 发票来交易 BTC。 使用此设置,您可以通过这两个 LND 节点创建无限的真实支付方案。 这使得闪电网络支持的应用程序的后端服务器逻辑的测试、迭代和故障排除变得更加容易。
现在,要连接应用程序中的节点,请查看 LND 的 gPRC 或 RESTful API。 您还可以利用 Alex Bosworth 的抽象层,例如提供更友好 API 的 LN 服务。
LNET
在开发 LN 应用程序时,通常遵循 regtest → testnet → mainnet 方法,但根据您的应用程序大小和要求,添加额外的步骤可能是有意义的。
在 Chaincode Lightning Residency 2018 的最后一天,来自 Blockstream 的 Christian Decker 演示了 lnet。 lnet 背后的目标是简化为应用程序测试初始化 LN 网络拓扑的过程。 您需要做的就是以 graphviz 点格式描述网络,lnet 将负责其余的工作。 这个库是建立在 C-Lightning 而不是 LND 之上的,并且不(现在?)提供与旋转你自己的节点一样多的控制、定制和配置——但它确实有助于测试许多节点。
综上所述
随着我继续开发 LightWork 并了解更多关于闪电网络的信息,我将继续分享这些笔记。 在下一篇文章中,我希望详细介绍用于构建 LightWork 对分期付款和取款支持的实际代码片段/实现 - 真实世界的源代码价值超过 1000 字。
闪电网络的下一步行动:去中心化比特币挖矿
开发人员 Chris Belcher 现在有了解决比特币挖矿问题的想法——这个想法的灵感来自备受讨论的闪电网络。 这个想法值得注意的是比特币作为一种技术的不断发展的本质,以及开发人员正在寻找新方法来探索长期存在的问题的事实。例如,虽然提出闪电网络是为了解决比特币臭名昭著的扩展障碍,但 Belcher 认为这个概念还可以帮助分散比特币挖矿,巩固该协议作为反扩容屏障的作用。
以太坊版“闪电网络”正式发布测试网
开发人员已成功为 Raiden 部署了一个测试网,Raiden 是一种为以太坊设计的扩展解决方案,可以实现更快的支付速度和更低的费用。 测试网于昨天在 Raiden GitHub 页面上正式宣布,这是该项目的一个重要里程碑,它将把 Raiden 的开发推向下一阶段,最终为在以太坊网络上正式发布做好准备。 和比特币一样,扩容正成为以太坊的一个大问题。随着越来越多的用户进行越来越多的交易
全球首个比特币加油站创始人计划支持闪电网络
暴走解说:闪电网络是比特币的扩容解决方案之一,支持小额链下支付。 因此,第一台商用加油机的发明者透露了在设计中加入这一功能的计划。 只是目前该方案的协议不支持退款,这对于使用预付费模式的这款应用来说是一个重要的问题。 因此,目前仍沿用比特币升级协议BIP70。 未来需要做一些内部调整才能使用闪电网络,比如在车上安装数字钱包。译文:Annie_Xu的第一个商用油罐车发明
本文哈希:17ee08b15788a1f9c1f437ccf319af001353db49
免责声明:本文由Leo分享发布,不代表链世界赞同其观点。 文章内容仅供参考。 如果本文侵犯了您的合法权益,请联系我们。