区块链课件第三章 以太坊.pptx
《区块链课件第三章 以太坊.pptx》由会员分享,可在线阅读,更多相关《区块链课件第三章 以太坊.pptx(89页珍藏版)》请在文库网上搜索。
1、本章内容1.1 以太坊简介1.2 以太坊基本架构及原理1.3 以太坊账户模型与转账1.4 智能合约1.5 以太坊交易1.6 以太坊数据结构及存储01.以太坊的诞生2.以太坊与比特币对比3.以太坊的特色与应用以太坊简介第一个支持智能合约的区块链系统使用Ether作为加密数字货币生态社区最活跃的区块链系统超过30,000个github开源项目超过 3000 个基于以太坊的 Dapp1以太坊的诞生与发展Frontier阶段 仅开发者测试使用Homestead阶段提供图形界面,提升安全性和平稳性Metropolis阶段在智能合约执行性能、以太坊经济政策等方面进行了优化Serenity阶段预期将共识机制
2、从工作量证明(Proof of Work,简称 PoW)转向 PoS,使持币者也能有一定的决定权 2015 年 7 月 2016 年 3 月 2017 年 10 月 至今未完成以太坊与比特币对比技术支持智能合约性能增加叔块奖励,减少出块时间Ethash共识机制社区更加活跃的社区超过35k的开源项目3技技术对智能合约的支持性能性能更先进的奖励机制社区社区更活跃的社区讨论以太坊特色与应用溯源存证 数字资产发行和流通 数据共享 4本章内容1.1 以太坊简介1.2 以太坊基本架构及原理1.3 以太坊账户模型与转账1.4 智能合约1.5 以太坊交易1.6 以太坊数据结构及存储5以太坊基本架构及原理定义以
3、太坊状态所有以太坊账户账户余额智能合约代码智能合约状态状态转移在区块N执行前状态为S,经过区块N的交易进行状态转换后,转换为状态S,再经过区块N+1的转换后,转换为状态S6以太坊基本架构及原理以太坊状态转移智能合约:作用于该状态机转换的代码以太坊虚拟机(Ethereum Virtual Machine,简称EVM):执行状态转换代码的虚拟机7账户余额智能合约代码智能合约状态以太坊中的状态转换模型示意图以太坊基本架构及原理以太坊状态转移模型的共识问题相比比特币的UTXO模型,状态转换模型虽然使得智能合约的各种变量存储、传参等变得更加灵活,但也带来了多方共识上的困难,如发生分叉时的处理在以太坊的状
4、态转换模型中,如果发生分叉,需要回到分叉时的状态,重新验证另一条分支上的区块以太坊状态的存储采用了一种独立于区块链存在的树形结构,该状态树结构的树根登记在区块中,记为stateRoot,从而使得状态能够在全网得到共识确认,并在分叉时能够快速回滚。8以太坊简易架构图定义区块链数据以太坊区块链,状态数据,收据数据等智能合约存储在以太坊上的一段代码节点保存有区块链数据的节点每个节点独立的维护区块链数据节点间采用共识机制达成共识,维护全网的状态一致9以太坊基本原理及例子交易执行概述1.每个节点独立维护数据2.节点独立地在EVM中执行合约3.将执行结果写回区块链数据4.节点之间执行共识机制,达成共识10
5、“张三买电影票”交易案例以太坊基本原理及例子实例:交易执行具体过程1.每个节点独立维护数据,这些节点可以是张三、李四、赵四、影院主管等人2.“张三买电影票”的交易在所有节点中被独立验证3.以太坊虚拟机的执行结果将以某种方式写回到区块链数据中,比如张三的余额、影院的余票等。每个区块中会保留一段摘要,这段摘要为执行完区块中交易后以太坊状态的stateRoot,任一子状态的不同都将导致stateRoot的不同4.如果张三控制的节点受到非法攻击或篡改,则执行结果及区块链数据将与网络中其他节点(如李四、赵四、影院的节点)不符,无法参与到网络的下一步共识中11本章内容1.1 以太坊简介1.2 以太坊基本架
6、构及原理1.3 以太坊账户模型与转账1.4 智能合约1.5 以太坊交易1.6 以太坊数据结构及存储121.账户模型2.转账3.Nonce以太坊账户模型背景地址与账户:银行系统与以太坊系统13以太坊的账户模型以太坊账户模型地址的生成计算椭圆曲线下的私钥与公钥对公钥使用KECCAK256哈希算法,计算得到一个64位的16进制哈希值(256个比特长)截取这个哈希值的最后40位作为一个以太坊地址。147C7FC7CCECC1FEE3B3E4AC63ADD864BD786696C20CA15683A269AA9AD8639443(私钥)FBD0A98CEF180CDAA3FC2B64A4CA56FBC8
7、E8AF5CC74E820DA34EB9DAB0D46FF2E3858707929D0A9BEACF5533C22BF02D34E0A6EE4F1A19C1CEAC4FC4251810A6(公钥)DDC0D707E349E9B726925710238661F085A338F04B0C7C956A796B57018151F0238661F085A338F04B0C7C956A796B57018151F0以太坊账户模型账户结构用户账户结构保存了用户地址对应账户的数据信息余额:记录了当前地址持有的以太币的数额,单位是WeiNonce:记录了这个地址创建以来累计发起的交易次数15以太坊账户结构转账实例
8、:以太坊的转账交易过程交易的数据通过Alice的私钥进行签名之后得到对应的数字签名以太坊节点通过交易本身和对应的数字签名还原得到Alice的公钥值通过以太坊的地址生成流程,根据Alice的公钥计算出对应的Alice的以太坊地址如果交易受到篡改,计算通过交易哈希和签名计算得到的地址便是错误的16Alice向Bob转账Nonce交易重放问题在以太坊的模型中,交易的合法性检验在于转账发起者的账户余额如果没有其他手段来使得发起过的交易失效,那么这个交易将可以被无限次的重新发起而不需要发起者的同意,因为发起者的签名对于交易始终是有效的。17Nonce交易重放问题如何判断这笔交易是Alice继续向Bob转
9、账,还是在没有Alice同意的情况下进行的一次恶意的攻击行为?18无法识别的交易重放NonceNonce计数器:计算交易次数和序列只有账户的Nonce和交易的Nonce能够对应的情况下,交易才是合法的当一个交易执行完毕之后,账户的Nonce值增加,原本执行完毕的交易中的Nonce值就无法与现在账户的Nonce值匹配修改对应的Nonce值,意味着原有交易的签名失效,需要发起者的重新签名19Nonce实例:Nonce计数器Alice向Bob转账之前,Alice的Nonce值为0当Alice向Bob转账1 ETH后,Alice的Nonce值变成1Nonce值为1并且具有合法签名的交易2将会是一个合法
10、的交易对于重新提交的交易1而言,此时的交易记录的Nonce值依旧为020Nonce值防止重复交易NonceNonce的其他用途控制账户发起的交易的顺序,从而实现一些相对复杂的功能。通过重复提交一个相同Nonce值的交易来使得一个已经提交但是尚未被确认的交易变得不合法,从而实现一定程度的撤销功能。21本章内容1.1 以太坊简介1.2 以太坊基本架构及原理1.3 以太坊账户模型与转账1.4 智能合约1.5 以太坊交易1.6 以太坊数据结构及存储221.状态模型2.智能合约3.驱动智能合约智能合约定义:智能合约一段在区块链上执行的代码,它依托于区块链系统在参与者之间实现对执行的一致认可23状态模型背
11、景在账户模型中,用户的余额通过地址上的账户数据来表示,具体为账户数据结构中的一个余额的数值在转账交易的过程中,通过转账预先定义好的语义,在发起者的账户中减去交易中定义好的转账金额,在接受者的账户中增加相应的金额可以把账户的余额泛化成一种账户的状态,而把转账交易当作是改变状态的一个方法24状态模型只要约定好的变换规则是固定的,就可以不断地通过变换规则不停地作用到原有状态上产生新的状态对于有着相同的初始状态的参与者们来说,经过完全相同的变换过程,最后必然得到完全相同的当前状态。25三种系统下的状态变换例子智能合约状态模型上的代码执行把计算机程序执行过程中的变量等数据一同存储到区块链上,交易的过程则
12、是执行一段约定好的计算机程序在整个流程中,这些存储的数据是一个状态,执行的代码是一种特定的变换执行的过程是一个单射,对于当前的状态,不能得到多种结果26智能合约智能合约的代码执行利用提前约定好的代码来管理和变化存储在以太坊上的状态变量利用智能合约的代码来自定义交易过程中的状态变换过程在可以受到以太坊系统的参与者一致认可的条件下不断执行和变化,实现“世界状态机”27智能合约实例:记录Alice个人信息的智能合约合约使用状态模型保存个人信息制定Grow和Rename两种方法来进行状态修改28记录Alice个人信息的合约智能合约实例:记录Alice个人信息的智能合约状态转移过程一:执行Grow(1,
13、1)状态转移过程二:执行Rename(“Cathy”)状态变换结果:29记录Alice个人信息的合约合约账户与数据存储背景对于智能合约与状态的实体,以太坊同样使用了账户作为一个合约实例对象的抽象,它基本上是普通账户的扩展30合约账户与数据存储定义合约账户表示合约实例对象的账户被称为合约账户,它的地址并不是由公钥产生,而是通过特定的算法在创建合约的时候生成外部账户表示用户余额的账户则被称之为外部账户(Externally Owned Accounts),这些账户受外部私钥控制,由外部的用户所操控。这里的外部是相对于以太坊运行机制而言的31合约账户与数据存储合约账户内容数据结构合约账户的数据结构基
14、于原本外部合约账户,主要扩展了存储合约代码和存储合约状态的字段计算机代码合约的计算机代码通过机器码的形式保存在合约机器码的字段中状态存储合约的状态存储保存在一个存储的映射表之中,账户的内部只保留了整个存储表的哈希值合约账户不由具体公钥和私钥进行控制,不能够从合约地址发起任何以太坊的交易,所以在绝大多数情况下合约的Nonce值不会改变32合约账户与数据存储实例:记录Alice信息合约的数据存储合约操作Grow和Rename操作以机器码的形式保存合约变量变量存储姓名保存在变量存储表0 x0000000年龄保存在变量存储表0 x0000001身高保存在变量存储表0 x00000002变量的哈希值对整
15、个变量存储表计算得到哈希值0 xb39a372c93a8b8b970e359a978fba643f94ac966c0d862e27da7770d8f485396,保存在合约账户中33合约账户的数据存储与结构合约地址的生成背景:合约地址并不取决于外部的公钥,而是通过特定的算法计算得到。在以太坊中提供了两种生成合约地址的方法合约地址生成方法通过合约创建者的地址和Nonce计算得到通过合约创建者地址、指定的初始化值和合约代码的哈希值计算得到34合约地址的生成实例:通过合约创建者的地址和Nonce生成合约地址输入:创建者地址:Nonce值:使用以太坊自定义的RLP(Recursive Length P
16、refix)编码格式序列化数据将序列化数据通过SHA256计算,得到长度为256位的哈希,值,取最后的160位 350 x238661F085A338F04B0C7C956A796B57018151F000XD694238661F085A338F04B0C7C956A796B57018151F0800 x5499F82BE656085c9636d85b559df2B17d5db33A合约地址的生成实例:通过合约创建者的地址和Nonce生成合约地址创建合约的时候需要使用到Nonce值当出现合约创建合约的情况的时候,创建其他合约的合约账户的Nonce值便需要改变,否则该合约账户每一次计算得到的新合
17、约地址都相同36驱动智能合约背景在状态模型的框架下,以太坊的状态通过交易来改变,智能合约的状态变化同样使用交易来实现。在整个合约的生命周期中,所有的状态变换都是通过执行特定交易来实现的,智能合约的每次运行都是通过交易来驱动。37调用合约背景在一次交易中,以太坊按照事先的约定执行智能合约的代码,最后得到运行的结果定义智能合约作为交易的接收方,按照交易发起者指定的函数和参数进行执行,这些接收者是合约账户地址的交易也被称作合约调用38调用合约如何调用合约函数交易接收方指定智能合约所在地址作为交易接收方data字段为了实现调用过程中指定智能合约的不同函数以及携带函数的参数,以太坊在交易中加入了data
18、字段用于存放这些数据。合约函数索引在现有的ABI约定中,使用了函数名的哈希值作为调用过程中函数的索引,并在这个哈希值的后面附上经过序列化编码的参数。39调用合约400 x5499F82BE656085c9636d85b559df2B17d5db33A0 xddb774da实例:智能合约的调用调用信息合约中的Grow(int256,int256)函数,需要知道合约账户地址被调用的合约函数合约账户地址被调用的合约函数计算Grow(int256,int256)的SHA256哈希值并取前64位,得到调用合约41智能合约的调用实例:调用智能合约函数Grow(1,1)构造交易交易接收方:合约账户地址Dat
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 区块链课件第三章 以太坊 区块 课件 第三 以太