智能合约

发布时间:2018-10-08 01:12      

智能合约

智能合约的理念可以追溯到1995年,几乎与互联网(world wide web)同时出现。因为比特币打下基础而受到广泛赞誉的密码学家尼克·萨博(Nick Szabo)首次提出了"智能合约"这一术语。从本质上讲,这些自动合约的工作原理类似于其它计算机程序的if-then语句。智能合约只是以这种方式与真实世界的资产进行交互。当一个预先编好的条件被触发时,智能合约执行相应的合同条款。

基本信息

中文名称智能合约外文名称Intelligent contract

出现时间1995年提出者尼克·萨博(Nick Szabo)

概念

智能合约"(smart contract)这个术语至少可以追溯到1995年,是由多产的跨领域法律学者尼克·萨博(Nick Szabo)提出来的。他在发表在自己的网站的几篇文章中提到了智能合约的理念。他的定义如下:

"一个智能合约是一套以数字形式定义的承诺(promises),包括合约参与方可以在上面执行这些承诺的协议。"

让我们更加详细地探讨他的定义的意思。

承诺

一套承诺指的是合约参与方同意的(经常是相互的)权利和义务。这些承诺定义了合约的本质和目的。以一个销售合约为典型例子。卖家承诺发送货物,买家承诺支付合理的货款。

数字形式

数字形式意味着合约不得不写入计算机可读的代码中。这是必须的,因为只要参与方达成协定,智能合约建立的权利和义务,是由一台计算机或者计算机网络执行的。

更进一步地说明:

(1)达成协定

智能合约的参与方什么时候达成协定呢?答案取决于特定的智能合约实施。一般而言,当参与方通过在合约宿主平台上安装合约,致力于合约的执行时,合约就被发现了。

(2)合约执行

"执行"的真正意思也依赖于实施。一般而言,执行意味着通过技术手段积极实施。

(3)计算机可读的代码

另外,合约需要的特定"数字形式"非常依赖于参与方同意使用的协议。

协议

协议是技术实现(technical implementation),在这个基础上,合约承诺被实现,或者合约承诺实现被记录下来。选择哪个协议取决于许多因素,最重要的因素是在合约履行期间,被交易资产的本质。

再次以销售合约为例。假设,参与方同意货款以比特币支付。选择的协议很明显将会是比特币协议,在此协议上,智能合约被实施。因此,合约必须要用到的"数字形式"就是比特币脚本语言。比特币脚本语言是一种非图灵完备的、命令式的、基于栈的编程语言,类似于Forth

什么是智能合约?

智能合约被认为是使用区块链技术的又一个热门技术,在这个领域内,最著名的初创企业就属Ethereum和Eris Industries了,近期很多媒体也一直在报道相关的新闻。

智能合约其实并不是特别智能,也不是严格意义上的合约。

智能合约是什么

从用户角度来讲,智能合约通常被认为是一个自动担保账户,例如,当特定的条件满足时,程序就会释放和转移资金。

从技术角度来讲,智能合约被认为是网络服务器,只是这些服务器并不是使用IP地址架设在互联网上,而是架设在区块链上。从而可以在其上面运行特定的合约程序。但是与网络服务器不同的是,所有人都可以看到智能合约,因为这些智能合约的代码和状态都在区块链上(假设区块链是公开的)。而且,与网络服务器不同的是,智能合约不依赖某个特定的硬件设备,事实上,智能合约的代码由所有参与挖矿的设备来执行(这也意味着进入单个合约的算力是有限的,尽管挖矿难度的自动调整会调节这种影响)。

智能合约是编程在区块链上的汇编语言。通常人们不会自己写字节码,但是会从更高级的语言来编译它,例如用Solidity,与Javascript类似的专用语言。这些字节码确实给区块链的功能性提供了指引,因此代码可以很容易与它进行交互,例如转移密码学货币和记录事件。

代码的执行是自动的:要么成功执行,或者所有的状态变化都撤消(包括从当前失败的合约中已经送或接收的信息。)这是很重要的,因为它避免了合约部分执行的情况(例如,在证券购买交易中,证券所有者已经转移发送了证券,但是密码学货币的支付转移却失败了)。在区块链环境中,这尤为重要,因为没有办法来撤消执行错误所带来的不好的后果(而且如果对手不配合的话,根本就没有办法逆转交易)。

智能合约的使用案例

证券登记和清算。合约状态包含了证券所有权的信息。如果登记的证券所有者注意到该合约中证券已经出售给了其他的参与者,其他参与者就会把密码学货币发送到担保账户,然后证券登记信息就会更新,货币就会转发给原来的证券持有者。取决于哪个信息先到达,证券或货币都会保管在一个担保账户中以避免双重使用,当交易取消或过时后,担保也将取消。

银行现有账户。区块链本身已经使用了密码学货币账户,因此这里不需要智能合约。然而,现实生活中的人们想说欧元或美元账户,与上面所讲到的证券登记账户类似。使用合约会存在合约对手风险,正如在现实世界中的任何银行一样。这种风险可以通过对手风险监管来转移,或者通过担保来消除这种风险。

