智能合约是存储在区块链中的代码片段,它们规定了一系列条件,只有在这些条件满足时才能执行。它们有许多不同的形式和规模,从在区块链环境内移动硬币或代币的,到依赖外部数据满足其条件的智能合约。
智能合约与常规程序的不同之处在于,它们在一个去中心化网络上运行。这给了它们巨大的优势,因为它们不依赖于单个中央系统来执行。例如以太坊等区块链平台使得智能合约能够存储并在全球分布的节点网络上运行。
在这篇文章中,我们将探讨以太坊区块链如何允许智能合约嵌入其中,这些条款是如何编译和部署的,以及提供几个案例研究。
如果这是您第一次听说智能合约,那么您可以先阅读我们关于智能合约基础的文章。
以太坊促成智能合约的能力归功于该协议的本地运行时环境,称为以太坊虚拟机(EVM),由以太坊网络中的所有节点运行。它是一个用于执行智能合约的受保护沙箱环境,完全隔离。EVM 中的代码无法访问网络、文件系统或其他进程。
EVM 被定义为准图灵完备机器。这意味着它可以执行任何计算或运行任何计算机程序,只要运行程序所需的 gas 不超过设定的 gas 上限。在某种程度上,EVM 就像司法系统一样,确保智能合约按照应有的方式得到执行。
与常规合约不同,智能合约不是印有复杂法律条款的纸张。相反,它们大多是用 Solidity 编写的程序,Solidity 是专门为实施智能合约开发的高级编程语言。
开发者用 Solidity 编写智能合约后,必须先将其编译成与 EVM 兼容的字节码,然后才能部署。用于将 Solidity 翻译成字节码的编译器会通知开发者代码中的许多潜在可利用问题。这让开发者在合约部署前有机会修复代码。
由于智能合约是公开的,区块链上的每个人都可以访问它们。除非开发者通过 etherscan 或其他平台公开代码,否则区块链社区看到的是字节码,而不是 Solidity 源代码。
智能合约固有的问题是,它们无法访问对其正确执行通常至关重要的现实世界信息。为了解决这个问题,智能合约依赖于预言机,这是为智能合约提供的第三方数据源。它们负责查找和验证现实世界信息,然后将这些信息传递给区块链。
由于预言机是第三方,不是区块链机制的一部分,它们并不完全是无需信任的。这是一个问题,因为在智能合约中没有回滚。当您“签署”一个智能合约时,您同意它的所有“条款”,并且没有办法逆转过程。这意味着预言机提供的信息——不管是关于航班、住宿还是任何其他事情——必须是准确的。
那么,交易者究竟是如何进入智能合约的呢?基本原则如下。
每个命令,或所谓的操作码,都有一个或多或少固定的 gas 需求量。这意味着可以大致预先计算出执行给定命令所需的 gas 估计值——然而,实际的 gas 量只能在执行时计算。如果您提供的 gas 不足,智能合约的功能将无法执行。相反,如果您提供了足够的 gas(上限是无限的),智能合约将能够按设计工作(它将是“图灵完备”的)。
智能合约的使用案例包括:
值得一提的是,与普遍认为的相反,智能合约在预定条件满足时并不会自动执行。它们只有在某人或某事触发智能合约功能时才会执行。这通常需要一定量的 gas,因为合约的新状态必须写入区块链。所以,如果您希望您的智能合约得到执行,您将不得不支付少量以太币的费用。
智能合约仍然是区块链技术最有趣的方面之一,因为它们将区块链的功能扩展到了超越货币交易账本的范畴。新的和令人兴奋的智能合约和 DApps 一直在不断创建,许多金融行业及其他行业的公司选择因为智能合约的潜力而尝试使用区块链技术。