第18讲 | 智能合约与以太坊

  在前面的文章里,我们介绍了区块链的核心技术,也穿插介绍了一些项目。然而每个区块链都有自己的特色,接下来我们将针对每个项目进行详细讲解。今天我们就来讲讲智能合约和以太坊项目。

  今天我们从智能合约这个概念入手,聊聊什么是以太坊项目以及它的发展历史。最后还会介绍几款钱包给你,希望通过今天文章的讲解,你也可以尝试在以太坊上编写简单的智能合约。

智能合约的概念

  不同于法律意义上的合约概念,区块链领域的合约表达的是可以“自治自理”的 计算机协议,这套协议具有自我执行、自我验证的属性。

  如果完全从技术角度来看,智能合约等价于一段事先就被规定好逻辑和条款的计算机代码被激活运行的状态,同时,智能合约也提供了通用的用户接口,用户可以通过接口与用户交互。

  智能合约这一概念早在20世纪90年代就有人提出,这个人是从事智能合约和数字货币研究的尼克萨博(Nick Szabo)博士,尼克1996年在《Extopy》期刊上发表了对智能合约的描述,他认为智能合约是一个由数字表单指定的承诺,这个承诺包含关系到多方执行的一组协议。

  从定义中我们可以得知,智能合约由多个协议组成,这些协议包含了用户接口,能表达用户的承诺,它可以安全有效地确定公共网络上的关系。

  换句话说,智能合约是一个由计算机处理、可执行合约条款的交易协议,其总体目标是满足协议既定的条件,例如支付、抵押、保密协议。这可以降低合约欺诈造成的损失,降低仲裁和强制执行所产生的成本以及其他的交易成本。

  我们举个实际的例子解释一下,今年4月9日,上海某建设银行支行开放了“无人银行”,银行中充斥了众多机器和显示屏,智慧柜员机、VTM机、外汇兑换机、VR设备和两台机器人代替了传统的柜台。

  这里的智慧柜员机、外汇兑换机器人众多电子设备都可以认为是智能合约的一种表现形式,用户在办理银行业务时,如办理大额汇兑业务,业务流程和逻辑依据已经定在程序中,用户只需要按照操作一步一步进行,办理完成后即可获得单据。

  这里“既定的业务流程、机器人模样的人机交互界面、双方同意承诺”组成了智能合约的概念,它甚至具有一定的法律效力。

  萨博提出的是智能合约的概念,以及我们举的例子,都是广义的智能合约概念。智能合约具有多种实践形式,而在区块领域所说的智能合约概念,我们其实是指Blockchain-based这种形式。

  在萨博的智能合约概念中提到了开放式网络,而我们知道开放式网络的基本要求就是拜占庭容错,通过前面文章的讲解我们知道,区块链天然具有拜占庭容错特性。所以如果在区块链上实践智能合约这个概念,两者会非常契合,天造地设。

  首先实践了智能合约这一概念的是比特币,比特币脚本(bitcoin script)包含了5种标准交易脚本,这些脚本的功能不仅仅提供了普通单人支付的情况,它还提供了多方共同签名支付的脚本,叫做多重签名支付,多重签名支付可以看成是萨博语义下的智能合约。

  除了比特币,发扬光大智能合约这个概念的区块链项目就是以太坊了,下面,我重点来介绍一下以太坊项目。

以太坊及其发展历史

  以太坊Ethereum项目的目标是打造一个去中心化的新一代互联网应用平台,这个平台称作Dapp平台。

  这些Dapp基于以太坊智能合约虚拟机开发、编译、部署,并且可以自定义业务逻辑,部署后全网可见且自动执行,理想情况下不存在宕机、审查、欺诈、第三方干预的情况。

  • 2013年底以太坊的创始人Vitalik在比特币开发者社区提出了可以运行图灵完备(Turing-complete)形式的应用,但这一思想并没有得到比特币社区的支持。
  • 2014年,Vitalik带着自己的想法,宣布以太坊项目正式成立,2014年上半年开始筹集资金,聚拢一些早期开发者,同年7月份进行了为期42天的ICO,共筹集了超过1800万美元的比特币。
  • 2015年7月,第一个版本的以太坊发布,主网正式上线,这一阶段Bug和设计缺陷较多,多是开发者在使用。
  • 2016年以太坊发布第二个大版本Homestead,用户逐渐多了起来,同期也吸纳了不少Dapp开发者。
  • 2016年6月,以太坊上发生了著名的黑天鹅事件——TheDAO事件,这打开了ICO市场,同时也造成了以太坊社区分叉,形成了以太坊和以太坊经典两个代币。
  • 2017年4月,ICO风靡中国,ERC20提供了低成本方便高效的资金募集方式,为ICO提供了极大的便利,趁着数字货币牛市,以太坊的价格涨幅达十多倍,2018年1月以太坊价格突破1000美元。 

