Ethereum技术架构介绍

这篇具有很好参考价值的文章主要介绍了Ethereum技术架构介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  • 💂 个人主页: 同学来啦
  • 🤟 版权: 本文由【同学来啦】原创、在CSDN首发、需要转载请联系博主
  • 💬 如果文章对你有帮助,欢迎关注、点赞、收藏和订阅专栏哦

🚗 一、Ethereum总体架构

Ethereum总体架构包括底层服务、核心层、顶层应用等三层。

  • 底层服务:包括P2P网络、LevelDB、密码学算法以及分片优化等基础服务;
  • 核心层:区块链、共识算法和虚拟机等核心元件;
  • 顶层应用:API接口、智能合约及去中心化应用(DApp)。
    Ethereum技术架构介绍

🚚 二、区块

所谓的区块,其实可以定义为记录一段时间内发生的交易和状态结果的数据结构,是对当前账本状态的一次共识。
区块 = 区块头 + 交易列表 + 叔区块头,区块结构如下图所示。
Ethereum技术架构介绍

🔴 1、区块头

区块头 = 父块散列值(Prev Hash) + 叔块散列值(Uncles Hash)+ 状态树根散列值(state Root)+ 交易树根散列值(Transaction Root)+ 收据树根散列值(Receipt Root)+时间戳(Timestamp)+随机数(Nonce)
Ethereum区块链区块数据结构的重要改变是 区块头中加入三棵Merkle树,即状态树、交易树和收据树。

🟠 2、交易列表

交易列表是由矿工从交易池中选择收入区块中的一系列交易。

🟡 3、叔区块

不在主链上的且被主链上的区块通过Uncles 字段收留进区块链的孤块叫做“叔区块” 。

🚂 三、账户

账户以地址为索引,地址由公钥衍生(取公钥的后20字节),分为外部账户(EOA)和合约账户,两种账户统称为“状态对象”(存储状态),外部账户存储以太币余额状态,而合约账户除了余额还有智能合约及其变量的状态。
一个账户包含四个部分:

  • 该地址交易次数(抵制重防攻击)
  • 余额
  • 合约的二进制代码(合约账户才有)
  • 账户的存储(默认为空)

🔴 1、外部账户

  • 由用户创建,可存储以太币,由公钥和私钥控制,是由用户实际控制的账户。
  • 生成外部账户的三步:
    ①设置账户私钥,通常意义的用户密码;
    ②使用加密算法由私钥生成对应的公钥(secp256k1椭圆密码算法);
    ③根据公钥得到地址(公钥的后20字节)。
  • 私钥是用户掌控账户的唯一依据,需经常备份。

🟠 2、合约账户

  • 由外部账户创建,是包含合约代码的账户,不由私钥文件直接控制,由合约代码控制;
  • 合约账户的地址由合约创建时合约创建者的地址,以及该地址发出的交易共同计算得出;
  • Ethereum区块链上的所有操作都是根据账户发出的交易来执行的,当合约账户收到一条交易消息时,其合约代码将被作为交易输入执行,也将被每一个节点执行,并将执行结果作为新块验证的一部分。

🟡 3、公钥和私钥

目前私钥的三种形态:

  • Private key:随机生成的256位二进制数字;
  • Keystore & Password:Ethereum官方钱包中,公钥和私钥加密保存为JSON文件,存放在keystore文件夹中;
  • Memonic Code:BIP39提出,随机生成12~24个比较容易记住的单词,根据函数创建出随机种子,再根据某种方式生成确定性钱包(Metamask使用)。

🟢 4、钱包

钱包包括Mist、Parity和Etherwall等类型。

🚒 四、数据结构与存储

🔴 1、数据组织形式

Ethereum使用Merkle Parircia Trie 树(MPT),加密认证的数据结构,融合Merkle树和Trie树两种数据结构。

🟥 1.1 Merkle

  • 树形数据结构,可二叉,可多叉。由一组叶节点、一组中间节点和一个根结点组成;
  • 最下面的叶节点包含基础数据,每个中间节点是它的子节点的散列,根结点是它的子节点的散列;
  • 如果在树的底部有恶意篡改和加入,将引起树上部甚至根的改动。

