曌链MIT核心技术之跨分片—Cross Sharding区块链
曌链MIT跨分片合约以曌链MIT的多级名字空间机制作为基础,这种解决方式是直观显而易见的,而别的区块链项目因为没有多级名字空间这个基础设施,无法应用该方案。
跨分片合约难点
跨分片合约的难点在于:一个分片对于共同访问的状态的修改,需要及时地让另一个分片知道,否则就容易出现状态错乱。任何支持合约的分片技术,都必须要解决这个问题。目前业界大致有以下几种方案:
第一种方案:让发出交易的客户端主动维护一致性,典型的就是Omniledger。客户端负责驱动这个过程,避免分片之间的协议通信。优点是分片协议不用考虑维护一致性的问题,技术简单,且避免了分片之间一致性协议的开销。缺点显而易见,没法做到交易丢出去不管,客户端在这个过程中必须保持运行。另外,客户端去做这个事,真的安全么?实际上这个方案很难为业界所接受。我更倾向于认为,由于分片机制不完善,解决不了状态一致性而强行打的补丁。
第二种方案:基于trace对交易进行标注,典型的就是Chainspace。交易注入到网络中之前,先模拟trace,并以此标注出可能与其他交易冲突的地方,然后再根据这些冲突发到相关的分片中处理,相关的分片之间再用S-BAC去共识。这种方法,我想应该还是不能完全依照trace,还必须在代码层面进行标注,否则一个if/else语句在trace环境和实际环境下就可能走向了截然不同的分支。另外每一个交易可能的冲突都要相关的分片之间去跑一轮共识,一个分片如果牵涉到很多个这样的交易,那每一次就要跟不同的分片跑很多个这样的共识。
第三种方案:交易分裂,典型的就是Ethereum。首先要说明的是,这种方式交易只能类似于币的转移这种,从一个分片中的地址,转移到另一个分片中的地址。合约内部状态是不能共享的,必须要保证每个分片的状态是私有的。具体的做法就是将这个币的转移过程切开,分成币的发送 币的接受,并且在不同的共识周期中完成。具体在Ethereum中的话,在一个共识周期中,分片中的地址发送币,并在主链中产生一个收据,然后在下一个共识周期中,另一个分片中的地址依据这个收据接受币。看起来简单,然而并非如此,可以用火车和旅馆问题来比喻。你要去另一个城市玩,要定火车票,还要定旅馆。倘若你定了火车票,但是旅馆没订到,那就麻烦了;倘若你旅馆订到了,但是火车票没订到,你也麻烦了。要么都订到,要么都没订到,那才是良好的状态。问题产生的原因就是交易分裂到多个共识周期,破坏了原子性。Ethereum目前在这一块还处于初步的理论研究阶段,计划在分片的第四期中实现。
曌链MIT跨分片合约
具体做法就是,将跨分片的交易在他们的父级分片中处理。以曌链MIT的多级名字空间机制作为基础,这种解决方式是直观显而易见的,而别的区块链项目因为没有多级名字空间这个基础设施,无法应用该方案。这种方案实现相对简单,稳定可靠,可以支持的交易比较灵活,适应面广,并且只需要一个共识周期就可以确认。但是,这种方案一个明显的缺点就是,父级分片存在处理压力的汇聚问题,越是上级的分片对吞吐率的要求越高。曌链MIT的解决方案是鼓励交易尽量在低层分片解决。一方面,多级分片结构具有过滤作用,需要处理的分片比例随着分片层级的升高而越来越低。需要说明的是:名字空间非常有利于数据的局部性,类似于CPU的缓存;而Ethereum那种按照地址前缀分配分片的做法,数据完全是随机的,没有局部性。另一方面,越上级的名字空间处理费用越高,通过经济激励手段让合约只在必要的时候才跨分片,只在非常必要的时候才跨高层次的分片。
图1:曌链MIT跨片示意图
跨分片消息传递
每个实体都有一个URN,结构是 : <protocol_id>:<shard_path>/<public_key_fingerprint>.
每个实习都有一个通过公钥来识别身份的邮箱. RChain分片是通过channel实现的.
每个分片都运行着一个Mailman合约来路由消息.
每条消息都包含这三个字段: destination, signature & payload
描述
同一个分片的消息传递
Mailman从消息中提取到destination,然后发送到目标邮箱
准备跨分片消息
在消息发送到其他分片前要经过共识,发送消息的意图将存储在块链中,并且只有在块完成后才发送。
图2:曌链MIT跨片消息传递
子分片到父分片交易
向父分片发送消息的总结如下:
1、就发送消息到父分片的决定达成共识;
2、validators签名然后把消息发送给父分片;
3、消息需要至少k个validators的签名;
4、获得k个签名之后,消息存储在区块链中;
5、共识达成之后,进行下一步;
图3:向父分片发送消息流程图
父分片向子分片交易
传输过程如下:
1、就发送消息的决定达成共识;
2、子分片的validators作为父分片的客户端,收到了这条消息;
3、子分片的validators在子分片的区块链上存储这条消息;
4、共识达成之后进行下一步动作;
图4:向子分片发送消息流程图
散列锁托管转移(Hash-locked escrow transfer)
爱丽丝和鲍勃要通过代币P来交易货物,他们需要以下的一个交易机制来保证:
1、爱丽丝拥有代币P有效
2、在交易过程当中,代币P在爱丽丝的账户金额当中锁定,并且不能被其他交易使用
3、当得到了K次确认之后,交易执行成功
4、交易被取消的话,如果时间少于T,则代币会归还到爱丽丝的账户当中
图5:散列锁托管转移流程图
相关名词解释
Shard - 有自己的一组验证人的独立网络节点群;
Shard tree - 分片的结构;
Neighbour shards - 相邻的分片;
Mailman - 发送消息给别的分片的智能合约;
Mailbox - 存储消息. 也是分片的客户端;
Address - 多分片的环境里的实体的唯一标识. 包括分片id和公钥;
Mint - 在分片当中创建和销毁Token的智能合约;
Depository - 存储子分片当中的Token余额的智能合约;
1.TMT观察网遵循行业规范,任何转载的稿件都会明确标注作者和来源;
2.TMT观察网的原创文章,请转载时务必注明文章作者和"来源:TMT观察网",不尊重原创的行为TMT观察网或将追究责任;
3.作者投稿可能会经TMT观察网编辑修改或补充。