主页 > imtoken钱包下载2.0安卓版 > 闪电网络应用程序开发崩溃指南

闪电网络应用程序开发崩溃指南

imtoken钱包下载2.0安卓版 2023-02-12 07:44:48

如果您想开始使用闪电网络编程并且不关心什么是正确的和最佳实践,那么本文适合您。换句话说,本指南是高度主观的。如果你更喜欢 O'Reilly 风格的权威文本,这篇文章可能不是你喜欢的。但是,如果您想了解闪电网络的最小开发环境及其基础知识,请阅读它。我写这篇文章的目的是提炼创建闪电网络应用程序的基础知识,以便新手可以快速构建和试验。

如果您想开始使用闪电网络编程并且不关心什么是正确的和最佳实践,那么本文适合您。换句话说,本指南是高度主观的。如果你更喜欢 O'Reilly 风格的权威文本,这篇文章可能不是你喜欢的。但是,如果您想了解闪电网络的最小开发环境及其基础知识,请阅读它。我写这篇文章的目的是提炼创建闪电网络应用程序的基础知识,以便新手可以快速构建和试验。

相信只要掌握了基础,就能写出更复杂、更安全的应用程序。但是,每个人都要有一个开始,我个人觉得开始很难,我觉得把这些想法放在一起可以帮助一些迷途的羔羊减轻痛苦。

在深入细节之前,请允许我简要介绍一下我的背景:

大约一个月前,我辞去了稳定的数据架构师工作,开始研究不断变化的比特币生态系统。您会发现这篇文章表明您已经采取了这一步骤(或正在考虑这样做)。

简单地说,我认为比特币是我见过的最有趣的技术创新。我对比特币了解得越多,就越被它吸引。比特币技术有可能改变甚至重塑我们今天的互动方式。我想尽我的一份力。

这就是我选择在比特币上开发的原因。我希望这篇文章能够使不熟悉闪电网络生态系统及其潜力的开发者受益,并鼓励更多的开发者为比特币空间注入创造力。

老实说,我想写很多关于比特币生态系统的文章(“能源支持货币”的概念排在首位),但我得改天再说。现在进入正题:

闪电网络架构

- 来源:lnrouter.app-

闪电网络的基本设计是使用通道来实现节点之间的一对一连接。开通通道需要存入一定数量的比特币,交易会记录在比特币区块链上。然后,用户可以使用特殊的链下合约在节点之间的通道内转移比特币,而无需向区块链提交新的交易。

实用的方法是实时跟踪通道内的余额变化。例如,如果您在与 Alice 开通的通道中存入 100 satoshi,您的转账额度约为 100 satoshi(减去链上交易费用),可以直接转给 Alice,也可以通过 Alice 间接转给其他人。这些转账几乎是即时的比特币转账成功的界面,因为我们只是在每笔交易的基础上调整通道的余额。这种调整是通过在付款人和收款人之间传递加密消息来实现的。

闪电网络应用程序运行在闪电网络上,即所谓的比特币第 2 层。闪电网络应用程序也使用比特币作为支付方式,但结算速度更快,交易费用更低。

虽然我只是对闪电网络协议进行了非常简要的概述,但知道这足以让您入门。如果你想了解更多关于闪电网络如何工作的信息,这里有一些很好的阅读材料。注意不要沉迷于知识的海洋,坐在电脑前阅读到很晚,不输入一行代码。并不是说这一定不好,但我们的目的还是要修炼。此外,保证充足的睡眠也很重要。

比特币转账成功的界面

我认为了解闪电网络及其节点如何工作的更好方法是自己运行一个节点并弄清楚如何通过该节点路由付款。虽然这种方法需要更多的时间和金钱,但它很有趣且知识渊博。1

完成

闪电网络是一个开放协议。这意味着闪电网络有一种标准的方式来传达和解释消息。正如 HTTPS 和 TCP/IP 不属于任何人一样,闪电网络协议也是如此。只要遵守标准,任何人都可以参与闪电网络。不仅如此,随着开发人员继续强化协议并添加新功能,该标准还将继续发展。

