☞ ░ 前往老猿Python博文目录

一、智能合约的定义

通俗来说,智能合约就是一种在计算机系统上,当一定条件满足的情况下可被自动执行的合约,智能合约体现为一段代码及其运行环境。例如银行信用卡的自动还款就是一种典型的智能合约。

我们来看看智能合约概念的演进历史:

  • 智能合约概念于1994年由Nick Szabo首次提出,百度上关于智能合约的定义:智能合约(英语:Smart contract )是一种旨在以信息化方式传播、验证或执行合约的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。
  • 1997年,Nick Szabo对智能合约的定义进行了完善:智能合约是一套以数字形式指定的承诺,包括合约参与方可以在上面执行这些承诺的协议。
  • 2016年,工信部在《中国区块链技术和应用发展白皮书》上是这样定义智能合约的:智能合约是一段部署在区块链上可自动运行的程序,涵盖范围包括编程语言、编译器、虚拟机、时间、状态机、容错机制等。

智能合约有狭义的智能合约和广义的智能合约两种定义:

  • 狭义的智能合约是涉及相关商业逻辑和算法的程序代码,把人、法律协议和网络之间的复杂关系程序化
  • 广义的智能合约是一种计算机协议,一旦部署就能实现自我执行和自我验证。

二、区块链+智能合约的融合发展

从上面智能合约的定义和发展历史来看,智能合约是先于区块链出现的,在区块链发展初期如比特币并没有引入智能合约的技术,同样在区块链之前,智能合约也并没有广为使用。智能合约是在区块链2.0阶段才引入的,或者应该反过来说,引入智能合约后的区块链标志着区块链2.0时代的开启。不少人认为,智能合约在区块链中的实现,是区块链能够被称为颠覆性技术的主要原因之一。区块链智能合约的主要特点可以简单地概括为:去中心化、智能高效(自动执行、无人为干预)、准确、低成本。

老猿认为区块链技术和智能合约融合发展的大致历程是这样的:

  1. 区块链1.0以比特币为代表,解决了货币和支付手段的去中心化问题。去中心化的区块链技术核心在于沿时间轴记录数据及合约,具有安全、透明、不可篡改等特点;

  2. 随着区块链技术的发展,利用区块链技术带动金融市场去中心化成为区块链2.0的内在驱动力;

  3. 解决了信任问题的区块链技术为智能合约提供了可信的的自动化执行环境:

    ※ 将智能合约以数字化的形式写入区块链中,由区块链技术的特性保障存储、读取、执行整个过程透明可跟踪、不可攥改。智能合约的编程语言就是规束合约的法律条文,交易双方可完全放心的进行交易

    ※ 区块链共识算法构建的一套状态机系统,使得智能合约能够高效地运行。智能合约一旦触发就会立即执行,自动按照合约规范进行操作。整个过程智能高效,短时间快速完成更是体现了它的准确和经济。

    ※ 智能合约在去信任化环境下,按顺序触发设定的合约内容并完成系列安全的自动化操作,为智能合约的实践提供了技术保障

    ※ 区块链数据完备可追溯的属性,可支持事后审计以追踪合约动态

区块链技术的智能合约不仅可以发挥智能合约在成本效率方面的优势,而且可以避免恶意行为对合约正常执行的干扰,为智能合约提供了可信的自动化执行环境。

三、区块链中智能合约的创建和执行

智能合约需要经过合约起草和合约提交后,才能在区块链环境中进行合约执行。

四、智能合约的不足

如前所述,基于区块链的智能合约提供了一个可信的智能合约执行环境,保障了合约的高效、安全地执行,但智能合约并非完美,它也存在安全性等问题。具体问题如下:



智能合约的以上不足,老猿认为是由于智能合约是运行在特定环境的程序代码,我们知道BUG几乎是无法完全避开所有软件天生带来的,作为智能合约的运行环境和智能合约本身的编程语言以及实现代码都可能存在漏洞,再加上区块链金融本身所表征的财富带来的吸引力,可能遭遇攻击者大量攻击导致安全性风险、隐私泄露风险以及性能问题。

更多关于区块链的内容请见老猿专栏《零基础学区块链》或《零基础学区块链专栏文章目录》。

本文参考资料:

1、《区块链科普:为什么要用区块链技术实现智能合约?

2、《百度百科:智能合约

关于收费专栏

老猿的付费专栏《使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,付费专栏《moviepy音视频开发专栏》详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,两个专栏加起来只需要19.9元,都适合有一定Python基础但无相关专利知识的小白读者学习。这2个收费专栏都有对应免费专栏,只是收费专栏的文章介绍更具体、内容更深入、案例更多。

对于缺乏Python基础的同仁,可以通过老猿的免费专栏《专栏:Python基础教程目录》从零开始学习Python。

如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

跟老猿学Python、学5G!

☞ ░ 前往老猿Python博文目录

