协议回顾TrueBit 协议的交互验证游戏可以让用户提交(外包)任何计算任务,并且得到一个正确的结果。 TrueBit 降低了其他矿工的冗余验证工作,并且优化了奖励结构。缓解了 Verifier's Dilemma 问题。 Vitalik: 基于 Truebit 构建 optimistic rollup EVMV 神于昨日提出了一种基于 Truebit 构建 Optimistic Rollup EVM 的方案,原文链接,该方案将 Truebit 视为一个黑盒,也就是可以向它输入指令并期待其延迟一段时间后返回结果,基于这样的模型可以构建出 EVM optimistic rollup。 Truebit 可以接受 WebAssembly (WASM)指令,而当前多数的高级语言均可编译为 WASM 字节码,比如 C++、Go、Rust、Java 等,也就是说由这些语言编写的以太坊客户端也可以编译为 WASM 去 Truebit 中执行。如果要基于 Truebit 构建 EVM 的话,第一步就是构建无状态的以太坊客户端。无状态客户端可以这样来实现,将执行区块所需要的状态数据以状态查询表的形式作为输入参数传给客户端执行,这样的客户端本身不需要维护状态,可以抽象为一个纯函数式的方法 process_block(state_lookup_table, block) -> post_state_root ,这样的一个纯函数式、无状态的客户端就可以编译成 wasm 交给 Truebit 去执行了。 第二步就是构建链上的模块,这里有一个难点就是区块链是有状态的。如果在 optimistic rollup 链上第 N 个区块开始执行欺诈证明过程时,有个隐含的前提就是第 N 个区块中 stateRoot 相关的状态数据都是可用的。正因为有了这样的前提,当一个错误区块被提交时,人们才可以第一时间去证明区块错误。但是,Truebit 是一个纯函数式的无状态交互计算系统,我们可以在 Truebit 的调用之外,通过几步交互的验证过程来绕开这样的限制。 方案的流程可以这样来设计: - 链上合约中存储区块哈希以及 stateRoot:
List[Tuple[block_hash, state_root]] 2.定序器(具体有实现者决定,可以一个或多个)负责添加区块,通过调用方法 add_block(expected_pre_state: bytes32, block: bytes, post_state: bytes32) 实现,这个方法需要将执行前的 stateRoot 作为参数传入,然后将 ((block, post_state)) 添加到链上。 3.挑战者(Challenger)可以 challenge 一个 stateRoot,通过调用方法 challenge(index: int, lookup_table: bytes, block: bytes) 实现,这个方法会执行如下的逻辑:- 检查提交的区块与已经保存的哈希值一致
- 进行一次 Truebit 调用
process_block() ,执行区块内容 - 计算并保存查询表的默克尔根
- 一旦一个 challenge 开始了,任何人都可以挑战 challenger 所提供的查询表是错误的,可以通过提交一个 preStateRoot 作为根的 Merkel Path 上一个值,与 challenger 所提供的 Merkel Path 上同样的值作为对比,如果冲突的则说明 challenger 有问题,则对 challenger 进行惩罚。
(责任编辑:admin)
|