Skip to content

Commit

Permalink
Merge branch 'main' of github.com:IntensiveCoLearning/Ethereum-Protoc…
Browse files Browse the repository at this point in the history
…ol-Fellowship
  • Loading branch information
rayjun committed Feb 13, 2025
2 parents 120d16d + 353fd48 commit 0a3f150
Show file tree
Hide file tree
Showing 38 changed files with 1,379 additions and 78 deletions.
Binary file added .starrydeserts_image/Layered-Architecture.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
8 changes: 8 additions & 0 deletions CHENFANGC.md
Original file line number Diff line number Diff line change
Expand Up @@ -172,4 +172,12 @@ EOA 可以发起交易,交易类型包括:
包括计算机、数学、密码学、算法、编程、网络、分布式系统和区块链、安全、终端、shell 脚本和版本控制……
(学不完,看不懂 T.T……今天工作量大,没有看视频啊)

### 2025.02.12

### 以太坊和形式化验证

- 协议验证、智能合约验证

安全和活跃的保证是以太坊去中心化基础设施的核心。形式化验证在验证以下各项的正确性方面起着关键作用

<!-- Content_END -->
150 changes: 150 additions & 0 deletions HeliosLz.md
Original file line number Diff line number Diff line change
Expand Up @@ -353,5 +353,155 @@ Week 1 | Protocol Intro

* 由于以太坊协议的不断发展和多样化的客户端实现,测试成为确保网络安全的重要环节。测试工具包括 状态转换测试、模糊测试 和 RPC 测试 等,确保网络升级和新功能的稳定性。

### 2025.02.12

**学习小组第二周 | 执行层(Execution Layer)**

预读材料:

节点和客户端

1. 节点(Node)

在以太坊网络中,节点是任何参与网络的计算机系统,负责验证交易、维护区块链状态并传播信息。节点根据其角色和功能,可以分为几种类型:

1.1 全节点(Full Node)

全节点是最重要的节点类型,它存储并验证整个区块链的历史数据。全节点会下载并验证所有的区块和交易,确保每个区块都符合以太坊协议的规则。全节点负责:

* 存储整个区块链数据(包括所有交易、区块头等)。
* 验证每个新块是否符合共识规则。
* 参与网络中的共识过程,帮助确保链的安全性。
* 执行和验证每个交易(执行层部分)。

全节点有助于去中心化,因为它们不依赖于第三方进行数据验证。

1.2 轻节点(Light Node)

轻节点不保存完整的区块链数据,而是只存储与当前活动相关的数据。这使得轻节点在资源消耗上比全节点低。轻节点通过与全节点连接来获取区块头和必要的数据。它们的主要特点是:

* 只保存区块头,不存储完整的交易和状态数据。
* 依赖全节点提供交易的验证结果。
* 适用于需要低资源消耗的场景,例如手机钱包和轻量级应用。

轻节点的工作效率较高,但需要与其他全节点交互来验证交易和区块。

1.3 归档节点(Archive Node)

归档节点是全节点的一种特殊类型,它不仅存储整个区块链的数据,还存储每个区块和交易的所有历史状态。归档节点的作用是提供历史数据查询的功能,特别适用于需要审计或历史数据的情况。归档节点的特点是:

* 存储所有区块和交易的完整历史。
* 提供完整的状态数据,可以查询历史时刻的状态。
* 存储所有的帐户余额、智能合约数据等详细信息。

归档节点一般用于开发、分析和区块链数据分析场景,不常见于普通的以太坊网络使用。

2. 客户端(Client)

客户端是与以太坊网络交互的软件,负责与其他节点进行通信,并执行相关任务,如发送交易、验证区块、同步状态等。每个客户端实现了以太坊协议的不同部分,具体有多个实现版本。客户端主要负责:

* 与其他节点建立连接。
* 获取、验证和处理区块和交易。
* 与执行层、共识层以及网络层交互。

2.1 不同类型的客户端

以太坊有多个客户端实现,每个客户端都遵循相同的协议标准(以太坊协议),但是其内部实现可能有所不同。常见的以太坊客户端包括:

* Geth(Go-Ethereum):这是最广泛使用的客户端之一,采用 Go 编程语言编写。Geth 提供了完整的以太坊节点功能,包括全节点、轻节点和矿工功能。它支持以太坊的主网、测试网和私人链。
* Besu:这是一个由 Hyperledger 项目支持的以太坊客户端,采用 Java 编写。Besu 主要面向企业和企业级解决方案,支持以太坊 1.x 和 2.x。
* Nethermind:另一个以太坊客户端实现,采用 C# 编写,注重性能和对 .NET 环境的支持。
* OpenEthereum(以前的 Parity):这个客户端采用 Rust 编写,旨在提供高性能和轻量级的以太坊实现。它通常用于高效的交易处理和运行。
* Lighthouse、Prysm、Nimbus:这些客户端是以太坊 2.0 的实现(即信标链客户端),它们实现了以太坊的共识层,用于支持以太坊的 PoS(权益证明)机制。

2.2 客户端的功能

客户端根据其类型和功能,承担着不同的职责:

