主页 > imtoken钱包不能安装 > 以太坊框架梳理

以太坊框架梳理

imtoken钱包不能安装 2023-07-22 05:11:51

分布式账本:包括交易、区块、区块验证工具、收据、状态数据和交易池相关信息。

以太坊虚拟机 (EVM):智能合约的核心执行层

共识:金盟fisco主要基于PBFT,以太坊公链是POW算法,以太坊测试网也有POS共识算法

网络服务:点对点节点发现和链接服务、区块链同步服务

底层服务:数据库(leavelDB等)、密码学(椭圆曲线算法等)、基础算法(MPT/Bloom/RLP等)

生命周期架构

以太坊框架梳理

如图所示,在以太坊集群生命周期模型下,主要分为八个阶段。

1、建立链接:当以太坊节点启动或节点链接数量太少或接收到其他节点的链接时,该节点需要通过P2P网络机制与其他节点建立链接。 P2P网络的建立涉及基于Kad通信协议的节点发现机制、TCP连接的建立和会话模型的建立。

2、同步交易/区块:当节点启动并与附件节点建立链接时,区块数据会同步:当区块链长度滞后于全网时,节点会最佳链将通过整个网络节点同步构建。同时,区块同步还涉及主动同步和交易同步。当区块成功导入并成为最长区块链时,会在全网进程中主动同步最新区块信息,保持全网状态一致;当节点收到来自客户端的交易时,它会执行最新的交易。相互同步

3、以太坊节点接收客户端发送的交易:以太坊节点接收来自DAPP应用的客户端请求和支付交易。以太坊通过防双花等基础验证加入交易池中的TxPool,交易入队,等待交易同步或打包成块。

4、区块链打包交易:以太坊节点根据不同共识算法的逻辑打包交易并产生区块。为最长的链打包一个块。在打包出块的过程中,交易池中的 N 笔交易会按照一定的打包算法打包成未定块。这里的区块没有添加到区块链中,也没有包含交易执行完成的哈希信息。待定区块打包完成,即交易执行和共识阶段。

5、交易执行:新区块中的每一笔交易都会交给以太坊虚拟机(EVM)进行交易执行,这涉及到合约账户的EVM交易执行器的初始化、执行、evm堆栈指令运行,并运行结果汇总。在EVM执行过程中,会涉及到状态数据的查询和存储以及交易回执的生成;在所有交易执行完毕后,会为未确定的区块设置交易头信息,包括TransactionReceipt、logbloom、gasUsed等。 ps:交易执行在共识过程中的一个阶段分布,与共识阶段并行执行。同时,交易执行涉及到很多点,所以这里将交易执行和共识阶段分开处理

6、区块共识阶段:目前以太坊公链采用POW共识算法,工作量证明(Ethash共识)设计到节点。在fisco联盟链中,主要使用PBFT的三阶段共识,主要是Prepare阶段、Sign阶段、Commit阶段。共识消息将通过第一步已经建立的 P2P 网络发送。

7、区块导入阶段:待发布区块已打包且共识成功后,进入导入流程。在磁盘过程中,一方面,Block中的相关信息包括Transaction列表、TransactionReceipt列表、LogBloom列表、账户状态树以及对应的搜索索引等;另一方面以太坊区块0交易块,链分叉将被处理并且是最长的最佳区块链。

8、客户端查询:成功生成区块后,客户端会查询交易结果、最新区块信息、交易回执、合约数据等信息。

同时,

这里设计了几种基本技术:

3、以太坊源码模块

阿比

CNS(合同命名服务)模块代码

eth

main入口目录以太坊区块0交易块,其中main.cpp包含main函数入口

libchannelserver

AMOP(链上链下通信协议)实现目录

以太坊区块0交易块

libdevcore

基础通用组件实现目录,如工具类函数、基础数据类型结构定义、IO操作函数、读写锁、内存DB、TrieDB、SHA3实现、RLP编解码实现、Worker模型等。

