解读 TrueBit (链下计算方案)白皮书

以太坊可以被描述为一个使用区块链的分布式全球计算机。它允许开发者把代码上传到区块链中,矿工共同执行并确保结果的正确性,作为报酬,开发者需要付出一定量的以太币,称为gas。以太坊通过全网验证的办法保证智能合约的正确执行,保证了安全性,作为代价,需要付出大量的算力,驱动这么一台巨型机器,所需gas价值不菲。

以太坊可以被描述为一个使用区块链的分布式全球计算机。它允许开发者把代码上传到区块链中,矿工共同执行并确保结果的正确性,作为报酬,开发者需要付出一定量的以太币,称为gas。[以太坊](https://learnblockchain.cn/2017/11/20/whatiseth/)通过全网验证的办法保证智能合约的正确执行,保证了安全性,作为代价,需要付出大量的算力,驱动这么一台巨型机器,所需gas价值不菲。 ## TrueBit 原理 **TrueBit**(链下计算) 是区块链链外扩容的方案之一,正如它的口号`Fuel your imagination`一样,其设计初衷是解决[以太坊](https://learnblockchain.cn/2017/11/20/whatiseth/)智能合约的gas限制。 `TrueBit`基本原理很简单: 用户上传自己所需执行的代码,某个外包商代为执行并赚取佣金,其它人监督代码执行的正确性,以太坊通过[智能合约](https://learnblockchain.cn/2018/01/04/understanding-smart-contracts/)作为终极仲裁,奖善罚恶。造假者会获得经济惩罚,所以在绝大多数情况下,外包商会诚实的执行代码并提供正确的结果,链上节点无需完整验证,从而大大减轻了链上的计算负担,也就节省了用户的gas消耗。 流程如下: 1. 用户(任务提交者,下文称为`Task Giver`)上传需要执行的代码(下文成为任务),并提供佣金。 2. 链外第三方(计算方 下文称为`Solver`)发现这个任务,认为佣金可以接受,执行计算任务并答公示运算结果,同时提供一笔保证金。 3. 另外的第三方验证者(下文称为 `Verifier`)重新执行任务,如果发现`Solver`造假,可以发起挑战,同样需要提供一笔保证金。 4. 通过链上的智能合约让`Solver`和`Verifier`玩一个验证游戏( verification game),通过`Task Giver`在链上提供的执行代码验证答案真伪,提供正确答案的一方获取佣金,造假的一方从保证金中支付整个验证过程所需的[gas](https://learnblockchain.cn/2019/06/11/gas-mean/)。 5. 如果一段时间内没有人能提供证据证明`Solver`造假,`Solver`获得佣金。 注意在上述过程中,佣金可以设置成比正常在链上执行所需的gas少,保证金则至少设置为足以完整在链上执行该智能合约。 如果你只是想了解一下`TrueBit` ,阅读到这里就可以结束了。 ## TrueBit 的精妙 如果你想知道TrueBit真正精妙之处,现在才刚刚开始。 在这个系统中,我们仍然需要解决两个问题。 ### 分段计算 第一个问题被称为**验证者困境**,TrueBit设计的目标之一是**要解决验证者困境问题**。 我们知道,pow挖矿会对出矿的矿工给予奖励,而负责校验的矿工则没有任何收益。这在一般的交易场景下没有问题,因为校验矿工所付出的算力很有限。但是如果涉及到比较复杂的智能合约,验证矿工就面临一个两难的选择: 1. 老老实实地完整执行脚本会白白浪费宝贵的算力,在下一区块的竞争中输在了起跑线上; 2. 直接通过校验并加到链上,节省了算力,但是有站错队的可能,在后续的竞争选择了一个错误的跑道。 上述`TrueBit`流程里,当`Solver`和`Verifier`发生争执时,以太坊充当仲裁法庭的角色,链上需要重新执行用户提供的智能合约,此时,验证矿工同样面临上述的两难困境。 `TrueBit`采用的方法是计算分段,先把整个计算过程分成t段,定位出`Solver`和`Verifier`发生争议的最早一段代码,那么仲裁者只要执行这一段代码即可判别真伪,链上执行的计算可以减少为原来的1/t。 那么,接下来的问题就是怎么找到这段问题代码。TrueBit采用了分段查找的办法,我们举个栗子说明: > 1. `Solver`选择`C`,把t段计算均匀分成C份,下图中我们以`C=5`作为例子 > 2. `Solver`把参数`C`和每一段计算后的图灵状态哈希后上链 > 3. `Verifier`根据`C`执行同样的过程,比对哈希,找到最早发生不一致的位置,比如说下图的第四段 > 4. 递归上述流程,经过`log(t)/log(C)`轮协商最终定位出问题点 ![TrueBit 计算分段](https://img.learnblockchain.cn/2019/15567073119704.png) 通过上述方法,可以有效的减少发生争议时的链上计算量,也就间接解决了矿工的验证者困境问题,当然它付出的代价是需要更长的时间解决争议。 ### 累积奖金机制 第二个问题涉及到**Verifier的生态设计** 因为`TrueBit`的惩罚机制,绝大多数`Solver`都会提供正确的执行结果,这样会导致一个结果就是`Verifier`无利可图。`Verifier`在整个生态里是保证安全性的重要一环,如果没有人愿意充当这个角色,会破坏整个系统的安全性。 为了保证生态,`TrueBit`设计了一个称为**累积奖金(`jackpot`)的机制**。 基本原理就是,系统随机选择部分提案,要求`Solver`给出错误的答案(称为forced error),当有`Verifier`提出挑战时,`Solver`不会受到惩罚,而`Verifier`则会获得`Jackpot`作为奖励。 这个随机选择方法需要满足下面几个条件: 1. `Task Giver`不能在提交任务之前知道选择的结果,防止人为刷奖励 2. `Solver`不能在提交答案之前知道选择结果,防止`Solver`偷懒跳过正确答案的计算 3. `Verifier`不能在发起挑战前知道选择结果,防止`Verifier`选择性验证 `TrueBit`给出的答案就是通过两个因子来决定随机选择结果,一个因子是**Solver选择的私密随机数**,只有在被挑战时才会公示,另一个是**Solver提交答案后下一区块的哈希**。通过后者,可以保证所有人在Solver提交答案前知道选择结果,也就是上述1、2点,通过前者,可以保证上述第3点。 整个流程如下: 1. `Task Giver`创建任务 2. `Solver`执行计算,同时提供一个正确的答案和一个错误的答案,但不展示 3. 两个答案上链以后,`Solver`根据块哈希和手中的随机数解签两个答案中的一个 4. `Verifier`校验`Solver`提供的答案,并提出挑战 5. `Solver`提供手上随机数证明是系统“Forced error” 6. `Verifier`获得`Jackpot`,`Solver`免受惩罚 `Jackpot`的资金来源于任务的佣金,从所有任务的佣金中抽取一部分放到奖金池子中,称为税收,每次中奖的`Verifier`获取池子里部分奖金。合理设置税收和中奖比例,可以保证`Verifier`有利可图,从而维持生态圈健康运作。税收和中奖比例高,会增加`Verifier`的数量,提高系统安全性,但相应的,会损害`Task Giver`的积极性;反之,节省`Task Giver`成本的同时会降低系统整体安全,最终也是一个`trade-off`。 原文链接:https://www.jianshu.com/p/84b476a1624e

以太坊可以被描述为一个使用区块链的分布式全球计算机。它允许开发者把代码上传到区块链中,矿工共同执行并确保结果的正确性,作为报酬,开发者需要付出一定量的以太币,称为gas。以太坊通过全网验证的办法保证智能合约的正确执行,保证了安全性,作为代价,需要付出大量的算力,驱动这么一台巨型机器,所需gas价值不菲。

TrueBit 原理

TrueBit(链下计算) 是区块链链外扩容的方案之一,正如它的口号Fuel your imagination一样,其设计初衷是解决以太坊智能合约的gas限制。

TrueBit基本原理很简单:

用户上传自己所需执行的代码,某个外包商代为执行并赚取佣金,其它人监督代码执行的正确性,以太坊通过智能合约作为终极仲裁,奖善罚恶。造假者会获得经济惩罚,所以在绝大多数情况下,外包商会诚实的执行代码并提供正确的结果,链上节点无需完整验证,从而大大减轻了链上的计算负担,也就节省了用户的gas消耗。

流程如下:

1. 用户(任务提交者,下文称为Task Giver)上传需要执行的代码(下文成为任务),并提供佣金。

  1. 链外第三方(计算方 下文称为Solver)发现这个任务,认为佣金可以接受,执行计算任务并答公示运算结果,同时提供一笔保证金。
  2. 另外的第三方验证者(下文称为 Verifier)重新执行任务,如果发现Solver造假,可以发起挑战,同样需要提供一笔保证金。
  3. 通过链上的智能合约让SolverVerifier玩一个验证游戏( verification game),通过Task Giver在链上提供的执行代码验证答案真伪,提供正确答案的一方获取佣金,造假的一方从保证金中支付整个验证过程所需的gas。
  4. 如果一段时间内没有人能提供证据证明Solver造假,Solver获得佣金。

注意在上述过程中,佣金可以设置成比正常在链上执行所需的gas少,保证金则至少设置为足以完整在链上执行该智能合约。

如果你只是想了解一下TrueBit ,阅读到这里就可以结束了。

TrueBit 的精妙

如果你想知道TrueBit真正精妙之处,现在才刚刚开始。

在这个系统中,我们仍然需要解决两个问题。

分段计算

第一个问题被称为验证者困境,TrueBit设计的目标之一是要解决验证者困境问题

我们知道,pow挖矿会对出矿的矿工给予奖励,而负责校验的矿工则没有任何收益。这在一般的交易场景下没有问题,因为校验矿工所付出的算力很有限。但是如果涉及到比较复杂的智能合约,验证矿工就面临一个两难的选择:

  1. 老老实实地完整执行脚本会白白浪费宝贵的算力,在下一区块的竞争中输在了起跑线上;
  2. 直接通过校验并加到链上,节省了算力,但是有站错队的可能,在后续的竞争选择了一个错误的跑道。

上述TrueBit流程里,当SolverVerifier发生争执时,以太坊充当仲裁法庭的角色,链上需要重新执行用户提供的智能合约,此时,验证矿工同样面临上述的两难困境。

TrueBit采用的方法是计算分段,先把整个计算过程分成t段,定位出SolverVerifier发生争议的最早一段代码,那么仲裁者只要执行这一段代码即可判别真伪,链上执行的计算可以减少为原来的1/t。

那么,接下来的问题就是怎么找到这段问题代码。TrueBit采用了分段查找的办法,我们举个栗子说明:

  1. Solver选择C,把t段计算均匀分成C份,下图中我们以C=5作为例子

  2. Solver把参数C和每一段计算后的图灵状态哈希后上链

  3. Verifier根据C执行同样的过程,比对哈希,找到最早发生不一致的位置,比如说下图的第四段

  4. 递归上述流程,经过log(t)/log(C)轮协商最终定位出问题点

解读 TrueBit (链下计算方案)白皮书插图

通过上述方法,可以有效的减少发生争议时的链上计算量,也就间接解决了矿工的验证者困境问题,当然它付出的代价是需要更长的时间解决争议。

累积奖金机制

第二个问题涉及到Verifier的生态设计

因为TrueBit的惩罚机制,绝大多数Solver都会提供正确的执行结果,这样会导致一个结果就是Verifier无利可图。Verifier在整个生态里是保证安全性的重要一环,如果没有人愿意充当这个角色,会破坏整个系统的安全性。

为了保证生态,TrueBit设计了一个称为累积奖金(jackpot)的机制

基本原理就是,系统随机选择部分提案,要求Solver给出错误的答案(称为forced error),当有Verifier提出挑战时,Solver不会受到惩罚,而Verifier则会获得Jackpot作为奖励。

这个随机选择方法需要满足下面几个条件:

  1. Task Giver不能在提交任务之前知道选择的结果,防止人为刷奖励
  2. Solver不能在提交答案之前知道选择结果,防止Solver偷懒跳过正确答案的计算
  3. Verifier不能在发起挑战前知道选择结果,防止Verifier选择性验证

TrueBit给出的答案就是通过两个因子来决定随机选择结果,一个因子是Solver选择的私密随机数,只有在被挑战时才会公示,另一个是Solver提交答案后下一区块的哈希。通过后者,可以保证所有人在Solver提交答案前知道选择结果,也就是上述1、2点,通过前者,可以保证上述第3点。

整个流程如下:

  1. Task Giver创建任务
  2. Solver执行计算,同时提供一个正确的答案和一个错误的答案,但不展示
  3. 两个答案上链以后,Solver根据块哈希和手中的随机数解签两个答案中的一个
  4. Verifier校验Solver提供的答案,并提出挑战
  5. Solver提供手上随机数证明是系统“Forced error”
  6. Verifier获得JackpotSolver免受惩罚

Jackpot的资金来源于任务的佣金,从所有任务的佣金中抽取一部分放到奖金池子中,称为税收,每次中奖的Verifier获取池子里部分奖金。合理设置税收和中奖比例,可以保证Verifier有利可图,从而维持生态圈健康运作。税收和中奖比例高,会增加Verifier的数量,提高系统安全性,但相应的,会损害Task Giver的积极性;反之,节省Task Giver成本的同时会降低系统整体安全,最终也是一个trade-off

原文链接:https://www.jianshu.com/p/84b476a1624e

  • 发表于 2018-03-24 20:41
  • 阅读 ( 10907 )
  • 学分 ( 20 )
  • 分类:TrueBit

评论