主页 > 苹果下载imtoken教程 > 以太坊架构和组成

以太坊架构和组成

苹果下载imtoken教程 2023-01-17 05:03:43

本文内容摘自《以太坊技术详解与实战》第二章的摘抄和总结,基本可以让你一窥以太坊全貌。

一、以太坊整体架构

以太坊整体架构分为三层:底层服务、核心层、顶层应用,如图:

以太坊投资合法吗_以太坊和eos哪个更值得投资_投资以太坊安全吗

以太坊架构

2.块

所谓区块,其实可以定义为记录一段时间内发生的交易和状态结果的数据结构,是对当前账本状态的共识。

一个区块主要由区块头、交易列表和叔块头三部分组成:

块头

区块头包含:父块哈希值(Prev Hash)、叔块哈希值(Uncles Hash)、状态树根哈希值(stateRoot)、交易树根哈希值(Transaction Root)、收据树根哈希值(Receipt Root) )、时间戳(Times tamp)、随机数(Nonce)等。

以太坊区块链的区块数据结构相对于比特币的一个重大变化是保存了三个默克尔树根,即状态树、交易树和收据树。

交易清单

交易列表是矿工从交易池中选择包含在区块中的一系列交易。

叔块

主链上的区块通过Uncles域将不在主链上的孤儿块称为“叔块”。

以太坊投资合法吗_以太坊和eos哪个更值得投资_投资以太坊安全吗

以太坊区块结构

3.账户

账户以地址为索引,地址由公钥推导出来,取公钥的最后20字节

以太坊系统中有两类账户,即外部账户和合约账户。 外部账户存储以太币余额状态,而合约账户不仅有余额,还有智能合约的状态及其变量。

外部账户

外部账户(Externally Owned Account,EOA)由私钥控制,是用户实际控制的账户。存储以太币余额状态

合约账户

合约账户是包含合约代码的账户。 合约账户不是由私钥文件直接控制的,而是由合约代码控制的。 合约账户的地址是根据创建合约时合约创建者的地址和该地址发送的交易计算得出的。

与外部账户相比,合约账户除了余额之外,还有智能合约的状态及其变量

私钥和公钥

以太坊投资合法吗_以太坊和eos哪个更值得投资_投资以太坊安全吗

以太坊中的每个外部账户都由一对密钥定义,一个私钥和一个公钥。

目前常见的私钥形式有以下三种:

1)私钥

私钥是随机生成的 256 位二进制数。 用户甚至可以用纸笔随机生成私钥,即随机写下一串只包含“0”或“1”的256位字符串。 256 位二进制数是私钥的原始状态。

2)密钥库和密码

在官方的以太坊钱包中,私钥和公钥会以加密的方式保存在一个JSON文件中,存放在key store子目录中。 这个JSON文件就是Keys tore,所以用户需要同时备份Keys tore和对应的Password(创建钱包时设置的密码)。

3) 记忆码

记忆码由 BIP 39 方案提出。 目的是随机生成12到24个比较好记的单词。 词序列通过 PBKDF2 和 HMAC-SHA512 函数创建一个随机种子。 种子通过 BIP-0032 提案确定性钱包生成

4. 数据结构与存储

区块、交易等数据最终存储在Level DB数据库中。 Level DB数据库是键值对(key-value)数据库,key一般与hash相关,value是存储内容的RLP编码。

数据组织

以太坊使用 MPT 树(Merkle Patricia Trie)作为一种数据组织形式来组织和管理用户账户状态和交易信息等重要数据。 MPT是一种加密认证的数据结构,结合了Merkle树和Trie树(前缀树)数据类型的优点。

默克尔树

Merkle树是一种树状数据结构,可以是二叉树,也可以是多叉树。 它由一组叶节点、一组中间节点和一个根节点组成。 底部叶子节点包含底层数据,每个中间节点是其子节点的散列,根节点是其子节点的散列,代表默克尔树的根。

创建 Merkle 树的目的是让区块数据可以零散地传输; 一个节点可以从一个节点下载一个区块头,并从另一个来源下载与它相关的树的其他部分,并且仍然能够确认所有数据都是正确的。

Merkle树可以用来存储所有的键值对

