在本文中,咱们介绍了一种叫作虚拟通道(virtual channel)的新式状况通道结构。虚拟通道不仅使得付费文件流(点击此处,检查 demo!)等新式运用场景成为或许,还能够简化去中心化的 Graph 查询付出、Filecoin 内容检索、带有经济激励机制的状况供给者网络等有趣的运用场景。

? 动机

让咱们来规划一个免信赖的付费文件流付出体系。这个体系中有 seeder(上传文件者)和 leecher(下载文件者)。leecher 从多个 seeder 那里付费下载一份文件的不同部分。运用以太坊主网买卖来付出费用是不或许的,由于以太坊主网的吞吐量低于每秒 50 笔买卖,并且(截至 5月 28 日发稿时)最低转账本钱也在 2 美元以上。Optimistic Rollup 和 ZK Rollup 能够提高吞吐量并下降买卖本钱。StarkEx 的 ZK Rollup 能够将吞吐量提高至每秒 3000 笔买卖,一起将每笔买卖的本钱降至 0.03 美元。假定 leecher 愿意付出 1 美元下载1GB 大小的文件,且整个文件以 256 KB 为单位切分成了多个部分,leecher 需求付出大约 5000 笔费用。当网速为 20MB/s 时,用户每秒付出 80 次费用,且每笔费用为 0.0002 美元。Rollup 的吞吐量达不到许多 leacher 的要求,并且买卖本钱还是太高了。

为了到达买卖吞吐量和本钱要求,基础状况通道是个不错的挑选。状况通道创立完结后,leecher 就能够免费进行多笔小额付款,且吞吐量只受 leecher 和 seeder 之间通信信道的带宽以及二者所运用硬件的影响。基础状况通道带来的应战是,leecher 需求提交买卖到主网上,与每位具有他所需文件部分的 seeder 都树立状况通道。由于 leecher 与多位 seeder 都需求时刻短交互,创立多条状况通道的本钱是极端贵重的。

虚拟通道能够完美处理咱们的规划问题。虚拟通道特别适用于轴辐式拓扑结构。多位参加者先与一个免信赖的中间方树立衔接,然后恣意两位(或多位)参加者再通过质押的方法创立私密通道。中间方并不知道私密通道内运转的是什么运用。另外,任何参加者都能够建议链上应战找回自己的资金,即使通道内的其他参加者和中间方处于离线状况或作恶。

如何利用虚拟通道来创建状态通道网络

- 通过虚拟通道衔接各方 -

总的来说,只需 Alice和Bob之间有通过中间方的途径,不管网络拓扑结构是什么样的,虚拟通道都能够让 Alice 开设与 Bob之间的私密通道。

? 布景知识

不同的区块链生态体系都将状况通道视为一种能够让少数参加者:

树立链上联系(通道)并存入资金;

私下交流信息,有条件地在参加者之间搬运资金;

封闭链上通道,完结各方之间资金结算的方法。

咱们之前现已在 statechannels.org 网站上发文介绍了怎样构建状况通道(中文译本),以及怎样通过一个叫作账本通道(ledger channel)的架构让一条状况通道为另一条状况通道供给资金。这些架构要求通道参加者有必要在链上树立直接联系。换言之,假如 Alice和 Bob 之前从未交互过,现在却想注册状况通道,他们有必要签署(链下)协议,并将资金存入合约内。

但虚拟状况通道能够完成以下运用场景:

Alice与免信赖的中间方创立状况通道。假定这个中间方叫作 Irene。

Bob 同上。

在 Irene 以及创立好的通道的协助下,Alice 和 Bob 能够创立一条新的私密通道并存入资金。创立这个私密通道不需求通过链上交互。咱们将 Alice 和 Bob之间的通道叫作虚拟通道。

就付费文件流这个运用场景而言,Alice 先要通过主网买卖与中间方 Irene 创立一条通道。接着,她能够通过虚拟方法与恣意数量的对等节点相连,只需后者与 Irene 之间也存在链上通道。一旦衔接成功,Alice 就能够持续付出数据下载费。

咱们的协议 Nitro 能够完成以下运用场景:

