一文读懂Marlin:Layer 0的可扩展之道
关于公链的可扩展之前聊过很多次,不过多数时候探讨的是Layer 1和Layer 2的可扩展,比如分片、Plasma、ZK-Rollup、Optimistic Rollups、状态通道、侧链等。而今天蓝狐笔记关注的是Layer 0。
通过Layer 0的可扩展性会给以太坊等区块链带来什么?
Layer 0与可扩展性
节点是构成区块链网络的基础。节点记录交易、参与验证、提议区块、获得奖励等等。而这些节点要达成共识,需要保持一致性、可用性,需要相互沟通。节点之间沟通时间的长短对区块链的可扩展性具有实质性的影响。
Layer 0是节点之间传递信息的通信层。信息沟通的构建方法跟达成共识的效率直接相关。而共识的达成速度则与区块链的可扩展性和安全性相关。从这个角度,为提升区块链的可扩展性,Layer 0也是可以做出贡献的。
区块链网络跟中心化网络不同的一点是,区块链网络是无须许可的,它要考虑来自互联网本身的限制。如果是中心化企业,可以采用私人线路,通过CDN和SD-WANs等提高网络性能。而对于去中心化的网络来说,这是不现实的。
此外,在如今的加密激励体系中,挖矿节点之间存在竞争关系。一个矿工向其邻近节点共享所开采区块后,而邻近节点有动机不进一步传播该区块,因为这样可以获得一些优势。也就是说,这样的激励机制,不但没有激励某些节点加速传播其已知信息,还存在延缓信息传播的可能性。这也不利于可扩展性和安全性。
那么,上述的这些问题有没有机会解决?
Marlin的Layer 0
Marlin是枪鱼,据说是世界上游得最快的鱼。Marlin是服务于区块链的通信层,它希望在其推动下,区块链网络的速度越来越快,宛如枪鱼一般。Marlin希望通过Layer 0为区块链可扩展性的发展贡献出自己的方案。
(枪鱼据说是游速最快的鱼,Marlin.pro)
为提升区块链的TPS,一般来说,从链上角度,有两种方法,一个是增加区块容量,一个是缩短出块时间(这里暂不考虑横向的分片)。
如果采用大区块的方法,节点需要花费更长时间来验证收到的信息,这会延缓区块广播的速度;如果缩短出块时间,提高出块的速率,会面临分叉问题,其中一个原因也是受制于区块传播的速度。要想提高出块的速度,需要加速区块的传播。而目前的区块传播速度不利于提高出块速度。当人们将比特币的区块大小从1M上限修改为32M甚至2G时,或者将出块时间从10钟左右缩短到更短时间时,确实可以提高可扩展性,但是它带来更大的问题,比如全节点掉线,无法同步数据的情况增多,甚至出现区块需要重组等情况。一旦区块过大,出块时间过快,网络的一致性或可用性就出现问题,其中很重要的原因之一,就是全节点受到网络和硬件的物理条件限制,无法及时验证和广播。
而这就是Marlin作为Layer 0试图要解决的问题。它试图在目前的物理条件限制情况下找到最快的区块传播速度方案,从而提高可扩展性,缓解Layer 1 公链的通信延迟烦恼。在Marlin协议的解决方案中,有两个核心,一个是中继网络,一个是经济激励机制。
在Marlin网络中,有专门用于中继的节点,叫做Marlin Node,节点相互之间传递信息,可以加速传播速度。Marlin借鉴了CDN加速技术,对网络进行了划分,因此也有很多中继网络。
目前网络层也不利于去中心化协议,目前有些协议的机制设计中,因为存在竞争关系,矿工有动力中继其区块并接收最新的区块,但他们很少有动力主动传播其他矿工挖的区块,矿工希望首先挖出区块。节点期待其他节点进行广播,而自己搭便车,可以节省带宽费用。同时,这种机制也会导致中心化,因为最终来说,只有那些大的节点才有动机转发这些交易。为解决自私挖矿等问题,Marlin融合了经济激励的机制。在其网络中的节点,只要成功中继信息,就可以获得奖励,由此鼓励信息传递的速率。通过引入带有激励机制的网络层,还可以防止垃圾信息/DDoS等攻击。
除了为公链提供可扩展,Marlin还可以为DeFi应用提供加速的服务,Siddhartha是Marlin的创始人,也公链项目Zilliqa前核心开发者之一。他曾经提到:“比如在DeFi领域,Marlin的中继框架可以提供外围接口,这些接口为DeFi交易者提供低延迟的优势。在DApp早期起步阶段,查询Infura、Alchemy以及Graph等API时,加载时间时常高达10秒,非常缓慢。Marlin Cache可以将这种延迟降低至大约250毫秒,可以在DApp中实现类似于web2.0的性能。”
所有P2P应用都是用网络层进行节点沟通,这导致任何使用去中心化存储或计算的应用也可以利用Marlin的服务。比如当前使用IPFS的应用不得不通过中心化的CDN来帮助用户提升性能。Marlin的优势在于它可以让这些使用Filecoin/Arweave的应用即便没有CDN也可获得好的性能。从这个角度,Marlin类似于Web 2时代的Akamai。
Marlin的Layer 0可扩展之道
Marlin在Layer 0上解决公链的可扩展性问题,核心源于它在两个方面的设计:中继网络和代币激励机制。
1.中继网络
Marlin协议是构建中继网络的协议。遵循其协议要求的Marlin节点组成了中继网络。除了Marlin节点之外,还有审计者节点,由它们确保中继节点和中继网络遵循其性能和SLA保证。Marlin网络的使用者可以有矿工和全节点,矿工使用Marlin中继网络广播其数据包和区块,而全节点(钱包或商家等)使用Marlin网络接收最新交易和区块。因此,Marlin网络本质上也是中继网络的市场。
Marlin网络的主要参与者,Marlin.pro
在上面这张图中,Marlin将其参与者分为生产者、接收者、中继者以及中继集群(中继网络)。其中生产者是将区块引入中继网络的一组节点。生产者通常是矿工,他们会尽快将区块广播出去。生产者对区块有效性负责,如果引入无效区块的生产者会遭受惩罚。
接收者包括其他矿工、交易所、钱包、区块浏览器或其他节点等,他们希望尽快接收到区块。接受者需要向协议支付订阅费来成为接收者。中继者是从生产者那里将区块中继给接受者的节点组。中继者会获得奖励以尽快传播区块,只有那些参与中继传播区块的节点才有机会获得收益。中继者集群是一组由中继者组成的中继网络。他们集体负责传播区块,并由此获得奖励。
更进一步说,Marlin协议网络是怎么架构起来的?
Marlin网络可分为四个部分:创建、管理、数据包广播和监视。
创建
Marlin网络是由很多Marlin节点构成的,要想成为Marlin节点,首先需要运行Marlin中继节点软件,还需要质押一定量的代币,这在下文会提到。这些节点需要达到一定的要求,例如网络连接良好、位置分布更接近于终端用户等。
成为Marlin节点之后,节点和中继网络可以向其目标用户(如矿工和全节点)展示自身的特性、功能以及价格,其中包括IP地址、中位数带宽、经度、纬度、质押代币所对应的公钥等。而矿工和全节点等可以根据需求选择中继网络。这就形成了一个交易市场。
节点可以创建中继集群,设置允许最大加入的节点数、根据地理位置加入最大和最小的节点数、节点最小的质押额、节点的最小配置要求(带宽、CPU内核等)、最小的SLA要求等。一旦创建中继网络,它会自动出现在Marlin市场上。
管理
节点创建一个中继网络之后,需要进行管理,其中包括节点的加入、参数的调整、节点的退出等。
一个节点要加入某个中继网络可以通过被邀请或申请加入的方式。在经过多数票同意后可以邀请一个节点参与其中继网络,被邀请节点只要在邀请过期前发布接收邀请交易即可加入。另外一个方式是申请加入,如果多数票同意,则可以加入该中继网络。
一个中继网络创建之后,它并非是一成不变的。虽然一开始其中的节点都会遵循最初的参数。不过随着后续节点的加入,这些节点也会有发言权。根据用户需求和中继网络竞争环境的变化,中继网络的参数也可能会面临调整。这些都需要通过治理进行更改。目前Marilin网络采用投票的方式进行参数调整。如果少数节点不赞同,它们可以选择离开并创建自己的中继网络。
最后,节点退出某个中继网络是需要打招呼的。如果节点不打招呼随便退出某个中继网络,对于该中继网络和其用户会很不利。在Marlin的中继网络中,如果节点悄无声息地退出或提前退出,是要被消减质押代币的。节点退出中继网络可以发起退出声明交易。如果中继网络找到替代节点,它允许该节点在其声明期结束前退出。此外,还有一种强制退出的模式,如果多数节点认为某个节点行为不端也可以将其踢出中继网络。
数据包广播
矿工和商家等是Marlin中继网络的用户,它们只需集成Marlin SDK即可跟Marlin节点交互。为了提供灵活服务,Marlin采用模块化结构,协议开发者可以编写插件来自定义一些功能,且能在Marlin节点、全节点上针对其协议相关的数据包执行自定义代码。例如选择不同中继网络的策略;满足一定条件下随机选择中继网络,或者通过硬编码中继网络的列表等。
当矿工生成区块,它可以根据自己的策略发送给中继网络。这时可能会面临支付费用的问题(覆盖入口节点的区块验证成本),不过支付费用会增加额外延迟。还有一种变通的方式是要求矿工进行代币质押,减少第一跳的区块验证,如果是垃圾信息则可以实施惩罚。
Marlin的中继网络是网状网络,其组播路径根据来源进行优化。它会不断监控不同路径的丢包率、带宽和等待时间,由此实现尽可能在短时间内完成区块的组播传送。
在接收区块和交易方面,矿工订阅邻近的Marlin中继节点以接收新区块和交易的通知。只要Marlin节点收到新区块,它会发送其哈希给所有的订阅者。接收新区块和交易的订阅者需要支付小额费用。同时,为避免额外延迟,节点可以直接推送给白名单矿工,后续再付款。
监视
Marlin协议需要全盘了解节点的性能,这为后续的奖惩提供依据。监视的操作主要由审计节点来实施。
这些审计节点首先是匿名的,它们看上去就跟普通的矿工或全节点一样。审计者网络是独立于中继网络的。为了确认特定节点是否表现良好,审计者节点会通过谢林点机制来进行投票,由此确认这些节点是否满足其SLA义务。如果节点达不到要求,则其质押代币会被消减。
整体来说,Marlin的中继网络由一组可用的Marlin节点创建,创建之后需要对网络进行平滑管理,以免影响中继网络的竞争力。而矿工或全节点订阅中继网络,并根据需求随机选择中继网络来广播其区块和交易,可以确保其区块和交易在最短时间内广播给其他订阅者。最后为了保证中继网络的持续良好运行,需要通过监视机制来惩罚不符合要求的节点,由此构建运作良好的中继网络。
代币激励机制
Marlin网络的原生代币是POND,100万个POND为MPOND。POND代币一共100亿个,这意味着MPOND有10,000个。Marlin的原生代币是实现Marlin网络持续运转的关键。其代币具有价值媒介、治理、质押等诸多用途。
Marlin的代币流向,Marlin.pro
首先POND可以用来支付费用,激励中继节点,也用来抑制节点作恶。
上文提到过,当前的区块链网络的节点在某些情况下并不会主动转发交易和区块。Marlin的代币机制试图解决这个问题,试图激励节点有动机转发交易和区块,激励节点持续提升其性能并尽快转发数据包;试图减少节点在传播路径中创建sybil身份的动机等。
中继节点的费用分配机制需要满足:抗孤立性;保持顺序。为解决这个问题,交易和区块需要包含附加到最初内容主体的见证。一个是签名链接:传播路径中每个在转发其内容的节点附加公钥,并使用私钥对其主体进行签名。此外,还有密钥列表,节点将新创建的密钥对附加到见证中,并对见证签名。
对于节点来说,总是转发数据包符合其利益。整体来说,Marlin设立的激励机制,用于激励节点转发数据包,激励节点有更高的性能表现。与此同时,系统是否能够抵抗女巫攻击和有较低的广播开销则取决于市场的竞争情况。如果市场经济不激烈,节点更倾向于设置高昂费率,并在路径中创建sybil身份以增加其收入份额。如果市场存在竞争,下游节点可以选择。在这样的机制下,节点会倾向于不断提高性能,并跟其他节点进行竞争,而试图创建sybil身份的窗口机会不会太多。
在Marlin网络中,它并没有采用费用共享结构,而是让市场参与者来决定。采用市场的方式来决定费用,可以让参与者评估风险和回报的价值。此外,采用市场决定的方式,也考虑到了服务差异化的因素等因素。
中继节点可以获得两部分费用:一部分是中继信息的费用收益,可以覆盖带宽和基础硬件等成本支出。中继者根据其完成的工作量获得相应比例的费用,这部分费用来源于接收者的订阅费用。第二部分费用是网络奖励费用。这部分奖励主要用于激励早期的中继参与者,随着网络使用增加,奖励价值会逐渐下降,因为他们可以从中继信息的服务费用中获得大多数收益。
审计节点是确保节点维持一定性能的重要角色。审计节点之所以愿意参与审计,最重要的原因是审计节点可以获得收益。Marlin协议中有一个审计奖励池,Marlin节点会定期贡献审计费用,可以看作为成员费用或维护费用,还有节点存入或提取质押代币时,也会有一部分代币作为费用进入奖励池,可以看作为进入或退出费用。此外,如果发生代币消减,这些惩罚费用也会进入奖励池。这也让审计节点有动力去发现那些不满足要求的节点。
而对于区块链生产者,他们通常是矿工,他们有天然的需求尽可能快速地广播其区块,这部分参与者无须激励。不过,如果有恶意生产者进行垃圾信息攻击,他们质押的代币会被消减。因此,POND代币也具有惩罚作用。
其次,POND代币可用于质押,获得成为中继节点的资格。
在早期Marlin网络中,必须质押100万个POND(1个MPOND)才有资格成为节点,才有机会获得节点的费用。如果中继网络节点在特定时间内无法交付区块和交易,其质押会被消减。去中心化网络的审计者会监视中继网络是否达到要求。此外,POND代币的持有人可以将其代币委托给中继节点。质押代币可以获得POND的代币收益。
如果早期参与的节点众多,则会锁定大量的POND代币,因为每个节点需要质押1MPOND代币。按照代币总量,从理论上,早期最多不会超过1万个中继节点。
再次,POND代币也是治理代币。
在Marlin网络中,只有MPOND代币的持有人才能发起提案并参与投票。
最后,POND可以用于推动生态的启动。
POND代币在Marlin网络早期也可以起到启动生态的作用。Marlin有一个Flowmint计划,它可以为layer 1平台社区的相关者提供一定的激励。其中包括带宽挖矿、layer 1代币持有人、安装了Marlin网关的验证者和委托者等,通过这些激励计划可以让生态系统中的更多人在早期参与进来。
通用化的Layer 0
综上所述,Marlin之所以有机会帮助公链提升可扩展性,其核心之处在于构建一个优化过的中继网络体系。在这个中继网络体系中,中继者愿意以最短时间将生产者的区块和交易广播给接收者,与此同时可以获得相应的费用收益。在这个中继网络体系中,其代币机制起到了重要的维系作用,可以将整个中继网络市场持续运转起来。
Marlin的中继网络并不服务于某个特定的区块链,它是采用模块化设计,可通用于各种区块链网络。在以太坊、波卡、Cosmos、Solana等公链寻求更好的可扩展性的路上,类似于Marlin这样的Layer 0可以助一臂之力。即便不同的Layer 1和 Layer 2存在割裂状态,Marlin也有机会受益于整个区块链行业的成长。
对于整个区块链发展来说,它不仅需要在layer 1和Layer 2上寻求可扩展,也需要在Layer 0上寻求可扩展。随着Layer 0、Layer 1以及Layer 2的持续优化,公链未来的可扩展性有机会达到新的高度。