* 执行层(EL)客户端:处理交易的执行和状态更新。它通过虚拟机(EVM)执行每个交易,并更新状态树(state trie)。Geth、Besu 和 OpenEthereum 都是典型的执行层客户端。
* 共识层(CL)客户端:与 PoS(权益证明)机制相关,负责维护和验证信标链(Beacon Chain)的状态。共识层客户端如 Prysm、Lighthouse 和 Nimbus 是以太坊 2.0 的组成部分。
* P2P 网络层客户端:负责与其他节点进行通信,传播区块和交易。通过开发 P2P 协议,节点能够有效地传播信息并同步状态。

2.3 客户端交互

客户端通过以下方式与以太坊网络和其他节点进行交互:

* JSON-RPC:客户端通过 JSON-RPC 接口与网络中的其他节点交互。这些接口包括发送交易、查询区块、获取节点信息等常见操作。
* Gossip协议:节点通过 gossip 协议传播交易和区块。每当一个节点接收到新的区块或交易时,它会将其传递给其他连接的节点,确保网络中的每个节点都能同步。
* Snap Sync:这种同步机制允许节点快速同步整个链的状态,它通过下载和应用块和状态的增量更新来实现高效的同步。


以太坊:机制(基于这些幻灯片的讲座也可以在 YouTube 上观看:《以太坊执行层概述 - Dan Boneh》)

1. 执行层概述

现实生活类比:银行的交易系统

想象你在一个银行账户中进行资金转账。这就类似于以太坊中的交易和状态更新。当你发起转账时:

* 银行系统需要验证你的账户余额是否足够(类似于以太坊检查交易是否合法)。
* 然后,它会执行转账操作,将资金从一个账户转移到另一个账户(类似于以太坊执行交易并更新状态树)。
* 最后,银行系统更新你的账户余额,并将这次交易记录保存下来(类似于以太坊更新区块链的状态)。

2. 区块验证

现实生活类比:交易验证和审核

假设你去银行办理转账,银行会进行一系列的检查:

* 交易验证:检查你是否有足够的余额,转账金额是否合理,接收人的账户是否有效等。
* 状态更新:银行会根据验证结果,更新你的账户余额,并在系统中保存这次交易。

在以太坊中,每个区块都包含一组交易,执行层会逐一验证这些交易是否合法(如检查签名、余额、时间戳等)。如果某个交易不合法,整个区块会被拒绝。

3. EVM:以太坊虚拟机

现实生活类比:计算机处理器

以太坊虚拟机(EVM)类似于银行后台的计算机系统。每笔交易就像一条指令,EVM 就是执行这些指令的计算机处理器。每一条指令(如“转账”或“调用智能合约”)都会消耗一定的计算资源(类似于银行系统消耗资源处理转账)。EVM 会逐步执行这些指令,并更新状态。

4. Gas 机制

现实生活类比:交易手续费

当你去银行办理转账,银行通常会收取一定的手续费。这个手续费的多少取决于你转账的金额和银行的费用政策。以太坊中的 Gas 费用类似于这个手续费,它是执行交易和合约的代价。

* 比如,当你转账时,银行会检查你支付的手续费是否足够覆盖银行的成本,确保它能够处理你的请求。同样,以太坊会检查你支付的 Gas 是否足够覆盖执行交易的成本。

5. EIP-1559 费率机制

现实生活类比:动态收费系统

假设你在不同的时段去银行,银行可能会根据拥挤程度调整手续费:比如在高峰时段,手续费可能会增加;在低谷时段,手续费可能会降低。这类似于以太坊的 EIP-1559 机制,它通过动态调整“基础费用”(base fee),使得交易费用在网络负载较高时增加,负载较低时减少,从而确保交易的可预测性。

6. 状态转换函数(State Transition Function)

现实生活类比:银行账单

当你进行交易时,银行系统会根据你的转账记录更新你的账单状态。这个过程就像以太坊中的状态转换函数。每一笔交易都改变了账户的状态(余额),并更新到系统中。状态转换函数确保每个账户的余额和状态正确。

7. 节点类型

现实生活类比:银行不同的服务

* 全节点(Full Node):就像银行的总账户系统,保存了所有的交易记录和账户信息,任何人都可以查询到所有的账单和历史交易。
* 轻节点(Light Node):类似于银行的客户应用,你不需要保存所有的历史账单,只需要知道你自己的账户余额和最近的交易。
* 归档节点(Archive Node):相当于银行的历史档案系统,专门用来存储所有的历史交易记录,可以查询过去很久以前的转账和交易信息。

8. P2P 协议:节点之间如何沟通

现实生活类比:银行之间的消息传递

当你在一个银行账户进行转账时,可能需要通过不同的银行进行资金转移。这就像以太坊的 P2P 协议,银行之间需要互相传递消息,确认转账的详细信息。在以太坊网络中,节点之间也通过 P2P 协议进行数据交换,确保每个节点都能得到最新的区块信息和交易。

9. Snap Sync

现实生活类比:银行的实时更新

