主页 > 安卓怎么下载imtoken钱包 > 以太坊源码分析(一)go-ethereum的设计思路和模块组织

以太坊源码分析(一)go-ethereum的设计思路和模块组织

安卓怎么下载imtoken钱包 2023-02-07 05:35:39

go-ethereum设计思路和模块组织

=====================================

以太坊的目标是创建一个去中心化的平台,用于运行基于区块链技术的智能合约。

## 1. 区块链技术

区块链是一种去中心化的数字会计技术。 区块链数据由互不信任的节点共同维护,每个节点复制一份完整的记录。

## 2. 以太坊的核心概念

* EVM:Ethereum Virtual Machine,轻量级虚拟机环境,是以太坊智能合约的运行环境。

* 账户:账户分为合约账户和外部账户两种。 合约账户主要存储执行的合约代码,外部账户存储以太币以太坊的数据结构是什么,对应具体的公钥。

* 交易:以太坊网络上的交易,从一个账户到另一个账户的消息,包括以太币或智能合约参数。

* Gas​​:以太坊网络运行的燃料。 每执行一次智能合约,都会消耗一定量的gas。

* Mine:挖矿,以太坊网络采用工作量证明算法来保证网络的安全运行。

* P2P网络:以太坊分布式网络中所有节点都是平等的以太坊的数据结构是什么,没有中央服务器。

## 3. 以太坊模型

以太坊的本质是一个基于交易的状态机。 以太坊状态下有数百万笔交易。

这些交易被打包成一个区块(Block),每个区块都与前一个区块相连,形成一个反向链表,因此称为区块链。 在区块链的基础上,加入智能合约,创建以太坊。

一笔交易要被认为有效,必须经过一个验证过程,即挖矿(Mine)。 以太坊网络上的任何矿工都可以尝试创建和验证区块,

如果一个块被认为是有效的并且最快完成验证,它将被添加到主链,这是以太坊网络上最长的链。 如果多个矿工同时打包一个区块,区块在网络中传播需要一定的时间,

难免会有多条路径,也就是所谓的分叉。

为了防止产生多条链,以太坊使用了**GHOST协议**(Greedy Heaviest Observed Subtree),即选择一条完成最多计算量的路径。 区块数越大,路径越长,说明挖矿消耗的算力越多。

因为成功确认一个新区块会得到一定数量的以太坊作为奖励,所以从经济学和博弈论的角度来看,选择主链是最优的。

## 四。 以太坊的架构

以太坊的架构设计可以简单分为三层,协议层、接口层和应用层。 协议层可分为网络层和存储层。

从技术角度看,协议层主要包括P2P网络通信、分布式算法、加密签名和数据存储技术。 在数据存储的底层,比特币和以太坊都使用谷歌开源的LevelDB数据库。

接口层与协议层完全分离,除交易时与协议层交互外,保证基于区块链的各种应用层服务的开发不受限制,包括分布式存储服务、机器学习、物联网等事物。

以太坊的数据结构是什么_sitehqz.com 以太坊和以太坊贸易的关系_以太坊区块链数据下载

应用层主要从区块链本身的特性出发,在不引用第三方机构的情况下,提供去中心化、不可篡改、安全可靠的场景应用。

主要包括金融服务、征信与所有权管理、资源共享、投资管理、物联网与供应链等。

## 五。 以太坊核心数据结构

#### 1. 区块(Block)是以太坊的核心数据结构之一。 块包括标题和主体。

#### 2. Blockchain和HeaderChain,Blockchain管理着所有的Block,让它们形成一个单向链表。 Headerchain管理所有的Headers,形成一个单向链表。 Headerchain 是区块链的一部分。

#### 3.Transaction是Body的重要数据结构。 交易是由外部账户加密签名,序列化,然后提交到区块链的指令。

#### 4.以太坊的数据库系统——Merkle-Patricia Trie (MPT),它是由一系列节点组成的二叉树,树的底部包含大量源数据的叶子节点,父节点node是两个子节点值的Hash,一直到根节点。

## 六。 go-ethereum源码目录结构

```戈朗

|---accounts 以太坊账户管理

|---bmt 二进制 Merkle-Patricia Trie 实现

|---build 主要编译构建一些脚本和配置

|---cmd命令行工具

| |---abigen合约接口生成工具

| |---网络发现的bootnode节点

| |---evm 以太坊虚拟机

| |---水龙头

| |---geth以太坊命令行客户端

| |---p2​​psim提供模拟http API的工具

| |---创建新以太坊网络的 puppeth 向导

| |---rlpdump 提供RLP数据的格式化输出

| |---swarm蜂群网络的接入点

| |---util公共组件

以太坊的数据结构是什么_sitehqz.com 以太坊和以太坊贸易的关系_以太坊区块链数据下载

| |---wnode 这是一个简单的 Whisper 节点。 它可以用作独立的引导节点。 此外,它可以用于不同的测试和诊断目的。

|---common 提供一些公共工具类

|---consensus 以太坊共识算法,包括ethhash、clique

|---core 以太坊的核心数据结构和算法(虚拟机、状态、区块链、Bloom filter)

|---crypto加密、数字签名和哈希算法

|---eth 实现了以太坊的协议

|---ethclient 以太坊RPC客户端

|---ethdb eth的数据库,主要是LevelDB和对应的接口

|---event 实时事件处理

|---light 实现以太坊轻量级客户端的按需检索功能

|---metrics 提供磁盘计数器

|---miner 以太坊挖矿和共识算法

|---mobile 移动端使用的一些wrapper

|---node 以太坊中各类节点

|---p2​​p 以太坊p2p网络协议

|---rlp 以太坊序列化和反序列化处理

|---rpc远程方法调用

|---swarm 蜂群网络处理

|---trie 以太坊重要数据结构MPT的实现

|---耳语耳语节点协议

```