libdisk加密

磁盘存储加密实现目录

libethcore

区块链核心数据结构目录。如ABI、密钥管理、区块头、预编译、交易结构等

以太坊

区块链主框架的逻辑目录。如交易池、系统合约、节点管理、区块链、区块、链参数等。

libevm

虚拟机主目录。如解释器、JIT等

libevmcore

OPCODE指令集定义、定价

libp2p

区块链P2P网络主目录。如握手、网络包编解码、会话管理等。

libpaillier

同态加密算法目录

libpbftseal

PBFT共识插件实现目录

libraftseal

RAFT共识插件实现目录

库统计

访问频率统计与控制实现目录

libweb3jsonrpc

以太坊区块0交易块

web3 RPC 实现目录

样本

一键安装部署

脚本

与安装相关的脚本

系统代理

系统合约实现目录

二、基础技术1、RLP

RLP 递归长度前缀的缩写。是以太坊中的序列化方式,以太坊中的所有对象都会使用RLP方式序列化成字节数组。 RLP 在整个区块链技术体系中扮演着基石角色。在通信、存储等核心功能中,需要依赖rlp的解码和编码功能。

RLP的几种编码规则:总体可以概括为:内容(单字节),前缀+内容(总长度55)

2、MPT

以太坊框架梳理

MPT 是一种改进的数据结构,它结合了 Merkle 树和前缀树的优点。存储。

MPT的节点类型:

MPT在以太坊中的应用:

3、LogBloom 和过滤器

以太坊的区块头包含一个叫做logsBloom的区域。该区域存储当前块中所有接收日志的布隆过滤器,共2048位。即 256 字节。

我们的一张交易收据包含大量日志记录。每条日志记录包含合约地址、多个主题。而且我们的收据中还有一个Bloom filter,这个Bloom filter Bloom filter记录了所有的日志信息。布隆过滤器可以方便在以太坊中查询交易结果和通知交易事件。

布隆过滤器构建过程:

Bloom Filter 的核心实现是一个非常大的位数组和几个哈希函数。假设位数组的长度为m,散列函数的个数为k。

以太坊框架梳理

上图是一个例子,具体操作过程:假设集合中有3个元素{x,y,z},哈希函数的个数是3(这里元素个数和没有与 K 个函数的数量有直接关系)。

1、初始化位数组并将每个位设置为位0。

以太坊区块0交易块

2、对于集合中的每个元素,依次通过三个哈希函数映射元素,每个映射都会生成一个哈希值,这个值对应位数组上方的一个点,然后对应位数组的位置标记为1。

3、在查询集合中是否存在W元素时,同样的方法通过散列将W映射到位数组上的3个点。如果 3 个点之一不是 1,则可以判断该元素一定不存在于集合中。相反,如果三个点都为1,则该元素可能存在于集合中。

注意:这里无法判断元素是否一定存在于集合中,可能存在一定的误判率。从图中可以看出:假设一个元素通过映射对应4、5、6这三个点。虽然这三个点都是1,但是很明显这三个点是不同元素经过hash后得到的位置,所以这种情况说明虽然元素不在集合中,但可能都对应1,这就是假阳性率的存在。

4、账户模型

以太坊账户模型分为普通账户和合约账户:

在以太坊账户中,我们维护以下状态:

5、区块链模型

区块链模型主要包括区块和区块链。

区块是以太坊的核心数据结构之一。所有与账户相关的活动都以交易的形式存储,每个区块都有交易对象的列表;每个事务的执行结果由一个 Receipt 对象和它包含的一组 Log 对象记录;在所有交易执行后,生成的 Receipt 列表存储在 Block(压缩和加密)中。不同的Block通过前向指针ParentHash一一连接,形成单链表。

区块链管理整个区块的单链表。在以太坊客户端软件(如钱包)中,只有一个 BlockChain 对象存在。与Block/Header的关系类似,BlockChain也有一个成员变量类型HeaderChain,用于管理所有Header组成的单链表。当然,HeaderChain 在全局范围内只有一个对象,由 BlockChain 持有。