目前有四家公司处于闪电网络协议开发的核心:Lightning Labs、Blockstream、ACINQ 和 Square Crypto,它们都有自己的实现:

闪电实验室 — lnd (Go)

Blockstream — c-lighting (C)

ACINQ——泡芙(Scala)

Square Crypto — Rust Lightning (Rust)

所有上述实现都能够通过闪电网络进行通信。不同之处在于这些实现的 API。本文只关注 Lightning Labs 的 lnd,因为那是我第一次接触和最了解的。虽然最终选择了 Ind 是一个意外,但不得不夸一下 Lightning Labs 的 Ind 文档写得很好,开发者可以通过 Slack 官方频道获得很多帮助和支持。

请注意,下面的讨论将围绕 Ind 展开,但基本概念适用于所有闪电网络实施。

你的开发环境

废话不多说,用极地吧。

嗯,再多说两句。无论您是开发人员还是用户,在闪电网络上构建的最大障碍是如何创建后端。我不只是在谈论钱包,因为有许多简单快捷的托管解决方案可用。我指的是真正的后端——运行比特币和闪电网络的节点。

比特币转账成功的界面

我这样说是因为您的应用程序需要在节点上获得某些权限才能执行一些重要的事情,例如创建发票和通过 API/gRPC 调用监控付款。如果节点操作员授予您对节点的访问权限,您也可以执行这些操作,但最好自己运行节点。

一个可用于闪电网络开发的节点必须运行两个进程:(1)比特币客户端同步到比特币区块链的最新区块;(2)开放通道(可以发送和接收付款))闪电网络客户端。

如果你使用的是普通的家庭宽带,至少需要几天时间才能同步区块链。你可以试试 Neutrino(一个轻量级的比特币钱包),但我听说用它在闪电网络上开发会导致一些问题。我自己没试过。无论哪种方式,如果您不熟悉这些工具,我认为最好删除可能产生负面影响的变量。所以,如果你能负担得起,我建议同步完整的区块链就好了。

如果我们订购比特币的分层,闪电网络层是比特币的第二层。正如我上面提到的,我们需要在闪电网络上打开通道来进行交易。虽然在闪电网络上开通通道并不难,但你需要一些规划和协调,而且你必须用比特币支付。您当然可以质押比特币以打开通道并开始交易。但是,您不必承担这种财务风险。2

暂时不要管它。Polar 是一款出色的工具,可让您在笔记本电脑的 Docker 容器中模拟运行这些流程。此外,它还提供了精美的UI界面,为您展示网络可视化。

-看!等不及要同步了!(极性接口)-

Polar 的美妙之处在于比特币转账成功的界面,当您准备将应用程序移至测试网或主网后端时,您只需更新一些配置。只需在应用程序中添加或注释几行代码,我就可以轻松地在本地、测试网和主网后端之间切换。(我最终会得到 .env 文件。当然,评估工具不是本文的目的。)

Polar 还支持 lnd、c-lighting 和 eclair 节点。这意味着您可以灵活地尝试其他实现。

再次:只需使用 Polar。这是一种快速简便的入门方法。此外,如果你根本不喜欢在闪电网络上开发怎么办?最好尽早发现这一点,而不是在您不一定会使用的系统上浪费太多时间和金钱。话虽如此,如果您发现自己沉迷于 Stephan Livera 的播客并每晚收听,您可以建立一个更严肃的开发环境。

设置极地

点击“创建网络”即可在 Polar 中轻松创建模拟闪电网络环境。你可以随意命名网络(我个人认为“测试”是一个明智的选择)并添加两个 lnd 节点和一个比特币核心节点。事实上,这些只是刚入门的人的最低限度,以后可以添加更多节点。创建网络后,您可以启动它。首次启动网络可能需要更长的时间,因为您必须下载所有 Docker 镜像。顺便说一句,您需要在自己的设备上运行 Docker。就像我之前说的,你仍然需要自己解决。