协助 Alice 和 Bob 创立虚拟通道的中间方 Irene 实际上不在这个虚拟通道内。Irene 仅仅帮助创立通道,并在通道封闭时结算资金罢了。因而,Alice 和 Bob 之间能够完成彻底私密的交流,并将 Irene 排除在这个运用的要害途径之外。更重要的是,Alice 和 Bob 能够在私密通道内运转多个不同的运用,无需 Irene 针对这些运用完成任何新的逻辑。因而,虚拟通道是通用可编程的多跳状况通道(就像以太坊赋予区块链可编程性那样),由于每条状况通道都能够依据自己的一套 “规矩” 来创立。Alice 能够向 Bob 付费购买某个文件内容。Bob 也能够向 Alice 付费进行 Graph 查询。

所有 Nitro 通道都是可组合的。因而,取得资金的通道能够通过递归的方法为其它通道供给资金,不管前者是通过何种方法取得资金的。一旦某条通道(直接通过链上合约、账本通道或虚拟筹资的方法)取得资金,它就能够运转任何运用或为其它通道供给资金。

? Nitro 的替代计划

其它协议(如 Raiden)能够让两位参加者无需在链上存入额外资金,即可通过中间方创立通道。一个成熟的模式是,运用通过哈希的时刻锁通过中间方将 Alice 的付款路由给 Bob。这个模式有一个很明显的缺点:所有付款有必要通过中间方路由。

一些比较新颖的架构(如 Scalar)能够让 Alice 和 Bob 通过中间方创立通道后完成点对点付款。但是,这些架构仍然需求中间方了解 Alice 和 Bob 所运转的运用,由于通道余额终究要通过中间方取回。有了 Nitro 虚拟通道,中间方就能够被隔离在 Alice 和 Bob 之间的通道外。

? 通道内部的资金搬运

本文将深化介绍 Nitro 通道是怎样取得资金的,以及免信赖的安全虚拟通道是怎样完成的!

Alice 和 Bob之间的 Nitro 通道的资金来自:

Alice 和 Bob 联合签署链下协议,运用特定的初始成果创立通道。

Alice 和 Bob 依照初始成果指定的次序存入资金,添加链上判决者(adjudicator)合约中记载的通道holdings。

这儿的 “成果” 是一个指示判决者在通道终究敲定时怎样分配资金的结构(检查咱们的最新文章!)在 Nitro 中,“成果” 列出了 https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg方针、数量} 对的优先级:

https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgA: 7, B: 3}命令通道C的判决者先将 7 枚代币付出给A(Alice),再将 3 枚代币付出给B(Bob),并将C的成果归零。

这么说有一点不精确:咱们其实是依照字典中键的次序在为方针分配优先级。因而,https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgB: 3, A: 7}会先付款给 Bob,然后才轮到 Alice。你能够将它看作是 Python 3.7+ 式的有序字典。

如何利用虚拟通道来创建状态通道网络

- 上图显现了 Alice 和 Bob 是怎样依据 https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgA: 7, B: 3} 这一成果从通道 C 中取走代币的。依据链上判决者的记载,通道中共有 10 枚代币。Alice 或 Bob 将通道成果记载到链上。这个成果记载下来后,Alice 和 Bob 就能够取走代币。所以,Alice 的外部账户中添加了 7 枚代币,Bob 的外部账户添加了 3 枚代币。-

尽管上述成果暗示方针是用户账户(EOA),但是在 Nitro 中,通道自身也能够是方针。这样一来,通道 L 也能够充任 “私密账本”,由于 Nitro 能够让一次性一次性将资金存入账本通道,然后为多便条通道供给资金。Nitro 避免了回到 Layer1 的需求,以及由此产生的延迟和本钱!例如:

假定C2是一条 Nitro 通道,https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgA: 4, B: 1, C2: 5}命令判决者向 Alice 付出 4 枚代币,再向 Bob 付出 1 枚代币,然后将C2的代币持有量添加 5 。

如何利用虚拟通道来创建状态通道网络

- C1 是账本通道,C2 是从账本通道获取资金的通道 -

以上是一个简短的介绍。假如你想要深化了解Nitro,请检查咱们的相关博客文章!

? 怎样利用确保来完成免信赖架构

接下来,咱们将介绍当两位参加者没有链上关系时,怎样通过一个安全的架构来创立三方通道。这个架构不仅能让账本通道为其它通道供给资金,还能完成虚拟通道。两位参加者分别是 Alice(A)和 Bob(B),中间方是 Irene(I)。

如何利用虚拟通道来创建状态通道网络

