智能合约从入门到精通:智能合约的前世今生

简介:区块链技术由来已久。2008年,神秘的日裔美国人中本聪天才设计出来的电子货币系统:比特币,为人类打开了区块链的大门。2009年,他发布了首个比特币软件,并正式启动了比特币金融系统。依靠POW算法的比特币随着人们认知,2016年以后区块链也为人们所追捧。而以太坊的快速发展,区块链已经进化出智能合约、DApp等新的技术,区块链2.0、3.0时代也正在来临。本文将详细介绍智能合约是什么。
区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。所谓共识机制是区块链系统中实现不同节点之间建立信任、获取权益的数学算法。这套理论由中本聪在2008年提出,并在2009年发布了首个比特币软件。
比特币基于Pow算法:通过与或运算,计算出一个满足规则的随机数,即获得本次记账权,发出本轮需要记录的数据,全网其它节点验证后一起存储,以工作量证明其价值。虽然其完全去中心化的特点是区块链的核心思想,也暴露出比特币Pow共识算法的弊端:资源大量浪费、共识达成的周期较长和易分叉。
于是,以太坊以Pos+Pow相结合公式算法给出区块链更大的发展空间,也应运而生出智能合约这一概念。
那什么又是智能合约呢?

首先,我们希望大家了解智能合约的本质。同时,在人们了解智能合约的时候,也解除大家对区块链在法律上面的误解。

智能合约不是一个新的概念。“智能合约”(smart contract)这个术语至少可以追溯到1995年,是由多产的跨领域法律学者尼克·萨博(Nick Szabo)提出来的。他在发表在自己的网站的几篇文章中提到了智能合约。他的定义如下:
智能合约(英语:Smart contract )是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易。这些交易可追踪且不可逆转。
承诺
一套承诺指的是合约参与方同意的(经常是相互的)权利和义务。这些承诺定义了合约的本质和目的。以一个销售合约为典型例子。卖家承诺发送货物,买家承诺支付合理的货款。
?
数字形式
数字形式意味着合约不得不写入计算机可读的代码中。这是必须的,因为只要参与方达成协定,智能合约建立的权利和义务,是由一台计算机或者计算机网络执行的。
更进一步地说明:
(1)达成协定
智能合约的参与方什么时候达成协定呢?答案取决于特定的智能合约实施。一般而言,当参与方通过在合约宿主平台上安装合约,致力于合约的执行时,合约就被发现了。
(2)合约执行
“执行”的真正意思也依赖于实施。一般而言,执行意味着通过技术手段积极实施。
(3)计算机可读的代码
另外,合约需要的特定“数字形式”非常依赖于参与方同意使用的协议。
协议
协议是技术实现(technical implementation),在这个基础上,合约承诺被实现,或者合约承诺实现被记录下来。选择哪个协议取决于许多因素,最重要的因素是在合约履行期间,被交易资产的本质。
再次以销售合约为例。假设,参与方同意货款以比特币支付。选择的协议很明显将会是比特币协议,在此协议上,智能合约被实施。因此,合约必须要用到的“数字形式”就是比特币脚本语言。比特币脚本语言是一种非图灵完备的、命令式的、基于栈的编程语言,类似于Forth。
从理论到实践
剧透:如果你了解比特币协议、比特币货币和智能财产的概念,你可以跳过这一章节。
当萨博在近二十年以前,在网络提出了智能合约理论时,实践一直严重地落后于理论。一直没有如何将这个理念转变现实的清晰路径。
现在,技术已经赶上萨博富有远见的头脑,智能合约开始变得可行。在这二十年中发生了什么事情呢?
简而言之,萨博在他的智能合约定义中建立的协议,已经被进一步开发。它们已经以比特币协议的形式出现,或者更加一般地说,这些协议能够实现中本聪共识(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),虽然我不喜欢这种叫法。另外,架构事前执行,违约甚至不可能发生。
安全问题
智能合约是“执行合约条款的计算机交易协议”。区块链上的所有用户都可以看到基于区块链的智能合约。但是,这会导致包括安全漏洞在内的所有漏洞都可见,并且可能无法迅速修复。
这样的攻击难以迅速解决,例如,2016年6月The DAOEther的漏洞造成损失5000万美元,而开发者试图达成共识的解决方案。DAO的程序在黑客删除资金之前有一段时间的延迟。以太坊软件的一个硬分叉在时限到期之前完成了攻击者的资金回收工作。
以太坊智能合约中的问题包括合约编程Solidity、编译器错误、以太坊虚拟机错误、对区块链网络的攻击、程序错误的不变性以及其他尚无文档记录的攻击。
案例
部署智能合约的案例有:
以太坊在其区块链上实施了一种近乎图灵完备的语言,这是一个突出的智能合约框架。

