# 1.6 智能合约

一个[智能合约](https://blockchainhub.net/blog/infographics/smart-contracts-explained/)就是一段在一个区块链顶端运行 的计算机代码，这段代码中包含有一系列的条件，这些条件是参与合约的个方都认可的。 当这些条件都满足时， 这个合约就会自动的进行。 智能合约的代码对于协商合同， 执行合同，验证执行合同后，或者交易的表现，变得容易可行。 智能合约是去中心自动化最简单的一种形式。智能合约运作的机制是： 合约中包含有数字资产，参与合约的双方或者多方，在这些参与方中，一方或者多方把数字资产存到智能合约里，然后这些资产将根据一个基于数据的准则，自动的重新分配到参与合约的其他方。

![图：智能合约；来源：https://blockchainhub.net/smart-contracts/](/files/-LEnvDPzp4yOabgNbVhH)

智能合约一词有一点点令人遗憾，因为它并不“智能”，也不会和合法的合约混淆：

* 一个智能合约，只能与编码时考虑到所有可用信息的人员一样聪明。
* 如果某些条件得到满足，智能合约有可能成为合法合同，但是智能合约不应该与法院和执法部门接受的法律合同混淆。然而，在接下来的几年中，我们可能会看到一系列法律合同和智能合约随着技术变得更加成熟和普遍，以及法律标准被采用而涌现出来。

## 消减交易的成本

你会与你从未见过的人签订合同吗？ 你会同意借钱给埃塞俄比亚的一些农场主吗？ 你会成为在战区的少数民族报纸的投资人吗？你是否会为通过互联网购买5美元购买法律有约束力的合同而烦恼？ 对于大多数人来说，这些问题的答案是否定的。因为这些例子的交易成本超过了价值转入。

智能合约这一术语是由区块链进行的，最初由尼克·萨博（Nick Szabo）在1996年提出。目标是提供比传统合同法高的安全性，并降低与合同有关的其他交易成本。可自动执行的代码 - 无论是在协议级还是在应用程序的级别上 - 标准化交易规则，从而通过以下几个方面降低交易成本:

* 达成共识
* 形成协议
* 执行协议

智能合约可以正式确定人员，机构和他们拥有的资产之间的关系。智能合约的交易规则集（协议）定义了智能合约的当事方同意的条件 - 权利和义务 - 。 它通常是预先就定义好的，并且是一致的通过简单的选择性行动达成。该交易规则集以数字（通过机器可读的代码）  形式化。这些在智能合约中确立的权利和义务现在可以由计算机或计算机网络自动执行，只要双方都有达成协议并符合协议的条件（执行）。

虽然“智能合约”这个概念并不新颖，但区块链技术对于智能合约实施似乎是催化剂。 智能合约最原始的形式是自动售货机。该交易规则被编入机器。你通过按相关的号码来选择产品，投入硬币，机器作为智能合同检查您是否投入足够的钱。如果是，机器将被编程为你弹出产品，如果投入的过多的钱，机器将补给你多余的钱。如果你没有投入足够的钱，或者机器用完了零钱，你投入的钱机器会还给你。自动售货机不仅降低了交易的人工成本，而且也扩大了服务范围，提供7\*24便利性而且不用受到传统商店营业时间的限制。

| **智能合约是...**                        | **智能合约可以...**                                                        |
| ----------------------------------- | -------------------------------------------------------------------- |
| <p> - 自我验证<br> - 自我执行<br> - 防篡改</p> | <p> - 将法律义务转化为自动化流程<br> - 保证更高的安全性<br> - 减少对可信中介的依赖<br> - 降低交易成本</p> |

智能合约能够实时跟踪绩效，并可带来巨大的成本节省。合规和控制发生在这个进程中。为了获得外部信息，一个智能合约需要[信息数据库](https://blockchainhub.net/blockchain-oracles/)，它为智能合约提供可触发交易的外部信息。

## 智能合约的例子

 如果A和B不知道也不相互信任，他们通常需要一个值得信赖的第三方来担任中介来验证交易并执行它们。借助智能合约和区块链，你不再需要 为了弄清楚或处理你的交易 而去找这些可信任的中介。用购买和销售汽车作为一个例子：如果爱丽丝（Alice）想从鲍勃 (Bob) 购买一辆汽车，这一流程需要一系列可信赖的第三方中介去验证和认证交易。这个流程因国而异，但总是涉及至少一个，通常更多可信任的第三方中介：机动车登记机关， 与公证人​​和/或保险公司。这是一个复杂而漫长的过程，而且这些中间商收取相当可观的费用。

![图：今天购买一辆车的流程；来源：https://blockchainhub.net/smart-contracts/](/files/-LEnwri6k0A50dD9IXeb)

在区块链上，一旦所有相关机构和公司都在区块链上，智能合约就可以用于定义有效完善销售的所有规则。如果Alice想在区块链合同中用智能合约从Bob那里买车，交易将由区块链网络中的每个节点验证看看鲍勃是否是车主，如果爱丽丝有足够的钱支付鲍勃。

![图：在区块链上购买一辆车的流程；来源：https://blockchainhub.net/smart-contracts/](/files/-LEnxHQMoK3ej_OsXdTO)

如果网络同意这两个条件都成立，Alice会自动获取车库智能锁的密码。区块链将Alice注册为汽车的新所有者。Bob将会有20,000欧元到他的账户上，Alice的账户上将减去€20,000。这一流程不要求中间人。在区块链上，谁拥有什么是透明的并且同时匿名或假匿名。这意味着每台运行在区块链协议上的电脑都可以检查某个人是否是该车的合法拥有者。偷车将不会像今天那么容易，特别是一旦我们有智能钥匙授权访问控制。通过区块链验证，解锁我们未来的车辆。作为车主，您可以授权其他人来驱动它（陈述相应个人的公钥）。在这种情况下打开汽车只能通过区块链上的智能钥匙才能实现。

![图：我们可以相信区块链；来源：https://blockchainhub.net/smart-contracts/](/files/-LEnxouQGhPBAcx2TZgU)

## 智能合约的种类

区块链和智能合约有可能扰乱许多行业。比如说：银行，保险，能源，电子政务，电信，音乐和电影业，艺术界，移动业务，教育等等。智能合约使用案例从简单到复杂。  

时间戳服务，如ascribe（艺术登记）或政府和半政府登记处（土地 头衔，出生证明，学校和大学学位）都是简单的技术用例,（监管方面可能更为复杂）。另一方面，去中心化，自发的组织则是智能合约中最复杂的形式。 TheDAO在2016年是一个复杂的智能合约的例子。

 鉴于区块链仍然是一项新技术，一些行业可能会在稍后采用智能合约，特别是如果他们受到政府的严格监管或需要很高的网络效率 - 如供应链中广泛采用的技术，标准化等。 一般来说，建议从一个不太复杂的用例，小型试点项目开始，以建立专业知识并更好地理解技术，在稍后阶段转向更复杂的用例。

## 智能合约编程

Solidity 是一种智能合约编程语言。语法与JavaScript类似，而且是旨在编译为以太坊虚拟机代码，创建投票合同，众筹，秘密竞价拍卖，多重签名钱包等等。

* [Official Solidity Documentation](https://solidity.readthedocs.io/en/latest/), Ethereum Foundation
* [Solidity Tutorial](https://medium.com/@ConsenSys/solidity-integration-with-visual-studio-8bdab2ff8a74#.6hh9erum2), using Visual Studio
* [Solidity Code Snippets](https://github.com/ethereum/wiki/wiki/Standardized_Contract_APIs), useful for Ðapp development
* [Accessing Contracts & Transactions](http://ethdocs.org/en/latest/contracts-and-transactions/accessing-contracts-and-transactions.html#interacting-with-smart-contracts) : Interacting with smart contracts
* [Integrated development platform](https://ethereum.github.io/browser-solidity/#version=soljson-latest.js) (IDE) browser based with integrated compiler and solidity runtime environment without server-side components
* [Ethereum Solidity Gitter chat channel](https://gitter.im/ethereum/solidity)
* [Remix](https://github.com/ethereum/remix) : IDE that allows developers to build and deploy contracts and decentralized applications on top of the Ethereum blockchain
* [The Hitchhiker’s Guide to Smart Contracts in Ethereum](https://medium.com/zeppelin-blog/the-hitchhikers-guide-to-smart-contracts-in-ethereum-848f08001f05), Manuel Aráoz, Medium
* [Truffle](https://github.com/trufflesuite/truffle) : The most popular Ethereum development framework, Github

## 资料来源 & 延伸阅读

* Nick Szabo, [Smart Contracts](http://w-uh.com/download/WECSmartContracts.pdf)
* Check out our [Smart Contract Infographic](http://blockchainhub.net/blog/infographics/smart-contracts-explained/)
* Internet of Agreements: [Building the Hyperconnected Future on Blockchains](http://internetofagreements.com/files/WorldGovernmentSummit-Dubai2017.pdf) - why smart contracts could change the way people do business: by [Hexayurt.Capital](http://hexayurt.capital/) in collaboration with [ConsenSys](https://consensys.net/)
* [Smart Contracts](https://medium.com/@heckerhut/whats-a-smart-contract-in-search-of-a-consensus-c268c830a8ad) , Florian Glatz&#x20;
* [OpenLaw](https://media.consensys.net/introducing-openlaw-7a2ea410138b), Consensys


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://daoone.gitbook.io/blockchain-handbook/blockchain-basics/smart-contract.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
