区块链学习5:智能合约Smart contract原理及发展历程科普知识
☞ ░ 前往老猿Python博文目录 ░
一、智能合约的定义
通俗来说,智能合约就是一种在计算机系统上,当一定条件满足的情况下可被自动执行的合约,智能合约体现为一段代码及其运行环境。例如银行信用卡的自动还款就是一种典型的智能合约。
我们来看看智能合约概念的演进历史:
- 智能合约概念于1994年由Nick Szabo首次提出,百度上关于智能合约的定义:智能合约(英语:Smart contract )是一种旨在以信息化方式传播、验证或执行合约的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。
- 1997年,Nick Szabo对智能合约的定义进行了完善:智能合约是一套以数字形式指定的承诺,包括合约参与方可以在上面执行这些承诺的协议。
- 2016年,工信部在《中国区块链技术和应用发展白皮书》上是这样定义智能合约的:智能合约是一段部署在区块链上可自动运行的程序,涵盖范围包括编程语言、编译器、虚拟机、时间、状态机、容错机制等。
智能合约有狭义的智能合约和广义的智能合约两种定义:
- 狭义的智能合约是涉及相关商业逻辑和算法的程序代码,把人、法律协议和网络之间的复杂关系程序化
- 广义的智能合约是一种计算机协议,一旦部署就能实现自我执行和自我验证。
二、区块链+智能合约的融合发展
从上面智能合约的定义和发展历史来看,智能合约是先于区块链出现的,在区块链发展初期如比特币并没有引入智能合约的技术,同样在区块链之前,智能合约也并没有广为使用。智能合约是在区块链2.0阶段才引入的,或者应该反过来说,引入智能合约后的区块链标志着区块链2.0时代的开启。不少人认为,智能合约在区块链中的实现,是区块链能够被称为颠覆性技术的主要原因之一。区块链智能合约的主要特点可以简单地概括为:去中心化、智能高效(自动执行、无人为干预)、准确、低成本。
老猿认为区块链技术和智能合约融合发展的大致历程是这样的:
区块链1.0以比特币为代表,解决了货币和支付手段的去中心化问题。去中心化的区块链技术核心在于沿时间轴记录数据及合约,具有安全、透明、不可篡改等特点;
随着区块链技术的发展,利用区块链技术带动金融市场去中心化成为区块链2.0的内在驱动力;
解决了信任问题的区块链技术为智能合约提供了可信的的自动化执行环境:
※ 将智能合约以数字化的形式写入区块链中,由区块链技术的特性保障存储、读取、执行整个过程透明可跟踪、不可攥改。智能合约的编程语言就是规束合约的法律条文,交易双方可完全放心的进行交易
※ 区块链共识算法构建的一套状态机系统,使得智能合约能够高效地运行。智能合约一旦触发就会立即执行,自动按照合约规范进行操作。整个过程智能高效,短时间快速完成更是体现了它的准确和经济。
※ 智能合约在去信任化环境下,按顺序触发设定的合约内容并完成系列安全的自动化操作,为智能合约的实践提供了技术保障
※ 区块链数据完备可追溯的属性,可支持事后审计以追踪合约动态
区块链技术的智能合约不仅可以发挥智能合约在成本效率方面的优势,而且可以避免恶意行为对合约正常执行的干扰,为智能合约提供了可信的自动化执行环境。
三、区块链中智能合约的创建和执行
智能合约需要经过合约起草和合约提交后,才能在区块链环境中进行合约执行。
四、智能合约的不足
如前所述,基于区块链的智能合约提供了一个可信的智能合约执行环境,保障了合约的高效、安全地执行,但智能合约并非完美,它也存在安全性等问题。具体问题如下:
智能合约的以上不足,老猿认为是由于智能合约是运行在特定环境的程序代码,我们知道BUG几乎是无法完全避开所有软件天生带来的,作为智能合约的运行环境和智能合约本身的编程语言以及实现代码都可能存在漏洞,再加上区块链金融本身所表征的财富带来的吸引力,可能遭遇攻击者大量攻击导致安全性风险、隐私泄露风险以及性能问题。
更多关于区块链的内容请见老猿专栏《零基础学区块链》或《零基础学区块链专栏文章目录》。
本文参考资料:
1、《区块链科普:为什么要用区块链技术实现智能合约?》
2、《百度百科:智能合约》
关于收费专栏
老猿的付费专栏《使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,付费专栏《moviepy音视频开发专栏》详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,两个专栏加起来只需要19.9元,都适合有一定Python基础但无相关专利知识的小白读者学习。这2个收费专栏都有对应免费专栏,只是收费专栏的文章介绍更具体、内容更深入、案例更多。
对于缺乏Python基础的同仁,可以通过老猿的免费专栏《专栏:Python基础教程目录》从零开始学习Python。
如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。
跟老猿学Python、学5G!
☞ ░ 前往老猿Python博文目录 ░
区块链学习5:智能合约Smart contract原理及发展历程科普知识的更多相关文章
- Truffle 4.0、Geth 1.7.2、TestRPC在私有链上搭建智能合约
目录 目录 1.什么是 Truffle? 2.适合 Truffle 开发的客户端 3.Truffle的源代码地址 4.如何安装? 4.1.安装 Go-Ethereum 1.7.2 4.2.安装 Tru ...
- 以太坊开发(二)使用Ganache CLI在私有链上搭建智能合约
以太坊开发(二)使用Ganache CLI在私有链上搭建智能合约 在上一篇文章中,我们使用Truffle自带的客户端Truffle Develop,在私有链上搭建并运行了官方提供的WebPack智能合 ...
- 区块链学习笔记:DAY01 区块链的技术原理
其实很早之前就听过区块链,也看过有关区块链的介绍,那个时候的理解主要还是一句话:分布式记账 然后开始关注比特币,听了有几年了,对于其来历.用途其实一直都是一知半解. 这次的课算是第一次以一个学员的身份 ...
- 区块链学习(四)truffle部署编译智能合约以太坊私有链
前面我们介绍了以太坊私有链的搭建以及多节点私有链网络,这次我们介绍如何使用truffle框架来部署编译智能合约到我们之前搭建的私有链网络中. 搭建环境及需使用的工具:ubuntu18.04 Truf ...
- Hyperledger Fabric【区块链学习一】
Hyperledger Fabric 学习 什么是区块链 什么是区块链在我们没有接触的时候,只知道它是一个去中心化的存储方式.当我们发生交易,或者动作的时候我们会将记录通知给所有参与者共同维护,达到去 ...
- 区块链学习7:超级账本项目Fabric中的背书、背书节点、背书策略、背书签名
☞ ░ 前往老猿Python博文目录 ░ 在Hyperledger Fabric区块链中,有背书节点进行背书,Hyperledger Fabric 使用背书策略来定义哪些节点需要执行交易. Hyper ...
- 区块链学习7:超级账本项目Hyperledger与Fabric以及二者的关系
☞ ░ 前往老猿Python博文目录 ░ 一.超级账本(hyperledger) 超级账本(hyperledger)是Linux基金会于2015年发起的推进区块链数字技术和交易验证的开源项目,成员包括 ...
- 区块链学习笔记:DAY05 如何使用公有云区块链服务
这是最后一节课了,主要讲华为云在云区块链提供的服务,如何基于华为云BCS来构建应用 先来个简单的比喻: 1.有关BaaS的范围定义 包含物理主机.虚拟主机.容器服务.区块链.智能合约和服务 2.华为云 ...
- 区块链学习笔记:D02 区块链的技术发展历史和趋势
对于区块链的技术发展历史,其实在我的印象中也就对比特币有所了解,也听过什么火币之类的玩意,但是具体是什么.怎么运作的就不清楚了... 这次的内容首先是讲解了区块链的技术演进,一张图一目了然,虽然里面涉 ...
随机推荐
- iptables从入门到掌握
防火墙简述 防火墙(firewall)一词本是建筑用于,本意是为了保护建筑物不受火灾侵害的.被借鉴到了在网络通信领域中,表示保护局域网或主机不受网络攻击的侵害. 防火墙: 工作在主机或者网络边缘,对于 ...
- Java_进程与线程
进Process&Thread 区别 进程 线程 根本区别 作为资源分配的单位 调度和执行的单位 开销 每个进程都有独立的代码和数据空间(进程上下文), 进程间的切换会有较大的开销 线程可以看 ...
- Java自动化测试框架-02 - TestNG之理论到实践
TestNG,即Testing, NextGeneration,下一代测试技术,是一套根据JUnit 和NUnit思想而构建的利用注释来强化测试功能的一个测试框架,即可以用来做单元测试,也可以用来做集 ...
- 二级Parser应用教程
01 应用背景 Ubidots是一个物联网云平台,通过设备友好的API(可通过HTTP / MQTT / TCP / UDP协议访问)简单安全地将硬件和数字输入连接到Ubidots Cloud. 它可 ...
- ixgbe 驱动 为xxx驱动做准备1
网卡都是pci设备,因此这里每个网卡驱动其实就是一个pci驱动.并且intel这里是把好几个万兆网卡(82599/82598/x540)的驱动做在一起的.V4L2 一样几个类型摄像头合并在一起 先说一 ...
- 进程 PCB 进程挂起
7-1 进程定义 OS系统从只能跑一个程序到能跑多个.进程可以描述程序的执行过程. 进程:一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程. 只有当一个程序被OS加载到内存中,cpu对其 ...
- oracle 相关笔记
1.查询语句执行顺序 from->where->[group by ]-> select ->distinct->count(某一列) 2.用命令执行存储过程用 exec ...
- php大文件上传失败的解决方法
1.打开php.ini 2.查找post_max_size:(修改上传大小限制) 表单提交最大数值,此项不是限制上传单个文件的大小,而是针对整个表单的提交数据进行限制的默认为8m,设置为自己需要的值, ...
- linux绑定盘符
[root@centos6 ~]# udevadm info -q path -n /dev/sdb [root@centos6 ~]# udevadm info -q path -n /dev/sd ...
- C#设计模式-原型模式(Prototype Pattern)
引言 在软件开发过程中,我们习惯使用new来创建对象.但是当我们创建一个实例的过程很昂贵或者很复杂,并且需要创建多个这样的类的实例时.如果仍然用new操作符去创建这样的类的实例,会导致内存中多分配一个 ...