交互式证明的思路是让 A 和 B 参与一个由 L1 合约引导的回合制协议,使用任何 L1 合约所需的最小开销来解决他们之间的分歧。
A 的方法基于对争议的剖析。如果 A 的断言涉及了 N 个执行步骤,那就让她曝光出两个各涉及 N2 个步骤的断言,然后让 B 选择一个来挑战。这样一来,争议的规模就缩小了一半。这个过程持续进行,每一回合都将争议的规模缩小一半,直到争议的范围变成一个执行步骤。注意,直到此时为止,L1 引导合约都不必考虑际上执行了什么。仅当争议被缩小到单个执行步骤时,L1 引导合约才需要理解这一步要执行什么指令,以及 A 对该步的断言是否为真,以此解决争议。
交互式证明背后的关键原理是,如果 A 和 B 有所争议,A 和 B 应尽可能做链下的工作来解决争议,而不是让 L1 合约承担负担。
重执行交易
另一个方案是,让一个 R 区块在区块内每一笔交易后附带一个状态哈希值断言。然后,在争议情形中,L1 引导合约将模拟一整笔交易的执行,看结果是否与 A 的断言一致。
在悲观情形下,交互式证明的效率也更高:如果出现了争议,L1 引导合约只需检查 A 和 B 的操作 “在往正确的方向走”,比如 A 确把 N 步骤的断言拆成了两个针对一半步骤的断言。(引导合约需去计算 A 断言的正确性,B 会做,在链下做。)只需要重新执行一个指令。相反,在重执行交易模式下,L1 引导合约需要模拟一整笔交易的执行。
更高的交易级 :交互式证明可以摆脱以太坊对单笔交易 G L 的限制;即使一笔交易 消耗量太大、法放进以太坊区块内,也仍有可能可以放进 A 的区块内。R 的 G L 当然也不可能是限的,但仍可以做到比以太坊主链所容许的大得多。就以太坊而言,大 容量的 A 交易的唯一缺点是它可能需要运行更多的交互步骤(这个也仅仅是在有所争议的情况下)。相反,重执行模式下的 交易, 必须小于以太坊的区块 G L,否则就没法在一笔以太坊交易内模拟执行完这笔交易了(而且模拟执行比起在以太坊中直接执行, 消耗量还要更大)。
合约大小没有限制:交互式证明需为每一个 L2 合约创建一个以太坊合约,所以也不要求合约符合以太坊合约的限制。对于 A 的争议合约来说,在 L2 上部署一个合约的操作也是一系列计算过程的组合,与别的操作没有区别。相反,重执行模式下,L2 合约的大小比以太坊主链上所能容许的还要小,因为要模拟一个合约的执行需要能够仿制()这个合约,而仿制的代码必须能够放进一个以太坊合约内。