因为合约是严肃的事情,传统的合约往往需要专业的律师团队来撰写。古语有云:“术业有专攻。”当前智能合约的开发工作主要由软件从业者来完成,其所编写的智能合约在完备性上可能有所欠缺,因此相比传统合约,更容易产生逻辑上的漏洞。另外,由于现有的部分支持智能合约的区块链平台提供了利用如Go语言、Java语言等高级语言编写智能合约的功能,而这类高级语言不乏一些具有“不确定性”的指令,可能会造成执行智能合约节点的某些内部状态发生分歧,从而影响整体系统的一致性。

智能合约

智能合约原理

因此,智能合约的编写者需要极为谨慎,避免编写出有逻辑漏洞或是执行动作本身有不确定性的智能合约。不过,一些区块链平台引入了不少改进机制,对执行动作上的不确定性进行了消除,如超级账本项目的Fabric子项目,即引入了先执行、背书、验证,再排序写入账本的机制;以太坊项目也通过限制用户只能通过其提供的确定性的语言(Ethereum Solidity)进行智能合约的编写,确保了其上运行的智能合约在执行动作上的确定性。

2016年著名的The DAO事件,就是因为智能合约漏洞导致大约几千万美元的直接损失。The DAO是当时以太坊平台最大的众筹项目,上线不到一个月就筹集了超过1 000万个以太币,当时价值一亿多美元。但是该智能合约的转账函数存在漏洞,攻击者利用该漏洞,盗取了360万个以太币。由于此事件影响过大,以太坊最后选择进行回滚硬分叉挽回损失。The DAO智能合约的具体内容感兴趣的读者可以自行查阅(1)。但是我们并不能因此而否认智能合约的价值,任何事物在发展初期必然因为不完善而存在风险,因噎废食并不可取。

随着智能合约的普及,智能合约的编写必然会越来越严谨、规范,同时,其开发门槛也会越来越低,对应领域的专家也可参与到智能合约的开发工作中,智能合约必定能在更多的领域发挥越来越大的作用。随着技术的发展和大家对智能合约安全的重视,从技术上可以对智能合约进行静态扫描,发现潜在问题反馈给智能合约开发人员,也可以通过智能合约形式化验证的方法全面地发现智能合约中存在的