衍生产品、博彩。假设对手同意某个在互联网能够访问的数据源,他们就可以对数据源的价值进行衍生合约或博彩。

预付款和再充值。合约可以和移动SIM卡、预支付电费卡等绑定,当收到密码学货币时,就可以进行充值。

智能合约面临的问题

智能合约目前还处在初级阶段,尚未有任何实质进展。关键问题是信任度的问题,这与影响区块链实施的问题类似:这些系统都设计成了无需信任的环境,这意味着无法改正出现的错误。例如,在区块链中,如果你将货币发送给某个地址,这个操作是无法撤销的。因此,如果你与欺诈者进行交易 – 或者你已经将货币发送到错误的地址中 – 那么金钱损失是无法挽回的。

智能合约能够转移欺诈对手的问题 – 事实上,这就是智能合约设计的原因之一:无论何时,合约都能能够可靠地监控合约中参与方的执行情况,参与方是无法进行欺骗的。

然而,问题并没有解决,只不过是出现在了新的层级:例如,合约可能有漏洞,能够转移证券,但却无法转移货币。

在现实生活中,这些事情可以通过中心化的系统来撤消。但是如果是去中心化的系统,则只能自己承担风险。

同样地,也有欺诈的问题:某人需要设计(编程)合约,在合约设计时就会需要确保没有欺诈的问题。至少参与者要确保:

· 高层级(例如Solidity)的代码中需要充分描述合约参与方的目的

· 代码中的字节码实际上相当于高层级的代码,需要在进入合约之前进行审核

