类别:区块链 / 日期:2021-09-12 / 浏览:1245

若是你想要入门闪电收集编程,又不在乎所谓准确、更佳的做法,那篇文很合适你。换言之,那篇指南具有很强的 主不雅性。若是你偏好 O'Reilly 式的权势巨子文本,那篇文章可能不合错误你的胃口。但是,若是你想要领会闪电收集的最小开发情况及其根本内容,无妨读一读。我写本文的目标是提炼出创建闪电收集应用的根底常识点,让新手可以快速构建和尝试。

我相信,只要掌握了根底常识点,你就能编写出愈加复杂平安的应用。但是,每小我都得有个起头,我小我的感触感染是万事开头难,我认为将那些思惟整合到一路能够帮忙一些迷途羔羊缓解痛苦。

在深切介绍细节之前,请允许我简单介绍一下本身的布景:

大约一个月之前,我辞去了本来不变的数据架构师工做,起头研究日新月异的比特币生态。你会找到那篇文章,表白你已经迈出了那一步(或者正在考虑那么做)。

简单来说,我认为比特币是我所见过最有趣的手艺立异。我越领会比特币,就越被它吸引。比特币手艺有希望改动甚至重塑现在的交互体例,使之脱胎换骨。我希望奉献本身的一份力量。

那就是为什么我会选择在比特币上开发。我希望那篇文章可以让不熟悉闪电收集生态及其潜力的开发者受益,鼓舞更多开发者为比特币范畴注入缔造力。

诚恳说,关于比特币生态,我想写的其实太多了(此中,“由能源撑持的货币”那一概念排在第一位),但是只能择日再谈了。如今起头进入正题:

一文读懂闪电收集应用开发速成指南  节点 开发 闪电网络 比特币 应用 第1张

闪电收集的架构

一文读懂闪电收集应用开发速成指南  节点 开发 闪电网络 比特币 应用 第2张

-图源:lnrouter.app-

闪电收集的根底设想是操纵通道实现节点间的一对连续接。开统统道需要存入必然数量的比特币,该事务会记录在比特币区块链上。然后,用户能够利用特殊的链下合约在节点之间转移通道内的比特币,无需提交新的事务到区块链上。

现实做法是实时逃踪通道内的余额变革。例如,你在与 Alice 开通的通道内存入 100 satoshi,你有大约 100 satoshi (减去链上交易手续费)的转账额度,既能够间接转给 Alice ,也可通过 Alice 间接转给其别人。那些转账几乎是立即的,因为我们只需按照每笔交易调整通道的余额。那种调整是通过在付款方和收款方之间传递加密动静实现的。

闪电应用是在闪电收集(所谓的比特币二层)上运行的。闪电应用同样以比特币做为付出体例,但是结算速度更快、交易费更低。

固然我只长短常简单地归纳综合了闪电收集协议,但是晓得那些已经足够入门了。若是你想更详细地领会闪电收集是若何运做的,那里有一些很好的阅读质料。小心不要沉湎在常识的海洋里,坐在电脑前读到很晚,却一行代码都没有敲。也不是说如许必然欠好,只是我们的目标仍是在于理论。别的,包管充沛的睡眠也很重要。

我认为,若想领会闪电收集及其节点的运做体例,更好的法子是本身运行一个节点并弄清晰若何通过节点路由付款。固然那个法子需要付出更多时间和金钱,但是既有趣又长常识。1

实现

闪电收集是开放式协议。那就意味着,闪电收集有尺度的动静通信息争释体例。就像 HTTPS 和 TCP/IP 不归任何人所有那样,闪电收集协议也是如斯。任何人只要遵守尺度都能够参与闪电收集。不只如斯,跟着开发者不竭加固协议并增加新功用,那一尺度也会持续开展。

目前有四家公司在闪电收集协议开发中处于核心地位:Lightning Labs、Blockstream、ACINQ 和 Square Crypto,并且都有本身的实现:

Lightning Labs — lnd (Go)

Blockstream — c-lighting (C)

ACINQ — eclair (Scala)

Square Crypto — Rust Lightning (Rust)

上述所有实现都能通过闪电收集停止通信。区别在于那些实现的 API。本文只聚焦于 Lightning Labs 的 lnd,因为那是我更先接触、也是领会最多的。固然我最末选择 Ind 有偶尔成分在里面,但是不能不夸一下,Lightning Labs 的 Ind 文档写得很好,并且开发者可以通过官方 Slack 频道获得良多帮忙和撑持。

请留意,下文将围绕 Ind 展开讨论,但是根本概念适用于所有闪电收集实现。

你的开发情况

不废话,利用 Polar 就行了。

好吧,再多说两句。无论你是开发者仍是用户,在闪电收集长进行构建的更大障碍是若何创建后端。我说的不但是一个钱包,因为有良多简单快速的托管处理计划能够用。我指的是实正的后端 —— 运行比特币和闪电收集的节点。

一文读懂闪电收集应用开发速成指南  节点 开发 闪电网络 比特币 应用 第3张