🟧 1.2 Trie

  • key代表的是从树根到对应value的一条真实路径;
  • 如果有两个value,他们有着基于相同前缀的key,他们相同前缀的长度占自身比例越大,则代表着这两个value在树中的位置靠的越近,并且Trie树中不会有像散列表一样的冲突,一个key永远只对应一个value。

🟨 1.3 MPT

  • Ethereum基于Merkle、Trie,使用MPT
  • 每个节点通过它的散列值被引用,用于LevelDB中的查询
  • 对于存储在LevelDB中的非叶节点,其在数据库中的表现形式为:key代表节点的RLP编码的SHA3散列值,value是节点的RLP编码,即k-v:Hash(RLP(节点))-RLP(节点)

MPT 4种节点类型:
①空节点
②叶节点:键值对的一个列表,key是特殊的十六进制编码,value是RLP编码
③扩展节点:键值对的列表,但这里的value是其他节点的散列值,通过这个散列值连接到其他节点
④分支节点:一个长度为17的列表。既可以是搜索路径的终止,也可以是路径的中间节点

下图以状态树为例
Ethereum技术架构介绍

🟩 1.4 状态树

  • 每个节点有16个孩子节点,每个叶节点表示一个账户;
  • key是账户地址,value是账户内容,包括「nonce、balance、codeHash、storageRoot」。

🟦 1.5 交易树

  • 每个区块有独立的交易树;
  • key是交易编号,value是交易内容。

🟪 1.6 收据树

  • 每个区块有独立的收据树,不需要更新,代表每笔交易相应的收据;
  • key是索引编号,用来指引这条收据相关交易的位置,value是收据的内容。

🟫 1.7 数据库LevelDB

Ethereum共三个LevelDB数据库:

  • BlockDB:区块的主体内容为块头+交易;
  • StateDB:账户的状态数据;
  • ExtrasDB:收据和其他辅助信息。

🚋 五、共识机制

🔴 1、Ethash

  • 抵制ASIC;
  • 让挖矿者从区块链状态中获取随机数据,计算一些从区块链最后的N个区块中随机选择的交易,返回其散列。实际上是从一个根据历史信息生成的搜索空间中,通过散列计算选取符合条件的散列值,因此不再是简单的哈希运算,还需要有足够的内存空间;
  • 过渡到PoS。

🟠 2、Casper

基于网络参与者目前所持有的数字货币的数量和时间进行利益分配,引入币龄概念,有效地址51%攻击能达到秒级的共识,几秒出一个块
加入了惩罚机制,通过交押金的方式,好块则收益,坏块则失去押金。

🚞 六、交易

交易是指一条外部账户发送到区块链上另一账户的消息的签名数据包,包含发送者的签名、接受者的地址以及发送者转移给接受者的以太币数量等内容。

🔴 1、交易费用

  • 防止用户在公链中发送太多无意义交易,浪费计算资源;
  • Gas是用来衡量一笔交易所消耗的计算资源的基本单位;
  • Gas Price是Gas的单位,目前比较稳定,但可根据需求自由浮动,Gas Price*Gas越高,交易被处理得越快;
  • Gas Limit表示发送者愿意为这笔交易执行所支付的最大Gas数量,保护用户免受错误代码影响导致消耗过多的交易费。

🟠 2、交易内容

交易可以是简单的以太币转账,也可以是包含智能合约代码的消息

包含如下内容:

  • from
  • to
  • value
  • data:存在的数据字段,代表交易是一个创建或调用智能合约交易
  • Gas Limit
  • Gas Price
  • nonce
  • hash
  • r、s、v:交易签名的三个部分,由发送者的私钥对交易hash进行签名生成

🟡 3、交易类型

  • 转账交易;
  • 创建智能合约的交易;
  • 执行智能合约的交易。

🚆 七、数据编码与压缩

RLP用于编码任意的具有嵌套结构的二进制数据,是Ethereum数据序列化的主要方法区块、交易等数据结构先经过RLP编码处理,再存储到数据库。文章来源地址https://www.toymoban.com/news/detail-407304.html

🚈 八、API

  • JSON-RPC API
  • Web3.JavaScript API

🚅 九、域名服务(ENS)

  • 三个主要构件:注册表、解析器、注册服务;
  • 通过竞拍获得名称;
  • 不会产生收益,所有资金作为保证金或被销毁。