Merkle 树具有以下属性:

1. 每个数据集对应一个唯一的合法根哈希值。

2. 树节点的更新、增减、生成新的根哈希值都很容易。

3. 在不改变根哈希值的情况下,没有办法修改树的任何部分,所以如果根哈希值包含在签名文档或有效块中,则可以保证树的正确性。

4. 任何人只能向特定节点提供分支,并通过密码学方法证明相应内容的节点确实在树中。

以太坊投资合法吗_以太坊和eos哪个更值得投资_投资以太坊安全吗

默克尔树

特里树

键表示从树的根到相应值的路径。 即从根节点开始,key中的每个字符(从前到后)代表从根节点开始寻找对应值要经过的子节点。 该值存储在叶节点中,叶节点是每条路径的最终节点。

MPT树

以太坊和eos哪个更值得投资_以太坊投资合法吗_投资以太坊安全吗

结合merkle和Trie,做了如下改进:

1. 为了保证树的密码安全性,每个节点都通过其哈希值来引用

2. 对于存储在Leve IDB数据库中的非叶子节点,key代表该节点的RLP码的SHA3哈希值,value为该节点的RLP码。

3、引入多种节点类型,提高效率:

3.1 Empty节点:简单的表示empty,在代码中就是一个空字符串

3.2 叶子节点:键值对列表,其中key为特殊的十六进制编码,value为RLP编码。

3.3 扩展节点:键值对列表,但这里的值是其他节点的哈希值,通过它可以链接其他节点。

3.4 分支节点:一个长度为17的列表。MPT中的key被编码成特殊的十六进制表示,加上最终的值,前16个元素对应key中16个可能的十六进制字符,如果有key-value pair in this 如果分支节点终止,则最后一个元素表示一个值,即分支节点可以是搜索路径的末端,也可以是路径的中间节点。

4. 对密钥进行编码的特殊十六进制前缀编码(HP)

以太坊投资合法吗_以太坊和eos哪个更值得投资_投资以太坊安全吗

状态树根

三棵树

如图所示

以太坊投资合法吗_以太坊和eos哪个更值得投资_投资以太坊安全吗

以太坊区块头结构

1.状态树

state tree包含一个key-value map,其中key是账户地址,value是账户内容,主要是{nonce, balance, codeHash, storageRoot }。 nonce是账户交易的序号,balance是账户余额,codeHash是code的哈希值,storageRoot是另一棵树的根节点。 状态树表示访问一个块后的整个状态。

以太坊是一个基于账户的区块链应用平台。 账户的状态并不是直接存储在每个区块中,所有的账户状态都以“状态数据”的形式存储在以太坊的节点中。

2.交易树

每个区块都有一个独立的交易树。

一个区块中的交易顺序主要是由“矿工”决定的,这些数据在区块被挖出之前是未知的。 然而,“矿工”通常根据他们的 GasPrice 和 nonce 对交易进行排序。 首先将交易列表中的交易划分为发送账户,根据这些交易的nonce对每个账户的交易进行排序。每个账户的交易排序完成后,通过比较选择价格最高的交易每个账户的第一笔交易,通过堆实现

交易树包含的键值对中,每个键是交易的编号,值是交易内容

3.收据树

每个区块都有自己的收据树,收据树不需要更新,收据树代表每笔交易对应的收据。

交易收据是一个 RLP 编码的数据结构:[medstate, Gas_used, logbloom, logs]。 其中,medstate是事务处理后树根的状态; gas_used为交易处理后使用的gas量; logs是一个元素列表,形式为[address, [topicl, topic2 ,…], data],该形式在事务执行过程中被操作调用代码LOGO ... LOG4生成(包括主调用和子调用) call), address为生成日志的合约地址,topicn为最多4个32字节的值,data为任意字节大小的数组; logbloom 是由topic 的地址和Bloom filter 组成的。

数据库支持-Level DB

以太坊和eos哪个更值得投资_投资以太坊安全吗_以太坊投资合法吗

LevelI DB是谷歌实现的一个非常高效的键值对数据库,其中的键值都是二进制的。 目前可以支持十亿级别的数据量,并且在这个数据量下还是有非常高的性能。