我之所以那么说,是因为你的应用需要拥有节点的某些权限,才气完成一些重要操做,例如,通过 API/gRPC 挪用创建发票和监控付款。若是有节点运营者授予你节点的拜候权限,你同样能够完成那些操做,但仍是本身运营一个节点比力好。

可以用于闪电收集开发的节点必需运行两个历程:(1)同步到比特币区块链最新区块的比特币客户端;(2)已开启通道(能够收发付出)的闪电收集客户端。

若是你利用的是通俗的家用宽带,光是同步区块链就需要破费至少几天的时间。你能够试一下 Neutrino(一款轻量级比特币钱包),但是我传闻用它在闪电收集上开发可能会招致一些问题。我没有切身测验考试过。不管如何,若是你才刚起头接触那类东西,我想更好去除那些可能会产生负面影响的变量。因而,若是你承担得起,我建议你同步完好的区块链就好。

若是我们比照特币的分层停止排序,闪电收集层就是比特币的二层。正如我上文提到的,我们需要在闪电收集上开启通道来停止交易。固然在闪电收集上开启通道不是很难,但是你需要一些方案和协调,还要付出比特币。你当然能够量押比特币来开启通道,然后起头交易。但是,你没需要承担那种金融风险。2

暂时先别管那些。Polar 是一个很棒的东西,能够让你在条记本电脑上的 Docker 容器内模仿运行那些历程。别的,它还供给一个精巧的 UI 界面,为你展现收集可视化效果。

一文读懂闪电收集应用开发速成指南  节点 开发 闪电网络 比特币 应用 第4张

-你看!是不是等不及想同步了!(Polar 界面)-

Polar 的长处在于,当你筹办好将应用转移到测试网或主网后端时,你只需要更新一些设置装备摆设即可。我已经能够做到在当地、测试网和主网后端之间轻松切换,只需在应用中添加或正文掉几行代码即可。(我最初会得到 .env 文件。当然了,测评东西不是本文的目标。)

Polar 也撑持 lnd、c-lighting 和 eclair 节点。那就意味着你能够灵敏测验考试其它实现。

再重申一遍:利用 Polar 就好。那是一种快速且简单的入门办法。再者说,万一你底子不喜好在闪电收集上开发呢?早日发现那一点,总好过在一个你纷歧定会利用的系统上浪费过多时间和金钱。话说回来,若是你发现本身沉浸于 Stephan Livera(出名比特币主播)的播客,每晚收听不成自拔,能够搭建一个更庄重的开发情况。

设置 Polar

一文读懂闪电收集应用开发速成指南  节点 开发 闪电网络 比特币 应用 第5张

点击 “Create Network(创建收集)”,即可在 Polar 中轻松创建模仿闪电收集情况。你能够随意定名那个收集(我小我认为 “test(测试)” 是个伶俐的选择)并添加两个 lnd 节点和一个 Bitcoin Core 节点。现实上,关于刚入门的人来说,那些只是更低配,之后还能够添加更多节点。你创建好收集后就能够启动它。初次启动收集时需要的时间可能会长一些,因为你必需下载所有 Docker 镜像。顺带一提,你需要在本身的设备上运行 Docker。就像我之前说的,那里仍是得靠本身试探。

最初,你会看到一个类似下图的 Polar 界面:

一文读懂闪电收集应用开发速成指南  节点 开发 闪电网络 比特币 应用 第6张

在上图所示界面中,我们能够看到 Alice 和 Bob 的 Ind 节点,并且那两个节点都与 Bitcoin Core 后端历程相连。别的还要留意的是,那时的区块高度是 1。那是我们的创世块!差别于实时区块链,Polar 只要在开发和测试过程中提交交易时才会出块。

下一步是在 Alice 和 Bob 之间创建一条通道,用来停止闪电付款。点击 Alice 的节点,右侧控造面板会显示我们能够与该节点交互的差别体例。点击 “Actions(操做)” ,我们就会看到向 Alice 的钱包充值模仿比特币以及在 Alice 和 Bob 之间开启通道所需的一切东西。接下来,我们先向 Alice 的钱包充值一些资金,再开启 Alice 与 Bob 的通道吧。

点击 “Deposit(充值)” ,接着将 100 万 satoshi 充值进 Alice 的钱包。

一文读懂闪电收集应用开发速成指南  节点 开发 闪电网络 比特币 应用 第7张

若是一切按方案停止,你就会看到区块高度和 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(启动)”,接着会呈现一个号令提醒符,如下图所示:

一文读懂闪电收集应用开发速成指南  节点 开发 闪电网络 比特币 应用 第8张

如今,我们能够利用该 Ind 节点的 lncli 东西开启通道、创建发票和付款了。起首,运行下方号令来领会大致情况:

lncli --help

我们能够运行下方号令在 Alice 和 Bob 之间开启一条余额为 10 万 satoshi 的通道:

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

你会看到一个带有 “funding_txid” 的响应,对应的是 Alice 和 Bob 播送到我们的模仿比特币区块链上的充值交易。运行下方号令查看我们新创建的通道:

lncli listchannels

若是该号令返回的列表为空,请测验考试利用( “Actions” 界面下的)比特币节点挖几个区块。如许做应该有助于确认交易并开启通道。

