曌链MIT核心技术之跨分片—Cross Sharding区块链

MIT 2018-09-10 15:29
分享到:
导读

曌链MIT跨分片合约以曌链MIT的多级名字空间机制作为基础,这种解决方式是直观显而易见的,而别的区块链项目因为没有多级名字空间这个基础设施,无法应用该方案。

image.png

跨分片合约难点

跨分片合约的难点在于:一个分片对于共同访问的状态的修改,需要及时地让另一个分片知道,否则就容易出现状态错乱。任何支持合约的分片技术,都必须要解决这个问题。目前业界大致有以下几种方案:

第一种方案:让发出交易的客户端主动维护一致性,典型的就是Omniledger。客户端负责驱动这个过程,避免分片之间的协议通信。优点是分片协议不用考虑维护一致性的问题,技术简单,且避免了分片之间一致性协议的开销。缺点显而易见,没法做到交易丢出去不管,客户端在这个过程中必须保持运行。另外,客户端去做这个事,真的安全么?实际上这个方案很难为业界所接受。我更倾向于认为,由于分片机制不完善,解决不了状态一致性而强行打的补丁。

第二种方案:基于trace对交易进行标注,典型的就是Chainspace。交易注入到网络中之前,先模拟trace,并以此标注出可能与其他交易冲突的地方,然后再根据这些冲突发到相关的分片中处理,相关的分片之间再用S-BAC去共识。这种方法,我想应该还是不能完全依照trace,还必须在代码层面进行标注,否则一个if/else语句在trace环境和实际环境下就可能走向了截然不同的分支。另外每一个交易可能的冲突都要相关的分片之间去跑一轮共识,一个分片如果牵涉到很多个这样的交易,那每一次就要跟不同的分片跑很多个这样的共识。

第三种方案:交易分裂,典型的就是Ethereum。首先要说明的是,这种方式交易只能类似于币的转移这种,从一个分片中的地址,转移到另一个分片中的地址。合约内部状态是不能共享的,必须要保证每个分片的状态是私有的。具体的做法就是将这个币的转移过程切开,分成币的发送 币的接受,并且在不同的共识周期中完成。具体在Ethereum中的话,在一个共识周期中,分片中的地址发送币,并在主链中产生一个收据,然后在下一个共识周期中,另一个分片中的地址依据这个收据接受币。看起来简单,然而并非如此,可以用火车和旅馆问题来比喻。你要去另一个城市玩,要定火车票,还要定旅馆。倘若你定了火车票,但是旅馆没订到,那就麻烦了;倘若你旅馆订到了,但是火车票没订到,你也麻烦了。要么都订到,要么都没订到,那才是良好的状态。问题产生的原因就是交易分裂到多个共识周期,破坏了原子性。Ethereum目前在这一块还处于初步的理论研究阶段,计划在分片的第四期中实现。

曌链MIT跨分片合约

具体做法就是,将跨分片的交易在他们的父级分片中处理。以曌链MIT的多级名字空间机制作为基础,这种解决方式是直观显而易见的,而别的区块链项目因为没有多级名字空间这个基础设施,无法应用该方案。这种方案实现相对简单,稳定可靠,可以支持的交易比较灵活,适应面广,并且只需要一个共识周期就可以确认。但是,这种方案一个明显的缺点就是,父级分片存在处理压力的汇聚问题,越是上级的分片对吞吐率的要求越高。曌链MIT的解决方案是鼓励交易尽量在低层分片解决。一方面,多级分片结构具有过滤作用,需要处理的分片比例随着分片层级的升高而越来越低。需要说明的是:名字空间非常有利于数据的局部性,类似于CPU的缓存;而Ethereum那种按照地址前缀分配分片的做法,数据完全是随机的,没有局部性。另一方面,越上级的名字空间处理费用越高,通过经济激励手段让合约只在必要的时候才跨分片,只在非常必要的时候才跨高层次的分片。

image.png

图1:曌链MIT跨片示意图

跨分片消息传递

每个实体都有一个URN,结构是 : <protocol_id>:<shard_path>/<public_key_fingerprint>.

每个实习都有一个通过公钥来识别身份的邮箱. RChain分片是通过channel实现的.

每个分片都运行着一个Mailman合约来路由消息.

每条消息都包含这三个字段: destination, signature & payload

描述

同一个分片的消息传递

Mailman从消息中提取到destination,然后发送到目标邮箱

准备跨分片消息

在消息发送到其他分片前要经过共识,发送消息的意图将存储在块链中,并且只有在块完成后才发送。

image.png

图2:曌链MIT跨片消息传递

子分片到父分片交易

向父分片发送消息的总结如下:

1、就发送消息到父分片的决定达成共识;

2、validators签名然后把消息发送给父分片;

3、消息需要至少k个validators的签名;

4、获得k个签名之后,消息存储在区块链中;

5、共识达成之后,进行下一步;

image.png

图3:向父分片发送消息流程图

父分片向子分片交易

传输过程如下:

1、就发送消息的决定达成共识;

2、子分片的validators作为父分片的客户端,收到了这条消息;

3、子分片的validators在子分片的区块链上存储这条消息;

4、共识达成之后进行下一步动作;

image.png

图4:向子分片发送消息流程图

散列锁托管转移(Hash-locked escrow transfer)

爱丽丝和鲍勃要通过代币P来交易货物,他们需要以下的一个交易机制来保证:

1、爱丽丝拥有代币P有效

2、在交易过程当中,代币P在爱丽丝的账户金额当中锁定,并且不能被其他交易使用

3、当得到了K次确认之后,交易执行成功

4、交易被取消的话,如果时间少于T,则代币会归还到爱丽丝的账户当中

image.png

图5:散列锁托管转移流程图

相关名词解释

Shard  - 有自己的一组验证人的独立网络节点群;

Shard tree - 分片的结构;

Neighbour shards - 相邻的分片;

Mailman - 发送消息给别的分片的智能合约;

Mailbox - 存储消息. 也是分片的客户端;

Address - 多分片的环境里的实体的唯一标识. 包括分片id和公钥;

Mint - 在分片当中创建和销毁Token的智能合约;

Depository - 存储子分片当中的Token余额的智能合约;

image.png

分片 交易 消息 共识 发送
分享到:

1.TMT观察网遵循行业规范,任何转载的稿件都会明确标注作者和来源;
2.TMT观察网的原创文章,请转载时务必注明文章作者和"来源:TMT观察网",不尊重原创的行为TMT观察网或将追究责任;
3.作者投稿可能会经TMT观察网编辑修改或补充。