

TrueBit白皮书解读 - 元家昕 - 简书
source link: http://100000p.com/article/2c9f60ef674170bc016743e1f7310000?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

以太坊可以被描述为一个使用区块链的分布式全球计算机。它允许开发者把代码上传到区块链中,矿工共同执行并确保结果的正确性,作为报酬,开发者需要付出一定量的以太币,称为gas。以太坊通过全网验证的办法保证智能合约的正确执行,保证了安全性,作为代价,需要付出大量的算力,驱动这么一台巨型机器,所需gas价值不菲。
TrueBit是区块链链外扩容的方案之一,正如它的口号Fuel your imagination一样,其设计初衷是解决以太坊智能合约的gas限制。
TrueBit基本原理很简单:
用户上传自己所需执行的代码,某个外包商代为执行并赚取佣金,其它人监督代码执行的正确性,以太坊通过智能合约作为终极仲裁,奖善罚恶。造假者会获得经济惩罚,所以在绝大多数情况下,外包商会诚实的执行代码并提供正确的结果,链上节点无需完整验证,从而大大减轻了链上的计算负担,也就节省了用户的gas消耗。
流程如下:
1. 用户(下文称为Task Giver)上传需要执行的代码(下文成为任务),并提供佣金。 2.链外第三方(下文称为Solver)发现这个任务,认为佣金可以接受,执行计算任务并答公示运算结果,同时提供一笔保证金。 3.另外的第三方验证者(下文称为 Verifier)重新执行任务,如果发现Solver造假,可以发起挑战,同样需要提供一笔保证金。 4.通过链上的智能合约让Solver和Verifier玩一个验证游戏( verification game),通过Task Giver在链上提供的执行代码验证答案真伪,提供正确答案的一方获取佣金,造假的一方从保证金中支付整个验证过程所需的gas。 5.如果一段时间内没有人能提供证据证明Solver造假,Solver获得佣金。
注意在上述过程中,佣金可以设置成比正常在链上执行所需的gas少,保证金则至少设置为足以完整在链上执行该智能合约。
如果你只是想了解一下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©轮协商最终定位出问题点
通过上述方法,可以有效的减少发生争议时的链上计算量,也就间接解决了矿工的验证者困境问题,当然它付出的代价是需要更长的时间解决争议。
第二个问题涉及到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根据块哈希和手中的随机数解签两个答案中的一个 3.Verifier校验Solver提供的答案,并提出挑战 4.Solver提供手上随机数证明是系统“Forced error” 5.Verifier获得Jackpot,Solver免受惩罚
Jackpot的资金来源于任务的佣金,从所有任务的佣金中抽取一部分放到奖金池子中,称为税收,每次中奖的Verifier获取池子里部分奖金。合理设置税收和中奖比例,可以保证Verifier有利可图,从而维持生态圈健康运作。税收和中奖比例高,会增加Verifier的数量,提高系统安全性,但相应的,会损害Task Giver的积极性;反之,节省Task Giver成本的同时会降低系统整体安全,最终也是一个trade-off。
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK