智能合约

来自BitcoinWiki
这是此页面已获认可并且最新的版本。
跳转至: 导航搜索

“智能合约”(也是自动执行合约,区块链合约或数字合约)[1] 是一种电子算法,旨在自动执行区块链中的合约执行流程。智能合约的总体思路是排除参与方在处理协议条款方面的分歧。

历史[编辑]

Nick Szabo 在1996年创建了智能合约[2] -1997[3].

他提议使用计算机算法和用户界面来完成电子商务领域的交易。根据作者的想法,对合约条款的描述必须使用数学工具和编程语言进行描述。Vitalik Buterin以太坊项目(2013年)中第一次实施了智能合约的想法。

基本工作原理[编辑]

随着区块链技术的出现,Szabo 的想法称为了可能,因为区块链技术的特点确保了智能合约的可靠性和保障。

  • 分布式系统类型:由于协议副本保存在寄存器中分布于众多的网络节点之间,因此合约方都无法更改文档的文本。
  • 开放数据库:合约条款是用于所有的区块链参与者 – 合约执行的审计变得更加容易。
  • 合约条款被形式化:合约条款的检查和执行由程序代码(IFTTT)进行,[4], 这就是为什么排除了合约错误执行的可能性。
  • 原子操作:只存在成功执行或未执行的联系。
  • 图灵完备性:在以太坊中展示的区块链拥有内置的Turing-full编程语言,用户可以自行创建任何合约。


智能合约的执行[编辑]

智能合约基本上只是存储在分布式区块链中的计算机代码。由于区块链是分布式的,它的副本存储在网络的每台计算机中。这意味着智能合约代码的副本也存储在网络的每台计算机中,并且实际上可以由每台计算机以相同的方式执行。在以太坊的区块链中,代码在特定的环境中执行:以太坊虚拟机(EVM)。每个网络节点(即每台计算机)将通过包含在其中的交易来验证新的区块,并在EVM中实现由它们启动的代码。[5]. 由于它们都具有相同代码块的相同副本,因此每个网络节点都进行相同的计算,保存相同的值。

安全和敏感[编辑]

以太坊的智能合约由于多种原因而容易受到黑客攻击。

1. 使用Solidity(以太坊编程语言)时出错

  • 语义:智能合约用Solidity编写,与Java相似。但是EVM的字节码不支持使用函数,因此合约在发送到区块链之前进行编译。合约代码中的一个键入错误可能导致退回功能激活。
  • 例外的错误顺序:为了实施智能合约,中断工作的方法 – 可能需要例外。如果在执行呼叫命令期间出现异常,则合约的执行将继续,直到Gas用完。
  • 可重入性:相同的程序指令可以多次输入,例如通过退回功能,这将导致呼叫方法的呼叫循环并不断消耗Gas。对DAO的攻击是基于此种类型。[6]

2. 以太坊虚拟机工作出错

  • 合约的不可变性:区块链上发布的合约均不可更改。如果合约中包含错误,则无法纠正,只能停止合约执行。一个明显的例子可能是消除了在DAO上攻击的后果。
  • 交易过程中以太币的损失:要发送以太币,您需要提供一个160bit序列的收款方地址。如果给出的地址未绑定到用户或合约,则发送的以太币将永久丢失。

3. 区块链错误

  • 合约状态:进入短暂子电路的智能合约一部分将不会被执行。因此,合约状态不会被唯一暂时确定。其中一个合约方可能会认为合约已经执行,尽管并未发生。
  • 临时限制:要确定合约的状态,需要一些时间(请参阅上一段),这会使其更容易受到攻击。

大型欺诈按键[编辑]

在2016年7月,DAO上发生过一次攻击,因此黑客设法将超过6400万美金转移给他创建的合约余额。[7]. 对于攻击来说,已经使用了可重复使用的特性:在一次交易中,黑客撤回了DAO的资金,并将以太币转移给他们的子DAO账户,重复了多次操作。[8].

另请参阅 BitcoinWiki[编辑]

笔记[编辑]

  1. http://www.blockchaintechnologies.com/blockchain-smart-contracts
  2. Szabo N. Smart contracts: building blocks for digital markets //URL: http://www. alamut. com/subj/economics/nick_szabo/smartContracts. html (Letzter Abruf vom 31.10. 2016). 1996.
  3. Szabo N. //URL: http://firstmonday.org/ojs/index.php/fm/article/view/548/469 1997
  4. Dannen C. Bridging the Blockchain Knowledge Gap //Introducing Ethereum and Solidity. Apress, 2017. С. 1-20.
  5. Delmolino K. et al. Step by step towards creating a safe smart contract: Lessons and insights from a cryptocurrency lab //International Conference on Financial Cryptography and Data Security. – Springer Berlin Heidelberg, 2016. – С. 79-94.
  6. Atzei N., Bartoletti M., Cimoli T. A Survey of Attacks on Ethereum Smart Contracts (SoK) //International Conference on Principles of Security and Trust. – Springer, Berlin, Heidelberg, 2017. – С. 164-186.
  7. Velner Y., Teutsch J., Luu L. Smart Contracts Make Bitcoin Mining Pools Vulnerable //IACR Cryptology ePrint Archive. – 2017. – Т. 2017. – С. 230.
  8. http://www.cbc.ca/news/technology/ethereum-hack-blockchain-fork-bitcoin-1.3719009