区块链学习5:智能合约Smart contract原理及发展历程科普知识的更多相关文章

  1. 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 ...

  2. 以太坊开发(二)使用Ganache CLI在私有链上搭建智能合约

    以太坊开发(二)使用Ganache CLI在私有链上搭建智能合约 在上一篇文章中,我们使用Truffle自带的客户端Truffle Develop,在私有链上搭建并运行了官方提供的WebPack智能合 ...

  3. 区块链学习笔记:DAY01 区块链的技术原理

    其实很早之前就听过区块链,也看过有关区块链的介绍,那个时候的理解主要还是一句话:分布式记账 然后开始关注比特币,听了有几年了,对于其来历.用途其实一直都是一知半解. 这次的课算是第一次以一个学员的身份 ...

  4. 区块链学习(四)truffle部署编译智能合约以太坊私有链

    前面我们介绍了以太坊私有链的搭建以及多节点私有链网络,这次我们介绍如何使用truffle框架来部署编译智能合约到我们之前搭建的私有链网络中. 搭建环境及需使用的工具:ubuntu18.04  Truf ...

  5. Hyperledger Fabric【区块链学习一】

    Hyperledger Fabric 学习 什么是区块链 什么是区块链在我们没有接触的时候,只知道它是一个去中心化的存储方式.当我们发生交易,或者动作的时候我们会将记录通知给所有参与者共同维护,达到去 ...

  6. 区块链学习7:超级账本项目Fabric中的背书、背书节点、背书策略、背书签名

    ☞ ░ 前往老猿Python博文目录 ░ 在Hyperledger Fabric区块链中,有背书节点进行背书,Hyperledger Fabric 使用背书策略来定义哪些节点需要执行交易. Hyper ...

  7. 区块链学习7:超级账本项目Hyperledger与Fabric以及二者的关系

    ☞ ░ 前往老猿Python博文目录 ░ 一.超级账本(hyperledger) 超级账本(hyperledger)是Linux基金会于2015年发起的推进区块链数字技术和交易验证的开源项目,成员包括 ...

  8. 区块链学习笔记:DAY05 如何使用公有云区块链服务

    这是最后一节课了,主要讲华为云在云区块链提供的服务,如何基于华为云BCS来构建应用 先来个简单的比喻: 1.有关BaaS的范围定义 包含物理主机.虚拟主机.容器服务.区块链.智能合约和服务 2.华为云 ...

  9. 区块链学习笔记:D02 区块链的技术发展历史和趋势

    对于区块链的技术发展历史,其实在我的印象中也就对比特币有所了解,也听过什么火币之类的玩意,但是具体是什么.怎么运作的就不清楚了... 这次的内容首先是讲解了区块链的技术演进,一张图一目了然,虽然里面涉 ...

随机推荐

  1. Pyston v2.0 发布,解决 Python 慢速的救星

    Pyston 自从 2017 年发布 0.6.1 版本后,已经淡出了人们的视线三年多了,导致现在新人都很少听过它的大名. 前两天(2020年10月28日)Pyston 在官方博客上(https://b ...

  2. java类学习

    public class test4 { public static void main(String args[]) { /** * 方法定义规则 * 修饰 类型 方法名(参数){ * 要完成的动作 ...

  3. IP 层收发报文简要剖析4--ip 报文发送

    无论是从本地输出的数据还是转发的数据报文,经过路由后都要输出到网络设备,而输出到网络设备的接口就是dst_output(output)函数 路由的时候,dst_output函数设置为ip_output ...

  4. 推荐一个学习SQL Server基本语法及其他编程的网站

    菜鸟们的练习场 1.领先的 Web 技术教程 在 w3school,你可以找到你所需要的所有的网站建设教程. 从基础的 HTML 到 CSS,乃至进阶的XML.SQL.JS.PHP 和 ASP.NET ...

  5. 解决 Mac webstrom Mac bigsur 中 Can‘t use Subversion command line client:svn

    解决 Mac webstrom Can't use Subversion command line client: svn The path to the Subversion executable ...

  6. 从txt中提取子域名

    import re DOMAIN =[] f = open('test.txt','r',encoding='UTF-8') w = open('domain.txt','w') for data i ...

  7. 网页中审查元素(按F12)与查看网页源代码的区别

    问题 在验证目标系统是含有XSS漏洞,查看源代码,看不到插入的跨站脚本代码. 原理 所谓查看源代码,就是别人服务器发送到浏览器的原封不动的代码. 审查元素时,你看到那些,在源代码中找不到的代码,是在浏 ...

  8. 深度分析:那些Java中你一定遇到过的问题,一次性帮你搞定!深度分析:那些Java中你一定遇到过的问题,一次性帮你搞定!

    1.java中==和equals和hashCode的区别 基本数据类型的比较的值相等.类的比较的内存的地址,即是否是同一个对象,在不覆盖equals的情况下,同比较内存地址,原实现也为 == ,如St ...

  9. dsu on tree (树上启发式合并) 详解

    一直都没出过算法详解,昨天心血来潮想写一篇,于是 dsu on tree 它来了 1.前置技能 1.链式前向星(vector 建图) 2.dfs 建树 3.剖分轻重链,轻重儿子 重儿子 一个结点的所有 ...

  10. CorelDRAW 2017提示已安装另一版本导致安装失败的解决办法

    Coreldraw提示"由于您已安装了另一版本,因此无法安装本产品.要安装本产品,您必须首先卸载现有版本"的情况在Coreldraw X8及Coreldraw 2017上都存在,下 ...