什么是平行线程运行原理是怎样的
扫描二维码
随时随地手机看文章
我要介绍的是 Polkadot 接下来几个月会推进发展的事情。其中一个就是过去几周在社区里面提出的关于平行链发展的顾虑和问题。
现状:平行链预备金金额较大
我们的愿景是希望很多团队来建设平行链,希望这些平行链可以发展良好。其中一个比较大的顾虑就是,搭建一个平行链需要在网络中提交较大金额的预备金。虽然这个预备金最终可以被退回,但这毕竟也是一个比较大的金额。
当然我们也有一些帮助团队来筹集这部分资金的方式,比如通过中继链上发布众筹的活动的功能;以及 DOT 代币借贷,在平行链不活跃之后全额偿还的机制。在这个基础上,我们还是希望可以设计出一套针对希望搭建平行链的开发者的,更加灵活,即用即付的收费模式。
新设计:共享稀缺资源的 “平行线程”
因此,我在过去几天结合了互联网领域的一些收费方式,做了一些思考和研究。本质上,Polkadot 网络中的平行链是稀缺资源。而 Polkadot 的中继链在短的时间内,每一个区块链产出的区块内,只能处理 100 条左右平行链的数据。目前的假设是,这 100 条平行链是同样的那 100 条。然而,原则上来说,中继链可以在每一个产出的区块中,处理任意 100 条平行链上传来的验证信息,并不需要是固定的 100 条平行链。
在互联网和计算网络的领域有几个稀缺资源的类比,其中一个是内存资源 (Memory),另一个是硬件线程 (Hardware Threads)。
一般的手机和电脑,都有 2-8 个核 CPU,允许做多线程并发信息处理。然而计算机操作系统有更多的任务线程,比如这台苹果操作系统,就大约 390 个不同的操作任务线性,同时并行独立运行。一般来说,这 390 多个不同的操作任务线程,并不会占用太多的计算资源,它们在被呼叫操作之后会被唤醒。单个线程都会认为它们是独立在 CPU 上运行,然而事实上,这些线程在共享 CPU 的计算资源。一般来说,当每一个单位不需要实时占用大量稀缺资源的时候,系统设置会让这些进程共享稀缺资源,允许某些单位在短的时间内使用这些资源。
通过分析和类比这个共享体系,我想到了为何不在平行链这块,也采用这样的共享收费机制。换句话说,平行链的插槽(Slots)可以被其他平行链共享。因此我们把这个被共享了插槽的称为平行线程(Parathreads)。
平行线程是一个新的抽象,他的意义是如果你的项目并不需要所有平行链的功能和吞吐量,不需要像平行链那样,通过所有的验证者节点,把所有的区块数据,交易等都打包进入区块。如果你的项目只是需要处理一部分你需要处理的交易,并在你需要的时候将它们打包进区块中,就适合使用平行线程。
平行线程跟平行链使用的是同样的 API 模型、同样的底层代码和计算模型。平行线程跟平行链一样有跨链互通的功能,整个网络对待平行线程跟对待平行链是一样的地位。它永久拥有自己的插槽,这跟计算机软件认为它们时刻拥有 CPU 资源是一样的道理。平行线程和平行链也可以按需互相转换。
平行线程和平行链在付费模型上的区别
之后平行线程和平行链最主要的区别是在经济体系和付费模型上面。平行链需要通过拍卖质押的方式来获取一个插槽的位置,一共大约 100 个左右插槽位置。有了这个插槽位置之后,他们可以确保每一个 Polkadot 网络的产出区块里面都可以有他们平行链上产出的区块数据,并可以跨链传播转换到其他各个平行链当中。获得这个平行链名额需要通过质押 DOT 代币拍卖的方式获取,当参与拍卖插槽的团队比较多的时候,此质押代币的数量可能会比较大。
然而,平行线程并不需要做这个拍卖。它只需要支付储备金 10-100 个 DOT 即可,相比获取一个平行链要便宜很多,比一个智能合约要贵一些。平行线程仅会在他们的交易被 Polkadot 网络处理的时候,才会需要支付费用。当平行线程网络静止的时候,他们并不需要支付费用,仅仅是一开始的储备金。当平行线程有比较多的交易需要处理,插入到 Polkadot 区块链的时候,他们用 DOT 代币做支付费用。平行线程也可以获得优化处理,当其他也有很多平行线程需要处理交易,产生区块插入到 Polkadot 网络时,平行线程可以被协调,切换到相对网络不那么繁忙的时间段,从而来降低网络费用。
中继链容量的分配
这一页就是 Polkadot 中继链的结构介绍。大概会有 100 个平行链的插槽。
这其中一部分会是特别预留的插槽,这些插槽会被用来确保 Polkadot 网络运行健康良好。会有一些系统级别的平行链,比如治理层逻辑的平行链,staking 逻辑平行链,以及网络内部进行 DOT 代币账户转账逻辑的平行链,这些是比较重要的平行链,跟中继链同时发起建立。另外的预留插槽会给用来让中继链可以后续做深度扩张的嵌套中继链,和那些连接不同共识机制独立的区块链网络进入 Polkadot 网络的转接桥 hub 的平行链。
另外一部分插槽我们称之为租用插槽,这些是永久存在于波卡网络的成员。这些成员会永远产出区块,并让这些区块得以验证进入到 Polkadot 区块链网络中。他们拥有持续的网络吞吐量资源,有全额的网络功能。
最后剩下的这些插槽会被预留给这些平行线程项目。每一个区块都会在所有的平行线程中做拍卖,谁最需要这些插槽,就可以在这些平行线程中通过拍卖方式竞拍然后获取这个平行链的插槽。
平行线程运作方式举例
接下来我们看一看这个平行线程具体是怎么运作的。
这个 PPT 当中有两个特定的区块,Block42 和 Block43。同时我们有一堆收集者,这些收集者会从那些需要在这个区块中写入交易的平行线程中收集区块。
收集者通过同样的数据发出指令来分别哪些区块是来自同一个平行线程的。然后中继链从中选出 3 个收集者收到的最高竞拍,把这三个区块写入中继链中,并向这三个平行线程收费。
这个平行线程的收费和出块验证机制,跟平行链出块和验证接入到中继链当中的机制是一样的。
平行线程的经济模型
让我们来看一下平行线程的经济模型,它包含 2 个不同的收费部分。
其中一个部分是交易手续费,也就是根据需要处理的数据量和区块个数来计算的交易手续费。
另一个部分是来自平行线程的赞助。这部分的收费模型是图中左下的收费曲线,X 轴代表距离上一个被平行线程创建、验证并最终接入到区块链中的区块有多少的时间。起初因为有一个缓冲休眠期,所以需要的额外费用是 0,但 X 轴的时间超过一定数量之后,平行线程需要支付指数级增长的费用,来确保他们需要创建的交易区块肯定可以在不那么大的延迟下被处理,验证进入到区块链网络中。
例如这个图中,我假设平行线程已经休眠了 12 个区块,然后需要重新出块的话,需要支付 60 个平行线程特定的 TOK 代币,而如果已经休眠了 24 个区块的话,则需要支付可能 60 亿个平行线程特定 TOK 代币才可唤醒。
然后我们把这两部分的费用加到一起,然后告知收集者,如果某个收集者可以将这个来自平行线程的区块收集并获得验证,则这个收集者可以获得 100 个 TOK 代币 —— 40 个来自交易手续费,60 个来自赞助或者叫额外的 top up 费用。
在这个 PPT 中,Dave 作为一个收集者,他意识到 100 个 TOK 代币作为收集奖励的价值大于 5 个 DOT 代币的价值。因为他作为收集者,会获得这 100 个 TOK 代币,并给出 5 个 DOT 给中继链,来确保他可以收集下一个区块的交易数据,并可以将区块进入到中继链中。
这 5 个 DOT 里的 1 个 DOT 会被分配给中继链的区块发布者(他们会选择最高奖励的平行线程,因而有经济动力来确保这个区块可以写入中继链),另 4 个 DOT 会被分配给用于整个网络治理,满足全网络成员利益的财务管理(Treasury)账户。
如果 100 个 TOK 价值是 6 个 DOT 代币的话,Dave 作为收集者整个过程下来花费了 5 个 DOT 让这个平行线程的区块得以获得验证,并最终写入到了中继链,自己最终获得 1 个 DOT 的奖励。
平行线程让链的转移更平滑
另一个需要分析的比较重要的内容就是链的转移。
每一个平行链都有 2 年的有效期,6 个月之后他们就可以开启不断更新 2 年有效期的拍卖。但是有一定的概率,某些平行链参与的插槽拍卖不断的失败,他们离 2 年的有效期截止不断接近,他们最终会被踢出平行链的阵营。有一个顾虑来自于某一些平行链被其他的平行链恶意竞争,最终被恶意挤出平行链阵容的情况。
这种情况的经常发生对于整个 Polkadot 网络也是不利的。尽管这是一个相对极端的情况,发生的可能性几率不大。因为如果真的这样的情况发生,平行链可能被其他的恶意踢出,那么很可能在发生之前整个 Polkadot 网络的治理机制就会介入,来做协调治理。
在这边我们假设这是一个潜在会发生的问题,平行线程就会在这种情况下提供一个中间的台阶。当平行链将要接近生命周期截止时,他们一般会直接变成一个转接桥链,或者更坏的情况直接变成一个完全独立的链。而现在,他们就可以变成一个平行线程,仍然可以被使用、接收和发出信息、提供服务,哪怕并不能像平行链那样每个区块都可以接入跨链网络。
因为之前是从平行链转过来的,大概率他们链上会有一些使用场景和有效应用,大概率他们链上的交易和数据会可以被有效验证接入到中继链上,尽管可能不能像平行链一样每个区块都接入。通过这样的机制,对于这些无法续签的平行链来说,也是一个比较体面的降权机制。同时,如果这样的链会有收益和场景保持,未来仍然也可以继续竞拍插槽,最终回到平行链的阵营。
平行线程到平行链的切换并不是很重的转换过程,而是一个比较轻的操作,仅需要一个区块和一些简单的技术逻辑就可以完成。当然平行线程也可以变成转接桥链和安全链,当有经济激励的情况下,也会有可能让验证者去验证他们的区块。
总结:平行线程的地位和作用
总结来说,平行线程是一个介于平行链和转接桥链之间的中间层级的地位。
平行线程拥有跟平行链一样级别的来自中继链的共享安全性和互通性,并确保快到期的平行链还可以一直保持在线。它让每个开发团队都可以以降低的成本接入区块,小的平行线程可以不用跟大的链去竞争,并确保每个平行线程都可以通过支付一定的 DOT 代币来支付交易费和通胀成本来享受到共享安全性。