6、椭圆曲线数字签名算法

以太坊中的数字签名都使用椭圆曲线数字加密算法(ECDSA),其理论基础是椭圆曲线密码学(ECC),而ECC存在的理论基础是点乘公式中的私钥d Q = dP(几乎)无法破译。与基于大素数分解的 RSA 相比,ECC 只需要更短的公钥,同时提供相同级别的安全性。

以太坊椭圆曲线数字签名算法使用场景:

7、EVM 虚拟机

以太坊虚拟机(环境虚拟机,简称EVM)),功能是将智能合约代码编译成可以在以太坊上执行的机器码,并提供智能合约的运行环境。

以太坊框架梳理

EVM 的特点:

三、核心功能拆解1、P2P网络

作为一个去中心化的系统,以太坊底层个体之间的通信显然非常重要。所有数据的同步和每个个体状态的更新依赖于整个网络中每个个体之间的通信机制。以太坊的网络通信基于点对点(p2p)通信协议,根据自身传输数据类型(区块、交易、哈希值等)、网络节点业务相关性等多方面进行了专门设计要求。

以太坊框架梳理

基于Kad通信协议的节点发现机制

现在很多 P2P 网络实现都使用 DHT 来实现搜索,其中 Kademlia(简称 Kad)算法以其简单、灵活和安全成为主流实现。

以太坊的 Kademlia 算法不断地从附近的节点中发现新的节点,并刷新本地的 k-bucket。 Kad算法主要从以下几个方面进行设计:

以太坊区块0交易块

分类说明

检测节点判断是否在线

乒乓

PING 命令响应

查找节点

查询与目标节点ID接近的节点

邻居

FIND_NODE命令响应,发送K桶中与目标节点ID接近的节点

建立 TCP 连接

以太坊节点会打开一个 TCP 端口来承载服务数据。 TCP的建立主要涉及基于RLPx协议的两阶段握手过程。简单来说:1.客户端与服务端建立链接,交换公钥; 2.通过共享密钥加密和交换 Hello 消息

会话模型建立

客户端和服务器端建立连接后,会通过节点网络业务关联建立不同的会话模型,如全节点业务类型、轻节点业务类型,并提供广播等相应服务。

2、交易/区块同步

交易/区块同步同步方式分为:快速节点、全节点、轻节点。

交易/区块同步还包括主动同步:

3、交易过程

以太坊框架梳理

一笔交易的执行主要包括交易接收、防双花、交易入队、节点出块阶段的交易打包、交易执行和共识,最后通过阻塞队列中间。

防双花核心点:交易队列去重检查、历史区块集交易去重检查、区块高度范围检查

事务打包核心点:打包策略、同步事务队列

事务执行核心点:evm编译器初始化、gas扣除策略、执行流程

区块导入核心点:区块最长链构建,区块数据存储一致性

以太坊区块0交易块

4、共识引擎

目前以太坊公链采用的是POW共识算法,工作量证明(Ethash共识)是针对节点设计的。在fisco联盟链中,主要使用PBFT的三阶段共识。

以太坊框架梳理

以下是对PBFT模型的总结:

舞台广播msgPBFTPacketTypehandle msg

第一阶段

广播PrepareReq

准备请求包

handlePrepareMsg

第二阶段

广播签名请求

签名请求包

handleSignMsg

第三阶段

广播提交请求

提交请求包

handleCommitMsg

异常处理

p>

broadcastViewChangeReq

查看ChangeReqPacket

handleViewChangeMsg

PBFT的三阶段共识:

PBFT 的三阶段过程是正常完成的共识过程。在实际环境中,由于网络传输延迟、恶意主节点、EVM执行超时等原因,可能无法正常完成共识,以上问题统称为异常。异常过程中,PBFT会切换视图。

5、客户端RPC信息查询