手机版

Monoxide的设计精要概览

时间:2021-07-17 23:38:16|浏览:

转自:区块网

Monoxide是由王嘉平博士与其他研究职员一同设计的公有链策略,并发表了论文《Monoxide: Scale Out Blockchain with Asynchronized Consensus Zones》。我并没下载到并阅读这篇论文,不过依据王嘉平博士的《Monoxide原理解析:突破区块链不可能三角的极简构造》一文,已不难领悟其设计精要。理解Monoxide之前,可先考虑一下区块链系统的分片设计,及分片构造势必会遇到的两个典型问题。

1、啥是分片:因为单一的、整体式的区块链系统,买卖处置速度慢、吞吐量低,因此可考虑将单一系统分割成一定量上独立的N个分片子系统,以提高整个系统的买卖处置速度与吞吐量。

2、怎么样处置跨分片买卖:Alice的竞价推广账户坐落于A分片,Bob的竞价推广账户坐落于B分片,若Alice需给Bob转账,应怎么样处置?

3、怎么样确保分片安全性:若采取PoW共识算法,将挖矿算力分散到N个分片,每一个分片的算力只占全网算力的1/N,怎么样应付恶意算力攻击?

Monoxide使用异步共识组策略:将单一的区块链互联网及账本分割成N个形式上独立的共识组,每一个共识组拥有独立的账本(链)、点对点互联网,分组K的区块只在互联网K中进行Gossip广播,各个分组的行为与动作是异步实行的,可以觉得每一个共识组就是一个分片。Monoxide在Nakamoto或GHOST的基础上,只进行了很简单、而又极其有效的改进,这是现在其他的不少分片策略所不拥有的,这部分分片策略的设计过于复杂,不够精妙。

为了处置跨分组买卖,Monoxide引入了接力买卖(或称之为中继买卖):分组A的Alice给分组B的Bob转了X个币,则可先在分组A的区块Y中打包这笔买卖,并实行Alice(-X)。接着生成接力买卖,包含完备的转账信息,譬如区块Y的头部信息,及买卖Merkle Tree Path,并将接力买卖发送到分组B,分组B的矿工最后(虽然会延迟)会验证接力买卖的合法性,并记录到分组B的区块中、实行Bob(+X)。通过将1笔买卖转换为2笔买卖的方法完成跨组买卖,Monoxide称之为买卖的「最后原子性」。因为收款方共识组的全节点需要验证接力买卖的合法性,因此需要持续接收并存储支付方分组的所有区块头部数据。每笔买卖最多可跨越2个分组,伴随系统生态的兴盛、分组数目的增大,不跨分组的买卖占比渐渐趋零,因此由N个分组构成的系统,和不分组的单一系统相比,全账本数据量增长到约2N倍,买卖吞吐量与TPS提升到约N/2倍。

为了确保分组安全性,Monoxide引入了连弩挖矿:矿工节点可以借助一次成功的挖矿运算,同时为多个分组生产区块,多个分组共享全网算力,而不是各个分组一个人占用一份算力,防止算力分散并确保分组安全和全网安全的等价性。对于矿工来讲,实行连弩挖矿,更需要存储所有分组的账本,矿工需要确保自己正在扩展的各个分组账本不与其他分组账本的数据发生冲突、各个分组账本数据需要是互相融洽的(譬如跨分组的Alice(-X)和Bob(+X)),然后才能依据Nakamoto或GHOST继续进行扩展。因此Monoxide虽然对账本进行了形式上的分片和隔离,但事实上矿工节点仍需获得所有分组账本,并架构「全账本」,对于专业的矿池来讲,这并非问题。专业的矿池为了提升算力借助率,势必会同时接入所有些共识组点对点互联网,同时加入所有共识组实行连弩挖矿。

连弩挖矿的工作原理:在区块链技术中,通常以Merkle Tree的形式组织多笔买卖,但事实上Merkle Tree可被用于组织任何数据条目。在连弩挖矿的设计中,矿工M可以同时生产多个分组的区块,并将这部分分组的区块头部用Merkle Tree组织起来,结合Root及其他有关参数进行统一的挖矿计算,一旦找到符合任一分组挖矿困难程度需要的解,就可以立马上「挖矿结果、Merkle Tree路径、分组区块 」广播到该分组的点对点互联网,并继续实行挖矿运算,以求取符合其他分组困难程度需要的解。不同分组的挖矿困难程度最后会收敛到同等级别,由于在各个分组区块奖励相同的状况下,算力资源势必优加入挖矿困难程度低的分组中实行挖矿以获得最高收益,这势必会抹平不同分组的挖矿困难程度差异。因此连弩挖矿有非常大的概率“不连弩”,可能只找到一个有效解即可同时满足所有分组的挖矿困难程度需要。

Monoxide的可选优化项:在Monoxide系统中,矿工节点大概率会加入所有分组的点对点互联网中,并存储所有分组的区块数据。而对于不实行挖矿运算、但需要实行数据验证的的分组全节点来讲,也需要加入所有分组互联网,以获得其他分组的区块头部数据,不然将没办法验证接力买卖的合法性,这是不太适当的。可以考虑用N+1的分组策略解决这个问题:额外打造1个公共的点对点互联网,用于广播所有分组的区块头部数据,任一分组的全节点仅需加入2个互联网:自己分组互联网与这个公共互联网,这就很大地简化了原先的N个分组之间的N*/2个双边关系。

对Monoxide的什么时间改进(或改造)考虑

1)Monoxide根据竞价推广账户地址的前k个比特,划分出2^k个分组。而我觉得可以有其他的可选分组策略:让用户自主选择一个共识组,用这个共识组的编号作为前缀修饰我们的地址,譬如XYZ.abcdefg,XYZ是分组编号,abcdefg是用户通过公钥计算出的通用地址。整个系统可依据进步状况,逐步增加新的共识组,而不需要提前规划好一个固定的共识组数目。如此也有益于钱包商部署我们的全节点,由钱包商APPx生成的地址,可以划归到APPx前缀下,譬如XYZ.APPx.abcdefg,像每一个银行账号都有该银行的固定前缀一样。钱包商APPx将我们的用户全部划归到XYZ共识组下,可更便捷地部署运维全节点,更好地为用户提供查看与买卖广播服务。

2)Monoxide拥有我们的智能合约编程模型Oxidation,但我不太喜欢这个模型。因此我进行了一些脑洞考虑:既然Monoxide使用了异步共识组的分片机制,则可将所用智能合约独立编址,划分到专用的一个或多个特殊共识组中,可称其为「图灵共识组」,可更便捷地处置用户与用户之间的转账,与用户与合约之间的交互。一般共识组可以使用UTXO模型,而图灵组可使用Account-Balance(Key-Value)模型。譬如下图中的紫色的ACZ8为图灵共识组,专门负责实行智能合约,每个用户一般竞价推广账户除去在我们的共识组中有余额,在图灵共识组中可能也会有余额(由于智能合约在实行过程中会给某些有关竞价推广账户存款,其额度可能很小)。因此可以让图灵共识组中的对应余额需要积累到肯定数额后清零,然后才能生成接力买卖,并广播到该竞价推广账户所属的一般共识组中去,以显著降低图灵组与其他分组的交互次数。图灵组也会使用PoS、DPoS、PBFT之类的共识,而不使用PoW,并且最好拥有状况最后性,而不是概率最后性,如此更有益于设计和达成高效的DAPP。

上一篇:共识技术剖析系列1、ALGO币 共识算法 下一篇:没有了

Copyright © 2002-2021 okcoin比特币交易平台 (http://www.chinadovey.com) 网站地图 TAG标签