知世金融网专注于股票行情,期货开户,外汇储备等最新相关资讯信息提供投资者参考学习!

当前位置:网站首页 > 区块链 > 正文

如何用闪电网络搭建应用程序栈

原创
文章作者
知世-金融领域资深作者
知名金融领域作者,从事金融超过十余年,在行业内有一定影响力。
金融风险管理师认证证书 常识职业资格认证 特许金融分析师 国际金融理财师认证证书
发布时间:2020-02-16 18:32:30 发布来源:区块链研究实验室 文章点击:112

在这一周中,在构建LightWork Web应用程序的第一个版本时,我遇到了一些架构问题,主要与处理ln节点和我的Web应用程序之间的bolt11发票(core to ln)有关。在经历了(大部分)这些障碍之...

目录

    本文标题如何用闪电网络搭建应用程序栈,作者:知世,本文有3815个文字,大小约为15KB,预计阅读时间10分钟,请您欣赏。知世金融网众多优秀文章,如果想要浏览更多相关文章,请使用网站导航的搜索进行搜索。本站虽然不乏优秀之作,但仅作为投资者学习参考。

    在这一周中,在构建LightWork Web应用程序的第一个版本时,我遇到了一些架构问题,主要与处理ln节点和我的Web应用程序之间的bolt11发票(core to ln)有关。在经历了(大部分)这些障碍之后,我想我会写一些关于开发一个由LN驱动的应用程序以及如何减少大家在开发时遇到的主要障碍。

    应用程序栈

    现在大多数应用程序通常分为两个主要部分:客户端和服务器。例如,客户端可以是移动应用程序或JavaScript SPA,服务器可以由NodeJS / Go / Rust后端组成,后端主要是基于RESTful或GraphQL的API。

    为应用程序添加Lightning Network支持,通常会向应用程序堆栈引入两个部分:比特币节点和Lightning Network节点。

    对于比特币,有几个节点实现可供使用,其中两个最广泛接受的方式是:

    · 比特币核心-比特币
    · BTCD-BTCD

    根据社区共识、网络上活动节点的数量以及各自代码存储库的维护统计,很明显比特币核心是最广泛使用和维护更好——也是我们将要使用的方式。

    在Lightning Network方面,有(目前)三个兼容的客户端都遵循相同的BOLT规范:

    1. C-Lightning(用C编写)
    2. LND(用Go编写)
    3. Eclair(用Scala编写)

    你应该评估每个客户端,并决定那个是对你最有意义。我以前曾亲自使用过C-Lightning和LND,但也听说过有关ECLAir客户的很多事情。对于lightwork,我决定使用lnd,因为它提供了一个友好易用的grpc/rest api,以及现成的Neutrino light客户端支持(现在是testnet)。

    是时候启动和运行节点了。


    比特币核心设置

    当前的比特币主网区块链大约有260GB的数据,挖掘了约55万个区块。由于我们的lnd节点依赖于访问底层链来打开和关闭通道事务,因此在本地机器/笔记本电脑上运行一个完整的节点似乎是一项巨大的任务。这不仅是1/4TB的数据,而且完全同步还需要几个小时(取决于您的连接,可能需要几天时间)。

    比特币也有一个testnet3网络,允许开发者在不影响主网的情况下测试新功能和对协议的更改。这对于开发人员在比特币上构建应用程序和服务也很好,因为比特币能够使用无价值的TestNet BTC币测试端到端的流量。测试网的容量较小大约25GB和大约有144000个区块。如果您所要做的只是处理与闪电网络接口的应用程序,那么同步testnet3仍然是一个很大的障碍。这就是为什么比特币核心给了我们另一个网络,这一个叫regtest(simnet为btcd用户)。

    RegTest是区块链的一个测试应用版本,考虑到它的唯一目的是允许在协议上进行更快的开发,作为该节点的管理员,您可以即时地挖掘任意多个区块。我在开发时使用了我的regtest网络,只占用了大约37MB容量。这更符合我们想要的。

    安装比特币核心节点

    以下说明用于在MacOS系统上运行比特币。有关Windows和Linux的说明,请参阅https://bitcoin.org/en/full-node

    如果您还没有安装,请运行以下命令在您的环境中安装比特币核心:

    curl -O https://bitcoin.org/bin/bitcoin-core-0.17.0/bitcoin-0.17.0-osx64.tar.gz

    如果您熟悉PGP,还建议您检查发布的签名哈希:01EA 5486 DE18 A882 D4C2 6845 90C8 019E 36C2 E964

    现在,您可以使用以下方法打开tarball:

    tar -zxf bitcoin-0.17.0-osx64.tar.gz

    随后使用以下方法使bitcoind二进制文件可用:

    sudo mkdir -p /usr/local/bin
    sudo cp bitcoin-0.17.0/bin/bitcoin* /usr/local/bin/

    删除文件,您可以删除下载的文件夹:

    rm -rf bitcoin-0.17.0*

    您现在应该可以完全访问计算机上的bitcoind和bitcoin-cli命令。

    节点配置

    比特币核心完整节点有许多配置选项,因此每次运行二进制文件时,不要在命令行上传递所有这些参数,建议您使用bitcoin.conf配置文件。

    有关bitcoind支持的所有命令的列表,请运行bitcoind --help。

    下面是一个配置文件示例,其中包含运行regtest节点(并连接到LND节点)的(必要)参数:

    # Daemon Options
    server=1
    # Network Options
    regtest=1
    # RPC Options
    rpcport=8332
    rpcuser=USERNAME_HERE
    rpcpassword=PASSWORD_HERE
    # ZMQ Options
    zmqpubrawblock=tcp://127.0.0.1:28332
    zmqpubrawtx=tcp://127.0.0.1:28333

    为了简单起见,您可以在完整节点在系统中创建的主比特币文件夹中创建bitcoin.conf文件。在macOS系统中,该文件夹位于〜/ Library / Application Support / Bitcoin。

    记下您选择的RPC用户名和密码,因为我们在LND节点配置期间需要它。

    然后,您可以运行以下步骤进入同一个Bitcoin目录,并使用新创建的配置文件启动节点守护程序:

    cd ~/Library/Application Support/Bitcoin
    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硬币,非常适合测试Lightning Network应用程序。现在我们已经运行了比特币核心守护程序并且我们知道如何挖掘regtest块,现在是时候设置我们的LND节点了。

    LND节点设置

    要连接到闪电网络,您只需要一个连接到底层链的LND节点。但是为了可以向网络周围发送资金,您必须有另一个节点发送到或请求。一种方法是将具有不同比特币核心和LND节点的多个VPS盒旋转起来,然后在两个VPS盒之间打开通道。另一个更简单的方法是让多个LND实例在您的机器上运行,连接到一个您完全控制的比特币regtest节点。用户可以在单个环境中运行他们想要的多个LND节点,只有三个要求:

    每个节点都必须有自己的专用数据目录
    每个节点都必须有自己的gRPC / REST端口
    每个节点必须有自己的一组TLS证书和管理Macaroon

    LND创建在启动时运行节点所需的所有必要数据文件,包括身份验证macaroon文件。考虑到这一点,在启动第一个节点后,您可以简单地克隆它(并删除身份验证macaroons / TLS证书,以便在初始化第二个节点时重新创建它们)。对于macOS用户,默认的LND文件夹位于〜/ Library / Application Support / Lnd(NODE A),因此我将其克隆到〜/ Library / Application Support / Lnd Test(NODE B)中。

    节点配置

    与比特币核心类似,LND节点接收称为lnd.conf的配置文件。为了运行两个节点,我们需要两个文件,放在每个相应的数据目录中,配置节点以连接到正确的bitcoind实例。

    NODE A将在默认数据目录和默认设置(RPC / REST / gRPC端口)上运行。我们将使用以下conf文件:

    # LND Settings
    debuglevel=debug
    debughtlc=true
    alias=YOUR_NODE_NAME
    maxpendingchannels=10
    color=#eeeeee
    rpclisten=0.0.0.0:10009
    restlisten=0.0.0.0:8080
    listen=9735
    externalip=127.0.0.1:9735
    datadir=./
    datatlscertpath=./tls.cert
    tlskeypath=./tls.key
    adminmacaroonpath=./data/chain/regtest/admin.macaroon
    # Bitcoin
    bitcoin.active=1
    bitcoin.regtest=1
    bitcoin.node=bitcoind
    # Bitcoind
    bitcoind.rpcuser=USERNAME_HERE
    bitcoind.rpcpass=PASSWORD_HERE
    bitcoind.zmqpubrawblock=tcp://127.0.0.1:28332
    bitcoind.zmqpubrawtx=tcp://127.0.0.1:28333

    请注意,ZMQ选项和RPC用户名和密码必须与先前配置的bitcoind.conf设置匹配。

    除连接端口外,NODE B将具有基本相同的配置设置。更具体地说,rpclisten,restlisten,listen和externalip属性都接收新端口。

    # LND Settings
    debuglevel=debug
    debughtlc=true
    alias=YOUR_NODE_NAME
    maxpendingchannels=10
    color=#eeeeee
    rpclisten=0.0.0.0:10008
    restlisten=0.0.0.0:8090
    listen=9736
    externalip=127.0.0.1:9736
    datadir=./
    datatlscertpath=./tls.cert
    tlskeypath=./tls.key
    adminmacaroonpath=./data/chain/regtest/admin.macaroon
    # Bitcoin
    bitcoin.active=1
    bitcoin.regtest=1
    bitcoin.node=bitcoind
    # Bitcoind
    bitcoind.rpcuser=USERNAME_HERE
    bitcoind.rpcpass=PASSWORD_HERE
    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,我们只需要运行create命令,如下所示:

    lncli --network=regtest create

    对于NODE B,我们必须传递更多属性:

    lncli --network=regtest --rpcserver=localhost:10008 --lnddir=./ --tlscertpath=./tls.cert create

    添加的属性是为了确保第二个lncli调用与在端口10008上运行的NODE B通信。运行钱包创建过程并为每个钱包创建自己的密码。

    请注意,一旦您创建了钱包,您只需运行unlock命令即可开始工作。

    LND节点实际上做了很多,并且要了解它的所有功能,请转到LND的文档或运行lncli --help来查看几个命令。一些更广泛使用的是:

    # Wallet balance, in Satoshis
    lncli walletbalance
    # Balance of all channels combined, in Satoshis
    lncli channelbalance
    # Generate Invoice
    lncli addinvoice --amt=1000 --memo=testing
    # Pay Invoice
    lncli payinvoice lnbcrt10u1pdlyp6fpp50xvlxjg...
    # Connect to specific node URI
    lncli connect [email protected]:9735
    # Open channel with to specific node
    lncli openchannel 03fbe39af6166273...1af2 100000

    我们将使用这些命令中的每一个在我们的两个节点之间发送LN发票,但在我们这样做之前,我们需要在我们的一个钱包中使用一些实际的regtest BTC。

    将regtest BTC从比特币核心发送到LND节点

    您可以使用bitcoin-cli工具将已开采的regtest BTC发送到NODE A.首先从NODE A内部生成一个新地址:

    lncli --network=regtest newaddress np2wkh

    然后转到比特币核心并将一些regtest BTC发送到该地址。确保生成几个区块以进行挖掘并确认交易。

    # Send 250 BTC to the LND Address
    bitcoin-cli sendtoaddress 2MuKLyJQn2UQ2BaVotWpCKAfXpkrsa96eL7 250
    # Mine Blocks
    bitcoin-cli generate 10

    现在回到NODE A,我们可以获得我们的钱包余额,并看到我们的BTC已正确转移。

    在两个lnd节点之间打开通道

    既然我们在NODE A内有了BTC,我们就可以让NODE B为节点A创建一些付款请求。作为Lightning网络规范的一部分,如果节点想发送和接收Satoshis,则需要与其他节点打开通道(通过其他间接节点路由发票为C我们可以在真实的网络场景中使用,而不是在我们的两节点lnd regtest网络中)。

    要连接两个节点,您需要获取节点的公共URI。在NODE B上,运行以下命令:

    lncli --network=regtest --rpcserver=localhost:10008 --lnddir=./
    --tlscertpath=./tls.cert getinfo

    突出显示的部分是我们需要用来连接到此节点的URI。如果您没有看到列出的URI,可能是因为您没有在LND配置文件上设置externalip属性。

    要在节点之间打开通道,首先我们需要连接它们。使用NODE B的URI在NODE A上运行以下命令。

    lncli --network=regtest connect [email protected]:9736

    我们仍然没有开通任何渠道,因此即使我们尝试支付发票,我们也会遇到路由问题:

    作为开通渠道的一部分,LND将在链上创建一个资金交易,设置一定数量的satoshis来锁定这个新创建的频道。

    lncli --network=regtest openchannel NODE_PUB_KEY amount

    要使资金交易有效,您需要运行比特币-cli生成10才能在比特币核心中挖掘更多的区块。此时,您可以在NODE A中运行listchannels以查看两个节点之间打开的通道:

    lncli --network=regtest listchannels

    处理发票(BOLT11付款请求)

    既然NODE A已经获得了一些regtest BTC的资助,并且我们在两个节点之间有一个活跃的开放通道,我们可以创建一个发票来处理一些BTC。

    发票是任何Lightning Network交易的核心。要了解有关LN发票(付款请求)和BOLT11规范的更多信息,请阅读我的其他文章。

    从NODE B,生成300 satoshis的发票,其中包含'测试'的说明:

    lncli --network=regtest --rpcserver=localhost:10008 --lnddir=./
    --tlscertpath=./tls.cert addinvoice --amt=300 --memo=testing

    突出显示的部分是BOLT11付款请求哈希。要了解有关此发票的更多信息以及我们可以从中解码的数据类型,请转到Lightning Decoder并粘贴您的发票。

    从NODE A,我们可以支付这个新创建的发票,并通过我们刚刚打开的通道通过Lightning Network路由付款。

    lncli --network=regtest payinvoice lnbcrt3u1pdlygj221k0x...c0h503tpr

    NODE B现在应该在通道的一侧列出300个satoshis。我们可以使用channelbalance命令检查它。

    lncli --network=regtest --rpcserver=localhost:10008 --lnddir=./
    --tlscertpath=./tls.cert channelbalance

    瞧,我们的300个satoshis已被转移。

    您已成功连接在同一regtest BTC网络上运行的两个LND节点,在它们之间打开了一个通道,并通过支付BOLT11发票来交易BTC。通过此设置,您可以通过这两个LND节点创建无限的实际付款方案。这样可以更轻松地对Lightning网络驱动的应用程序的后端服务器逻辑进行测试,迭代和故障排除。

    现在,要与应用程序内的节点连接,请查看LND的gPRC或RESTful API。您还可以利用Alex Bosworth的抽象层,例如LN Service,它可以提供更友好的API。

    LNET

    在开发LN应用程序时,通常遵循regtest→testnet→mainnet方法,但根据您的应用程序大小和要求,添加额外步骤可能是有意义的。

    在2018年Chaincode Lightning Residency的最后一天,来自Blockstream的Christian Decker演示了lnet。 lnet背后的目标是简化初始化LN网络拓扑以进行应用程序测试的过程。您需要做的就是以graphviz点格式描述网络,lnet将负责其余部分。这个库是基于C-Lightning而不是LND构建的,并没有(但是?)提供与旋转您自己的节点一样多的控制、定制和配置—但它确实有助于使用许多节点进行测试。

    结论

    我将继续分享这些笔记,因为我将继续开发LightWork并进一步了解Lightning Network。在下一篇文章中,我希望详细介绍用于构建LightWork对分期付款和提款的支持的实际代码片段/实现——真实世界的源代码比1000个单词更有价值。


    本文相关推荐: 加密交易所如果被盗,用户要如何用法律追回损失?

    以上便是知世金融网给大家分享的关于如何用闪电网络搭建应用程序栈/qkl/27079.html的相关信息了,希望能帮助到大家,更多金融相关信息,敬请关注知世金融网!

    网站内容均来自互联网,如侵害您的利益联系客服进行删除!

    关键词:如何用
    (0)
    (0)

    上一篇:一文浅识biteb合约:繁荣的衍生品将为机构投资者入局铺路

    下一篇:区块链技术将如何改变金融?

    本文标题:如何用闪电网络搭建应用程序栈

    本文地址:/index.php?s=article&c=search&keyword=%E5%A6%82%E4%BD%95%E7%94%A8

    金融知名领域

    南方财富网 | 金融界 | 金融界 |

    更多推荐

    • 茅台吃饱,经销商哭倒
      茅台吃饱,经销商哭倒
    • 汇金的五次增持从短期看具有一定的“稳定器“作用,但从市场表现看效果逐次递减
      汇金的五次增持从短期看具有一定的“稳定器“作用,但从市场表现看效果逐次递减
    • 158亿元!比亚迪收购!
      158亿元!比亚迪收购!
    • 9月价格回落近五成 “冷静期”酒店业备战“十一”市场
      9月价格回落近五成 “冷静期”酒店业备战“十一”市场
    • 2023哈马博览会哈尔滨银行展区精彩纷呈
      2023哈马博览会哈尔滨银行展区精彩纷呈
    • 大额解禁撂倒股价 医疗影像龙头跌出千亿俱乐部 葛兰二季度大幅减仓
      大额解禁撂倒股价 医疗影像龙头跌出千亿俱乐部 葛兰二季度大幅减仓
    • A股,又上了热搜!数字要素概念走高多股涨停,锂电池板块走低恩捷股份大举跌停
      A股,又上了热搜!数字要素概念走高多股涨停,锂电池板块走低恩捷股份大举跌停
    • 最新!巨头出手,加仓宁王51%
      最新!巨头出手,加仓宁王51%
    • 600亿巨头暴雷
      600亿巨头暴雷
    • 一天32家!科创板回购潮涌来
      一天32家!科创板回购潮涌来
    • 提振信心实招来了!30余家上市公司密集出手 最高要买10亿
      提振信心实招来了!30余家上市公司密集出手 最高要买10亿
    • 高盛再发50年后预测:2075年印度股市全球市值占比将升4倍 中国升3成
      高盛再发50年后预测:2075年印度股市全球市值占比将升4倍 中国升3成

    新闻资讯栏目

    站长QQ: 2397470084