浅谈对智能合约的认识

1. 区块链技术的应用实践

区块链技术用来支撑数字加密货币是非常完美的,因为数字货币的问题实际上是确保交易记录的正确性的问题。比特币的十年来的成功运行,证明区块链技术完全能够胜任数字加密货币的底层技术支持。

当人们惊叹于区块链的“共识”机制的同时,自然而然地想到,除了数字货币,还能利用区块链开发出哪些应用。以太坊的智能合约就是这样想出来的。

对于智能合约这种应用,我认为还是很有价值的。把一些明晰的商业逻辑通过程序固化下来,存储在区块链这种分布式账本上,根据实际情况的不同,严格按照人们拟定好的合约去执行不同的动作,而区块链的“共识”机制,使得合约参与者可以彻底放心,合约是按照拟定好的流程正确地执行的,不会有人耍滑头违约。这让商业变得很“清爽”。

2. 确认及验证智能合约的必要性

然而,智能合约的实现上,不可避免的会出现bug,这就对使用智能合约的那些组织或者个人带来了安全隐患,很可能会给使用者们造成巨大的损失。比如DAO项目,就是因为其智能合约代码中的一个递归调用存在漏洞,该漏洞被恶意利用,导致项目中的大量数字货币被转移到黑客所控制的账户上。因此,为了保证智能合约的正确性,对于智能合约的确认和验证就成了一个绕不过去的一个话题。

在《Validation and Verification of Smart Contracts : A Research Agenda》这篇文章中,作者把一个智能合约划分问三个组成部分,即自然语言书写的合约、对合约的计算机代码实现、以及该合约的参与方的本来意图与之间的共识。根据这三方面的关系,识别出需要确认和验证的五个问题来:

  1. 书写的自然语言合约是否正确地代表了相关方的共识以及共同的意图?
  2. 计算机代码是否正确地实现了自然语言合约?
  3. 计算机程序是否做了它真正想要做的事情?
  4. 计算机程序是否只做了它想要做的事情?换句话说,计算机程序是不是没有做任何它本没打算做的事情?
  5. 如果有多个计算机程序,整个系统的操作是否能表现得像一个整体,而没有错误发生,并且是只按照人们所要求的方式那样去做操作?

其中,回答上述问题1和问题2叫做确认过程,而回答问题3、问题4、问题5叫做验证过程。

文章中讨论了回答这五个问题的技术实现方式,我对其中回答问题1和问题2的技术实现的可能性有所怀疑。因为对这两个问题的回答,技术上是非常难做到的,这里也需要提醒一下涉足智能合约领域投资的人士,如果有人声称对智能合约的问题1和问题2能够进行完美解答,那么需要警惕他是否是在忽悠圈钱。

3. 回答问题1的必要性质疑

问题1的内容为:书写的自然语言合约是否正确地代表了相关方的共识以及共同的意图?这个问题想让计算机来帮人类来回答,个人认为十分荒谬。

首先,合约中的内容代表的是人类的意志,是不是符合人类的想法, 只有人类自己知道。怎么能让计算机来判断呢?计算机的评判标准何在?如果有人说,评判标准需要人类自己通过建模进行数字化,让计算机能够领会人类的真实想法,这种数字化人类自己真实想法的可行性抛开不谈,如果真的实现了计算机能够领会人类的真实想法,那么也就不需要回答问题1了,真实想法已经被计算机领会了,直接去回答问题2即可,即看看计算机代码实现是否与计算机领会到的人类真实想法一致即可。而且,这个过程存在一个问题,就是人类数字化自己真实想法的时候,数字化的就一定是自己的真实想法吗,可能人类自己都意识不到数字化过程中已经与自己本来的想法出现了偏差,如何保证不会出现这种状况呢,也让计算机来判断吗?这就陷入了无穷的反复中去了。

其次,人类拟定的合约本身就是不完备的。就是说这个合约不可能百分百体现人类的真实意图。只能是尽最大可能的把各种可能的情况都想到,规定在这些情况下去执行合约相关方所达成了一致意见的处理方法。当然,如果试图回答问题1的目的是确保“人类所能想到的情况,自然语言合约中都包含了”的话,那么不需要讨论合约的绝对完备性;但是如果想借助计算机来实现合约的绝对完备性,是不可能的。

综上所述,让计算机自己回答问题1一方面是很难实现的,另一方面如果能实现,也就不需要再去回答问题1,直接去回答问题2即可。因此问题1的设定是没有意义的。

4. 回答问题2的必要性质疑

问题2的内容为:计算机代码是否正确地实现了自然语言合约?文章中提到,要想让计算机自己去回答这个问题,需要智能合约程序和自然语言合约双方的形式化表示(Automatizing question 2’s validation task will require formal representation of both the smart contract program and the natural language contract.)。这个思路显然是企图让计算机去验证计算机代码和自然语言的对应关系,这是非常困难的。如果能够实现,就不需要程序员了,根据客户的需求说明书,计算机自己就能编写程序实现了。而计算机能否通过这样的方式自动编程,还存在争论。

在论述回答问题1是不必要的时候,我认为直接回答问题2就可以了。可是现在来看回答问题2的必要性,如果真的能使用计算机来回答该问题,当然是很好的,确保了代码实现与人类真实想法的一致性。但是该问题并没有必要使用计算机去确认,鉴于技术实现的可能性仍然存疑,不如由人类自己来确认这个事情。即人类自己尽最大努力的用计算机代码来实现自然语言合约中的商业逻辑,通过软件工程的质量保证方法,借鉴业界的优秀实践,来确保计算机代码没有发生偏差。不要因为自动回答这个问题在技术上尚未实现,就耽误了智能合约的后续研发和实际使用。

5. 回答问题1、2的技术展望

前文论述了一下,让计算机去回答问题1和问题2是不必要的。当然本人对技术理解不深,可能是在妄作论断。实际上,让计算机去回答问题1和问题2所需要的技术,已经远远超出了区块链这个技术本身要解决的问题范畴。 如果真的能够做到,让计算机去回答问题1和问题2,那么就不仅仅是智能合约领域取得的进步了。

如果问题1能够得到计算机的自主回答,那么意味着计算机能够理解自然语言的语义。这将导致计算机可以毫不费力的在世界各国语言之间进行翻译,从事翻译工作的人们将彻底失业。另一方面可以参考一下谷歌百度翻译的水准,就知道这个事情想要实现并不简单。

如果问题2能够得到计算机的自主回答,那么意味着计算机能够根据人类语言的语义,自动翻译成计算机代码。这将导致程序员彻底失业。

所以,这都是极具革命性的技术。可以畅想,但是不能妄图凭借这些技术增加智能合约的可靠性,毕竟还太遥远。还是先积累一些其他的、依靠人类自身能力的,保证智能合约可靠性的一些做法经验更为可行。

6. 智能合约的正确使用方式

计算机程序中的Bug是不可避免的,智能合约同样也会存在bug。不能因为DAO项目的漏洞被恶意利用,就担心智能合约是否还能使用 。智能合约与其他所有的软件一样,只要采用合理的质量保证措施,排除重大致命安全问题发生的可能性,就是有使用价值的。

因此,完全可以大胆开发各种类型的智能合约应用,经过严格的测试验证,风险评估后投入使用。就像其他软件程序一样,陆续推出新版本,发布新补丁。这样,就可以享受区块链技术在智能合约领域带来的便利了。

Leave a comment

Your email address will not be published.