写点什么

智能合约初探:概念与演变

  • 2020-03-13
  • 本文字数:3105 字

    阅读完需:约 10 分钟

智能合约初探:概念与演变

前 言

自 2009 年比特币开启区块链时代以来,近 10 年里,随着技术与生态的发展,基于区块链的分布式应用(dapp)呈现出井喷的趋势,而支撑着 dapp 的底层技术就是“区块链+智能合约”。


智能合约与区块链的结合,普遍被认为是区块链世界中一次里程碑式的升级。第一个结合了区块链与智能合约技术的平台–以太坊的诞生,被认为是开启了"区块链 2.0"时代。

什么是智能合约

1996 年,Nick Szabo 在文章《Smart Contracts: Building Blocks For Digital Markets》中提出了智能合约的概念。


所谓“合约”,就是条文、合同一类的东西,里面记录了发生的条件与对应执行的条款,以支持确权等操作;所谓"智能",就意味着自动化、可编程。


所以,智能合约就是可编程的合同,也可以理解为一段自动执行的条文合同,在计算机中,就是一段自动执行的程序片段。它更易于合约保存,并且由确定的算法运行,给定输入,就得到对应的输出,极大保障了合约的执行力。


以自动售货机做类比,可以帮助我们更好地理解智能合约的核心特征。


当使用者选择好要购买的货物并完成支付,出货逻辑就会被触发,用户就能得到想要的货物,而这个过程不需要人工介入,节省了售卖货物的人力成本。如果要破坏这个合约,就得物理破坏售卖机。像 POS 刷卡机、EDI(电子数据交换)等,也可作此种类比。

智能合约与区块链

智能合约在上世纪被提出,而区块链 2009 年才诞生,就定义而言,智能合约与区块链关系不大。


那为什么在这 10 年中,智能合约与区块链却产生了如此紧密的关联?因为区块链可以保证智能合约的不可篡改,不仅合约内容不可篡改,每次调用记录亦不可篡改。


智能合约产生价值的最基本前提是有一个强有力的底层介质用于储存,让其不可被物理破坏。


然而,智能合约的本体是一份代码,非常容易被篡改,如何为其提供强力的存储介质就成了问题。这正好是区块链擅长解决的——通过比特币的实践,证明了区块链可以在分布式环境下让电子记录不可被篡改。


与此同时,智能合约也在反哺着区块链,它极大地扩展了区块链的业务场景。


与智能合约结合后,区块链不再服务于单一的货币支付,可以延申到生活中的方方面面。丰富的应用场景也对区块链的能力产生了新的挑战。

区块链 2.0:以太坊的诞生

2009 年诞生的比特币,运用区块链等技术来保证生态,开创了区块链 1.0 时代。


用户可以通过脚本代码来定制一些内容,例如如何解锁一笔资金。这些脚本代码会随着交易一起保存,从而享有不可篡改的特质,并且是确定性的。所以从某种角度来说,这些脚本也可看作智能合约。可是它们并不好用。


首先,这些脚本代码不是图灵完备的,这限制了实现的功能;其次,开发门槛较高,编写复杂逻辑的体验会很差,好比用 JVM 字节码来写程序。


2013 年,一个青年 V 神提出了以太坊,其核心是通过世界状态对区块链数据进行更新和验证。以太坊与比特币最大的不同在于可通过智能合约执行复杂的逻辑操作。


在以太坊上,智能合约的语言是 Solidity,它是图灵完备且较为上层的语言,极大地扩展了智能合约的能力范畴,降低了智能合约编写难度。


正因为此,以太坊的诞生,也标志着区块链 2.0 时代开启。随后,智能合约技术逐步渗透了溯源、存证、供应链等多个业务场景。

智能合约的现状与前景

从编程角度而言,智能合约就是一段代码。相比常规代码,智能合约具有许多差别与限制,例如:


  • 单线程执行

  • 代码执行会消耗资源,不能超出资源限制

  • 目前难以获取链外数据,例如取得天气信息、比赛结果等

  • 其他限制,如 TPS


这些特点使得目前智能合约生态以链上资源的治理为核心。就像以太坊上各式各样的 ERC 标准与治理方案;EOS 上有各种资源模型,比如 CPU、RAM、兼经济模型、Rex、Bancor 协议等。


