sequencer
- 将交易打包成batch,提交到L1 的合约上 (目前batch里只有一个交易,这也是方便生成证明)
Aggregator (类似proposer)
- 监听L1上的batch提交事件,会把batch交易同步到自己节点,然后发送给zkprover
- 当收到zkprover的有效性证明,以及对应batch执行后的状态提交给L1的polygon zkevm 合约(类似validator)里 (状态谁给的?),实际上你可以把polygon zkevm 合约当做是共识层,因为只有验证通过才能进行下一步。
zkprover
- 接收到Aggregator 发过来的交易后,会为每个batch的每笔交易生成validity proof, 然后将多个batch里的每笔交易的proof聚合成一个新的总的validity proof
- 当聚合了多个batch的validity proof 发送给Aggregator
DAC
Polygon 的cdk validium 是链下保存了交易数据,并没有发布数据到L1,只是整体数据的一个Hash值,所以有个DAC委员会专门验证sequencer提交的交易数据 ,实际就是sequencer提交了一堆交易,DAC需要进行校验是否有不存在的交易,他应该会从交易池中拉取交易,只要验证通过就会对这包交易数据进行签名,使用的事多签,m-out-of-n ,然后会把签名附加到交易数据的哈希值撒好难过,多签合约在L1上,可以验证
Polygon CDK validium 流程
- Sqequncer 收集交易并将其添加到区块中(这个是zkevm 本身的网络区块吗),然后将区块分批放入,同时递归计算其哈希值
- 然后sequncer 将批量数据和相应的哈希值发到DAC,请求签名
- DAC收到后会对每个批次哈希值进行验证并存储在DAC节点的本地数据库里,并为每个批次哈希生成签名
- sequencer收集DAC成员的签名和原始批次哈希,提交到以太坊的多签合约中
- aggregator 会为batch准备证明,然后提交到以太坊