引言
作为一个上一轮牛市期间就启动的老牌Layer2项目,Truebit终于在四月底低调上线。随着其代币价格的持续攀升,同时围绕着其特殊的定价机制、TruebitOS套利机会等讨论,Truebit的社区热度也持续升温。本文试图通过对Truebit网络的协议机制、应用场景、经济模型等进行梳理,帮助用户获取项目的全景概览。
此外,我们也会和读者一起对V神最新提出的OptimisticRollupEVM方案一探究竟。
最后,如果你想实践参与到Truebit网络中,别错过文末的贴心指路。
问题背景
目前以太坊有如下问题:
整体吞吐量低。消耗了大量的算力,但是吞吐量只相当于一台智能手机。
验证积极性低。这个问题被称为Verifier'sDilemma。获得打包权的节点得到奖励,其他节点都需要验证,但是得不到奖励,验证积极性低。久而久之,可能导致计算得不到验证,给链上数据安全性带来风险。
计算量受限(gasLimit),计算成本较高。
上面的问题,是由于以太坊全部节点都执行验证这一设计导致的。冗余计算量太高。TrueBit把计算任务的“全部节点冗余验证”设计降低到只在少数几个链下节点上做冗余验证。
协议框架
TrueBit协议包含一个智能合约,用户可以提交一个计算任务给这个智能合约,并且为这个任务一个愿意付出的价格,这些用户被称为TaskGiver;
行情 | ETH五分钟内跌幅达2.68%:据Huobi数据显示,ETH五分钟内跌幅2.68%,下跌金额为3.59USDT,现价为130.62USDT,24小时下跌0.46%,行情波动较大,请注意风险控制。[2019/3/14]
Solver是想完成任务,获取奖励的参与者;Solver交了一些保证金到合约,这样他就有可能被分配到任务;并且通过完成这个计算任务来得到回报。
那么怎么判断Solver给出的结果是否是正确的呢?存在Challenger这个角色来确认Solver给出的结果是否正确,如果发现不正确,那么会通过发起挑战来赢取奖励。合约发现有挑战发生时,会组织一次验证游戏来确认solver和Challenger谁是正确的。
验证游戏
从上一小节协议框架的介绍里可以看出,当出现分歧时,需要进行验证游戏来判断solver和Challenger谁是正确的。这个验证游戏是由智能合约来组织。如果智能合约为此需要付出大量的计算,那么链上运行成本会很高,而且有可能会超过gasLimit。我们的目标是让链上的计算尽可能的少。
目前实现这个目的的方式是:让Solver和Challenger找出双方计算过程中的第一分歧点,从上一个相同点到第一分歧点之间的计算量是很少的,合约内只要执行这一点计算,就可以判断出来谁是正确的。具体协议简述如下
主循环阶段
假定对时间区间t内的计算存在怀疑,把时间t分成c等分,让solver把每个时间点的状态用merkle树表示,树的叶子节点是所有machinestate变量,把c个merkle树根hash提交到合约。
行情 | ETH 五分钟内跌幅1.78%:根据OKEx行情显示:ETH五分钟内跌幅1.78%,下跌金额为5.0241美元,现价为276.9343美元;请密切关注行情走向,注意控制风险。[2018/9/5]
挑战者如果发现第i个时间点的hash,是第一个和他本地计算出来的hash不匹配的时间点。把i提交给合约。
法官检查C个hash和数字i的合法性
下一步把i-1和i之间的时间区间作为怀疑对象,递归重复前面的步骤
确认阶段在一定的递归次数之后,solver提交第一个不匹配时间点e和e-1的全部machinestate,法官验证Solver和Challenger谁是正确的。
大奖机制
Solver给出自己的计算结果,Verifiers做重复计算并验证Solver给出的结果是否正确。这个是正常的运行逻辑。但是这个逻辑会遭遇以下问题。
如果分配验证任务给Verifiers,并且为此支付给他们费用,那么有可能验证者根本不做重复计算,直接附议Solver的结果,这对协议是非常危险的。
如果我们只对验证者发现的错误结果付费,那么他们不确定什么时候才能找到一个错误,实际上,也可能很久都不能发现一个错误,从预期和实践上来看,验证者就没有参与的动力。
如果我们有时**“有意暴露一个错误”**,并且给发现这个错误的验证者一个大的奖励,这样验证者就会不停的验证,试图找到这个错误。这个“有意暴露的错误”叫做"forcederror".整个机制被称为jackpot机制,此机制是17年由以太坊创始人Vitalik设计并加入TrueBit协议。
BTC五分钟内上涨1.01%:BTC五分钟内上涨1.01%,上涨金额为65美元,其中火币PRO上现价为$6567.89。[2018/6/13]
实现和应用场景
实现验证游戏,需要统一InstructionArchitecture.TrueBit项目本来是想使用Lanai架构来实现,但是后来发现Lanai编译器的实现进度缓慢。目前改用了WebAssembly。
这里列举了早期TrueBit规划的应用场景:
外包算力:之前已经介绍的比较多
去中心化矿池:去中心化矿池的优点是防止单点被攻击。可以通过智能合约实现去中心化矿池,但是像验证ZCash的POW这样的工作,超出了gasLimit.通过TrueBit机制就可以克服这一点。帮助实现此类去中心化矿池。
提高“transaction”吞吐量矿工需要做如下事情:task1:选择交易并打包到区块。task2:验证区块里交易的合法性。可以使用一个协议把task2放到链下由Solver和Verifiers来执行。这样可以节省很多重复计算。复杂的"Transaction"可以安全的被放到链上。
协议回顾
TrueBit协议的交互验证游戏可以让用户提交任何计算任务,并且得到一个正确的结果。TrueBit降低了其他矿工的冗余验证工作,并且优化了奖励结构。缓解了Verifier'sDilemma问题。
Vitalik:基于Truebit构建optimisticrollupEVM
BTC五分钟内上涨1.07%:BTC五分钟内上涨1.07%,上涨金额为76美元,其中火币Pro上现价为$7236.09。[2018/5/28]
V神于昨日提出了一种基于Truebit构建OptimisticRollupEVM的方案,原文链接,该方案将Truebit视为一个黑盒,也就是可以向它输入指令并期待其延迟一段时间后返回结果,基于这样的模型可以构建出EVMoptimisticrollup。
Truebit可以接受WebAssembly指令,而当前多数的高级语言均可编译为WASM字节码,比如C、Go、Rust、Java等,也就是说由这些语言编写的以太坊客户端也可以编译为WASM去Truebit中执行。如果要基于Truebit构建EVM的话,第一步就是构建无状态的以太坊客户端。无状态客户端可以这样来实现,将执行区块所需要的状态数据以状态查询表的形式作为输入参数传给客户端执行,这样的客户端本身不需要维护状态,可以抽象为一个纯函数式的方法process_block(state_lookup_table,block)->post_state_root,这样的一个纯函数式、无状态的客户端就可以编译成wasm交给Truebit去执行了。
第二步就是构建链上的模块,这里有一个难点就是区块链是有状态的。如果在optimisticrollup链上第N个区块开始执行欺诈证明过程时,有个隐含的前提就是第N个区块中stateRoot相关的状态数据都是可用的。正因为有了这样的前提,当一个错误区块被提交时,人们才可以第一时间去证明区块错误。但是,Truebit是一个纯函数式的无状态交互计算系统,我们可以在Truebit的调用之外,通过几步交互的验证过程来绕开这样的限制。
BTC五分钟下跌1.44% 48小时新低:BTC正在下跌,五分钟下跌1.44%,一小时下跌2.9%。最低点8800美元,为48小时新低。[2018/5/1]
方案的流程可以这样来设计:
链上合约中存储区块哈希以及stateRoot:List]
定序器负责添加区块,通过调用方法add_block(expected_pre_state:bytes32,block:bytes,post_state:bytes32)实现,这个方法需要将执行前的stateRoot作为参数传入,然后将((block,post_state))添加到链上。
挑战者可以challenge一个stateRoot,通过调用方法challenge(index:int,lookup_table:bytes,block:bytes)实现,这个方法会执行如下的逻辑:
检查提交的区块与已经保存的哈希值一致
进行一次Truebit调用process_block()
执行区块内容计算并保存查询表的默克尔根
一旦一个challenge开始了,任何人都可以挑战challenger所提供的查询表是错误的,可以通过提交一个preStateRoot作为根的MerkelPath上一个值,与challenger所提供的MerkelPath上同样的值作为对比,如果冲突的则说明challenger有问题,则对challenger进行惩罚。
一旦Truebit在一个等待周期以后返回了执行区块的结果post_state_root,则说明challenge是正常的,也就是返回结果是正常执行区块所得的正确结果。然后基于结果正确的假设下,如下的逻辑将会执行:
如果结果与之前提交的post_state_root不一致,而且也不是错误ERROR:LOOKUP_TABLE_MISSING_NEEDED_VALUE,那么challenge就是成功的,原始提交的人将会被惩罚,由其他人继续提交正确的区块和状态数据,以代替错误的区块及状态。
如果结果符合之前提交的post_state_root,或者遇到了错误ERROR:LOOKUP_TABLE_MISSING_NEEDED_VALUE,那么challenger就要被惩罚。
经济模型概览
Truebit的代币是TRU,任务提交者使用该代币为求解者和验证者支付报酬。收到付款后,求解者和验证者便可以开启任务执行。
接下来,我们深入探讨宏观经济细节。
TRU代币供应方式
TRU代币会根据累积需求,随时间而创建及销毁。用户可以通过ETH_购买_或_退出_TRU代币。每笔购买交易都会将一部分ETH存入储备托管库中,而每次出售交易则都会从储备库中提取一部分ETH。每个Truebit任务也会燃烧TRU代币。通过TruebitOS中的_任务费用命令,可以了解当前的_销毁速度_和_代币价格,从而帮助了解TRU的当前购买和退出价。
值得注意的是,购买可能会导致价格下滑,但是退出则不会。
限时激励
Truebit的激励层当前还限时为每个任务提供额外TRU激励,TRU给到该任务相关的所有者,求解者和验证者。在TruebitOS中运行Bonus命令可以检查当前激励数额。
ETH费用
除了上述给“任务提供者”的TRU开销外,用户还将产生一些以太坊费用,主要用以支付与以太坊交互所产生的gas。针对每个任务,Truebit也会向求解者和任务提交者收取少量的ETH作为平台使用费。每个求解者还需要购买一次性许可费才能加入到任务网络中。在TruebitOS中可以通过任务费用指令了解相关的定价。
定价机制
Truebit采用联合曲线模型进行定价,随着需求量上升,代币总量增加,曲线上的价格也同步上升。
社区用户根据实时供应量模拟了总量和价格的关系:
如何早期参到Truebit网络
目前用户可通过提交申请表单来获取Truebit的早期使用资格,用户需要提交的信息包括个人/机构的介绍,Github地址,以及使用Truebit的潜在场景。在提交后,管理员会进行审核并回复。
申请地址如下:
https://truebit.substack.com/p/truebit-early-access
此外,任何关于Truebit的使用和机制讨论,可以在gitter上同开发者进行交流:
https://gitter.im/TruebitProtocol/community
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。