- 咱们初次尝试运用一个通道来衔接 A、B 和 I。请留意,这不是免信赖型架构。-

初始设置:三条独立通道

首要要有一对账本通道L(坐落 Alice 和 Irene 之间)和L'(坐落 Bob和 Irene之间)。通常情况下,L和L'是早就创立好的。这是由于 Irene 存在的意图就是在人们之间树立衔接 —— Alice 能够运用 L 来一起衔接 Bob、Cheryl、David 和 Eve。假如L和L'不存在,L能够运用成果https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgA: 4, I: 6}创立,L'能够运用成果https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgB: 6, I: 4}创立。L和L'各安闲链上存储10枚代币。

另外还有一条独立通道J是运用成果https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgA: 4, B: 6, I: 10}创立的。请留意,在向通道存入资金之前,参加者有必要先就这一成果达到一致。一旦J有了资金之后,这条通道就能够用来为 Alice 和 Bob 之间创立的恣意一条私密运用通道供给资金。

过程 1 和 2:账本通道转变为向 J 供给资金

Alice 和 Irene 将L的成果转变为https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgJ: 10}。Bob 和 Irene 将L'的成果转换成https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgJ: 10}。这个规划够好了吗?

Alice 有必要考虑以下几点:

Bob 和 Irene 是不是可信的?

Alice 无法控制L'上产生的事。

咱们来考虑一下过程 2 之后怎样取走J的资金。

L和L'的成果被记载到链上。

L和L'的资金都被搬运到J。代币经由转账操作从一条通道搬运到另一条通道。J现在有了 20 枚代币,可谓资金充足。

Alice 能够从J中取走 4 枚代币,Bob 能够从J中取走 6 枚代币。Irene 能够从J中取走 10 枚代币。

美丽!现在每个人都取走了自己应得的代币。但是,咱们来设想一个场景:Alice 和 Bob 串谋起来欺骗 Irene。假定过程 1 产生后,Bob 拒绝参加过程 2。然后就会产生以下情况:

L的成果被记载在链上。现在,J有了10 个代币,记载在链上的成果是https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgA: 4, B: 6, I: 10}。

Alice 和 Bob 分别取走 4 枚和 6 枚代币。

请留意,Bob 从J那里取得了 6 枚代币,尽管他自己底子没有向J转过代币。成果变成了:Alice 取得了 4 枚代币,Bob 取得了 6 枚代币,Irene 什么也没有。Irene 被坑惨了!

你或许会想,假如互换一下成果https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgA: 4, B: 6, I: 10}中方针的次序,就能够创立出一个安全的架构。但是,不管怎样互换次序,总会有人蒙受损失!确保是怎样发挥作用的

在上述场景中,咱们运用了转账操作在通道之间搬运资金。通过转账操作,资金能够从一个通道搬运到方针通道。在本小节中,咱们将引进讨取(claim)操作来将资金从方针通道搬运至特定的方针地址1。为了完成讨取操作,咱们需求确保。

咱们先来介绍一个新的数据结构。确保是指定以下的成果:

方针,即,一条通道;

数量;

优先级,即,方针的优先级列表。优先级的作用是指示判决者怎样改动方针通道的成果项的优先级。

如何利用虚拟通道来创建状态通道网络

- 咱们第2次尝试运用一个通道来衔接 A、B和 I。这次现已是免信赖架构了!-

咱们来看一下J是怎样取得资金的:

初始设置:创立三个独立的通道。

通道J是运用成果https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgA: 4, B: 6, I: 10}创立的。

L是运用成果https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgA: 4, I: 6}创立的。

L'是运用成果https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgB: 6, I:4}创立的。

过程 1 和 2:账本通道转变为向J供给资金(没有先后次序之分):

L的成果更新为https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgJ: https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgamount: 10, priorities: [A, I]}。请留意,咱们运用了一种新的符号来标明L的成果只要一项,即,包括方针J、数量和地址优先级列表的确保。

L'的成果是https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgJ: https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgamount: 10, priorities: [B, I]}。

L和L'的成果各自包括一个确保。由于转账操作不支持这些确保,咱们代之以讨取操作。讨取操作承受确保以及确保的方针通道作为输入。

咱们来看一下讨取操作是怎样运作的。假定

J的成果https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgA: 4, B: 6, I: 10}被记载到了链上。