· 合约信息需要很好地理解,以避免出现乌龙指操作(例如,人们用错误的报价方式-例如USD/ERU而不是EUR/USD-这会导致严重损失。

在现实生活中,上述的这些问题原则上都可以在事后进行处理解决,如果需要的话,还可以通过法院,但是在无需信任的工作量证明区块链中这是不可能的:问题是为什么人们想要依赖一个工作量证明系统(背后的原理是浪费大量的能源来挖矿,这样的话攻击这个系统在经济上是不划算的)而不是使用一个中心化运行的公开账本和依赖中心化的权力机构 – 政府、法院等 – 来执行合约。

从理论到实践

剧透:如果你了解比特币协议、比特币货币和智能财产的概念,你可以跳过这一章节。

当萨博在近二十年以前,在网络提出了智能合约理论时,实践一直严重地落后于理论。一直没有如何将这个理念转变现实的清晰路径。

现在,技术已经赶上萨博富有远见的头脑,智能合约开始变得可行。在这二十年中发生了什么事情呢?

简而言之,萨博在他的智能合约定义中建立的协议,已经被进一步开发。它们已经以比特币协议的形式出现,或者更加一般地说,这些协议能够实现中本聪共识(Nakamoto consensus)。

在这些协议被开发的同时,我们获得了另一个必需的构件:第一种真正的、原生的数字资产,即作为货币的比特币。没有这种资产,智能合约也将不可行,因为金融部门在过去的几十年中,一直对任何创新抱有极端的敌意。

最后,另一个还没有结出果实的概念是智能财产。我们正在进入一个计算和连接无所不在的时代,通俗地讲,就是物联网。物理实体能够从互联网中检索信息和向互联网发送信息,它们也能够通过软件控制它们自身的使用(想想数字版权管理吧),这使得我们能够建立萨博所指的嵌入式合约(embedded contracts)。

“智能合约的基本理念是,许多合约条款能够嵌入到硬件和软件中。”

萨博认为嵌入式合约最初的应用实例是自动贩卖机、销售点终端、大公司间的电子数据交换和银行间用于转移和清算的支付网络SWIFT、ACH、FedWire。另一个嵌入式合约的例子是数字内容消费--例如音乐、电影和电子书--领域的数字版权管理机制。

从这个意义上理解,智能合约是赛博空间(虚拟空间)和物理空间(实体空间)之间的桥梁。

智能VS法律

人们对智能合约概念的最多的困惑,源于它的名字和用于描述它的语言。人们似乎从“合约”这一术语中,推断出智能合约一定与法律概念中的合约有某种联系。那么,根据这个逻辑,智能合约是有法律约束力的协定加上其它因素(X),X使得协定变得“智能”。

从法律的角度,这一推测是错误的。根据参与方选择的智能合约实施,参与双方或者多方完全可能进入一个不满足合法的合约所必需条件的“智能合约”。

然而,不可否认的是,智能合约必须被归类为与法律相关的行为。我们生活在一个被法律管理和控制的世界,所有可能的经济交易也被法律管理和控制。合约法只是组织经济交易的一种可能的工具。原理图如下:

Legally relevant behaviour :与法律相关的行为;  contract law:合约法;  smart contracts:智能合约

让我们看一下合约法和智能合约的交集部分。我们能否发现一个能够描述这两个系统的合约行为的概括呢?引用萨博的论文:

“合约--一套达成共识的协定--是形成关系的传统方式。”萨博告诉我们的是,“合约”的抽象概念是在个人、机构和他们拥有的东西(财产)之间形成关系的一种公认的工具。然而,上面的引用并不清晰,参与方如何达成协定,如何形成协定,没有讲到。

我建议下面这个普遍的合约模型:

Agreement:协定; Formalization:形式化 ;Execution/Enforcement:执行

如果这个模型应用到智能合约和法律意义上的合约中,让我们看看它怎么起作用。

协定

协定是一个完全的理想情况,从它在正式系统中的实施中抽象而来。当然,事实上这是一个脆弱的抽象。在法律系统中,在许多情况下,具有法律约束力,不要求形成一个协议。与此相反,对智能合约来说,在许多情况下,在形式化以前,没有事前协定。

形式化

形式化在这里的意思是,在一个正式系统实施理想的协定的行为。有两个相关的正式系统。一个是合约法,另一个是你选择的智能合约系统。这两个系统都服务于相同的目的:当违约行为发生时,使得协定能够执行。

从一般角度理解,对于合约是怎么形式化的这一问题,有人认为它只是实施细节。然而,事实证明,合约的实施的确事关重大。

现在有两种本质上不同的、形成一种合约关系的方式。这两种方式是截然不同的,因为它们需要不同的执行方式。

执行

因为一图顶千言,所以来看下面这张我从Lawrence Lessig那里“剽窃”来的信息图,出于本文的需要,我对图片做了轻微的修改。

Market:市场 ; contract:合约  ;Norms:惯例、常规 ; Architecture :架构 ; law:法律; ex ante:事前;  ex post:事后

在Lessig的最初版本中,是一个人位于信息图的中间,不是一个合约。这位了不起的思考者用他的信息图,努力教给我们这些凡人的是,有四种最基本的约束影响着一个人的一生。这四个约束本质上截然不同的,但是以复杂的方式交织在一起。

我对原版的信息图做出了修改,用合约取代了人,这里的合约是指双方或者多方之间达成的协定。有趣的是,做出修改以后,这个信息图仍然有效。这四个约束就像管理着人一样,管理着合约关系。

另外,我着重强调这四个约束中的两个约束,即架构和法律。这两个约束是合约能够被执行的两个最基本的动力。根据参与方选择的协定实施的系统,合约将通过法律系统执行,或者通过架构执行。这两种合约执行模式显著不同。

Lessig认识到合约执行的两个特征,可以帮助我们谈论两种合约执行模式的不同。一个是代理(agency),另一个是时间性(temporality)。在法律意义上,合约的执行,只有当一些人选择这样做时,才会发生。此外,执行只发生在违约以后,例如事后。

智能合约的执行在这两个方面,本质上不同于传统合约。为了理解是如何不同的,我们需要首先理解Lessig所指的架构是什么意思。

Lessig在他的《代码:网络空间的法律》一书中,为了解释代码在赛博空间中的作用,引入了架构的概念。物理空间的形状,就是你的身体穿梭其中的空间,是由它的架构决定的,例如建筑环境(建筑物、街道等)。如此类似,赛博空间的形状是由代码决定的,人们使用的应用和协议就是建立在这些代码上面的。因此,代码是赛博空间的架构。

法律和架构都有方法管理参与方的行为。法律依赖于个人将规则内化,个人据此调整自己的行为,或者该系统允许法律追索权(例如法庭)。然而,架构通过塑造空间本身管理行为。架构不是关于允许什么,而是什么是可能的。架构既不依靠个人将规则内化,也不依靠起诉系统。

根据我们衡量合约执行的质量的标准,例如代理和时间性,因此架构明显地不同于法律。架构执行合约时,不需要任何个人或者组织(代理,agency)决定如何执行合约,你可以称架构执行为自我执行(self-enforcing),虽然我不喜欢这种叫法。另外,架构事前执行,违约甚至不可能发生。

未来展望

有一件事确定无疑:智能合约已经扎下根了。它们是真正的全球经济的基本构件,任何人都可以接入到这一全球经济,不需要事前审查和高昂的预付成本。它们从许多经济交易中,移除了对第三方的信任必要,在其它情况下,将信任转移到可以信任的人和机构。

我在这篇博客中尽力想说明的理念是,智能合约怎样与合约法共存。本质上,它们是解决相同问题--以一种方式形成一种关系,使得承诺可以执行--的两种不同方法。就这一点而言,智能合约似乎是更好的解决方案:智能合约事前执行,不像法律系统一样,事后执行。然而,这是一种谬误。最后一次引用全能的萨博:

“合约法的成功和取代合约法所需的高额成本,使得保存和利用合适的原则,仍然很有价值。但是,数字革命正在剧烈地改变我们能够拥有的各种关系。在这个赛博时代,我们来之不易的法律传统中的哪一部分,将仍然具有价值?将这些法律原则应用到我们的线上关系设计,最好的方式是什么?