以太坊的核心概念

  以太坊核心概念包括:智能合约虚拟机EVM和Solidity编程语言、账户模型、以太币和Gas,交易和消息。

1.智能合约虚拟机EVM和Solidity编程语言

  以太坊的核心概念首先是智能合约。

  智能合约包含两部分,一部分是开发语言,主要以Solidity为主,Solidity与Javascript语言在使用上十分接近,这极大地降低了Dapp开发人员的学习成本。

  Dapp开发者编写好代码以后,使用Solidity编译成十六进制字节码,然后部署到EVM上,也就是把合约广播到全网,等矿工打包后就形成了常年运行的Dapp了。

  另一部分就是EVM。 EVM是以太坊智能合约虚拟机,我们可以等价理解它为Javascript、Python等脚本语言的执行引擎。

  它是一个轻量级的虚拟机隔离环境,它并不提供访问本地网络、进程、文件系统的功能,它更像是一个封闭的容器,这个容器里面装了一个正在运行Dapp,可以看成是无法和外界交互的Docker Container。

  Dapp在运行过程中,可以被请求或其他事件触发,然后执行相应的逻辑,这些请求和事件是由以太坊上的交易产生的,不是来自本地操作系统的事件。

  Dapp运行过程中,每次状态发生变化,则意味着全网同步更新,大家的计算结果都是一致的,这有两个特性:

  1. 所有Dapp的计算结果经过全网共识,一旦确认过几乎无法被伪造和篡改;
  2. 由于必须经过全网共识,所以这限制了整个网络的容量。

2.账户模型

  以太坊并没有采用UTXO模型,也不同于银行账户,它是由以太坊开发者设计了自己的账户模型。

  以太坊上的账户有两种类型,第一类叫做合约账户CA(Contracts Accounts),第二类叫做外部账户EOA(Externally Owned Accounts)。

  简单理解就是:CA是智能合约代码用的账户,EOA是人用的账户;所以CA可以存储并执行智能合约代码,它的智能被EOA激活,它也不保存和存储私钥,合约账户可以调用其他合约。

  EOA则是人们直接控制的账户,可以存储以太币,可以发送交易到合约账户,触发既定的逻辑。EOA账户由公钥标识,由对应的私钥控制。

  当合约账户被调用时,存储其中的智能合约可以在矿工处的虚拟机中自动执行,并消耗Gas,如果Gas不足则会触发“Out of Gas”异常,被终止执行。

  无论是CA还是EOA,在以太坊内部都被看做状态对象(state objects),意思就是说这些账户都有自己的状态,EOA具有以太币余额的状态,而CA除了余额,还多了合约存储状态。

3.以太币和Gas

  Gas是执行智能合约操作的燃料,智能合约的每一个步骤都会消耗Gas,Gas是由以太坊的平台代币以太币转化而来,最小单位是wei,1ETH 相当于 10的18次方 wei。

  以太币可以通过PoW挖矿而产生,目前以太坊主要通过GPU挖矿。挖出一个块可以换得5个以太币,并且还有一定的交易费、以及叔伯块的奖励。今年4月6日爆出著名矿机芯片厂商比特大陆已经开发出针对以太坊的ASIC专业矿机,相比GPU的效率提升2.5倍。

