因为UTXO模型的并发性更好,所以,以太坊分片技术在跨分片通信时,选择了UTXO模型,而不是原来主链里的账户模型。另外,UTXO的防攻击性也比账户模型更好。
未来很可能一个DAPP就占用一个分片,如果这样的话,那么发生在以太坊内部的跨分片通信,未来的主要应用场景很可能就是跨应用通信,前景可期。
当然,以太坊跨分片通信的UTXO模型跟比特币的UTXO模型还是有点区别,因为以太坊这个是通过VMC这个智能合约实现的。我们来看看具体的实现机制。
假如A在分片1,B在分片2,现在A要发送10个以太币给B。
第一步:对于A来说,他并不知道B跟他不是一个分片,所以他跟以前一样,填上B的地址和发送金额10,就发过去了。
第二步:因为A是分片1的地址,所以会发给分片1的矿工(校对器)验证,分片1的矿工检查这笔交易时,发现B和A不是同一个分片,所以没办法像分片内交易一样直接打包处理。
第三步:分片1里创建校对块的那个矿工验证这笔交易确实是A发出,且A有足够的余额后,首先会将A的以太币余额减掉10个,然后会为这笔交易生成一个收据。这个收据的内容是“B可以收到10个以太币”,它会存在分片1的收据树里。另外,这个收据会有一个全局唯一的ID号。其实,这个收据和比特币UTXO模型里的输出本质上是一样的。不同的是,如果是比特币交易,到这里就结束了。
后面等到收款方要用这笔输出里的比特币时,直接构造解锁脚本和该输出对接就行了。但在以太坊这里不行,因为跨分片虽然用的是UTXO模型,但分片内仍是账户模型,而且所有分片的账户状态之和构成以太坊的完整世界状态。
在这个世界状态中,现在A少了10个以太坊,总要有个账户要多出10个以太坊来才说得过去。
第四步:这个校对块最后还会以收据存储信息为参数,调用VMC合约里的某个函数。
第五步:这个函数首先会做以下两项检查:
1、根据参数里的收据存储信息,验证这个收据是否正确;
2、根据这个收据的ID,检查ID数据库(应该是合约里存储了所有的收据ID的使用情况),看看这个ID是否被用了,如果已经被用过,则无效。
第六步:检查通过后,这个函数,或者说这个VMC合约(因为不确定这个函数后面是否又调用了其他函数)会以发起一笔交易,广播给分片2里的校对器。负责打包的那个校对器验证交易合法后,会给B加上10以太币。同时,合约也会将A的那个收据ID标记为已使用,使其不能重复使用。
以上便是“我理解的”跨分片交易的过程,因为分片技术只是尚在以太坊的蓝图规划中,而没有落地,网上能查到的资料比较少,所以,有些细节地方就纯靠自己的“臆测”补上了,如有错误,万望指出。不胜感谢!
网友评论