这篇文章通过提出对块有效性和分叉选择规则的更改,概述了协议内跨分片消息传递系统。 这是CBC Casper分片提案的一部分,但可以轻松应用于Eth2.0的后续阶段。 对此的描述可以在CBC Casper草案第3部分4.6中找到。
1.目标
Eth2.0在协议外支持跨分片消息传递,这意味着用户必须手动执行一些操作才能传递跨分片消息。 该协议处理从分片链到信标链的交易收据的传递,并且用户必须在引用该收据的接收者分片上创建交易。
目的是要有一个协议来处理跨分片消息的端到端传递,在该协议中,用户只需要在第一条分片链上生成一个事务即可。
2.提案
2.1.区块结构
区块现在包含2个新日志,每个都包含一个用于发送消息(在此区块中)和已接收消息(在此区块中)的日志。
2.2.消息
消息是包含以下内容的对象:
– sender_shard_ID
– recipient_shard_ID
– final_destination_shard_ID
– target_block on the recipient shard
– blocks_to_live parameter
– payload_tx
任何跨分片消息都必须进行2跳-分片A到信标链,信标链到分片B。sender_shard_ID和receive_shard_ID用于特定跳,而final_destination_shard_ID标识分片B。
可以在高度为(target_block)+1到高度(target_block)+ blocks_to_live的接收方分片中的块中接收消息。
在上图中,target_block为b2,blocks_to_live为2。此消息只能在块b3和b4中接收。
2.3.区块有效性和分叉选择
需要保持发送和接收的原子性;要么消息在发送方shard中发送并在接收方shard中接收(最终),要么消息不会出现在任何地方。
我将跳过一些显而易见的消息,例如:每个消息只能接收一次,链只能接收发给自己的消息,等等。
2.3.1.分片链
分片链分叉选择遵循信标链叉选择,并且这些修改强制执行send-receive的原子性:
1. 如果信标链发送分片某条消息,则target_block在分片链上的分叉中选择。
2. 如果信标链从分片接收到某些消息,则发件人块位于分片的分叉选项中。
3. 如果信标链在到期时仍未收到分片链消息,则发件人的区块在分片中将成为孤块。
4. 任何尚未通过blocks_to_live到期接收到尚未收到的消息的分片链块都是孤块。
下图说明了第一条规则:
下图说明了第二条规则:
2.3.2.信标链
信标链块有效性规则强制将块中接收的消息立即重定向并发送到最终目的地。 如果消息在区块的接收日志中,则该消息还必须出现在区块的发送日志中,并带有:
· sender_shard_ID标识信标链
· receive_shard_ID作为接收到的消息的final_destination_shard_ID
· 收件人分片上适当的target_block和blocks_to_live
由于分片链分叉选择取决于信标链分叉选择,因此,信标链分叉选择必须遵循以下规则,以避免分片混乱
信标链不能从分片的一个分叉发送/接收,也不能从分片的冲突分叉发送/接收。(“发送到fork”指包含目标块的fork)
该分叉选择规则的目的是避免出现以下情况:
3.消息如何在分片之间传输?
由于验证者的分布方式,消息自然可以从信标链发送到分片/从分片发送到信标链:
· 从信标链到分片链的消息会被分片上的所有验证者看到,因为它们也是信标链上的验证者。 分片链上的验证器还具有执行分叉选择的所有必要信息。
· 从分片发送到信标链的消息由相应的分叉链接委员会收集,并包含在信标链的交叉链接信息中。 重要的是要注意,并非所有信标链验证器都可以访问执行信标链分叉选择和区块有效性规则所需的信息。 要求是,如果违反了规定的规则,分片链上的验证者中至少有一个提供欺诈证据。