如果你想要入门闪电网络编程,又不在乎所谓正确、最佳的做法,这篇文很适合你。换言之,这篇指南具有很强的?主观性。如果你偏好O'Reilly式的权威文本,这篇文章可能不对你的胃口。但是,如果你想要了解闪电网络的最小开发环境及其基本内容,不妨读一读。我写本文的目的是提炼出创建闪电网络应用的基础知识点,让新手能够快速构建和实验。
我相信,只要掌握了基础知识点,你就能编写出更加复杂安全的应用。但是,每个人都得有个开始,我个人的感受是万事开头难,我认为将这些思想整合到一起可以帮助一些迷途羔羊缓解痛苦。
在深入介绍细节之前,请允许我简单介绍一下自己的背景:
大约一个月之前,我辞去了原本稳定的数据架构师工作,开始研究日新月异的比特币生态。你会找到这篇文章,表明你已经迈出了这一步。
简单来说,我认为比特币是我所见过最有趣的技术创新。我越了解比特币,就越被它吸引。比特币技术有希望改变乃至重塑如今的交互方式,使之脱胎换骨。我希望贡献自己的一份力量。
这就是为什么我会选择在比特币上开发。我希望这篇文章能够让不熟悉闪电网络生态及其潜力的开发者受益,鼓励更多开发者为比特币领域注入创造力。
老实说,关于比特币生态,我想写的实在太多了,但是只能择日再谈了。现在开始进入正题:
闪电网络的架构
-图源:lnrouter.app-
闪电网络的基础设计是利用通道实现节点间的一对一连接。开通通道需要存入一定数量的比特币,该事务会记录在比特币区块链上。然后,用户可以使用特殊的链下合约在节点之间转移通道内的比特币,无需提交新的事务到区块链上。
实际做法是实时追踪通道内的余额变化。例如,你在与Alice开通的通道内存入100satoshi,你有大约100satoshi的转账额度,既可以直接转给Alice,也可通过Alice间接转给其他人。这些转账几乎是即时的,因为我们只需根据每笔交易调整通道的余额。这种调整是通过在付款方和收款方之间传递加密消息实现的。
2月以太坊NFT交易额重返10亿美元上方,创去年5月以来最高记录:金色财经报道,据The Block数据研究员Rebecca Stevens发布的2月以太坊链上数据,2月以太坊链上NFT交易额重返10亿美元上方,创下自2022年5月以来的最高记录,其中Blur占据主导地位,但链上成交量还不到去年5月的一半。
此外,Coinbase宣布推出以太坊L2网络后Optimism链上新地址和交易量指标均出现反弹,2月26日当天新增地址超2万个。稳定币方面,或因监管影响,2月以太坊链上稳定币交易量创下自2022年4月以来的最低水平。[2023/2/28 12:33:50]
闪电应用是在闪电网络上运行的。闪电应用同样以比特币作为支付方式,但是结算速度更快、交易费更低。
虽然我只是非常简略地概括了闪电网络协议,但是知道这些已经足够入门了。如果你想更详细地了解闪电网络是如何运作的,这里有一些很好的阅读材料。小心不要沉溺在知识的海洋里,坐在电脑前读到很晚,却一行代码都没有敲。也不是说这样一定不好,只是我们的目的还是在于实践。另外,保证充足的睡眠也很重要。
我认为,若想了解闪电网络及其节点的运作方式,更好的办法是自己运行一个节点并弄清楚如何通过节点路由付款。虽然这个办法需要付出更多时间和金钱,但是既有趣又长知识。1
实现
闪电网络是开放式协议。这就意味着,闪电网络有标准的消息通信和解释方式。就像HTTPS和TCP/IP不归任何人所有那样,闪电网络协议也是如此。任何人只要遵守标准都可以参与闪电网络。不仅如此,随着开发者不断加固协议并增加新功能,这一标准也会持续发展。
目前有四家公司在闪电网络协议开发中处于核心地位:LightningLabs、Blockstream、ACINQ和SquareCrypto,而且都有自己的实现:
LightningLabs—?lnd?(Go)
Blockstream—?c-lighting?(C)
ACINQ—?eclair?(Scala)
SquareCrypto—?RustLightning?(Rust)
数字资产托管平台Fireblocks宣布裁员5%:金色财经报道,据一份报告称,数字资产托管平台Fireblocks正在裁员5%。一年前,Fireblocks 以 80 亿美元的估值筹集了 5.5 亿美元的 E 轮融资。[2023/2/23 12:25:15]
上述所有实现都能通过闪电网络进行通信。区别在于这些实现的API。本文只聚焦于LightningLabs的lnd,因为这是我最先接触、也是了解最多的。虽然我最终选择Ind有偶然成分在里面,但是不得不夸一下,LightningLabs的Ind文档写得很好,而且开发者能够通过官方Slack频道获得很多帮助和支持。
请注意,下文将围绕Ind展开讨论,但是基本概念适用于所有闪电网络实现。
你的开发环境
不废话,使用?Polar?就行了。
好吧,再多说两句。无论你是开发者还是用户,在闪电网络上进行构建的最大障碍是如何创建后端。我说的不只是一个钱包,因为有很多简单快速的托管解决方案可以用。我指的是真正的后端——运行比特币和闪电网络的节点。
我之所以这么说,是因为你的应用需要拥有节点的某些权限,才能完成一些重要操作,例如,通过API/gRPC调用创建发票和监控付款。如果有节点运营者授予你节点的访问权限,你同样可以完成这些操作,但还是自己运营一个节点比较好。
能够用于闪电网络开发的节点必须运行两个进程:同步到比特币区块链最新区块的比特币客户端;已开启通道的闪电网络客户端。
如果你使用的是普通的家用宽带,光是同步区块链就需要花费至少几天的时间。你可以试一下Neutrino,但是我听说用它在闪电网络上开发可能会导致一些问题。我没有亲身尝试过。不管怎样,如果你才刚开始接触这类工具,我想最好去除那些可能会产生负面影响的变量。因此,如果你负担得起,我建议你同步完整的区块链就好。
如果我们对比特币的分层进行排序,闪电网络层就是比特币的二层。正如我上文提到的,我们需要在闪电网络上开启通道来进行交易。虽然在闪电网络上开启通道不是很难,但是你需要一些计划和协调,还要付出比特币。你当然可以质押比特币来开启通道,然后开始交易。但是,你没必要承担这种金融风险。2
以太坊信标链验证者数量突破50万个:1月17日消息,Dune数据显示,当前以太坊信标链验证者数量突破50万个,为502,468个。超过1607万枚ETH已被质押,占ETH流通总量的13.34%。[2023/1/17 11:17:19]
暂时先别管这些。Polar?是一个很棒的工具,可以让你在笔记本电脑上的Docker容器内模拟运行这些进程。另外,它还提供一个精美的UI界面,为你展示网络可视化效果。
-你看!是不是等不及想同步了!-
Polar的优点在于,当你准备好将应用转移到测试网或主网后端时,你只需要更新一些配置即可。我已经可以做到在本地、测试网和主网后端之间轻松切换,只需在应用中添加或注释掉几行代码即可。
Polar也支持lnd、c-lighting和eclair节点。这就意味着你可以灵活尝试其它实现。
再重申一遍:使用?Polar?就好。这是一种快速且简单的入门方法。再者说,万一你根本不喜欢在闪电网络上开发呢?早日发现这一点,总好过在一个你不一定会使用的系统上浪费过多时间和金钱。话说回来,如果你发现自己沉迷于?StephanLivera的播客,每晚收听不可自拔,可以搭建一个更严肃的开发环境。
设置Polar
点击“CreateNetwork”,即可在Polar中轻松创建模拟闪电网络环境。你可以随意命名这个网络”是个聪明的选择)并添加两个lnd节点和一个BitcoinCore节点。实际上,对于刚入门的人来说,这些只是最低配,之后还可以添加更多节点。你创建好网络后就可以启动它。首次启动网络时需要的时间可能会长一些,因为你必须下载所有Docker镜像。顺带一提,你需要在自己的设备上运行Docker。就像我之前说的,这里还是得靠自己摸索。
最后,你会看到一个类似下图的Polar界面:
Oasis Labs与Meta建立合作,构建隐私保护平台助力AI模型公平性发展:7月28日消息,隐私计算网络 Oasis Network 开发商 Oasis Labs 宣布与著名科技公司 Meta 建立合作伙伴关系,作为 Meta 的重要技术合作伙伴,Oasis Labs 构建了使用安全多方计算 (SMPC) 的平台,其加密技术不仅能为个人敏感数据提供高水平的隐私保护,并能够帮助 Meta 衡量偏见和公平性,助力 Meta 公司 AI 模型公平性发展,建立有责人工智能(Responsible AI)和有责数据使用,以促进一个更公平、更具包容性的社会。?
据悉,Oasis Labs 旨在利用区块链、隐私计算和隐私保护技术,建立相关系列平台和产品,进一步促进个人隐私保护、数据治理和有责数据使用。Oasis 的技术专注于让开发人员更轻松地整合隐私保护数据存储、治理和计算。[2022/7/28 2:44:10]
在上图所示界面中,我们可以看到Alice和Bob的Ind节点,而且这两个节点都与BitcoinCore后端进程相连。另外还要注意的是,这时的区块高度是1。这是我们的创世块!不同于实时区块链,Polar只有在开发和测试过程中提交交易时才会出块。
下一步是在Alice和Bob之间创建一条通道,用来进行闪电付款。点击Alice的节点,右侧控制面板会显示我们可以与该节点交互的不同方式。点击“Actions”,我们就会看到向Alice的钱包充值模拟比特币以及在Alice和Bob之间开启通道所需的一切工具。接下来,我们先向Alice的钱包充值一些资金,再开启Alice与Bob的通道吧。
点击“Deposit”,接着将100万satoshi充值进Alice的钱包。
如果一切按计划进行,你就会看到区块高度和Alice的钱包余额发生了变化。如果没有,请寻求帮助。这不是你的错。3
以太坊生态零知识协议Semaphore发布V2版本:7月7日消息,以太坊生态针对开发者的零知识协议 Semaphore 推出 V2 版本,更新内容包括不再需要拥有 EdDSA 私钥,从而实现更简单的电路(circuit)和更高效的零知识证明生成;用于身份承诺和 Merkle 树的哈希函数从 MiMC 迁移到 Poseidon,将证明时间减半并提高了 Gas 效率;合约模块化、三个新的 JavaScript 库等。
Semaphore 最早由以太坊社区成员 Kobi Gurkan、Koh Wei Jie 和 Barry Whitehat 提出,在 2019 年发布 V1 版,可以让以太坊用户可以证明他们的群组成员身份,并在不透露原始身份的情况下发送诸如投票或支持的信号。Semaphore 不是面向用户的应用程序,旨在为以太坊开发人员提供强大而简单的工具,以使用私有凭据构建 DApp。[2022/7/7 1:57:35]
现在,我们可以在Alice和Bob之间开启通道。现在,Alice已经有钱了,我们可以让她开启一个与Bob的“Outgoing”通道。所谓的转出通道,就是Alice可以通过该通道转给Bob一定数量的比特币。Alice和Bob之间可以进行多笔转账交易,只要通道内有余额即可。但是,请注意,该通道刚开启时,只有Alice可以向Bob转账,因为可用余额都在她那里。当然了,等到Alice向Bob转过账之后,Bob就可以向Alice转账了。
这种通道内资金管理方式是为了保证双方都具备交易能力,这就是我们所说的闪电网络的?流动性。实际上,用户只能使用通道内的余额。更深入一点来讲,只有当付款方和收款方之间的通道内有足够的余额时,付款才能成功。否则付款就会失败。如何管理闪电网络中有限的流动性以及如何找到变通之法本身就是一个值得探讨的话题。
坦白来说,我在使用Polar开启通道时遇到过一些问题。我怀疑这是UI和后端之间的状态差异导致的,但是我并不确定。有时,关闭并重启节点会有帮助。完全退出并重启Polar同样有效。另外,遇到这类情况时,出门晃悠10分钟可以让你的头脑和精神得到很好的放松。
不管是什么原因,我发现进行这些节点操作的最佳方式是通过Polar提供的CLI。虽然UI不一定会显示出变化,但是我们可以直接查询数据库来确定UI是否如实反映变化。Polar让这一切变得简单了。我们现在就上手做吧。
首选选中Alice的Ind节点,进入“Actions”界面,点击“Terminal”下面的“Launch”,接着会出现一个命令提示符,如下图所示:
现在,我们可以使用该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
如果该命令返回的列表为空,请尝试使用比特币节点挖几个区块。这样做应该有助于确认交易并开启通道。
现在,我们可以通过listchannels响应看到Alice和Bob之间已经成功开启通道,且通道余额约为10万satoshi。这10万不到的satoshi就是Alice可以通过闪电网络支付给Bob的可用余额。
支付流程
迄今为止,闪电网络上最简单支付流程是通过发票。发票本质上是一组带有“金额”和“收款方”的支付指令。还有其它参数和变体可以帮助支付指令解锁更多有趣的可能性,但是本文只关注最基本的模式。
继续设置我们的Polar,我们先创建一个发票,但是这回要用Bob的节点。因此,我们要启动Bob的终端并运行以下命令:
lncli?addinvoice?--amt?100
以上命令创建了一个价值100satoshi的发票。我们可以通过返回的响应看到这个发票的信息:
{????"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调用。这就是搭建一个最基础的应用架构所需的一切。当然了,这只是一个例子,我们在开发过程中还会遇到许多其它问题,但是你会慢慢弄清楚自己需要什么以及如何解决这些问题。
一些额外的建议和参考:
有很多库可以帮助开发者少写些样板代码、直奔主题。就我本人而言,学习如何使用这些库带给我的更多是挫败感,而非更高的效率。问题主要出在我身上。抽象确实很棒,但前提是你要对被抽象的内容有基本了解。我在起步时还没有领悟到这一点。我觉得Ind的?API文档学起来最容易。当我按照这个指南使用Javascript编写gRPC客户端时,我就已经步入正轨了。
如果你想看一个更具体的应用示例,不妨看看LightningLabs构建者指南的教程。如果你熟悉教程中用到的工具express、mobx和React,那么我很推荐这个教程。如果你不熟悉这些工具,你可能不会从这篇教程中得到很大帮助,但还是能够学到一些东西。我喜欢这个教程的一个原因是,它展示了利用闪电网络构建应用可以实现的一些有趣功能。
脚注
如果你想运行节点,Umbrel?很适合初学者。我听说?MyNode、RaspiBolt?和?RaspiBlitz?也不错。如果你喜欢修补软件系统),那么运行节点往坏了说是一种有趣的消遣,往好了说是一场高成本且无休止的优化游戏。
你还可以在测试网上进行实验,通过比特币水龙头获得一些实验用比特币。这些币一文不值,但是当个守财奴的体验会很有趣。如果你对自己配置和管理节点不感兴趣,可以使用?Voltage?之类的服务。Voltage?是即用即付的云上服务,支持测试网和主网节点。
好吧,我们不能百分之百确定。谨慎起见,请查看?lndSlack?的开发者频道。我在这里遇到过很多构建并维护这些工具的开发者。你可能会看到我!有人可能经历过你正在面临的问题。如果没有,那就太棒了——大家都能从你的问题中有所收获。
区块链是一个公共数据库,每个人都有root权限。如需了解更多信息,请查看:https://balajis.com/yes-you-may-need-a-blockchain/
关于发票中其它字段的详细解释,可以查看这篇总结。如需了解更多关于底层合约的信息,请阅读这篇文章。
本文总共分为中篇阐述自动做市商算法、现状及未来迭代的思考,本文为中篇。下篇请点击 目录 7.?Curve的StableSwap和交易公式8.?CurveV2的动态权重、可定制的价格锚定和平滑的价.
1.金色观察|稳定币的价格能真的稳定吗?有价值稳定的稳定币吗?答案应该是没有的,因为只要是非由信任主体发行承兑的稳定币,都无法保证价格的绝对稳定,并且价格的绝对稳定,也意味着没有市场利润空间.
9月16日,Coinbase正式上线自由职业者招聘平台Braintrust代币BTRST,Coinbase.com、CoinbaseAndroid和iOS应用程序用户现在可以交易、兑换、发送、接.
2021年8月30日16:00-17:11,Ergo在KuCoin电报群举办了AMA活动,表示Ergo将是智能货币未来。 项目简介 Ergo是一条采用工作量证明共识、基于UTXO的区块链.
2021年5月,金色财经面向优秀专栏作者,开放了平台推荐通道;通过推荐关注、首页推荐位、月度榜单等形式将专栏作者触达给更多的金色用户,给予优秀专栏作者更多的推荐曝光和频道展示机会.
1930年,牛津大学一位教授批卷时偶然在答题册中翻到一张白纸。这位昏昏欲睡的语言学大佬灵光一现,信手在纸上写下:Inaholeinthegroundtherelivedahobbit.对英语世界.