TrueBit是链下计算扩容的通用框架。TrueBit的白皮书下载地址:
https://people.cs.uchicago.edu/~teutsch/papers/truebit.pdf。
TrueBit白皮书的简介指出比特币网络和以太网络拥有人类历史上最强大的计算资源,却提供了和智能手机差不多的计算能力。TrueBit尝试通过链下计算扩容的方式改变这样的窘境。TrueBit由两层系统组成:纠纷解决层和经济奖励层。经济激励层建立在纠纷解决层之上。TrueBit又称“纠纷解决层”为“验证游戏”(Verification Game)。
本文详细解释TrueBit的两层设计以及整体的协议交互流程。
1)验证纠纷解决层
链下计算的核心是如何证明链下计算的正确性。TrueBit采用链上存储链下计算证明,并接受验证的方法解决纠纷。纠纷解决层(验证游戏)由三种角色组成:Solver(链下计算提供者),Challenger(验证者,挑战者),Judge(判定者)。Solver提供链下的计算能力,Challenger验证计算结果,可能发出挑战,Judge确保了纠纷解决层的正常运转以及判定Solver/Challenger是否正确。以以太坊为例,Judge可以理解成以太坊的矿工。
1.1) 计算任务以及计算验证
TrueBit中的计算任务(Task)可以用C,C++以及Rust语言实现。在计算任务结果需要验证时,TrueBit采用的是另外的解释器(Lanai):https://github.com/TrueBitProject/lanai。
Lanai is a processor architecture developed by google. The reason it is used for TrueBit is because it is a very simplistic architecture (it is easy to implement an interpreter in Solidity and it does not have complex memory access patterns) and there is an actively maintained compiler from C/C++/Rust to this architecture (llvm).
Lanai是google发明,简单高效的处理器框架。Lanai解释器可以很简单的用Solidity语言实现。LLVM也可以将C/C++/Rust翻译成Lanai。
1.2)验证过程
假设一个计算任务由t个计算步骤组成,每个计算步骤都可以通过s个比特来表示。Solver提供验证信息的时候,将一些计算步骤切分成c等份。
每一轮开始,Solver会将“当前”的计算步骤切分成c等份。每个等份的计算状态用Merkel树表示。Solver会将c份个Merkel树的Root发动到主链上。Challenger如果发现错误,则向主链汇报第一个错误的序号i(i<c)。Judge会检查是否Solver发送了c份Merkel的Root以及Challenger汇报的错误序号是否满足条件。下一轮类似,只是计算步骤在序号i-1和i之间。
很显然,经过logt/logc轮后,具体开始出错的计算步骤就会确定。如果出错的计算步骤为e的话,Solver会提供更详细的信息。Judge计算这些计算步骤,确定Solver还是Challenger正确。
简单的说,Solver和Challenger利用c等份的方法确定具体的出错步骤,Judge计算确定的出错步骤进行判定。
2)经济激励层
为了激励线下计算以及计算的挑战,TrueBit设计了相应的经济激励层。经济激励层由如下一些角色组成:TaskGiver(计算任务提供者),Solver(计算任务计算者),Verifier(计算结果验证者)和 Referees(裁判)。Referees,裁判,类似于验证过程中的Judge,由主链中的矿工担当。针对TaskGiver提供的计算任务,Solver随机挑选,Verifier不做数量的限制。基本的经济模型如下:
2.1 奖金池和验证税费
Verifier的奖励来自奖金池。奖金池是由计算任务提供者提供的计算任务的报酬的抽税。为了避免奖金池变空,Verifier的奖励最大设置成当前奖金池总额的1/3。
2.2 强制错误
为了激励Verifier发现错误,TrueBit强制让有些计算结果出错。强制错误的产生保证了如下的一些属性:a)TaskGiver在提交计算任务时不能预测强制错误。 b)Solver在提交计算结果前不能预测强制错误。 c)Verifier在挑战计算结果后,才知道是否是强制错误。
强制错误的确定取决于两个因素:1)Solver的随机信息 2)提交区块结果的区块Hash值。强制错误的计算是查看上述两个因素合并后信息的hash值是否小于指定阈值。具有强制错误验证的流程如下:
2.3 保证金
为了防止Solver以及Verifier进行女巫攻击,Solver和Verifier加入TrueBit必须缴纳一定的保证金。
3)TrueBit协议流程
3.1预处理流程
a)设置初始奖金池
b)Solver和Verifier提交一定的保证金
c)Solver生成随机信息,并把随机信息的Hash存储在链上
d)设置验证税率
3.2 主流程
a)TaskGiver提交计算任务,设置超时时间(竞选超时,计算超时,验证超时等等),设置奖励金额(包括计算的报酬,税费等等)以及最少的保证金。
b)最多一个Solver被挑选执行计算任务。如果没有Solver选中,TaskGiver取消或者重新发布计算任务。
c)Solver链下执行计算任务。如果计算超时,Solver的保证金没收,加入奖金池。Solver提交“正确”和“不正确”结果的hash到主链。包括这些结果的区块生成后,Solver确定是否是强制错误,选择一个结果的hash作为计算任务的结果hash。
d)具有大于最小保证金的Verifier才能验证计算任务的结果。
d.1) 如果没有验证挑战:如果是强制错误,Solver提交自己的随机信息以及正确的计算结果。Solver获取相应的计算报酬。
d.2) 如果有验证挑战:Solver提交自己的随机信息,Referees确定是否是强制错误。如果是强制错误,Solver必须提交正确的计算结果,待Verifier继续重新验证。如果不是强制错误,如果Solver胜出,Verifier的保证金一半没收到奖金池,一半给Solver。如果Verifier胜出,Solver的保证金最多一半给Verifier(替TaskGiver缴纳税费),其他没收到奖金池。
总结:TrueBit是链下计算扩容。TrueBit由两层系统组成:纠纷解决层和经济奖励层。经济激励层建立在纠纷解决层之上。TrueBit采用链上存储链下计算证明,并接受验证的方法解决纠纷。为了激励线下计算以及计算的挑战,TrueBit设计了计算税费(奖金池),强制错误等机制保障验证者的利益。
网友评论