以太坊中共有三个 Leve IDB 数据库,分别是 BlockDB、StateDB 和 ExtrasDB。

BlockDB保存了区块的主要内容,包括区块头和交易; StateDB保存账户的状态数据; ExtrasDB 保存收据信息和其他辅助信息。

五、共识机制

共识机制是区块链交易达成分布式共识的一种算法。 由于点对点网络下的网络延迟有高有低,每个节点收到的交易顺序可能不同,因此区块链系统需要设计一种机制让节点可以检查内部交易发生的顺序一段相似的时间。 依次达成共识,这就是共识机制。

战俘

PoW就是通过工作的结果证明你已经完成了相应的工作

哈希函数的特点:

1. 无冲突,即不会出现输入值不同而哈希变换后哈希值相同的情况。

2. 隐蔽性,即给定一个哈希值,反向推导输入值在计算上是不可行的。

3. 没有比穷举更好的方法了,使哈希值落在一个特定的范围内。

POW 算法原理:节点通过不断变化的随机数来寻找合适的哈希值。 当节点首先计算出合适的哈希值时,如果通过其他共识节点的验证,则将其打包的区块添加到区块中。 在区块链中。

Ethash(以太坊专用POW算法)

为解决挖矿中心化问题,专门设计了抗ASIC、轻客户端可快速验证的PoW算法

算法流程:

1、对于每个区块,通过扫描区块头可以计算出一个种子(seed),它只与当前区块相关。

2.使用种子可以生成16MB的伪随机缓存,轻客户端会存储缓存。

3、根据缓存重新生成一个1GB的数据集,称为DAG。 数据集中的每个元素只依赖于缓存中的某些元素,即只要有缓存,就可以快速计算出DAG中指定位置的元素。 矿工存储数据集投资以太坊安全吗,这些数据集会随着时间线性增长。

4. 挖矿可以概括为“矿工”从DAG中随机选择元素并进行哈希处理的过程。 DAG也可以理解为一个完备的搜索空间。 挖矿的过程就是从DAG(类似于比特币挖矿中测试一个合适的nonce的过程)中随机选择元素进行哈希。

5、验证者只需要花费少量的内存来存储缓存,因为验证者可以根据缓存计算计算出DAG中指定位置的元素,然后验证这些指定元素的哈希值是否更少比某个哈希值,这是为了验证“矿工”的工作是否符合要求。

Ethash算法的特点是挖矿效率与CPU基本无关,与内存大小和带宽正相关。 目的是去除专用硬件的优势,抵制ASIC。

收银机

PoS是根据网络参与者当前持有数字货币的数量和时间进行利益分配,是货币所有权的证明

共识算法类型:

基于链的 PoS 和 BFT(Byzantine Fault Tolerant,拜占庭容错)风格的 PoS。

在基于链的 PoS 中,算法在每个时间段(例如,设置每 l0s 循环一次,每个循环为一个时间段)从验证者集合中伪随机选择一个验证者,并赋予验证者新的权利块,但验证者必须确保该块指向最多的块(指向的前一个块通常是最长链的最后一个块)。 因此,随着时间的推移,大多数区块会汇聚到一条链上。

以太坊和eos哪个更值得投资_投资以太坊安全吗_以太坊投资合法吗

在 BFT 式的 PoS 中,相对权利被分配给验证者,允许他们提议区块并对提议的区块进行投票,从而决定哪个区块是新区块,并在每一轮链中选择一个新区块加入该区块。 在每一轮中,每个验证者为一个特定的区块“投票”,最后所有在线和诚实的验证者将“协商”是否可以将给定的区块添加到区块链中,并且意见不能改变。

6.交易

以太坊中的一笔交易主要是指从一个外部账户发送到区块链上另一个账户的消息的签名数据包,主要包括发送方的签名、接收方的地址以及从发送方到接收方转账的以太币数量,等内容。

交易是以太坊整体架构的重要组成部分,连接以太坊账户,起到价值传递的作用。

交易内容

from : 交易发送方的地址,必填;

to :交易接收方的地址,如果为空,则表示这是一笔创建智能合约的交易;

value :发送方想要转移给接收方的以太币数量;