如今,我们能够通过 listchannels 响应看到 Alice 和 Bob 之间已经胜利开启通道,且通道余额约为 10 万 satoshi(减去交易费)。那 10 万不到的 satoshi 就是 Alice 能够通过闪电收集付出给 Bob 的可用余额。

付出流程

迄今为行,闪电收集上最简单(我相信也是最常见的)付出流程是通过发票(invoice)。发票素质上是一组带有 “金额” 和 “收款方” 的付出指令。还有其它参数和变体能够帮忙付出指令解锁更多有趣的可能性(例如,hodl 发票和 BOLT12 提案),但是本文只存眷最根本的形式。

继续设置我们的 Polar,我们先创建一个发票,但是那回要用 Bob 的节点。因而,我们要启动 Bob 的末端并运行以下号令:

lncli addinvoice --amt 100

以上号令创建了一个价值 100 satoshi 的发票(现实上,我在施行那些步调时碰到了毗连错误。若是你也碰到同样的问题,请停行并重启 Bob 的节点)。我们能够通过返回的响应看到那个发票的信息:

{    "r_hash": "7d91cafaba85b6086924142dfd890f350eb53b17b80e2993d0a2ce5ccc7252f1",    "payment_request": "lnbcrt1u1ps3lu04pp50kgu4746skmqs6fyzsklmzg0x58t2wchhq8zny7s5t89enrj2tcsd电话cqzpgsp55rtlzlf5rt0z5zg34nc2rlcm9mw6nd77x45r85z6zp07qumphr7q9qyyssqzrvxdlsluaeu7esscvv8skcmaly4794j7pg9ytapmn50uukezf4xpqma9758s39wpn4pwk475dztezg4tff8xpylksl4mww57q8hj7cq7s7222",    "add_index": "1",    "payment_addr": "a0d7f17d341ade2a0911acf0a1ff1b2edda9b7de356833d05a105fe07361b8fc"}

如今,我们只存眷 “payment_request” 部门,因为那部门数据包罗 Alice 向 Bob 付款所需的一切信息,即,付款金额和收款方地址5。

若是我们切回 Alice 的节点末端,就能够得到付款恳求并将它做为参数传递给下方号令:

lncli sendpayment --pay_req <payment_request>成果得到:

一文读懂闪电收集应用开发速成指南  节点 开发 闪电网络 比特币 应用 第9张

起头你的冒险征程

一文读懂闪电收集应用开发速成指南  节点 开发 闪电网络 比特币 应用 第10张

那时,你应该已经具备了足够的根底常识和东西,能够起头构建应用了。上图概述了一个简单的示例应用,利用的恰是我们在 Polar 顶用来创建并付出发票的 API 挪用。那就是搭建一个最根底的应用架构所需的一切。当然了,那只是一个例子,我们在开发过程中还会碰到许多其它问题(目前还只是起头),但是你会渐渐弄清晰本身需要什么以及若何处理那些问题。

一些额外的建议和参考:

有良多库能够帮忙开发者少写些样板代码、曲奔主题。就我本人而言,进修若何利用那些库带给我的更多是挫败感,而非更高的效率。问题次要出在我身上。笼统确实很棒,但前提是你要对被笼统的内容有根本领会。我在起步时还没有融会到那一点。我觉得 Ind 的 API 文档学起来最容易。当我根据那个指南利用 Javascript 编写 gRPC 客户端时,我就已经步入正轨了。

若是你想看一个更详细的应用示例,无妨看看 Lightning Labs 构建者指南的教程。若是你熟悉教程顶用到的东西 express、mobx 和 React,那么我很保举那个教程。若是你不熟悉那些东西,你可能不会从那篇教程中得到很大帮忙,但仍是可以学到一些工具。我喜好那个教程的一个原因是,它展现了操纵闪电收集(和密码学证明)构建应用能够实现的一些有趣功用。

脚注若是你想运行节点,Umbrel 很合适初学者。我传闻 MyNode、RaspiBolt 和 RaspiBlitz 也不错。若是你喜好修补软件系统(或 SimCity(模仿城市游戏)),那么运行节点往坏了说是一种有趣的消遣,往好了说是一场高成本且无休行的优化游戏(需要付出实金白银的那种)。你还能够在测试网长进行尝试,通过比特币水龙头获得一些尝试用比特币。那些币一文不值,但是当个吝啬鬼的体验会很有趣。若是你对本身设置装备摆设和办理节点不感兴趣,能够利用 Voltage 之类的办事。Voltage 是即用即付的云上办事,撑持测试网和主网节点。好吧,我们不克不及百分之百确定。隆重起见,请查看 lnd Slack 的开发者频道。我在那里碰到过良多构建并维护那些东西的开发者。你可能会看到我!有人可能履历过你正在面对的问题。若是没有,那就太棒了 —— 各人都能从你的问题中有所收成。区块链是一个公共数据库,每小我都有 root 权限。如需领会更多信息,请查看:https://balajis.com/yes-you-may-need-a-blockchain/关于发票中其它字段的详细解释,能够查看那篇总结。如需领会更多关于底层合约的信息,请阅读那篇文章。

 可能感兴趣的文章

最近发表