Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
luffythink committed Feb 12, 2025
2 parents f67620e + d87fe38 commit 0678247
Show file tree
Hide file tree
Showing 41 changed files with 2,039 additions and 110 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.
15 changes: 15 additions & 0 deletions CHENFANGC.md
Original file line number Diff line number Diff line change
Expand Up @@ -165,4 +165,19 @@ EOA 可以发起交易,交易类型包括:
共识层客户端
共识层客户端是实现以太坊共识协议的软件。不同的客户端可能在性能、编程语言和功能上有所差异,但它们都遵循相同的协议规范,以确保网络的互操作性。

### 2025.02.11

### Development 开发

包括计算机、数学、密码学、算法、编程、网络、分布式系统和区块链、安全、终端、shell 脚本和版本控制……
(学不完,看不懂 T.T……今天工作量大,没有看视频啊)

### 2025.02.12

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

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

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

<!-- Content_END -->
190 changes: 190 additions & 0 deletions HeliosLz.md
Original file line number Diff line number Diff line change
Expand Up @@ -313,5 +313,195 @@ ECC 是一种 非对称加密算法,基于椭圆曲线数学,提供与 RSA
* 权益证明改进
* 状态和历史到期

### 2025.02.11

Week 1 | Protocol Intro

**以太坊的起源与设计理念**

* 以太坊的设计受到 UNIX 操作系统 和 自由软件运动(FOSS) 的启发。UNIX 的 模块化设计 和 Bell Labs 的开放协作环境影响了以太坊的开发方式。以太坊的目标是通过自由、开放和透明的软件赋能用户和开发者,确保 去中心化 和 信任无须信任。
* 自由软件运动 的思想对于以太坊及所有加密货币至关重要。以太坊的开发遵循 FOSS 原则,以确保软件的开放性和用户的自由,进一步保障以太坊的安全性、去中心化性和信任性。
* 密码学革命 是以太坊发展的基础。现代加密技术,尤其是 非对称加密,为 数字隐私 和 安全通信 打下了基础,影响了加密货币的发展。
* 早期的 Cypherpunk 运动也为以太坊的去中心化理念奠定了基础,他们主张建立一个基于 无信任、无边界 技术的数字世界。

**以太坊的协议设计与发展**

以太坊的设计从 比特币 和早期区块链技术中汲取灵感,最终形成了 通用区块链计算平台。最初的 白皮书 和 黄皮书 定义了以太坊的技术规范,随着时间的推移,这些设计通过 EIP(以太坊改进提案) 进行了不断的更新和改进。

以太坊的设计原则包括:
* 简单性:保持设计和实现的简洁。
* 普适性:适用于各种应用场景。
* 模块化:分解为多个可独立发展的模块。
* 非歧视性:保障每个人都能平等参与。
* 敏捷性:快速适应新变化。

**以太坊的网络架构**

* 以太坊网络由两个主要的层级构成:执行层(Execution Layer) 和 共识层(Consensus Layer)。执行层负责处理交易和管理状态(例如账户和智能合约数据),而共识层通过 权益证明(PoS) 确保网络的安全性和容错性。

**以太坊的客户端与实施**

* 以太坊有多种客户端实现,允许开发者使用不同的编程语言来实现 执行层(EL) 或 共识层(CL)。这些客户端组成了以太坊的 节点(Node),每个节点都参与以太坊网络的运作。
* 以太坊采用 客户端多样性 的策略,不依赖于单一的官方实现,确保即使某个客户端出现问题,网络的其余部分仍然能够正常运行。

**以太坊的研发与协调**

* 以太坊的开发是开放的、公开的,全球有 20多个开发团队 在共同推动以太坊的前进。不同的开发人员在不同领域内发展专业知识,并通过模块化的设计进行协作。
* 核心开发者会议(ACD) 定期讨论共识层和执行层的进展,确保以太坊的研发进程得到协调并向前推进。以太坊的改进提案(EIP)通过 社区讨论 来推动技术创新。

**以太坊的测试与验证**

* 由于以太坊协议的不断发展和多样化的客户端实现,测试成为确保网络安全的重要环节。测试工具包括 状态转换测试、模糊测试 和 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 -->
Loading

0 comments on commit 0678247

Please sign in to comment.