智能合约(非常愚蠢)

不要用智能合约的名称来评判智能合约,它会给您带来错误的想法。 智能合约是根据程序中的规则执行的程序化脚本,但是,到目前为止,它们的名称似乎比其他任何东西都具有更多的含义。 使他们变得聪明的原因在于它们无法被解释:与律师可能会争辩的实物合同不同,这是一个定义明确的过程。 这是由于一组规则由实际的解释器(最常见的是以太坊区块链中的解释器)解释。 我想很快就学究一些,首先要说的是这些合同并没有什么聪明的,它们从这种通用解释器中获得了“智慧”。 如果有多个口译员,那么可能会有多种口译,就好像世界上只有一位律师监督所有合同一样,只会有一个单一的过程。

但是这些合同的真正问题在于它们没有任何故障保险:因为它们是由解释器而不是人工运行的,所以它们完全按照规定运行。 而且,因为(在以太坊区块链的情况下,其中包含最大数量的智能合约和智能合约开发)它们在公共区块链上运行,所以它们本身就是公共的。 这意味着,如果有人能够在合同中找到漏洞利用程序,那么他们就可以随心所欲。

DAO Hack

2016年6月18日,黑客从流行的分散式自治组织的名称“ DAO”中吸走了360万以太币。 在组织能够筹集数亿美元资金支持组织后仅几个月。

怎么样?

它的快速和肮脏之处在于,黑客能够多次将DAO的钱转入个人帐户,每次转账的金额都相对较小,从而可以对事后的全部转账进行检查。 在第一篇文章中,我列出了以下内容:

基本思想是:提议拆分。 执行拆分。 当DAO提取您的奖励时,请在提取完成之前调用函数执行拆分。 该功能将在不更新余额的情况下开始运行

随着技术的发展,这甚至还没有触及实际情况的表面,我强烈建议以下两篇文章:

DAO漏洞分析
这篇文章描述了黑客如何从The DAO那里获得了$ 50 + M的资金。 hackingdistributed.com 什么是递归调用漏洞?
有关DAO hack及其执行所需代码的深入技术说明。 ethereum.stackexchange.com

这些文章太棒了,但我想重点介绍一下它们所掩盖的内容:该智能合约在哪里执行? 区块链不依赖信任吗? 不能删除吗?

确认和执行

让我们暂时将视图切换到比特币,然后看看如何在其中定义交易,并密切注意确认。

如我们所见,将事务添加到链中时首先对其进行确认。 这是因为可能不是不是有恶意的人添加了它,尤其是当您的交易如此之小时。 随着交易的增加,比特币建议等待更长的区块链来信任交易。

但是付款一经收到,便由比特币服务器确认:由于硬币的未花费交易输出(UTXO)可以理解余额,并且对所有硬币进行求和,所以比特币只需将这些输出与特定地址进行比较即可。

查看智能合约会使事情变得更加困难:因为以太坊使用的语言是图灵完备的,与比特币的不同,它可以执行更多有趣的任务(这是以太坊的主要卖点之一-和漏洞)。 这意味着实际上必须执行某些操作,这与仅跟踪硬币的比特币不同。

好吧,这就是我一开始的想法,但是我认为经过研究,我改变了主意。 在我看来,以太坊在这方面与比特币完全相同,只是执行更复杂的操作。 请看下面的一些解释:

智能合约在何时执行?
当挖掘节点将交易包含在一个区块中时,便会执行智能合约交易… ethereum.stackexchange.com 每个节点如何在EVM上精确执行计算
我需要帮助填写一些空白以真正理解该问题。 让我从我所知道的开始。 按照标准…… ethereum.stackexchange.com

让我们将其分解为以下步骤:

  1. 发布并发送智能合约(交易)
  2. 矿工收到交易并通过运行对其进行验证
  3. 矿工将有效交易放在一个区块中,一旦发现随机数,就将该区块添加到链中。 为此,他们将其发送到再次运行的网络。

除了以太坊上的智能合约,这与比特币交易的过程相同。 一旦有人添加到链中,它就会被确认(并“运行”,可能意味着什么)。

需要说明的重要一点是,在DAO 骇客中 ,所有交易都是有效的-开采下一个区块的人( 而不是骇客)将它们添加到链中。 这意味着矿工只需要等待矿工拿起他的合同并将其添加到链中即可。 一旦添加到链中,将耗尽DAO的资金。

智能合约似乎是流行语接管事物含义的另一种情况。 这些只是公开执行的脚本,并且与处理诸如大笔资金之类的重要代码的代码具有相同的要求和限制。 智能合约绝不会比编写合约的人更聪明。