最后,您将看到类似下图的 Polar 界面:

比特币转账成功的界面

在上图界面中,我们可以看到 Alice 和 Bob 的 Ind 节点,两个节点都连接到 Bitcoin Core 后端进程。还要注意此时的块高是1。这是我们的创世块!与实时区块链不同,Polar 仅在开发和测试期间提交交易时才生成块。

下一步是在 Alice 和 Bob 之间创建一个用于进行闪电支付的通道。单击 Alice 的节点,右侧的控制面板会显示我们可以与该节点交互的不同方式。单击“操作”,我们将看到将模拟比特币添加到 Alice 的钱包并打开 Alice 和 Bob 之间的通道所需的一切。接下来,让我们给 Alice 的钱包充值一些资金,然后打开 Alice 和 Bob 之间的通道。

点击“存款”,然后将 100 万聪存入 Alice 的钱包。

如果一切按计划进行,您将看到区块高度和 Alice 的钱包余额发生变化。如果没有,请寻求帮助。这不是你的错。3

现在,我们可以在 Alice 和 Bob 之间打开一个通道。现在 Alice 有钱了,我们可以让她和 Bob 开一个“Outgoing”频道。所谓转出通道,就是Alice可以通过这个通道向Bob转出一定数量的比特币。只要通道中有余额,Alice 和 Bob 之间可以进行多次转账交易。但是请注意,当通道首次打开时,只有 Alice 可以向 Bob 转账,因为可用余额在她身上。当然,在 Alice 向 Bob 转账之后,Bob 可以向 Alice 转账。

这种通道内资金管理方式是为了保证双方都有交易能力,也就是我们所说的闪电网络的流动性。实际上,用户只能使用渠道内的余额。再深入一点,只有在付款人和收款人之间的渠道中有足够的余额(并且资金流动正确)时,付款才能成功。否则付款将失败。如何管理闪电网络中有限的流动性以及如何找到变通方法本身就是一个值得探讨的话题。

坦率地说,我在打开 Polar 频道时遇到了一些问题。我怀疑这是 UI 和后端之间的状态差异,但我不确定。有时关闭并重新启动节点(或整个网络)会有所帮助。完全退出并重新启动 Polar 也有效。此外,在这种情况下,外出10分钟可以让你的身心得到很好的放松。

不管是什么原因,我发现执行这些节点操作的最佳方式是通过 Polar 提供的 CLI。虽然 UI 不一定显示更改,但我们可以直接查询数据库(可以说是 4))以确定 UI 是否忠实地反映了更改。Polar 让这一切变得简单。让我们现在开始吧。

首先选择Alice的Ind节点,进入“Actions”界面,点击“Terminal”下的“Launch”,然后会出现命令提示符,如下图:

我们现在可以使用 Ind 节点的 lncli 工具打开渠道、创建发票和付款。首先,运行以下命令以获取概览:

lncli --help

比特币转账成功的界面

我们可以通过运行以下命令在 Alice 和 Bob 之间打开一个余额为 100,000 satoshi 的通道:

lncli openchannel --node_key <bob's public node key> --local_amt 100000

你会看到一个带有“funding_txid”的响应,对应于 Alice 和 Bob 广播到我们的模拟比特币区块链的资金交易。运行以下命令来查看我们新创建的频道:

lncli listchannels

如果此命令返回的列表为空,请尝试使用比特币节点(在“操作”屏幕下)挖掘几个块。这样做应该有助于确认交易并打开渠道。

现在,我们可以从 listchannels 响应中看到 Alice 和 Bob 之间的通道已经成功打开,通道余额约为 100,000 satoshi(减去交易费用)。这不到 100,000 聪是 Alice 可以通过闪电网络支付给 Bob 的可用余额。

付款流程