RootStock(RSK) 是一个智能合约平台,通过侧链技术连接到比特币区块链。 RSK兼容为以太坊创造的智能合约。
未来展望
有一件事确定无疑:智能合约已经扎下根了。它们是真正的全球经济的基本构件,任何人都可以接入到这一全球经济,不需要事前审查和高昂的预付成本。它们从许多经济交易中,移除了对第三方的信任必要,在其它情况下,将信任转移到可以信任的人和机构。
智能合约怎样与合约法共存呢?本质上,它们是解决相同问题–以一种方式形成一种关系,使得承诺可以执行–的两种不同方法。就这一点而言,智能合约似乎是更好的解决方案:智能合约事前执行,不像法律系统一样,事后执行。然而,这是一种谬误。最后一次引用全能的萨博:
“合约法的成功和取代合约法所需的高额成本,使得保存和利用合适的原则,仍然很有价值。但是,数字革命正在剧烈地改变我们能够拥有的各种关系。在这个赛博时代,我们来之不易的法律传统中的哪一部分,将仍然具有价值?将这些法律原则应用到我们的线上关系设计,最好的方式是什么?”
本文内容援引百度百科及http://www.8btc.com/what-are-smart-contracts-in-search-of-a-consensus
关于矩阵元:矩阵元是一家全球领先的下一代计算机构领导厂商,致力于面向下一代价值互联网的计算架构,解决海量数据、边缘计算、人工智能技术条件下的数据流动性,推动基于隐私保护与密码安全的数据交换与协同计算。
请添加链接描述

原文地址:http://blog.51cto.com/13544628/2103101

时间: 2024-10-27 12:01:28

智能合约从入门到精通:智能合约的前世今生的相关文章

智能合约从入门到精通:智能合约的应用场景