4.交易和消息

  以太坊上的交易与比特币中的UTXO交易不同,它是指EOA账户将一个经过签名的数据包发送到另外一个账户的过程,这个过程产生的账户状态变化将被存储到以太坊区块链上。

  以太坊上除了交易还有消息这个概念,消息指一个合约账户调用其他合约账户的过程,可以类比函数调用过程。

  所以以太坊上的Dapp如果被触发,有两种可能,第一种是交易触发,第二种是消息触发。

  这两种的区别在于前者是EOA发起的,后者只能是其他合约账户发起的。

  状态对象的状态变化被以太坊共识机制的记录下来,交易和消息驱动着状态的变化,于是,在一个开放式的网络中构建一个全球共享的Dapp变得十分方便。

  以太坊上智能合约具有全网准实时同步、准确执行、去中心化运行、较低的人为干预风险等特性,EVM和Solidity为全球开发者提供了较低的进入门槛。

  与比特币的主要区别

  以太坊项目又被称作区块链2.0项目,这里2.0就是指智能合约。那么以太坊与比特币相比,到底智能在那里呢?我们具体来看看。

  与比特币相比,以太坊首先不是一个单纯的数字货币项目,它可以提供全世界无差别的区块链智能合约应用平台,这个平台基于我们前面文章所介绍的区块链四大核心技术要素,即P2P网络、共识机制、账户模型、加密模块。

  除了以上的四个技术要素,以太坊还推出了EVM——以太坊智能合约虚拟机,并且,它还推出了自己的智能合约语言Solidity。

  于是,区块链的开发者因为智能合约的出现开始分为两类。第一类是公链底层开发者,主要是以C++和Go语言为主的全节点开发者,他们需要对区块链各个技术模块有很深的理解。

  第二类是智能合约开发者,也就是应用开发者,这类开发者对区块链的运行原理不需要理解很深,只需要会编写Solidity,了解规范即可。

  除了以太坊智能合约这个概念以外,它还设计了下面的内容。

  1. 研究并实现了自己的PoW挖矿算法——ETHASH,这是一个内存困难型的挖矿算法。
  2. 叔伯块激励机制,降低了挖矿中心化的趋势。 取消了UTXO模型,采用了账户模型和世界状态,提供了数据结构的可塑性。
  3. 设计了Gas机制,避免程序死循环消耗全网资源的情况出现。 研究并实现了自己的PoS共识算法——Casper,可防止Nothing-at-Stake攻击。
  4. 以太坊提供了在区块链自由编程的能力,智能合约让所有人得以开发属于自己的Dapp,这是与比特币作为单纯的数字货币所不具有的能力。

总结

  本篇我们介绍了智能合约的概念以及以太坊项目,并且讲解了与比特币的主要区别,以太坊上的一些核心概念,下一篇我们将结合实际案例讲解智能合约,带领你认识一些智能合约模板,并顺便介绍一下其他区块链智能合约平台。

  参考链接:

https://en.wikipedia.org/wiki/Smart_contract  http://tech.ifeng.com/a/20180413/44947993_0.shtml

原文地址:https://www.cnblogs.com/sueyyyy/p/9795262.html

时间: 2024-10-01 22:37:39

第18讲 | 智能合约与以太坊的相关文章

什么是以太坊?什么是智能合约?

以太坊是一个分布式的计算平台.它会生成一个名为Ether的加密货币.程序员可以在以太坊区块链上写下"智能合约",这些以太坊智能合约会根据代码自动执行. 以太坊是什么? 以太坊经常与比特币相提并论,但情况却有所不同.比特币是一种加密货币和分布式支付网络,允许比特币在用户之间转移. 相关:什么是比特币?它是如何工作的? 以太坊项目有更大的目标.正如Ethereum网站所说,"以太坊是一个运行智能合约的分布式平台".这些智能合约运行在"以太坊虚拟机"上

第一行代码:以太坊(2)-使用Solidity语言开发和测试智能合约

智能合约是以太坊的核心之一,用户可以利用智能合约实现更灵活的代币以及其他DApp.不过在深入讲解如何开发智能合约之前,需要先介绍一下以太坊中用于开发智能合约的Solidity语言,以及相关的开发和测试环境. 智能合约就是运行在以太坊上的程序.客户端可以通过Web3.js API调用智能合约,而智能合约本身又可以直接访问以太坊网络,也就是说,智能合约前面连接着客户端,后面连接着以太坊网络,起到了承前启后的作用,而且通过智能合约,可以让整个以太坊网络更灵活,可控性更强.其实智能合约的作用相当于微软O

