智能合约是怎么一回事
扫描二维码
随时随地手机看文章
根据谷歌趋势数据显示,目前,程序员对智能合约编程的兴趣已经处于历史最高水平,其中中国高居全球榜首,随着区块链技术的发展,相信日后智能合约将会与我们的生活密切相关,今天就为大家介绍一下什么是智能合约。
智能合约基本概念
智能合约英文名称Smart Contract,90 年代由跨领域法律学者尼克·萨博(Nick Szabo)博士首次提出的,几乎与互联网同龄。但由于缺少可信的执行环境,智能合约并没有被应用到实际生活中,然而由于区块链的诞生他开始重新走入人们视野,并逐步开始得到重视和应用。
不同于法律意义上的合约概念,区块链领域的合约表达的是可以“自治自理”的 计算机协议,这套协议具有自我执行、自我验证的属性。
如果完全从技术角度来看,智能合约等价于一段事先就被规定好逻辑和条款的计算机代码被激活运行的状态,同时,智能合约也提供了通用的用户接口,用户可以通过接口与用户交互。
从定义中我们可以得知,智能合约由多个协议组成,这些协议包含了用户接口,能表达用户的承诺,它可以安全有效地确定公共网络上的关系。
换句话说,智能合约是一个由计算机处理、可执行合约条款的交易协议,其总体目标是满足协议既定的条件,例如支付、抵押、保密协议。这可以降低合约欺诈造成的损失,降低仲裁和强制执行所产生的成本以及其他的交易成本。
我们举个实际的例子解释一下,今年 4 月 9 日,上海某建设银行支行开放了“无人银行”,银行中充斥了众多机器和显示屏,智慧柜员机、VTM 机、外汇兑换机、VR 设备和两台机器人代替了传统的柜台。
这里的智慧柜员机、外汇兑换机器人众多电子设备都可以认为是智能合约的一种表现形式,用户在办理银行业务时,如办理大额汇兑业务,业务流程和逻辑依据已经定在程序中,用户只需要按照操作一步一步进行,办理完成后即可获得单据。
这里“既定的业务流程、机器人模样的人机交互界面、双方同意承诺”组成了智能合约的概念,它甚至具有一定的法律效力。
萨博提出的是智能合约的概念,以及我们举的例子,都是广义的智能合约概念。智能合约具有多种实践形式,而在区块领域所说的智能合约概念,我们其实是指 Blockchain-based 这种形式。
在萨博的智能合约概念中提到了开放式网络,而我们知道开放式网络的基本要求就是拜占庭容错,通过前面文章的讲解我们知道,区块链天然具有拜占庭容错特性。所以如果在区块链上实践智能合约这个概念,两者会非常契合,天造地设。
首先实践了智能合约这一概念的是比特币,比特币脚本(bitcoin script)包含了 5 种标准交易脚本,这些脚本的功能不仅仅提供了普通单人支付的情况,它还提供了多方共同签名支付的脚本,叫做多重签名支付,多重签名支付可以看成是萨博语义下的智能合约。
除了比特币,将智能合约这个概念发扬光大的区块链项目就是以太坊了,2013 年底以太坊的创始人 Vitalik 发布了白皮书《以太坊:下一代智能合约和去中心化应用平台》,并一直致力于将以太坊打造成最佳智能合约平台,所以说 比特币引领区块链,以太坊复活智能合约。
智能合约与以太坊
以太坊 Ethereum 项目的目标是打造一个去中心化的新一代互联网应用平台,这个平台称作 Dapp 平台。
这些 Dapp 基于以太坊智能合约虚拟机开发、编译、部署,并且可以自定义业务逻辑,部署后全网可见且自动执行,理想情况下不存在宕机、审查、欺诈、第三方干预的情况。
以太坊核心概念包括:智能合约虚拟机 EVM 和 Solidity 编程语言、账户模型、以太币和 Gas,交易和消息。
以太坊的核心概念首先是智能合约,智能合约包含两部分,一部分是开发语言,主要以 Solidity 为主,Solidity 与 Javascript 语言在使用上十分接近,这极大地降低了 Dapp 开发人员的学习成本。
Dapp 开发者编写好代码以后,使用 Solidity 编译成十六进制字节码,然后部署到 EVM 上,也就是把合约广播到全网,等矿工打包后就形成了常年运行的 Dapp 了。
另一部分就是EVM,EVM是以太坊智能合约虚拟机,我们可以等价理解它为 Javascript、Python 等脚本语言的执行引擎。
它是一个轻量级的虚拟机隔离环境,它并不提供访问本地网络、进程、文件系统的功能,它更像是一个封闭的容器,这个容器里面装了一个正在运行Dapp,可以看成是无法和外界交互的 Docker Container。
Dapp 在运行过程中,可以被请求或其他事件触发,然后执行相应的逻辑,这些请求和事件是由以太坊上的交易产生的,不是来自本地操作系统的事件。
Dapp 运行过程中,每次状态发生变化,则意味着全网同步更新,大家的计算结果都是一致的,这有两个特性:
1、所有 Dapp 的计算结果经过全网共识,一旦确认过几乎无法被伪造和篡改;
2、由于必须经过全网共识,所以这限制了整个网络的容量。
智能合约示例代码
这里以生活中常见的双方打赌场景为切入点,写一个简单的合约代码,比如,张三和李四打赌,周末拜仁和皇马的足球比赛谁会赢。如果拜仁赢了,张三给李四 100 元;如果反过来,李四给张三 100 元;如果打成平局,则不赢不输。
张三和李四都怕对方不认账,所以,他们需要找一个他们都信得过的人来做公证,两人都把 100 元钱给这个公证人。然后,如果拜仁赢了,公证人把全部 200 元给李四;如果皇马赢了,则全部给张三;如果是平局,则分别退还 100 元。
上面这个模型什么都好,就是有一个问题,这个“公证人”跑路了怎么办?因为他们只赌 100 元,公证人犯不着为了 200 元跑路。但是,如果有一万人把赌金交给公证人呢?如果张三李四赌金是 100 万呢?公证人的人性会受到极大的挑战,他还有那么可信吗?针对此问题只需将双方的赌局约定写入智能合约,通过智能合约执行这一问题即可迎刃而解。
合约代码如下:
目前Solidity 是最受欢迎的智能合约编程语言,如果大家致力于区块链智能合约的开发可以学习下Solidity 这门语言。
关于区块链与智能合约的误解
误解 1. 区块链技术的主要受益者是不法分子
区块链技术最初进入大众视野的时候,基本被描述为犯罪中心,尤其是在暗网上。尽管区块链逐渐作为安全业务解决方案被广泛接受,人们还是有着区块链可以让罪犯匿名作恶的负面联想。
然而,恰恰相反的是,大多数的公共区块链都是完全可跟踪和安全的,因为该技术可以让公司企业跟踪自身与客户之间的所有信息往来。
误解 2. 区块链不可更改不会被黑
虽然区块链是公司企业可用的最安全选择之一,然而,却没有哪一种系统是 100% 对黑客和更改免疫的。
理论上,区块链网络中的任何个人或组织,都可以集结足够多的挖矿资源来夺取控制权,虽然这种事情发生的可能性很低。
误解 3. 政府可以关停区块链网络
实际上,区块链网络的去中心化特性决定,除非每个网络的参与者都停止使用,否则几乎不可能关停任何一个区块链网络。无法关停,正是区块链技术之所以成为安全业务解决方案极佳选择的众多因素之一。
误解 4. 智能合约就是具有法律约束力的合同
事实上,智能合约只是程序里的一段代码,按照交易双方之间的协议说明执行。它没有任何法律的约束力,而且它们也只能在区块链的网络中存在。与其将智能合约看作是真正的合同,不如说它们更像是某种安全工具。
误解 5. 智能合约操作完全自治
有些人认为,智能合约是完全自治的,能够自主分析自身环境并响应任何修改。事实上,智能合约之所以是安全解决方案的原因之一,就在于它们只会在收到交易或消息时执行。
误解 6. 所有智能合约都有相同特征
很多人对于区块链技术和智能合约都有的误解是,世界上就一种区块链技术或者只有一种智能合约。其实,根据所依托的区块链网络不同,智能合约的功能特性完全不同。