witnet

作者:扎克-赫斯, Zack Hess https://github.com/zack-bitcoin/amoveo-docs/blob/master/other_blockchains/witnet.md

维特网评论 Witnet是一个专门从事预言机(oracle)的新区块链。他们使用股权证明的共识机制来创建区块。本文将不评估他们的共识机制。我们将假设他们的共识机制是有效的,而只是专注于预言机(oracle)。

Witnet是Bitcoin Hivemind的预言机(oracle)的复制,类似于Augur。比特币Hivemind非常大,很难将其全部装入区块链,同时保持可扩展性。Augur简化了Bitcoin Hivemind,摆脱了SVD步骤,多轮投票被结合起来,更准确地知道谁在撒谎。Witnet以2种方式简化了比特币Hivemind。

  1. 对预言机(oracle)问题的结果进行投票是自动的。人类并不参与。
  2. 它使用随机抽样来选择大约2-6个投票者来决定你的预言机(oracle)的结果。

Witnet的目标是3.2级安全,就像Bitcoin Hivemind和Augur一样,但正如我们将看到的,Witnet实际上是4.2级安全,它不像Augur或Bitcoin Hivemind那样安全。 在此了解安全级别

为了在商业上可行,区块链预言机(oracle)系统至少需要达到2.2级安全。Amoveo是迄今为止唯一实现这一目标的区块链预言机(oracle)。

贿赂投票者 #

引自Witnet白皮书。“如果实体预先宣布投票给一些虚假的要求,并承诺向投票给同样要求的人提供贿赂,这种贿赂大于他们从讲真话中得到的回报,并且大多数参与者接受贿赂,那么效果是一样的。然而,我们的协议不给参与者机会揭示或证明他们投票支持的要求的实际价值,从而使这种赌博完全无用。即使参与者接受了贿赂,它仍然可以对DON说实话,对贿赂者撒谎,并同时获得奖励和贿赂。“Witnet是在假设不可能贿赂预言机(oracle)投票者,他们没有提供任何机制来解释这如何可能。

我提供了一个可以在witnet做贿赂的机制。我在Amoveo上做了一个智能合约,里面嵌入了一个witnet light节点,这样它就可以验证witnet区块链上任何数据的默克尔证明。我和一个witnet预言机(oracle)者打了一个赌。赌注在1000个区块内解决,届时,预言机(oracle)者已经透露了他们的投票情况。赌注说,如果在那个时间点,他们能对他们透露了投票情况的witnet上的tx做一个默克尔证明,如果投票是攻击者想要的方式,那么amoveo智能合约中的钱就会给witnet预言机(oracle)者的投票者。否则,攻击者会拿回他的钱。Amoveo智能合约是用来摆脱信任的。在witnet上行贿似乎只不过是一个信任问题。

我给你一个一般的证明,以表明不可能防止攻击者贿赂投票者。

  1. 需要的是,矿工可以选择包括有效TXS的任何子集,否则区块链可能被拒绝发布TXS的人停止。
  2. 矿工在处理完自己的区块后,需要能够计算出新的共识状态。
  3. 结合1+2,需要矿工在处理任何一组有效的txs后都能计算出共识状态。
  4. 它需要的是任何人都可以自由地开始采矿。
  5. 结合3+4,必然是任何人都可以在包括下一个区块中的任何一组有效txs后计算出共识状态。
  6. 因为(5),我们一定可以计算出,如果我们不把其中一个txs包含在它的历史中,区块链的状态会是什么。
  7. 因为(6),必须总是能够证明你的tx对预言机(oracle)的结果产生了什么影响。
  8. 既然可以证明你的tx对oracle的结果产生了影响,那么就可以把这个证明作为证据交给智能合约。
  9. 既然可以向智能合约证明你参与了攻击,那么智能合约就有可能以你是否参与了攻击为条件向你释放贿赂。

这个关于贿赂的错误假设导致Witnet在设计上犯了一个错误。基于信誉投票的预言机(oracle)系统,如Bitcoin Hivemind、Augur和UMA,对于预言机(oracle)投票者被贿赂的可能性,都非常慎重。他们确保投票币的价值大于赌注的价值,这样一来,贿赂投票者就永远不会有利可图,这就是3.2和4.2的区别。

