我问过的每个人对“智能合约”有着不同的定义。下面是我的智能合约定义。最近这些天,我听到越来越的人谈论“智能合约”。但是,当你让他们对“智能合约”这一术语下一个定义的时候,他们不能清晰地表达,这一个概念就像从他们手中溜走了一样。
这不是什么新发现:Peter Todd在听过了多场研讨会以后,也得出了类似的结论。经过多场智能合约的讨论后,我得出了这样的结论:没人真正知道智能合约是什么,如果实现智能合约,将需要预言机(oracles)。
— Peter Todd (@petertoddbtc) December 5, 2014
事实上,我也是没能向Peter清晰阐明智能合约概念的人之一。
现在,对智能合约下一个定义,最简单的回答就是引用富有远见的学者的定义,他们在几十年以前就已经预言了“智能合约”。尼克萨博1997年的智能合约论文是非常简洁和有用的综述。另外,我也真的喜欢Grigg的“李嘉图合约”(Ricardian Contract)。萨博的“自动贩卖机”模型也十分有用。
但是,这些人的理念是在比特币、区块链和密码学货币出现以前提出来的,所以对密码学货币领域的新人来说,他们的定义存在隔阂,不够明显。更加使人混淆的是,现在有许多平台打算实施智能合约。事实上,你可以将比特币看作一个智能合约平台。所以,区分概念和具体实现的不同点变得更加困难。
在这篇文章中,我尽力解释为什么智能合约可能是一个非常棒的理念,然后做出我自己的“智能合约”定义和模型。
可复制、共享的账本( The Replicated, Shared Ledger)
当我思考区块链和分布式账本时,我首先从比特币的最核心创新开始:它教会世界如何在不需要信任第三方的情况下远距离转移价值。(我知道有些人会对此有异议,这个表述可能并不是100%精确–但是我觉得它能为思路带来直觉。)
我们当然可以面对面地转移实体纸币,但是,在比特币出现以前,我们做不到:在不需要信任中心化第三方机构(邮局、银行等)的情况,远距离向某人转移价值。
就好像银行和支付系统的传统转账模式的基础设施被重构为点对点支付网络。这种转变如下图所示:
比特币打开了点对点的电子价值转移模式的大门,完全不同于现在的银行系统、中央银行和支付系统。
但是,上面的图并没有解释比特币是怎样实现点对点价值转移的。
答案是:比特币系统建立在我所称的“可复制、共享的账本”之上。比特币网络中的每个参与者(完全节点)拥有一个完整的交易账本的副本,这一系统的神奇之处在于:它是如何做到使每个人的副本与其他人的副本保持一致的。
所以,正确的示意图应该是下图,每个参与者都能够从相同的可复制、共享的账本中获取信息。
比特币和其它去中心化共识系统的窍门在于:它们怎样保证每个人有一个账本的副本,并使每个人确信自己的账本与别人的账本是同步的。
先把可扩展性等问题放在一边,我们知道这样的架构能够运行:如果每个人拥有的账本的副本是相同的,那么人们就不再需要一个中心化的机构记录谁拥有什么。你知道:当你的账本更新,记录一笔新的资产所有权变动时, 其他人的账本也会发生相同的变动。
我们需要区分:账本记录什么和怎样记录
密码学货币领域的争论和竞争主要集中在:账本如何建构和保证安全。比特币的挖矿算法?以太坊的系统?瑞波币的共识算法?这些争论只聚焦于“怎样做”:怎样保证账本安全?共识过程如何工作?怎样防止坏人?因为不同的密码学货币对于自己可能面临的威胁的本质有着不同的假设,所以他们是不一样的。
但是,在这篇文章,让我们暂时忽视这些“怎样做”的问题,只问自己一个问题:账本记录什么?它可以用于哪些方面?
账本记录什么?
在我最近的一篇博文中,我探索了“可复制、共享的账本”这一概念如何应用到货币以外的领域。我的观点是:一旦你能确定地知道你对世界的观点与其他每个人是一致的,“可复制、共享的账本”在完全不相关的领域会开辟出新的可能性,例如会计领域。Ian Grigg写过关于三重记账法的文章,像tripleentry(三重记账)这样的公司正在探索三重记账法,变革现有的会计行业。
我们可以得到这样的结论:如果我知道每个人“看到”相同的事物,那么我就不再需要花费巨大的成本建立自己的账本,不再需要花费巨大的成本进行账本审计和与其他每个人的账本进行对账、调账。账本自身就可以为我做这些事情。
所以,可复制、共享的账本可能取代现有的商业系统中的记账方式。
哪些领域需要双重记账(duplication)?
一个领域就是在商业逻辑之中(business logic)。在现实的商业中,有无数的这样的例子:合约的双方(或多方)分别独立地运行着一个计算/记账系统,对合约的条款进行建模。我有时候习惯于以银行为例,现在有几个非银行的例子:
大型线上零售商可能拥有一个系统,检查他们从快递公司收到的账单是否正确:所有商量好的打折都实行了吗?
大型杂货店与供应商就打折问题,达成复杂的合约协议。折扣的大小与一定时期内的销售量和许多其它因素有关。我们可以确信:合约的双方都已经开发出一套非常成熟的合约模型,并做成了软件。
以上几个例子的共同点是:合约的每一方都需要独立的手段计算自己在合约中拥有的价值。他们不能相信对方。所以,每一方不得不建立自己的计算/记录系统。这会造成浪费,还需要对账、调账等。
但是回到我在上文所讲的:对于一个可复制、共享的账本,每个人都知道每个人看到的事情是相同的,一方不需要相信另一方是诚实的。
现在想象一下,你的账本也可以运行计算机代码。你需要做的是:
当你与某人商定合约时,你也同意一份代码版的合约。
“合约使用哪个外部数据的信息源,怎么解决纠纷”,双方需要达成共识。
双方都仔细检查代码,确信不存在后门或者恶意漏洞。你也可以进行测试,查看它产生的答案是否正确。双方对它感到满意后,签字并部署到账本上。
现在双方都不需要花费精力在自己的系统中重新实现合约条款,双方都知道这段代码能够同时满足各自的目的。因为它运行在可复制、共享的账本,双方都能够确信程序的输出结果对两个人来说是一样的。
但是我们可以更加科幻
到目前为止,我已经描绘了一种十分平常的应用场景:代表双方或多方之间合约协议的计算机程序。但是,请记住:我们正在构想一个这些程序运行在可复制、共享的账本上的新世界。
如果这些程序能够与账本进行交互,会怎样?程序能够控制账本上的资产,你甚至可以向程序发送资产。所以,它不再只是一个计算机程序,而是一个自足的经济活动参与者。
回到上面提到的杂货店的例子:杂货店可以通过向计算机程序发送货款(数量为A),对供应商进行支付。程序可以计算出可能的折扣额(数量为B),然后将A-B(A减去B)数量的钱发给供应商,但是暂时保管折扣额B–因为我们只有到月底的时候才能确定地知道折扣率。到了月底,合约会将保管的B正确地计算并发给各方。
这个程序不再只是一个计算机程序:它自己就是一个参与者。它对接收到的信息进行回应,它可以接收和储存价值,也可以向外发送信息和价值。
这个程序就像一个可以被信任的人,可以临时保管资产,总是按照事先的规则执行操作。
我认为这就是人们谈论智能合约时想要表达的想法。
下面这个示意图就是我的智能合约模型:一段代码(智能合约),被部署在分享的、复制的账本上,它可以维持自己的状态,控制自己的资产和对接收到的外界信息或者资产进行回应。
我自己的智能合约模型:它是运行在可复制、共享的账本上的计算机程序,可以处理信息,接收、储存和发送价值。
理论上的问题
这就是智能合约的本质。如果更加正式一点,智能合约定义可能如下:
智能合约是由事件驱动的、具有状态的、运行在一个复制的、分享的账本之上的、且能够保管账本上资产的程序。
这只是我的临时性定义。智能合约还有许多理论问题没有解决。我总结了一下,以供将来的研究。
导入真实世界信息
智能合约十分依赖于发送给它的信息的质量。“预言机”和“m个中选n个”(n-of-m)方案可以帮助解决问题。但是,我认为还应该考虑:如果信息源消失了,如果以前独立的信息源合并,如果新的更好的信息源出现了,该怎么办?
构建模型
如果可以有多种方式(例如,程序直接作为账本上的资产或者作为合约)为世界各种现象构建模型,最终选择哪一种,这可能是一种商业上的问题。需要出现最佳实践,以正确的方式为不同的真实世界现象建立模型。
处理程序错误
你写过没有bug的程序吗?智能合约部署后,发现它存在bug,明显地有利于合约的一方,该怎样进行修复? 就像律师可以通过发现合约中的漏洞,赚到许多钱一样,会出现一种通过发现智能合约中的漏洞赚钱的“工程师-律师”吗?
流动性
如果资产由智能合约保管,那么这些资产任何人都不能使用。这将改变许多商业模式的经济逻辑。
合法性
智能合约具有与“真正”合约一样的法律效力吗?如果智能合约的结果违背法律,或者法庭发现它有合约法冲突,怎么办?
隐私
大多数分享的、复制的账本都是公开的。我不知道有多少零售商同意公开自己与供应商之间的合约。
技术问题
底层技术能够满足需要吗?可以进行扩展吗?等等
其它更多的问题
但是,我十分确信社区中的聪明人都在关注并解决这些问题。所以,也许问题只有一个:哪些引人注目的商业情景将率先采用智能合约?
如果你已经看到这里,理解我所说的,我力劝你研究萨博、Grigg和其他这个领域大神的著作,他们比我更好地解释了智能合约领域。