当你登录银行账户时,银行会迅速同步你最新的账户信息。这就像以太坊的 Snap Sync,它能确保节点快速同步最新的区块链状态,以便他们可以更快地验证和执行交易。

* 阶段 1:类似于银行下载最新的账户和交易数据。
* 阶段 2:类似于银行确保所有账户信息和交易记录没有被篡改或遗漏。


<!-- Content_END -->
177 changes: 175 additions & 2 deletions JeasonZhang.md
Original file line number Diff line number Diff line change
Expand Up @@ -529,10 +529,183 @@

### 2025.02.12

##### **EPF WIKI WEEK6**
##### **EPF WIKI Node Workshop**

#### **I. 核心学习目标**

**主题**: 以太坊客户端实践操作
**目标**: 掌握执行层(EL)与共识层(CL)客户端的部署、配置及运维技能。

------

#### **II. 环境准备**

##### **1. 系统要求**

- **推荐系统**: Debian 12(支持Ubuntu/macOS,建议使用虚拟机统一环境)

- **硬件配置**: 测试网节点无需高性能硬件(2核CPU/4GB RAM/50GB存储)

- 基础工具安装:

```bash
sudo apt update && sudo apt install -y curl git gpg docker.io build-essential
```

##### **2. 前置知识**

- **客户端架构**: 复习[节点架构文档](https://ethereum.org/en/developers/docs/nodes-and-clients/node-architecture/)
- **Linux基础**: 掌握[基础命令行操作](https://ubuntu.com/tutorials/command-line-for-beginners)

------

#### **III. 客户端部署流程**

##### **1. 客户端选择与获取**

- **推荐组合**: Geth(EL) + Lighthouse(CL)

- 二进制验证(以Geth为例):

```bash
# 下载签名文件
curl -O https://geth.ethereum.org/geth-linux-amd64-1.13.0-6c74b4e6.sig
# 验证签名
gpg --verify geth-linux-amd64-1.13.0-6c74b4e6.sig
```

##### **2. Docker快速部署**

```bash
# 启动Geth测试网节点
docker run -d -p 8545:8545 -v /data/geth:/root/.ethereum \
ethereum/client-go --goerli --http --http.addr 0.0.0.0

# 启动Lighthouse共识客户端
docker run -d -p 9000:9000 -p 9001:9001 -v /data/lighthouse:/root/.lighthouse \
sigp/lighthouse lighthouse beacon --network holesky
```

##### **3. 测试网配置**

- Holesky测试网:

```bash
geth --holesky --syncmode snap --http
lighthouse beacon --network holesky
```

- Ephemery自定义创世块:

```bash
geth init --datadir ./ephemery ephemery-genesis.json
```

------

#### **IV. 节点运维实践**

##### **1. RPC接口使用**

- 基础访问:

```bash
curl -X POST -H "Content-Type: application/json" \
--data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' \
http://localhost:8545
```

- 控制台交互:

```bash
geth attach http://localhost:8545
> eth.syncing
```

##### **2. 验证者管理**

- 质押存款:

```bash
lighthouse account validator deposit \
--network holesky \
--keystore ./validator_keys \
--deposit-value 32
```

##### **3. 系统服务配置**

- systemd服务文件示例(Geth):

```ini
[Unit]
Description=Geth Execution Client
After=network.target

[Service]
ExecStart=/usr/bin/geth --http --syncmode snap --cache 2048
Restart=always
User=geth

[Install]
WantedBy=multi-user.target
```

------

#### **V. 进阶实践建议**

##### **1. 节点监控**

- Prometheus+Grafana方案:

```bash
# 安装Prometheus
docker run -d -p 9090:9090 -v /prometheus-data:/prometheus prom/prometheus
# 配置Grafana仪表盘(参考Coincashew指南)
```

##### **2. 网络诊断**

- P2P网络分析:

```bash
# 使用devp2p工具检查节点连接
devp2p discv5 nodes -bootnodes enr://...
```

##### **3. 客户端切换实验**

- 执行层切换

(Geth → Erigon):

```bash
erigon --chain holesky --datadir ./erigon-data --http
```

- 共识层切换

(Lighthouse → Nimbus):

```bash
nimbus_beacon_node --network=holesky --web3-url=http://localhost:8545
```

------

#### **VI. 关键资源推荐**

- **节点维护指南**: [EthStaker Holesky指南](https://github.com/eth-educators/ethstaker-guides)
- **验证者监控**: [Grafana仪表板配置](https://www.coincashew.com/coins/overview-eth/guide-or-how-to-setup-a-validator-on-eth2-mainnet/part-i-installation/monitoring-your-validator-with-grafana-and-prometheus)
- **故障排查**: [合并后节点FAQ](https://notes.ethereum.org/@launchpad/node-faq-merge)

------

通过本工作坊的系统实践,开发者将具备独立部署和维护以太坊全节点的能力,为参与网络验证或协议开发奠定基础。建议从测试网开始,逐步过渡到主网节点运维。

### 2025.02.13

##### **EPF WIKI WEEK7**
##### **EPF WIKI WEEK6**

<!-- Content_END -->
Loading

0 comments on commit 0a3f150

Please sign in to comment.