显然,就目前的生态而言,智能合约对现实世界的影响力有限。


但事物总是在发展的。目前,已有许多致力于突破这些限制的研究,典型的有 Oracle(谕言机,但常被称为预言机),它允许智能合约和链外进行交互,这样就能大大提高智能合约的使用场景,彷佛一台电脑通上了网;再比如那些突破链自身性能瓶颈的尝试,例如支付通道、跨链、plasma、rollup,它们都从不同角度打破安全与性能的枷锁。


毋庸置疑,智能合约将扮演着越来越重要的角色,将来随着以太坊 2.0 的落地,也许会开启新一个区块链时代。

智能合约技术

以太坊采用了 Solidity 作为智能合约语言,Solidity 是一门为实现智能合约而创建的高级编程语言,能在允许以太坊程序的节点上运行。该语言吸收了 C++、JavaScript 的一些特性,例如它是静态类型语言,支持继承、库等。


除了 Solidity,每个平台的智能合约技术也有所不同,接下来将从公有链、联盟链作为切入,介绍其他平台所采用的技术。

公有链

首先,不妨先认识三大公链的智能合约技术。


联盟链

除了公链,联盟链也是重要的区块链类型。比之公链,联盟链共识的复杂度被大大缩减,因此具有更高的执行效率。


联盟链受企业级机构青睐,一般而言,相关机构之间会形成联盟,通过联盟链来共享数据。联盟链可覆盖供应链金融、司法存证、溯源等多种场景,未来还会与 IOT、AI 等技术结合。


在当今联盟链生态中,除去采用 chaincode 的 Fabric,大部分平台都采用 Solidity 作为智能合约语言,FISCO BCOS 即是如此。


时下,Solidity 可谓占据了智能合约的 C 位,掌握 Solidity 是学习智能合约和区块链的重要一环。后面系列也将对如何用 Solidity 编写、运行以及测试智能合约作深入介绍解析,敬请关注。


除了 Solidity,WebAssembly、Libra 的 Move 等一些智能合约语言也在发展中,可以保持关注。

智能合约运行分析

下面将分享一个基础的智能合约:HelloWorld。



这段 Solidity 代码的功能是存取_num 字段。该字段被称为“状态变量”,会由区块链持久存储。


用户可以将这段代码部署在以太坊或类似的区块链上,部署成功就意味着该智能合约不可再被修改,只要底层区块链不被销毁,这段合约就一直存在。任何人都可通过“合约地址”来调用该合约接口,每次调用信息都会被记录在链上。


在讲解这段代码如何运行之前,我们先回顾下传统 java 程序的运行方式。


首先,用户编译完 java 代码后,会以字节码的形式保存在磁盘上;然后用户会调用程序,这由 JVM 来托管执行;程序执行期间可能会通过日志来记录调用参数,也可能会和磁盘进行 IO。


Solidity 的执行与此类似。不同的是介质由硬盘换成了区块链,由单机变为分布式。


代码部署后,以字节码的形式存储在每一个节点上。当用户要求调用某个函数时,调用请求将会被囊括在交易中,并被打包到某个区块上,一旦全网对该区块形成共识,就意味着调用是合法的。


接下来,EVM 会来调用字节码,它负责存取底层的状态变量,好比传统编程的 IO。



光从代码来看,合约开发似乎不过如此,单个合约只需要围绕着字段进行操作,对于很多简单业务而言,不过是 CRUD 而已。


但其复杂性也恰恰在于此,合约在区块链环境上执行,是不可修改的。


所以如果出现了 bug,就必须部署新的合约,这对于合约的可维护性提出了挑战。并且,一旦业务复杂起来,容易出现安全漏洞,导致链上资产损失。同时,还要考虑完成代码编写、逻辑执行、数据存储的成本问题。


综上所述,写合约不难,但写好合约,却需要一定功底。

结 语

本文介绍了智能合约的概念与历史演变。


智能合约是上世纪提出的技术,在区块链浪潮下焕发出了新的生机。反之,智能合约广泛的应用场景,又极大的促进了区块链发展。