L的成果https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgJ: https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgamount: 10, priorities: [A, I]}}被记载到了链上。

假如有人请求履行L的成果中的确保,则会触发三个效果:

将 4 枚代币发送给A,6枚代币发送给I。

由于(1),A和I的余额在J的成果中被调整为https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgB: 6, I: 4}。

L的成果被调整为https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg}—— 确保被删去。

在这个操作中,优先级的意图是告知判决者越过带有B的成果项,这样 Irene 就能够拿回她在创立L时出的那部分资金。因而,判决者会先看到确保中优先级最高的方针A,并将 4 枚代币转给A,J的成果会相应更新。然后,判决者才会看到方针I。在J的成果中,Irene 应该取得 10 枚代币,但这时(L 的成果中)只剩下 6 枚代币。因而,这 6 枚代币被发送给了 Irene,J的成果再次更新。请留意,优先级一定要是[A, I]而非[I, A]。假如优先级是[I, A],Irene 就会通过讨取操作取得 10 枚代币,Alice 就失去了本来归于她的 4 枚代币!

有了讨取操作,Alice 和 Bob 再也不能串谋起来骗取 Irene 的资金了。

?最理想的情况

你或许现已留意到了,为了让 Alice 他们取回资金,总共需求 3 个链上操作:将联合通道和转账成果记载到链上,并调用讨取操作。请留意,这是最糟糕的情况。假定 Bob 将 4 枚代币转给 Alice 后,Alice 和 Bob 想要封闭J。假如 Bob 和 Irene 配合的话,则:

Alice、Bob 和 Irene 同意以成果https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgA: 8, B: 2, I: 10}敲定J。

Alice 和 Irene 能够更新L,安全地删去为J供给资金的确保。L的成果变成了https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgA: 8, I: 5}。

现在,Alice 能够运用L里的代币为其它通道供给资金了。Alice 也能够挑选取走资金。

总而言之,在协作式事例中,Alice 能够运用L内的资金为多条不同的运用通道供给资金,也能够从这些取走资金,无需进行任何链上买卖。

?虚拟通道

在上一节中,咱们现已介绍了怎样在两个参加方不存在链上关系的情况下创立三方通道。细心的读者应该留意到了,更新J有必要通过中间方签字。在本文的开头,咱们打算在A和B之间创立一条私密通道。走运的是,Nitro 的可组合性让咱们能够创立一条由J供给资金的私密运用通道X。具体架构如下图所示。你现已把握了解这个架构所需的全部概念了。不过,假如你有任何问题,欢迎向咱们提问!

如何利用虚拟通道来创建状态通道网络

- X 是一条虚拟通道 -

⛵ 未来计划

本文介绍的虚拟通道架构是 Nitro 协议论文中介绍的架构的进化版。最值得一提的是,这个架构不需求创立专门的确保者通道。

Nitro 虚拟通道即将引进另一个更新,免除对联合通道的需求。有了这个更新,账本通道L和L'就能够为运用通道X供给资金。

本文由 Mike Kerzhner 和 Andrew Stewart 基于 Tom Close 所著论文《Nitro 协议》编撰,感谢 Robert Drost、Joseph Chow、George Knee 和 Colin Kennedy 的反应。注

咱们还能够将讨取操作了解成:

将资金从 L 转入 J,改动 J 的成果。

将资金从 J 转入方针地址。

假如账本通道的成果是https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgJ: https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgamount: 10, priorities: [A, I]}且J的成果是https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgA: 4, B: 6, I: 10},讨取能够描述成:

将 10枚代币从L转入J。

J的成果变成https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgA: 4, I: 6, B: 6, I: 4}

然后在J上调用面向A和I的转账。

视野开拓

“反过来…自下而上地观察经济发展过程,专注于上升阶级是如何从经济利益冲突的混战中脱颖而出这一解放斗争的伟大场景,并观察经济力量的平衡是逐渐转向有利于这些上升阶级的”。“历史学家尤其太容易成为这种观念的俘虏,即认为斗争中的胜利者必然代表‘更高发展’水平,而生存斗争中的失败者不消说就意味着他们代表‘落后因素’。”“历史学家实在有一种太强的倾向,即加入经济权利斗争中的胜利者阵营,从而也就视而不见一个重要问题:经济权利和民族的政治领导权并不总是一致。”-《民族国家与经济政策》

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注