到目前为止,闪电网络上最简单的(我相信最常见的)支付流程是通过发票。发票本质上是一组带有“金额”和“收款人”的付款指令。还有其他参数和变体可以帮助支付指令解锁更多有趣的可能性(例如,hodl invoices 和 BOLT12 proposal),但本文重点介绍最基本的模式。

继续设置我们的 Polar,让我们首先创建一个发票,但这次使用 Bob 的节点。所以我们要启动 Bob 的终端并运行以下命令:

lncli addinvoice --amt 100

上面的命令创建了一张价值 100 satoshi 的发票(实际上,我在执行这些步骤时遇到了连接错误。如果您遇到同样的问题,请停止并重新启动 Bob 的节点)。我们可以通过返回的响应看到这张发票的信息:

{
    "r_hash": "7d91cafaba85b6086924142dfd890f350eb53b17b80e2993d0a2ce5ccc7252f1",
    "payment_request": "lnbcrt1u1ps3lu04pp50kgu4746skmqs6fyzsklmzg0x58t2wchhq8zny7s5t89enrj2tcsdqqcqzpgsp55rtlzlf5rt0z5zg34nc2rlcm9mw6nd77x45r85z6zp07qumphr7q9qyyssqzrvxdlsluaeu7esscvv8skcmaly4794j7pg9ytapmn50uukezf4xpqma9758s39wpn4pwk475dztezg4tff8xpylksl4mww57q8hj7cq7s7222",
    "add_index": "1",
    "payment_addr": "a0d7f17d341ade2a0911acf0a1ff1b2edda9b7de356833d05a105fe07361b8fc"
}

现在,让我们只关注“payment_request”部分,因为这部分数据包含 Alice 需要支付给 Bob 的所有内容,即付款金额和收款人的地址 5。

如果我们切换回 Alice 的节点终端,我们可以获取支付请求并将其作为参数传递给以下命令:

比特币转账成功的界面

lncli sendpayment --pay_req <payment_request>

结果是:

成功。

开始你的冒险

此时,您应该有足够的基础知识和工具来开始构建应用程序。上图概述了一个简单的示例应用程序,它使用我们在 Polar 中用于创建和支付发票的完全相同的 API 调用。这就是构建基本应用程序架构所需的全部内容。当然,这只是一个例子,我们在开发过程中会遇到很多其他的问题(只是开始),但是你会慢慢弄清楚你需要什么以及如何解决它们。

一些额外的建议和参考:

最后,如果您认为本文中的任何内容不清楚或不准确,请向我发送反馈或问题。

谢谢阅读。

来吧。

如果你想运行 node,Umbrel 非常适合初学者。我听说 MyNode、RaspiBolt 和 RaspiBlitz 也不错。如果你喜欢修补软件系统(或 SimCity),运行节点充其量是一种有趣的消遣,充其量是一种成本高昂且无休止的优化游戏(需要真金白银)。你也可以在测试网上进行实验,通过比特币水龙头获得一些实验性的比特币。这些硬币一文不值,但成为守财奴的经历可能很有趣。如果您对自己配置和管理节点不感兴趣,可以使用电压之类的服务。Voltage 是一种现收现付的云服务,支持测试网和主网节点。好吧,我们不能百分百确定。为了安全起见,请查看 lnd Slack 的开发者频道。我在这里遇到了很多构建和维护这些工具的开发人员。你可能会看到我!有人可能遇到过您面临的问题。如果不是,那很好 - 每个人都可以从您的问题中受益。区块链是一个公共数据库,每个人都有 root 访问权限。有关详细信息,请参阅:有关发票中其他字段的详细说明,请参阅此摘要。要了解有关基础合约的更多信息,请阅读本文。

(结束)

原文链接:@rheedio/a-crash-course-in-lightning-app-development-5be5b8d2d558 作者:Michael Rhee 翻译校对:Min Min & Ah Jian

本文首发于:

本文参与登链社区写作激励计划,好文好收入,欢迎您的加入阅读。