以太坊智能合约部署与交互

启动容器来执行geth命令 [email protected]:~# docker run -i blockchain101/ethereum-geth:1.6.5 geth attach http://45.32.252.88:8201 Welcome to the Geth JavaScript console! instance: Geth/01/v1.6.5-stable/linux-amd64/go1.8 coinbase: 0x4c57e7e9c2f728046ddc6e960520

区块链入门(5)Truffle 项目实战,Solidity IDE, 智能合约部署

在上一张我们学习了Truffle项目的创建,部署等相关内容,今天我们就来实战一下. 今天我们要做3件事: 1) 学习搭建一个Solidity IDE(Remix). 2) 使用这个Solidity Ide编写一份智能合约. 3) 在我们前面第1,2,3章中部署的私有网络节点集群中部署这个合约,并能够在不同的节点中调用这个合约. Remix,是一个Solidity开发语言的Ide, 它是一款运行在浏览器端的solidity ide,也是官方推荐使用的ide. 另外还有其它的solidiy ide,

[中文] 以太坊(Ethereum )白皮书

以太坊(Ethereum ):下一代智能合约和去中心化应用平台 翻译|巨蟹 .少平 译者注|中文读者可以到以太坊爱好者社区(www.ethfans.org)获取最新的以太坊信息. 当中本聪在2009年1月启动比特币区块链时,他同时向世界引入了两种未经测试的革命性的新概念.第一种就是比特币(bitcoin),一种去中心化的点对点的网上货币,在没有任何资产担保.内在价值或者中心发行者的情况下维持着价值.到目前为止,比特币已经吸引了大量的公众注意力,就政治方面而言它是一种没有中央银行的货币并且有着剧烈

区块链学习(2)--以太坊中基本概念

1.以太币单位换算.以太坊的单位,沿袭了科学界的传统,用做过杰出贡献的数学.密码学专家的名字命名.以太坊的最小单位是 Wei. Kwei(Babbage)= 10 的 3 次方 Wei Mwei(Lovelace)= 10 的 6 次方 Wei Gwei(Shannon)= 10 的 9 次方 Wei MicroEther(Szabo)= 10 的 12 次方 Wei MilliEther(Finney)= 10 的 15 次方 Wei Ether = 10 的 18 次方 Wei 2.以太坊账

如何从零开始学习区块链技术——推荐从以太坊开发DApp开始

很多人迷惑于区块链和以太坊,不知如何学习,本文简单说了一下学习的一些方法和资源. 一. 以太坊和区块链的关系 从区块链历史上来说,先诞生了比特币,当时并没有区块链这个技术和名词,然后业界从比特币中提取了技术架构和体系,称之为区块链技术.从比特币提取的区块链技术称之为区块链1.0时代,那个时候的应用主要以电子货币和去中心化交易为主,比如各种山寨币.而以太坊将区块链带入了2.0的时代,区块链2.0不是推翻了1.0,而是在1.0的基础上实现了区块知晓.价值知晓.图灵完备,并进行了细节优化,从而形成了以

区块链以太坊环境搭建(详细篇)

以太坊合约的配置(以在私有链上配置投票合约为例) 以太坊合约配置步骤大体如下: 一.安装Mist浏览器(已经集成以太坊钱包) 二.安装配置基于Go语言的geth命令 三.在本地搭建私有链 四.在私有链上完成挖矿工作 五.使用Mist在私有链上配置投票合约 具体步骤如下: 一.安装Mist浏览器(已经集成以太坊钱包) 1登陆https://github.com/ethereum/mist/releases/根据需求下载最新版本的客户端: 下载完成解压压缩文件后找到可运行文件运行安装即可 安装过程中

solidity开发以太坊代币智能合约

智能合约开发是以太坊编程的核心之一,而代币是区块链应用的关键环节,下面我们来用solidity语言开发一个代币合约的实例,希望对大家有帮助. 以太坊的应用被称为去中心化应用(DApp),DApp的开发主要包括两大部分: 智能合约的开发 用户界面的开发 在本文中,我们将介绍智能合约的开发语言solidity. 让我们先从一个非常基础的例子开始,不用担心你现在还一点都不了解,我们将逐步了解到更多的细节. contract SimpleStorage { uint storedData; functi