# 智能合约

By [DK](https://paragraph.com/@iamdk) · 2022-05-11

---

第一篇
---

智能合约是 1990s 年代由尼克萨博提出的理念，几乎与互联网同龄。由于缺少可信的执行环境，智能合约并没有被应用到实际产业中，自比特币诞生后，人们认识到比特币的底层技术区块链天生可以为智能合约提供可信的执行环境，以太坊首先看到了区块链和智能合约的契合，发布了白皮书《以太坊：下一代智能合约和去中心化应用平台》，并一直致力于将以太坊打造成最佳智能合约平台，所以比特币引领区块链，以太坊复活智能合约。

怎样向尚未接触过比特币理念的人介绍以太坊及智能合约在金融合约方面的应用？下面是一种尝试。首先介绍区块链，解释它为什么值得人们的信任，其次介绍智能合约，然后介绍以太坊系统，最后介绍智能合约与金融合约的结合。

### 比特币的共识机制

比特币的核心技术区块链可以理解成可复制、共享的账本。

比特币的最核心创新：它教会世界如何在不需要信任第三方的情况下远距离转移价值。

人们当然可以面对面地转移实体纸币，但是，在比特币出现以前，我们做不到：在不需要信任中心化第三方机构（邮局、银行等）的情况，远距离向某人转移价值。

就好像银行和支付系统的传统转账模式的基础设施被重构为点对点支付网络。这种转变如下图所示：

  

比特币打开了点对点的电子价值转移模式的大门，完全不同于现在的银行系统、中央银行和支付系统。 但是，上面的图并没有解释比特币是怎样实现点对点价值转移的。

答案是：比特币系统建立在“可复制、共享的账本”之上。比特币网络中的每个参与者（完全节点）拥有一个完整的交易账本的副本，这一系统的神奇之处在于：它是如何做到使每个人的副本与其他人的副本保持一致的。

所以，正确的示意图应该是下图，每个参与者都能够从相同的可复制、共享的账本中获取信息。

比特币和其它去中心化共识系统的窍门在于：它们怎样保证每个有一个账本的副本，并使每个人确信自己的账本与别人的账本是同步的。

如果每个人拥有的账本的副本是相同的，那么人们就不再需要一个中心化的机构记录谁拥有什么。当你的账本更新，记录一笔新的资产所有权变动时，其他人的账本也会发生相同的变动。

比特币和其他去中心化共识系统的窍门在于：他们怎样保证每个有一个账本的副本，并使每个人确信自己的账本与别人的账本是同步的。

如果每个人拥有的账本的副本是相同的，那么人们就不再需要一个中心化的机构记录谁拥有什么。当你的账本更新，记录一笔新的资产所有权变动时，其他人的账本也会发生相同的变动。

### 智能合约

  

￼

智能合约模型：它是运行在可复制、共享的账本上的计算机程序，可以处理信息，接收、储存和发送价值。

### 以太坊系统

以太坊项目借鉴了比特币区块链的技术，对它的应用范围进行了扩展。如果说比特币是利用区块链技术的专用计算器，那么以太坊就是利用区块链技术的通用计算机。简单地讲，以太坊 = 区块链 + 智能合约。

与比特币相比，以太坊最大的不同点是：它可以支持更加强大的脚本语言（用技术语言讲就是图灵完备的脚本语言），允许开发者在上面开发任意应用，实现任意智能合约，这也是以太坊的最强大之处。作为平台，以太坊可以类比于苹果的应用商店，任何开发者都可以在上面开发应用，并出售给用户。

以太坊智能合约的金融应用

每一类金融合约都可以程序代码的形式写成智能合约。

#### 差价合约

金融衍生品是“智能合约”的最普遍的应用，也是最易于用代码实现的之一。实现金融合约的主要挑战是它们中的大部分需要参照一个外部的价格发布器；例如，一个需求非常大的应用是一个用来对冲以太币（或其它密码学货币）相对美元价格波动的智能合约，但该合约需要知道以太币相对美元的价格。最简单的方法是 通过由某特定机构（例如纳斯达克）维护的“数据提供“合约进行，该合约的设计使得该机构能够根据需要更新合约，并提供一个接口使得其它合约能够通过发送一 个消息给该合约以获取包含价格信息的回复。

当这些关键要素都齐备，对冲合约看起来会是下面的样子：

等待A输入1000以太币。

等待B 输入1000以太币。

通过查询数据提供合约，将1000以太币的美元价值，例如，x美元，记录至存储器。

30天后，允许A或B“重新激活“合约以发送价值x美元的以太币（重新查询数据提供合约，以获取新价格并计算）给A并将剩余的以太币发送给B。

#### 代币系统（token system）

区块链上代币系统有很多应用，从代表如美元或黄金等资产的子货币到公司股票，单独的代币代表智能资产，安全的不可伪造的优惠券，甚至与传统价值完全没有联系的用来进行积分奖励的代币系统。在以太坊中实施代币系统容易得让人吃惊。关键的一点是理解，所有的货币或者代币系统，从根本上来说是一个带有如下操作的数据库：从A中减去X单位并把X单位加到B上，前提条件是(1)A在交易之前有至少X单位以及(2)交易被A批准。实施一个代币系统就是把这样一个逻辑实施到一个合约中去。

#### 储蓄钱包

假设Alice想确保她的资金安全，但她担心丢失或者被黑客盗走私钥。她把以太币放到和Bob签订的一个合约里，如下所示，这合同是一个银行：

Alice单独每天最多可提取1%的资金。

Bob单独每天最多可提取1%的资金，但Alice可以用她的私钥创建一个交易取消Bob的提现权限。

Alice 和 Bob 一起可以任意提取资金。

一般来讲，每天1%对Alice足够了，如果Alice想提现更多她可以联系Bob寻求帮助。如果Alice的私钥被盗，她可以立即找到Bob把她 的资金转移到一个新合同里。如果她弄丢了她的私钥，Bob可以慢慢地把钱提出。如果Bob表现出了恶意，她可以关掉他的提现权限。

#### 作物保险

一个人可以很容易地以天气情况而不是任何价格指数作为数据输入来创建一个金融衍生品合约。如果一个爱荷华的农民购买了一个基于爱荷华的降雨情况进行反向赔付的金融衍生品，那么如果遇到干旱，该农民将自动地收到赔付资金而如果有足量的降雨他会很开心因为他的作物收成会很好。

#### 多重签名智能合约

比特币允许基于多重签名的交易合约，例如，5把私钥里集齐3把就可以使用资金。以太坊可以做得更细化，例如，5把私钥里集齐4把可以花全部资金，如果只3把则每天最多花10%的资金，只有2把就只能每天花0.5%的资金。

第二篇
---

以太坊（ETH）大家是清楚的，目前市值第二的 token，少有的带有完整生态的项目，其潜力被大众所看好。

以太坊其实就是一个“智能合约系统”，被称为“区块链2.0”的代表性产物，是一种可以自动化执行的简单交易。智能合约正在受到越来越多的关注，理解其基本原理，对我们广大普通投资人，百利而无一害。

今天我们就用最简单的例子来告诉大家，“智能合约”并没有那么神奇，相反它是一种非常贴近我们生活，非常贴近具体应用场景的一项区块链技术。

### 传统合约 vs 智能合约

在现实社会中，我们会在很多场景下，去签一些合同。

合同，用来约束双方的经济行为。

但是我们一直都面临着各种问题，比如老赖、拖延、毁约...就是说，即使我们签了合同，也无法保证在合同期内，双方就一定能完整履行合同内的承诺。

举个例子：

你和朋友打赌，天气预报预测的明日天气准不准，赌注 20 块钱，你赌准，他赌不准。到了第二天，天气果然和天气预报说的一样，那么他应该支付你 20 块钱，但是你的朋友耍赖，就是不给你 20 块，而你也没什么办法。于是这个合约（这里是打赌的形式）等于毫无意义，其信用价值不能生效，不开心。

为了让合约具有效用，现实场景中一般是怎么处理的呢？

为了保证对赌结果能正常执行，你们找了一个可信任中介人，把各自的 20 块钱先放到中介那里，然后由中介来执行判定和交易，避免了当事人爽约。这样总可以了吧。

但是第二天，中介又为难了，因为天气预报说的是多云，而实际天上的云不多也不少。你认为这样的天气就是多云，而你的朋友认为这样的天气不是多云。中介也是人，能力有限，掰扯不清这天的天气到底算不算多云。于是在判断天气到底是不是符合昨天天气预报的预测上，又出了问题。

最后一番争吵过后，中介决定一般云也算多云天气，你赢了这个对赌，正准备给你 40 块钱的时候，发现钱没带，于是只好等第二天才能把钱给你。

所以可以看到，传统的合约会受到各种维度的影响：自动化维度，主客观维度，成本维度，执行时间维度，违约惩罚维度，适用范围维度等等。

这个时候，智能合约出现了，它可以基本解决这些问题。

你只需要提前规定好合约内容，程序就会在触发合约条件的时候自动执行合约内容。事前定好所有的规则，然后交由最不易出现信用问题的程序来执行结果，判定规则也必须在事前约定好。

譬如，

你规定合约的内容是明天中午 12 点判断天气是否和天气预报一样，一样则你赢；

其中，超过一半云就算多云，否则不算；第二天中午12点合约执行，发现是多云天气，你赢了；钱自动打到你账上。

例子举得比较简单，但你可以领会到智能合约能解决的一些问题。这里放出智能合约的官方解释，加深大家的理解：

“ 智能合约是一套以数字形式定义的承诺，承诺控制着数字资产并包含了合约参与者约定的权利和义务，由计算机系统自动执行。”

“智能合约程序不只是一个可以自动执行的计算机程序，它本身就是一个系统参与者，对接收到的信息进行回应，可以接收和储存价值，也可以向外发送信息和价值。这个程序就像一个可以被信任的人，可以临时保管资产，总是按照事先的规则执行操作。”

### 智能合约&区块链

有一些朋友可能会问，上面说的智能合约，不就是一段条件判断的代码嘛，现在很多担保网站或系统不是也一样嘛，像淘宝的交易流程，不也是买家付款到系统里，然后卖家发货，买家收到货，系统再把钱打给卖家。这不早就实现了嘛？

嗯，是的，智能合约的理念实际上很早就被提出来了，最早可以追溯到 1994 年，几乎与互联网同时出现。

而给予这个概念一个准确的名字“智能合约”的是密码学家尼克萨博，在那个时候，萨博的关于智能合约如何工作的理论还没有实现，因为没有天生的能够支持可编程交易的数字金融系统，这是一种极具前瞻性的理念。

“智能合约的工作理论迟迟没有实现，一个重要原因是因为缺乏能够**支持可编程合约的数字系统和技术**。”

比特币的出现和广泛使用，改变了阻碍智能合约实现的状况，从而萨博的理念有了重生的机会，智能合约被再次重视。

“区块链技术的出现解决了该问题，不仅可以支持可编程合约，而且具有去中心化、不可篡改、过程透明可追踪等优点，天然适合于智能合约。因此，也可以说，智能合约是区块链技术的特性之一”

区块链的特性是：数据无法删除、修改，只能新增，保证了历史的可追溯，同时作恶的成本将很高，因为其作恶行为将被永远记录；去中心化，避免了中心化因素的影响。

像上面说的淘宝那套支付担保系统，依然是中心化的，合约是否公正或正常执行，也全靠中心来决定。如果中心要作恶，我们依然没有办法。

这个时候智能合约又站出来了。

基于区块链技术的智能合约，不仅可以发挥智能合约在成本效率方面的优势，而且可以避免恶意行为对合约正常执行的干扰。将智能合约以数字化的形式写入区块链中，由区块链技术的特性保障存储、读取、执行整个过程透明可跟踪、不可篡改。同时，由区块链自带的共识算法构建出一套状态机系统，使智能合约能够高效地运行。

二者的配合可以说是天时地利。

### 智能合约の应用场景

智能合约能应用的场景非常广泛，譬如房租租赁、差价合约、代币系统、储蓄钱包、作物保险、金融借贷、设立遗嘱、证劵登记清算、博彩发行等。

智能合约的构建及执行分为如下步骤：

*   智能合约的构建：由区块链内的多个用户共同参与制定一份智能合约；
    
*   智能合约的存储：智能合约通过 P2P 网络扩散到每个节点，并存入区块链；
    
*   智能合约的执行：智能合约定期进行自动机状态检查，将满足条件的事务进行验证，达成共识后自动执行并通知用户。
    

我们以房租租赁场景举个例子：

大家知道老九村是一个基于区块链交易系统的村子，村里的阿花租给阿明一套房子，租金 500，月付，租一年。房子的锁是密码锁，需要阿花生成的开锁秘钥打开。

智能合约执行步骤：

阿花和阿明的合约提交给村里的智能合约服务器，服务器发布到区块链上生效。

阿花将开锁秘钥和账户地址提供给智能合约服务器。

阿明向服务器支付 500 \* 12 = 6000 枚 token 作为抵押。

合约开始执行，服务器从阿明的抵押资金中扣除 500，发给阿花的账户，并把房子的开锁秘钥发给阿明，记录记到区块链。

每个月1号智能合约都会检查租约时间，没到期，就会自动扣除租金，然后把新的开锁秘钥发给阿明。

如果租约到期，服务器生成一条合约记录，标志合约终止，并发布到区块链上，合约终止。

整个过程受到老九村村委会监督，村委会可以随时查看合约执行情况。

这样，阿花和阿明什么事都不用做，就完成了这套交易。当然不同的场景合约条件和内容也是不尽相同的。

总结

随着区块链技术的到来，智能合约与区块链的结合可能会让人类社会结构产生重大变革。

智能合约解决了传统合约中的信任问题，大幅降低了信任成本，虽然智能合约还有一些问题，但随着技术的不断发展，必然会走向一个好的发展之路。

---

*Originally published on [DK](https://paragraph.com/@iamdk/2FqJzaCnz5aJJRuFeTaj)*