简介:上一章我们简单介绍了区块链技术的发展情况,并详细介绍智能合约的基础概念.可以说,区块链1.0时代(比特币)除了代币功能,与现实生活相去甚远.智能合约的出现,给区块链带来了巨大的变化,区块链也从一种账本形式,变成了下一代计算网络的雏形.这一章我们将聊聊智能合约的应用场景.在上一篇文章中我们聊过,尼克·萨博对智能合约定义已经说的很清楚,智能合约不是一定要用区块链来实现,很久之前就已经出现了:比如微信和支付宝的信用卡自动还款,您可以认为他是一种智能合约.当还款日到了,还款条件也满足(支付宝的余额

智能合约从入门到精通:用Solidity开发一个“Hello World”

简介:上一章中我们聊到了智能合约的应用场景,在了解区块链技术目前的发展情况.智能合约的概念以及其应用场景之后,我们将在后续的文章中共同学习智能合约的编成语言.今天,我们就来简单地谈一谈用于编写智能合约的语言--Solidity语言. 那么,什么是Solidity语言呢?在前面的文章中我们反复提到过以太坊,以太坊做区块链2.0的典型代表,Solidity在以太坊中是撰写智能合约最受欢迎的语言,因此今天我们就和大家介绍一下这个作为智能合约开发中最主流的语言. Solidity是运行于Ethereum

智能合约从入门到精通:Solidity语言的开发规范和开发流程

简介:上面介绍的在Solidity中嵌入的内联汇编语言也可以单独使用.实际上,它是被计划用来作为编译器的一种中间语言.本文我们将介绍开发智能合约过程中Solidity语言的开发规范和开发流程. Solidity作为编译器的一种中间语言.在开发智能合约时需要遵守相应的开发规范和开发流程. 开发规范 命名规范 目录和文件 目录使用小写,请勿使用特殊符号: 库文件和合约文件统一以.sol为后缀: 合约文件名保持与合约名一致: 文件名采用驼峰命名(首字母大写): 合约.库文件命名 合约名采用驼峰命名(首

智能合约从入门到精通:完整范例

简介:前几篇文章我们一直在讨论Solidity语言的相关语法,从本文开始,我们将介绍智能合约开发.今天我们将介绍一个完整范例.此章节将介绍一个完整案例来帮助开发者快速了解合约的开发规范及流程.注意:在进行案例编写前,请先前往JUICE开放服务平台,完成用户注册,JUICE区块链账户创建:并下载.安装.配置好JUICE客户端.场景描述在案例实践前请确保已拥有可用的JUICE区块链平台环境!!!现假设一个场景,编写一个顾客管理合约.主要实现以下功能: 提供增加顾客信息功能,手机号作为唯一KEY: 提

智能合约从入门到精通:JIDE集成开发工具

简介:前面两节,我们介绍了JIDE的工具库,本节我们将介绍智能合约开发最后一段内容,JIDE集成开发工具.除了JIDE的安装,我们还将介绍智能合约的编写.编译.部署.运行以及查看日志等.您看过所有的内容之后,将可以完整的开发出一个智能合约.JIDE简介JIDE是JUICE开放服务平台提供用来编写智能合约及DApp的免费开发工具,JIDE集成了JUICE底层测试链.编辑器和Solidity运行时环境,用户无需搭建任何环境就可以快速地编写.编译.部署.运行智能合约与发布DApp.目前JIDE支持So

智能合约从入门到精通:Solidity语法之内存变量的布局和状态变量的存储模型

简介:在前面我们已经讲过Solidity语言的一些语法内容,在矩阵元JUICE开放平台的JIDE开发时,一定要注意Layout in Memory和Layout of State Variables in Storage,即内存变量的布局和状态变量的存储模型.内存变量的布局(Layout in Memory) Solidity预留了3个32字节大小的槽位: 0-64:哈希方法的暂存空间(scratch space) 64-96:当前已分配内存大小(也称空闲内存指针(free memory poi

智能合约从入门到精通:Solidity汇编语言

简介:上一节,我们讲过在JUICE平台开发智能合约的开发规范,本节我们将继续就Solidity定义的汇编语言进行更加深入的讨论.Solidity定义的汇编语言可以达到下述的目标:1.使用它编写的代码要可读,即使代码是从Solidity编译得到的.2.从汇编语言转为字节码应该尽可能的少坑.3.控制流应该容易检测来帮助进行形式验证与优化.为了达到第一条和最后一条的目标,Solidity汇编语言提供了高层级的组件比如,for循环,switch语句和函数调用.这样的话,可以不直接使用SWAP,DUP,J

智能合约从入门到精通:Solidity Assembly

简介:上一节,我们讲过Solidity 汇编语言,这个汇编语言,可以不同Solidity一起使用.这个汇编语言还可以嵌入到Solidity源码中,以内联汇编的方式使用.下面我们将从内联汇编如何使用着手,介绍其与独立使用的汇编语言的不同,最后再介绍这门汇编语言.Solidity Assembly内联汇编通常我们通过库代码,来增强语言我,实现一些精细化的控制,Solidity为我们提供了一种接近于EVM底层的语言,内联汇编,允许与Solidity结合使用.由于EVM是栈式的,所以有时定位栈比较麻烦,

web3j开发以太坊智能合约快速入门(特别适合java和android开发者)

web3j简介 web3j是一个轻量级.高度模块化.响应式.类型安全的Java和Android类库提供丰富API,用于处理以太坊智能合约及与以太坊网络上的客户端(节点)进行集成. 可以通过它进行以太坊区块链的开发,而无需为你的应用平台编写集成代码. 可以快速启动dmeo示例 想要快速启动的话,有一个Web3j demo示例项目可用,演示了通过Web3j开发以太坊的许多核心特征,其中包括: 连接到以太网网络上的节点 加载一个以太坊钱包文件 将以太币从一个地址发送到另一个地址 向网络部署智能合约 从