## 七。 信息

[以太坊官方文档]()

sitehqz.com 以太坊和以太坊贸易的关系_以太坊的数据结构是什么_以太坊区块链数据下载

【以太坊设计原则】()

[以太坊白皮书]()

[以太坊黄皮书]()

# go-ethereum源码分析

因为go ethereum是使用最广泛的以太坊客户端,后续源码分析将从github上的代码进行分析。 然后我使用的是windows 10 64位环境。

### 搭建go ethereum调试环境

首先下载go安装包进行安装,因为go网站被屏蔽了,所以从下面的地址下载。

安装完成后,设置环境变量,将C:\Go\bin目录添加到你的PATH环境变量中,然后添加一个GOPATH环境变量,将GOPATH的值设置为你的GO语言下载的代码路径(我设置为C:\GOPATH)

安装git工具请参考网上的教程安装git工具。 Go语言自动从github下载代码需要git工具的支持

打开命令行工具下载go-ethereum的代码

去获取 github.com/ethereum/go-ethereum

命令执行成功后,代码会被下载到如下目录,%GOPATH%\src\github.com\ethereum\go-ethereum

如果在执行过程中

#github.com/ethereum/go-ethereum/crypto/secp256k1

exec: "gcc": 在 %PATH% 中找不到可执行文件

需要安装gcc工具,我们从下面地址下载安装

接下来安装IDE工具。 我使用的IDE是JetBrains的Gogland。可以在下面的地址下载

安装完成后,打开IDE。 选择File -> Open -> 选择GOPATH\src\github.com\ethereum\go-ethereum目录打开。

然后打开go-ethereum/rlp/decode_test.go。 右键单击编辑框并选择运行。 如果运行成功,则说明环境已经搭建完成。

### 去以太坊目录概览

go-ethereum项目的组织结构基本上是按照功能模块划分目录。 下面简单介绍一下各个目录的结构。 每个目录在 GO 语言中称为一个 Package。 我理解应该类似于Java中的Package。 意思。

accounts 实现高级以太坊账户管理

bmt二叉Merkle树的实现

sitehqz.com 以太坊和以太坊贸易的关系_以太坊区块链数据下载_以太坊的数据结构是什么

build主要是编译构建的一些脚本和配置

cmd命令行工具分为很多命令行工具,下面一一介绍。

/abigen源代码生成器,将以太坊合约定义转换为易于使用、编译时类型安全的 Go 包

/bootnode 启动一个只实现网络发现的节点

/evm 以太坊虚拟机的开发工具,用于提供可配置的、隔离的代码调试环境

/龙头

/geth 以太坊命令行客户端,最重要的工具

/p2psim 提供模拟http API的工具

/puppeth 用于创建新以太坊网络的向导

/rlpdump 提供 RLP 数据的格式化输出

/swarm swarm 网络的接入点

/util 提供了一些常用的工具

/wnode 这是一个简单的 Whisper 节点。 它可以用作独立的引导节点。 此外,它可以用于不同的测试和诊断目的。

common 提供一些公共工具类

compressionPackage rle 实现用于以太坊数据的游程编码。

consensus 提供了以太坊的一些共识算法,比如ethhash,clique(proof-of-authority)

控制台控制台类

合同

coreEthereum的核心数据结构和算法(虚拟机、状态、区块链、布隆过滤器)

密码加密和哈希算法,

eth 实现了以太坊的协议

ethclient 为以太坊提供一个 RPC 客户端

ethdbeth的数据库(包括实际使用的leveldb和测试用的内存数据库)

以太坊区块链数据下载_sitehqz.com 以太坊和以太坊贸易的关系_以太坊的数据结构是什么

ethstats 提供网络状态报告

event 处理实时事件

les 实现了以太坊的轻量级协议子集

Light为以太坊轻量级客户端实现按需检索功能

log 提供人机友好的日志信息

指标提供磁盘计数器

矿工为以太坊提供区块创建和挖掘

移动端使用的一些wrapper

nodeEthereum的各类节点

p2p 以太坊 p2p 网络协议

rlp 以太坊序列化处理

rpc远程方法调用

蜂群网络处理

测试测试

Trie 以太坊重要数据结构 Package trie 实现 Merkle Patricia Tries。

whisper 为 whisper 节点提供协议。

可以看出以太坊的代码量还是挺大的,但是一眼看去,代码结构还是挺不错的。 希望先分析一些相对独立的模块。 然后深入分析内部代码。 重点可能是黄皮书中没有涉及的模块,例如 p2p 网络。

以太坊源码分析(1)go-ethereum的设计思路及模块组织形式

以太坊源码分析(1)go-ethereum的设计思路及模块组织形式

以太坊源码分析(1)go-ethereum的设计思路及模块组织形式

网址:

以太坊源码分析(1)go-ethereum的设计思路及模块组织形式

以太坊源码分析(1)go-ethereum的设计思路及模块组织形式

想要获得铸币技术和全套虚拟机资料

区块链技术交流QQ群:756146052 注:CSDN