学习智能合约,推荐选择 Solidity 语言,因为其具备一些传统语言的特征,同时,执行环境完全基于区块链,实际业务开发的体验与以往的编程体验会有所差别。


读者可以尝试基于 FISCO BCOS 快速搭建区块链环境,部署一个最简单的合约,熟悉部署、调用方式,再进一步走入 Solidity 的世界。

关于作者

储雨知,FISCO BCOS 核心开发者。


2020-03-13 10:001870

评论

发布
暂无评论
发现更多内容

技术解读:现代化工具链在大规模 C++ 项目中的运用 | 龙蜥技术

OpenAnolis小助手

c++ 开源 龙蜥技术 优化技术 ThinLTO

专利解析|混合缓存技术在元年多维库中的应用

元年技术洞察

数据分析 多维数据库

String、StringBuffer、StringBuilder的区别

zarmnosaj

10月月更

阿里云块存储团队卓越工程实践

阿里技术

经验分享 语言 & 开发

阿里高工携18位架构师耗时两个月整合1000页的Java岗面试八股文

程序知音

Java 架构 java面试 后端技术 Java面试八股文

JFrog Xray 与 Amazon Security Hub 集成

亚马逊云科技 (Amazon Web Services)

安全 DevSecOps

向量数据库是如何检索的?基于 Feder 的 IVF_FLAT 可视化实现

Zilliz

人工智能 可视化 向量检索 anns 以图搜图

什么是深度学习?人工智能能影响未来的特点之一

Finovy Cloud

人工智能 深度学习

明道云伙伴大会2022/秋,免费门票限量领

明道云

低代码 零代码 aPaaS

面试官:你是怎样进行react组件代码复用的

beifeng1996

React

十大 CI/CD 安全风险(二)

SEAL安全

DevOps CI/CD DevSecOps CI/CD管道 软件供应链安全

Gartner:被CIO们忽略的7个颠覆性趋势

雨果

CIO

融云 uni-app 原生插件,生态丰富、高效集成

融云 RongCloud

sdk 集成 uri app

用了这个API协作调试工具,忘记了postman

Liam

Postman 接口调试 开放api API接口 API调试

SchedulX V1.7.0更新,规格压测、成本洞察等重磅功能发布!

星汉未来

云原生 降本增效 星汉未来

网易数帆数据治理2.0实践分享

网易数帆

大数据 数据中台 数据治理 数据质量 企业号十月 PK 榜

别按部就班的背面试题了!吃透这份Java面试核心知识手册,大环境不好Offer也能拿到手软!

Java全栈架构师

程序员 面试 程序人生 架构师 Java后端

Flowable 任务如何认领,回退?

江南一点雨

Java springboot workflow flowable JavaEE

爆火的RPA尚在初期阶段,拥挤的赛道厂商如何突围?

ToB行业头条

企业集成方案

久歌

企业架构 企业集成

公司合同管理软件有哪些?

优秀

合同管理软件

5分钟,带你创建一个智能电梯检测器模型

华为云开发者联盟

物联网 华为云 iotda 智慧电梯 企业号十月 PK 榜

数字化转型案例解读:德意志银行数字化转型背后的故事

雨果

数字化转型

【Nacos源码之配置管理 十】客户端长轮询监听服务端变更数据

石臻臻的杂货铺

nacos 10月月更

【Nacos源码之配置管理 十一】服务端LongPollingService推送变更数据到客户端

石臻臻的杂货铺

nacos 10月月更

IT人士必须警惕这9个信号:说明你的IT架构很糟糕

雨果

数据管理工具 数据服务平台

驱动企业数字化转型 低代码平台需要具备哪些能力?

力软低代码开发平台

挑战海量数据:基于Apache DolphinScheduler对千亿级数据应用实践

白鲸开源

大数据任务调度 任务调度 dophinscheduler 大数据调度

什么是数字体验平台(DXP)?

Baklib

客户体验 数字体验

如何使用华为云IoT平台实现远程控制无人机,资深物联网从业者手把书一步一步教你!

wljslmz

物联网 IoT 无人机 华为云 10月月更

有人想用开源工具DBT取代 SQL,你同意吗?

雨果

sql

智能合约初探:概念与演变_区块链_储雨知_InfoQ精选文章