主页 > imtoken最新版本下载 > 如何使用闪电网络构建应用程序堆栈

如何使用闪电网络构建应用程序堆栈

imtoken最新版本下载 2023-08-17 05:07:15

比特币文件什么样子_比特币分叉影响比特币总量_外国的比特币便宜中国的比特币贵为什么?

在一周的时间里,在构建第一个版本的 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分享发布,不代表链世界赞同其观点。 文章内容仅供参考。 如果本文侵犯了您的合法权益,请联系我们。