美文网首页
【以太坊白皮书解读】比特币和以太币对话十三

【以太坊白皮书解读】比特币和以太币对话十三

作者: NO抱怨姐 | 来源:发表于2018-08-12 21:53 被阅读0次

以太币:比特兄,今天可以讲到图灵完备了。

比特币: 行。一提起以太坊,都是说图灵完备,让我们一起看看。

以太币:是的,以太坊的虚拟机是图灵完备的。这意味着虚拟机能够实现任何可以想象的计算,甚至包含无限循环。虚拟机代码允许两种方式的循环。第一种有一个“jump”的指示可以让程序跳回到先前代码的某处。同时允许一个状态为“whilex<27:x=x*2”的“jump1”指令做条件性的跳跃。第二种是合约能互换另外的合约,可以潜在地通过递归循环。

比特币:如果是这样的话,自然会导致一个问题:不怀好意的用户通过迫使矿工和全节点进入无线循环从而关机。这个问题的发生是因为计算机科学的停机问题。一般意义上没有办法知道,一个给定的程序是否会结束运行。

以太币:确实。正如我们在状态转换函数里面提到的。我们的解决办法是要求一个交易有最大限度的计算步骤。如果超过则会恢复的原来状态,但能量/费用还是要支付。消息是用同样的方式工作的。

比特币:为了显示这一个解决办法背后的动机,能否用几个例子说清楚。

以太币:假如一个攻击者创建了一个无限循环的合约,接着发送了一个激活循环的交易给矿工。矿工会运行无限循环处理交易,知道所有能量气体用完。即使这个处理在中途因为能量耗完而停止,交易依然是有效的。矿工依然需要就每步的计算找攻击者要交易费。

比特币:那如果一个攻击者创建了一个非常长的无限循环合约,目的就是迫使矿工一直运算直到结束前其它的若干区块已经产生,这样矿工就没法收录区块获得交易费用。

以太币:可是我们之前有说过,攻击者在发布交易前要有“起始能量”去限制交易的步骤。所有矿工会提前知道大概的运算步骤。

比特币:假如一个攻击者看到包含send(A,contract.storage[A]); contract.storage[A] = 0的合约,接着把只包含运算第一步能量气体的交易发出(即体现但不减少账户余额)。

以太币:实际上这种情况下,合约的作者并不需要担心被这样的攻击者攻击,因为如果执行在半路停止,所有的更改会恢复原状。

比特币:好,考虑的非常周到。那金融合约又是怎样的状况?

以太币:为了最小化风险,金融合约会去9个资料数据发布器的中间值来。一个攻击者接管其中一个数据发布器,并且将它从DAO里面不同地址调用机制改为运行一个无线循环,试图通过任何想要从合约中索要资金的尝试耗尽能量燃料而停止。

比特币:所以同上。金融合约能够通过设置一个信息的能量限制从而预防这种攻击。

以太币:是的。我们接着看看图灵完备吧。

比特币:图灵完备的替代当然就是图灵不完备了。在图灵不完备里面,“jump”和“jump1”是不存在的,而且在给定的时间,每一个合约都只是允许一份拷贝在调用栈堆里。在这样的系统里面,费用系统和我们觉得办法关于利用效率的不确定性可能都是不需要的,因为处理一个合约的成本会和它的大小绑定。

以太币:除此之外,图灵不完备甚至不是一个大的限制。在我们内部设想的所有合约例子。至今为止只有一个需求无限循环。关键这个循环通过26重复的单行代码段可以被移除。

比特币:考虑到图灵完备带来的严重结果以及有限的益处,为什么不简单的就只是由图灵不完备语言了?

以太币:实际上在现实生活中,图灵不完备并不是一个简洁的解决问题的方式。为了更清晰的说明白,可以看下面的合约。

C0:call(C1); call(C1);

C1:call(C2); call(C2);

C2:call(C3); call(C3);

...

C49:call(C50); call(C50);

C50: (run

one step of a program and record the change in storage)

现在给A发送一个交易。这样在51个交易中,我们有个合约要2的50次方的计算步骤。矿工要试着提前检测逻辑炸弹,通过维护每一个合约的价值并具体到最大可能的运算步骤。接着计算合约调用其它递归合约。但是这样需要矿工禁止合约产生其它的合约(由于创建和执行上面的26个合约很容易被收进单个合约)。另外一个问题点是一个消息的地址字段是不同的,大体上提前告知哪个合约会被调用基本不可能。

比特币:所以,这些综合起来。你们得出了一个惊人的结论。图灵完备是很容易管理的。除非很确切的控制发生,要不然缺少图灵完备实际上是非常困难的管理。那为什么不让协议图灵完备了?所以你们就是基于这样的逻辑。

以太币:是的。最终我们采用了图灵完备语言。接着我们说说货币和发行。如你所知,以太坊网络有自己的内置货币,那就是我。以太币。提供了双重的任务。一种是在不同种类的数字资产中提供了有效交换(原始的流动层实现)。另一种是提供了给交易费的机制。

比特币:所以为了便利以及避免将来的争议(可见目前mBTC/uBTC/聪的争论),面值需要提前设置。1:伟  10^12萨博  10^15芬尼 10^18 以太。

以太币:是的,比特兄知道的不少啊。这可以被当做扩展版本的美元,分,比特币或者聪的概念。在不久的将来,我们希望以太币能被用于普通的交易中。芬尼被用在一些微交易中。萨博和伟用于费用和协议的实施中。剩下的面值可能在以后变得有用,暂时不会被包含在客户中。

比特币:那么发行模式又是怎样的?

以太币:这个我们放在明天再说吧。

比特币:行,明天继续。

参考阅读

https://ethfans.org/posts/ethereum-whitepaper

https://github.com/ethereum/wiki/wiki/White-Paper

相关文章

网友评论

      本文标题:【以太坊白皮书解读】比特币和以太币对话十三

      本文链接:https://www.haomeiwen.com/subject/bmeebftx.html