data(也写成input):存在的数据字段,如果存在,则表示该交易是创建或调用智能合约的交易;

Gas Limit(也可以写作Gas、StartGas):表示本次交易允许消耗的Gas的最大数量;

GasPrice:表示发送方愿意支付给矿工的Gas价格;

nonce:用于区分同一用户发出的不同交易的标记;

hash:上述信息生成的哈希值(hash value),作为交易的ID;

r , s , v :交易签名的三部分,它们是用发送方的私钥对交易哈希进行签名生成的。

手续费

为了防止用户在区块链公链中发送过多无意义的交易,浪费矿工的计算资源投资以太坊安全吗,交易的发送方需要为每笔交易支付一定的价格,这就是交易手续费。

由于比特币只有转账交易,每笔交易所需的计算开销大致相同,因此每笔交易的发送方都会以比特币的形式支付相对固定的费用。 随着以太坊引入智能合约,涉及智能合约创建和调用的交易消耗的计算量差异很大。 因此引入相对复杂的Gas和Gas Price来对交易所需的手续费进行定价。

1、煤气

Gas(汽油)是用来衡量一笔交易所消耗的计算资源的基本单位。 以太坊节点执行交易所需的计算步骤越复杂,交易消耗的 Gas 就越多。

2. 天然气价格

Gas Price(气体价格)是一单位Gas(以太币,即Ether)所需的手续费。 矿工将收到的交易按照Gas Price或者Gas * Gas​​ Price从大到小排序,从而决定哪笔交易先入块。当以太坊公链上的交易量激增时在一定的时间段内,为了让矿工尽快接受一笔交易,交易发送方可以提高这笔交易的Gas Price来激励矿工

3.气体限制

有两种类型:

对于单笔交易,Gas Limit(有时也称为 StartGas )表示交易发送方愿意为执行本次交易支付的最大 Gas 数量,需要发送方在发送交易时设置。 可以保护用户免受消耗过多交易费用的错误代码的影响。 GasPrice * Gas​​ Limit 表示用户愿意为一笔交易支付的最高金额。

对于一个区块来说,Gas Limit 是单个区块允许的最大 Gas 量,其大小由矿工决定。 为了防止矿工消耗过多的资源,挖出的区块不能组成最长的交易链。 但是,矿工不能随意改变区块的 Gas Limit。 根据以太坊协议,当前区块的 Gas Limit 只能在前一个区块的 Gas Limit 的基础上上下浮动 1/1024。

交易类型

以太坊和eos哪个更值得投资_投资以太坊安全吗_以太坊投资合法吗

1.转账交易

web3.eth.sendTransaction({

来自:“Oxb60e8dd6lc5d32be8058bb8eb970870f07233155”,

至:“Oxd46e8dd67c5d32be8058bb8eb970870f07244567”,

值:10000000000000000

});

2.创建智能合约交易

web3.eth.sendTransaction({

来自:“Oxb60e8dd6lc5d32be8058bb8eb970870f07233155”,

数据:“合约二进制代码”

});

3.执行智能合约交易

web3.eth.sendTransaction({

来自:“Oxb60e8dd6lc5d32be8058bb8eb970870f07233155”,

至:“Oxb4259e5d9bc67a0f2ce3ed372ffc5lbe46c33c4d”,

数据:“调用方法签名和编码参数的哈希值”

});

交易执行流程

以太坊投资合法吗_以太坊和eos哪个更值得投资_投资以太坊安全吗

以太坊投资合法吗_以太坊和eos哪个更值得投资_投资以太坊安全吗

以太坊投资合法吗_以太坊和eos哪个更值得投资_投资以太坊安全吗

以太坊投资合法吗_以太坊和eos哪个更值得投资_投资以太坊安全吗

以太坊投资合法吗_以太坊和eos哪个更值得投资_投资以太坊安全吗

七、数据编码与压缩

RLP(Recursive Length Prefix)是一种对任意二进制数据进行嵌套结构编码的编码算法,是以太坊数据序列化的主要方法

总结

除了EVM和区块同步协议,其他基本都涵盖了。 至于一些细节,最好通过分析以太坊的源码来弄清楚。