到了这里,关于Ethereum技术架构介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 业务架构、应用架构、技术架构、数据架构

    如果没有进行合理的架构规划,将会引发一系列的问题。为了避免这些问题的发生,企业需要进行业务架构、应用架构、技术架构和数据架构的全面规划和设计,以构建一个清晰、可持续发展的企业架构。 https://www.zhihu.com/question/28739159/answer/2815781474 业务架构:需求初期业务

    2024年02月08日
    浏览(58)
  • 【区块链 | 智能合约】Ethereum源代码(2)- go-ethereum 客户端入口代码和Node分析

    上篇提到用 make geth 来编译geth客户端。我们来看看make file做了什么: 执行了 ci.go 里面做了两件事情 1,ln -s命令在build/_workspace/ 目录上生成了go-etherum的一个文件镜像,不占用磁盘空间,与源文件同步更新 2

    2024年02月03日
    浏览(41)
  • Ethereum

    区块链1.0,以BTC公链为代表:不具备只能合约功能,是一条支持电子货币转账的完整区块链。 区块链2.0,以ETH公链为代表:具备智能合约功能,共识机制是PoW向PoS过去,但是目前共识机制还是使用PoW,但是此PoW算法经过改进,性能优于BTC的PoW。 区块链3.0,以EOS公链为代表:

    2024年02月11日
    浏览(32)
  • Ethereum EVM简介

    首先需了解以下基本概念: 1)区块链 2)世界状态 3)账号 4)交易 5)消息 6)去中心化账本 7)原子性和顺序性 以太坊可看成是基于交易的状态机,交易代表了2个状态间的valid arc: 将多笔交易整理打包为区块,区块为package of data: 从状态的角度来看,可将以太坊看成是状

    2023年04月09日
    浏览(38)
  • Ethereum 基础(一)

    以太坊( Ethereum )是社区运行的技术,为加密货币以太币(ETH)和数千个去中心化应用程序提供动力。 ethereum.org是您进入以太坊世界的门户。这项技术是新的、不断发展的——有个向导会有帮助。如果你想深入研究,我们建议你这样做。 以太坊是一种数字货币、全球支付和应

    2024年02月02日
    浏览(35)
  • 【区块链 | 智能合约】Ethereum源代码(8)- Ethereum服务和以太坊P2P协议发送广播源码分析

    在“【区块链 | 智能合约】Ethereum源代码(2)- go-ethereum 客户端入口代码和Node分析”一文中,我们提到Ethereum作为一个service,被Node 注册进去。Node start的时候会启动其注册的所有服务,Ethereum service也是一样。 初始化方法

    2024年01月21日
    浏览(53)
  • 技术架构的演进-八大架构

    目录: 常见概念 评价指标 单机架构 应用数据分离架构 应用服务集群架构 读写分离 / 主从分离架构 引入缓存 —— 冷热分离架构 垂直分库 业务拆分 —— 微服务 容器化引入——容器编排架构 总结 1.常见概念: 应用(Application) / 系统(System) :为了完成一整套服务的一个

    2024年02月15日
    浏览(46)
  • Go Ethereum源码学习笔记000

    这个专栏的内容是免费的,因为自己这边都是基于开源库和开源内容整理的学习笔记,在这个过程中进行增删改查,将自己的理解融入其中,所以这里用开源的精神分享给大家:Free software, free knowledge。当然,开源精神和软件付费/知识付费并不冲突,而是求同存异。大家觉

    2024年02月14日
    浏览(33)
  • 启动 Ethereum(上海) 主网全节点

    采用最新的geth版本之后,按照之前的方法启动geth主网节点会出现如下问题: The above message is emitted when Geth is run without a consensus client on a post-merge proof-of-stake network. Since Ethereum moved to proof-of-stake Geth alone is not enough to follow the chain because the consensus logic is now implemented by a separate

    2024年02月07日
    浏览(50)
  • Ethereum以太坊事件日志查询参数

    详见:https://www.quicknode.com/docs/ethereum/eth_getLogs address:合约地址 fromBlock:开始区块 toBlock:结束区块 topics:主题数组 blockHash:区块哈希,优先级高于fromBlock、toBlock 这里主要介绍topics参数,其他参数都比较好理解,topics是长度为4的数组集合,topic分为2种:一种事件签名topic,

    2024年02月07日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包