智能合约是指在去中心化的区块链上运行的程序代码,由于去中心化的区块链具有抗审查的特性,因此部署在上面的程序代码也会同样获得抗审查能力,即是任何人都不可修改程序代码或阻止程序代码执行。在中心化的区块链上运行的程序代码有时也会被叫作智能合约,然而由于没有抗审查能力,因此和一般程序代码根本没有区别,其实并不应该称之为智能合约。

智能合约并不智能,也不是合约。

然而,智能合约并不智能,也不是合约。所谓的「合约」,是指通过去中心化和区块链,令程序代码不能被修改的特性;而「智能」则是指自动化,这一点和一般的程序码是一样的。这次我们将分别探讨智能合约的常见误解、智能合约的限制及其实际应用例子。

智能合约的常见误解

智能合约一经部署便不可修改程序代码或阻止程序代码执行,其实这一说法是不准确的。正确的说法为若果智能合约一开始便被设定为不可停止的话,那么不管是谁,就算是编写智能合约的人也不可以令它停止运行。但有些智能合约是设计成可以停止的。还有一点必须注意,那就是不可修改的只是程序代码,而不是参数。假定我们现在有区块链上的港元和美元,我可以编写一张智能合约来进行港元和美元的兑换,程序代码规定用户存入港元时智能合约会按比例向存入地址发送美元。

收到时数量为A的港元时,会向存入地址发送数量为(A ÷ 汇率)的美元

存入港元发送美元是不可修改的程序代码。然而,汇率却是可以修改的参数。而且,当智能合约所控制的美元不足以向存入方进行支付时,这程序代码也会失效。

智能合约的限制

上面的例子中有一个假设,就是港元和美元都在区块链上发行和流通,这时智能合约的兑换机制才可以成立。一但我们把智能合约应用于非区块链上的行为时,所谓的合约其实只是一则笑话。各大报章时有提到一些创业公司以智能合约程序作订立遗嘱、交通意外和解协议等之用。箇中逻辑显然是经不起推敲的。试问在区块链上的智能合约如何能把立遗嘱人的房产进行分配呢智能合约又如何判断交通意外的责任谁属呢

智能合约的用途体现于去中心化应用程序,将核心逻辑放在区块链上,而程序完全自动执行。因此我们可以判断程序所宣称的是否真确如实。但是,仅仅把程序代码放在区块链上并不能使它成为去中心化应用程序。请看看下面的例子:

程序1:一个已存储了1000枚代币的智能合约,该合约会每分钟随机向一个钱包地址发送一枚代币,直到所有的代币都发送完毕。 程序2:一个智能合约列明将公司的收入平均分配给合约上登记了的人。而每个季度,公司的首席执行官会把公司的利润转换为加密货币,并传进智能合约中进行分配。

显然,我们可以通过检查代码来判断程序1是否可以兑现他们的承诺,然而我们却无法判断程序2会否被执行。尽管智能合约不可窜改,但没有人能够保证首席执行官会将所有利润都换成加密货币并传送到智能合约中。因此,程序2不能被视为有效的去中心化应用程序,因为核心逻辑和执行并没有去中心化。

智能合约的实际应用例子

智能合约可以杜绝彩票发行方的承兑风险

对智能合约的了解是投资应用型加密货币的关键,只有当我们都清楚其技术原理、限制及应用后,才有办法判断一种加密货币是否值得投资。关于应用型加密货币,我们会在后面的《加密货币投资全攻略》中提到。