智能合约,英文是smart contract,作为在区块链上运行的计算机代码,当满足事先设定的条件时会自动触发执行。
智能合约就是能够使区块链技术应用到现实当中的应用层,几乎所有类型的金融交易都可以被改造成在区块链上使用,包括股票、私募股权、众筹、债券和其他类型的金融衍生品如期货、期权等。智能合约的优势确实十分明显,这一点毋庸置疑。作为去中心化和自动执行的程序,智能合约可以提高透明度并降低运营成本。根据不同实施情况,还可以提高执行效率并减少商业运营费用。并且智能合约具有高度可定制化,可以通过多种不同方式进行设计,提供不同的服务和解决方案。因此有一种意见认为智能合约能随着区块链技术的不断演化最终取代现有交易模式并成就完美的信用社会。
对于这类看法,我认为对智能合约的作用过于乐观了,智能合约作为一种解决方案,虽然一定程度上能解决信任和共识的执行问题,但要成为法律意义上的“合同”尚且为时过早。
智能合约面临的第一个问题在于如何打破自然语言和技术语言之间的转换壁垒。在合约方本身都具备一定技术背景或技术能力的情况下,或合约内容相对简单明了的情况下,这固然不是一个问题,但试想一下,当智能合约的应用场景更为广泛的开展,参与的商业活动开始渐渐复杂之后,一些普通的不具有技术背景或能力的合约者如何来确保自己的商业意图被准确无误、没有歧义的写入智能合约中?普通参与者又如何来保障编写代码的技术人员没有在编写过程中嵌入后门或疏忽形成一些漏洞导致自己的利益受损?
举个例子,智能合约被普遍认为是具有高确定性、防篡改且可靠的数字化协议,但事实上智能合约并非百分百不可以更改。例如以太坊智能合约一经部署,则无法再继续添加新功能。但是如果合约创建者在代码中预留了名为SELFDESTRUCT的函数,那么将来可以“删除”智能合约,也可以用新的合约替换它。如果未在合约代码中预留该函数,则它们将无法被删除。所谓的可升级智能合约支持开发人员在不可篡改方面拥有更大的灵活性。有许多方法可以创建可升级的智能合约,每个合约都可具有不同程度的复杂性。
在这种情况下,即使在形成智能合约之前普通参与者已经预见到可能存在这样的风险,但对他们而言也没有能力去发现这些风险是否真的存在。
第二,智能合约发生漏洞或错误以后,如何来确认责任主体和相应的后果?智能合约是由人工编写的计算机代码组成,简单的行为或指令产生逻辑漏洞的可能性相对较小,但当商业模式逐渐复杂或定制化要求更高以后,计算机编码的逻辑将会越来越趋于复杂。越是复杂的逻辑产生漏洞或错误的风险将会越高。2016年的DAO被黑客攻击就是一个典型的例子,黑客之所以能攻破DAO正是因为智能合约本身存在错误才导致了重大的损失以及以太坊的分叉。
如果产生这类非故意非人为因素造成的重大错误,是否能简单归责到技术平台本身或技术人员个人并由他们来承担相应的法律后果?
就好比在医学领域,因医学水平发展尚未达到的原因导致病患的死亡,让医院和医生来承担死亡后果是不恰当的。那么当科技水平或者技术本身发展的缺陷导致的漏洞和错误,让平台和技术人员承担又是否合理呢?
第三,智能合约标榜的另一优势是自动触发,解决信任问题,一旦条件触发,智能合约就会按照事先写定内容自动执行。可在现实中,有很大一部分合同并不需要如此铁面无私的“执行”到底。比方遇到不可抗力或者情势变更等情况,合约双方可以根据法律的相关规定来结束合同的履行,那么在这种情况下无法撤销智能合约的自动执行,是否反而可能进一步扩大合约双方的损失?
又或者我们可以考虑一下,是否真的需要绝对禁止违约这种行为的发生?虽然法律本意绝不会鼓励违约,但可能在某些情景下,违约是企业更愿意去做的一个商业选择。比如武汉爆发新型冠状病毒疫情,医疗防护资源严重短缺,部分企业取消原本准备出口的医疗物资订单,转供武汉医疗机构。在这种情况下,违约是这些企业的商业选择。智能合约是否真的需要完全剥夺合约方对于违约的选择权呢?
第四,如何审查智能合约主体的合法性。在公链上,用户身份信息以公匙地址来实现匿名化,不与特定主体绑定,链上节点无从知晓交易主体,起到保护用户隐私。但同时导致区块链智能合约主体无法判断,随之而来的后果就是在发生类似主体不符合要求的无效合同或者可撤销合同的时候,如何来确定合同主体的合法性以确保交易的有效和安全。
毫无疑问,智能合约对币圈和链圈产生了深远影响,并且深度改变区块链领域。虽然终端用户在目前的技术背景下不一定会直接与智能合约进行交互,但在不远的未来,会有更为广泛的应用范围涉及各个领域。然而智能合约目前尚未能纳入法律的监管体系,也无法接入目前关于合同相关的法律语境之下,远不是一个contract。在当前的技术条件之下,也并不那么smart。智能合约想要真正实现“code is the law”还有很长一段路要走。
本文作者: 张宇 律师