Witnet只是假设贿赂是不可能的。所以他们没有任何保护措施来确保他们的声誉价值高到足以维持3.2级安全。

有人向我建议,这篇博文将解释Witnet对贿赂的解决方案。我将表明这不是一个解决方案。https://medium.com/witnet/anonymizing-commit-and-reveal-transactions-in-decentralized-oracle-solutions-e61067833cd9 Witnet有一些不同的计划,但他们还没有实施,在我看来,这些计划都没有真正解决贿赂的问题。他们可能对防止预言机(oracle)投票者的DOS垃圾信息有帮助。

请记住,如果未来有一天,投票者可以证明他们是如何投票的,那么这意味着有可能贿赂他们。因此,任何防止贿赂的解决方案,都需要是无法证明你是如何投票的,即使你想这样做。

在这篇博文中,他们提出用以下方法解决这个问题:环形签名、时间释放加密、zk-snarks和蒲公英网络。 环形签名只有在参与者想匿名的情况下才有效。它对防止贿赂不起作用,因为投票者是有目的地想放弃匿名来接受贿赂的。他们可以有目的地透露被组合成环形签名(ring signature)的签名数据。 时间释放不起作用,因为最终会有这样的时候:我们知道预言机(oracle)参与者如何投票的结果,那时就可以支付贿赂了。 zk-snark并不能解决这个问题。如果你能做一个zk-snark来证明你是如何参与投票的,那么你可以做另一个zk-snark来证明你是如何向其他人投票的。

蒲公英只是取消了IP-Pubkey的关系,并没有防止贿赂。所以它也没有解决这个问题。

信任单一api的问题。 #

在witnet的一个步骤中,你支付的6台电脑作为一个预言机(oracle),它们都会在差不多的时间点上查询一个API,并将这些数据以tx的形式提供给区块链。例如,如果你在一场足球比赛上下注,witnet投票者节点将同时查询同一个API,以找出比赛结果。这样做的问题是,不管是谁在运行你可以查询足球比赛结果的api,他们可以有选择地发送不同的数据给联系他们服务器的人。他们可以有目的地将错误的数据发送给witnet节点,这样他们就会向witnet区块链提供错误的数据,以这种方式,运行足球比赛结果api的人可以从使用witnet来赌博足球比赛结果的人那里偷窃。

这是Witnet只有4.2而不是像Bitcoin Hivemind那样3.2的第二个原因。

其他问题 #


即使Witnet的预言机(oracle)在有用,我也不会对他们的区块链有多少信心。预言机(oracle)只是金融衍生品系统的一个部分。你还需要可扩展的市场,保证交易以公平的顺序和公平的价格进行匹配。你需要一个可扩展的方式来同时执行大量的这些合同。

witnet对这份文件作出了回应 #

https://gist.github.com/girazoki/98eab6b116fc25e5d4bcd38ee7f0d5f8 看一下贿赂部分,你可以看到他们同意Witnet容易受到贿赂预言机(oracle)投票者的攻击者的攻击。这是对Witnet非常负责任的做法。他们承认自己的弱点,这是想出一个计划来克服这个弱点的第一步。他们暗示,他们将使用一个3.2级的解决方案,就像Augur/比特币Hivemind/UMA一样,投票者币持有者需要在系统中拥有更多的抵押,而不是在一个时刻被保证的投注量。这是令人失望的,我希望他们会使用Amoveo的更便宜和更强大的2.2级解决方案的预言机(oracle)。

看看 “单一来源 “部分,你可以看到他们仍然对一些基本问题感到困惑。只要有一个硬性规定,即哪些公共API将在哪些时间被扫描,那么攻击者就有可能在这些时间点上操纵这些API,使攻击发生。关于我们将在哪些时间使用哪些API的硬规则,正是攻击者进行有效攻击所需要的信息,而这些信息是公开的。这就是为什么预言机(oracle)需要人类的因素。人类可以意识到来源是否被破坏,他们可以推迟解决预言机(oracle)问题,直到答案明确。

一个Witnet团队决定忽视的问题,而不是想出一个对策。即使Witnet有一个能用的预言机(oracle),Witnet也缺乏所需的可扩展的市场,这样我们就可以充分利用预言机(oracle)来进行bet了。如果你不能利用预言机(oracle)进行投注,那就毫无意义。