From 254d1615c3abf9fa62cf66c12f222f30176b5723 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 11 Feb 2025 06:24:47 +0000 Subject: [PATCH 001/121] Update commit status table --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 0bf8964..ba6b16d 100644 --- a/README.md +++ b/README.md @@ -105,7 +105,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | PayFv | ⭕️ | ✅ | ✅ | ⭕️ | ✅ | | | | | | | | | | | | | | | | | | | | | | chloezhu010 | ✅ | ✅ | ⭕️ | ⭕️ | ✅ | | | | | | | | | | | | | | | | | | | | | | coratann | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | -| luffythink | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | +| luffythink | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | Henry | ✅ | ✅ | ✅ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | | d0d0d9 | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | | henryleo | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | @@ -596,6 +596,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From 7f5cb5a4ad8d7de87c1b4e78c1a747c8cdcd2611 Mon Sep 17 00:00:00 2001 From: "OO\\czc_c" <532177525@qq.com> Date: Tue, 11 Feb 2025 15:45:04 +0900 Subject: [PATCH 002/121] Update Lvista.md --- Lvista.md | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) diff --git a/Lvista.md b/Lvista.md index 86dd0d3..646be04 100644 --- a/Lvista.md +++ b/Lvista.md @@ -239,6 +239,92 @@ happened about Tx. ### 2025.02.11 +**An Example contract: NameSystem** + +A name system on Eth: [uniswap -> addr] +> is a simplified ENS, like DNS + +Need to support three operations: +- `Name.new`(OwnerAddr, Name): intent to register +- `Name.update`(Name, newVal, newOwner) +- `Name.lookup`(Name) + +``` solidity +contract nameSys{ + struct nameEntry{ + address owner; + bytes32 value; + } + mapping(bytes32=> nameEntry) data; + + function nameNew(bytes32 name){ + //registration fee is 100 Wei + if(data[name]==0 && msg.value >=100){ + data[name].owner = msg.sender + emit Register(msg.sender, name) + } + } + + function nameUpdate(bytes32 name, + bytes32 newValue, + address newOwner) { + // check if message is from domain owner, + // and update cost of 10 Wei is paid + if (data[name].owner == msg.sender && msg.value >= 10) { + data[name].value = newValue; // record new value + data[name].owner = newOwner; // record new owner + } + } + + function nameLookup(bytes32 name) { + return data[name]; + } +} + +``` +1. ⚠️ Here the `nameNew`func is unsafe, Anyone can use this function to peek into the database or steal certain names and resell them. +2. The `nameLookup` is used by contracts, humans do not need this.(use etherscan.io) + +**EVM mechanics: execution environment** + +- The EVM is **Ethereum’s execution engine**, ensuring that smart contracts run **securely, in a decentralized, and deterministic manner**, making it the backbone of DeFi, NFTs, and DApps. +- EVM is compiled to bytecode + +| Function | Description | +|----------|------------| +| Running Smart Contracts | Interprets and executes Solidity, Vyper-based contracts | +| Decentralized Computing | Executes on all Ethereum nodes, ensuring consistency | +| Transaction Processing | Verifies transactions, updates balances and contract states | +| Maintaining Blockchain State | Manages contract storage, account data, and logs | +| Gas Fee Management | Prevents excessive computation, incentivizes validators | +| Security & Isolation | Runs contracts in a safe environment to prevent exploits | + +**Gas** + +- Every instruction costs gas. +- Different instruction costs different gas.(See https://www.evm.codes/) + > eg. SLOAD, SSTORE VS MLOAD, MSTORE, the former operate on blockchain(like disk), and the latter operate for single Tx(like RAM) +- Tx fees (gas) prevents submitting Tx that runs for many steps. +- During high load: block proposer chooses Tx from mempool +that maximize its income. +- Reducing on chain storage is advocated + ![](https://files.catbox.moe/pcntjb.png) + +**Gas prices spike during congestion** + +**Congestion** can result in an increase in gas prices, which can bring +more income for those block proposer. + +![](https://files.catbox.moe/k63zc7.png) + +**EIP1559: How to figure out this congestion issue?** + +> EIP1559, since8/2021, goal: +> - users incentivized to bid their true utility for posting Tx, +> - block proposer incentivized to not create fake Tx, and +> - disincentivize off chain agreements. + +a solution: [ Transaction Fee Mechanism Design, by T. Roughgarden, 2021 ] ### 2025.02.12 From 1d117998067f0fd3fd17d021784f4f594484c857 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 11 Feb 2025 06:45:28 +0000 Subject: [PATCH 003/121] Update commit status table --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index ba6b16d..34ed63e 100644 --- a/README.md +++ b/README.md @@ -157,7 +157,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | zhwindy | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | | rectinajh | ✅ | ✅ | ✅ | ⭕️ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | letsgoexplore | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | -| Lvista | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | +| Lvista | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | lanpan999 | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | liuxulife | ✅ | ✅ | ✅ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | | CHENFANGC | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | @@ -597,6 +597,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From 479a9bdbe525ab964ee3261e7cd4a8837c90d5c1 Mon Sep 17 00:00:00 2001 From: mrmign <1880532+mrmign@users.noreply.github.com> Date: Tue, 11 Feb 2025 16:53:14 +0800 Subject: [PATCH 004/121] Update mrmign.md --- mrmign.md | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/mrmign.md b/mrmign.md index 841386a..eb6af8a 100644 --- a/mrmign.md +++ b/mrmign.md @@ -142,6 +142,53 @@ Learn [Inevitable Ethereum - World Computer](https://inevitableeth.com/home/ethe - ### 2025.02.11 +- 《Absolute Essentials of Ethereum》Ch2 **Execution Layer** + - **Ether & Transaction Fees** + - Gwei is used to denominate transaction fees. + - **gas cost** and **gas fees**. In Ethereum, computational cycles are calculated in a unit call gas. A gas unit is not a currency unit. Gas cost relates only to how many computational cycles are needed. + - *Every computational instruction(an Opcode) in a transaction has an associated gas cost.* + - The Gas Limit included in a transaction is the maximum amount of gas that a user is willing to pay for. + - Gas fees have two forms. + - **base fee**, refers to the algorithmically dynamic cost of gwei in the Ethereum network + - **priority fee**, get transaction accepted faster + - Transaction fees = gas cost * (base fee + priority fee) + - The above is pre-2021 situtaion(London Upgrade/EIP-1559) + - The base fee is burnt and removed from circulation. + - The priority fee is paied to the users called validators. + - **Transaction Structure** + | Field | comment | + |---|---| + | From | sending address | + | To | receiving address | + | Digital Signature | a signature produced using the private key of the sender | + | Nonce | show how many transactions an account has made | + | Value | the ETH to be transfered | + | Input Data | Input data(message call) ; Initialise(contract creation) | + | Gas Limit | limit on gas | + | Max Priority Fee | maximum priority fee you will pay | + | Max Fee | maximum overall fee you will pay | + - **Ethereum Virtual Machine(EVM)** + - the most important field is the **Input Data**, because it contains the function we want to call and the arguments we want to pass. + - it follows Application Binary Interface(ABI) format. + - functions are identified in the ABI specification by the reference MethodID. + - `transfer(address to, uint256 value)` + - MethodID: `0xa9059cbb` + - ByteCode: `0xa9059cbb00000000000000000000009f11260cb6427c20a019780d99d3a2d7ffe9a25300000000000000000000000000000000000000000000000000002c8650c0` + - The EVM interprets and executes the Input Data field using the following: + - **Virtual Read-Only Memory(ROM)**: Reads the code of an involved contract account + - a temporary state for processing the transactions: + - **Program Counter**: The program counter tracks what instructions from the contract code need to be processed next + - **The Stack**: The EVM uses a stack-based model for executing code + - **EVM Memory**: Temporary memory used within the machine state to track changes + - **Gas counter**: Tracks the gas used. Reverts if no more gas is available and undoes the proposed state changes. + - **Storage**: changes are recorded permanently to reflect the new world state that emerges from the temporary machine state. + - **ERC-20** + - The ERC-20 token standard creates fungible tokens. + - **ERC-721** + - ERC-721 is designed to create Non-Fungible Tokens(NFT). *ERC-721 tokens are unique.* + - usually an NFT smart contract builds a collection of items that are a similar type, but with unique differences. + - **Decentralised Application(dApps)** + - In an Ethereum context, a dApp refers to the smart contract plus the non-blockchain technologies it combines with to aid the user experience. ### 2025.02.12 From 4b4fc4d0e1dfe7c4b640c73a3e56ec0b212746cb Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 11 Feb 2025 08:53:30 +0000 Subject: [PATCH 005/121] Update commit status table --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 34ed63e..c5c3c9e 100644 --- a/README.md +++ b/README.md @@ -110,7 +110,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | d0d0d9 | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | | henryleo | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | | zhouCode | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | -| mrmign | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | +| mrmign | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | ghx1104 | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | | Coooder-Crypto | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | | rayjun | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | @@ -598,6 +598,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From cd7fdaa4995c7d3b386eb8dc8cfbf25360f85d91 Mon Sep 17 00:00:00 2001 From: zhwindy Date: Tue, 11 Feb 2025 17:37:18 +0800 Subject: [PATCH 006/121] update --- zhwindy.md | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/zhwindy.md b/zhwindy.md index c84f409..6d75867 100644 --- a/zhwindy.md +++ b/zhwindy.md @@ -50,20 +50,28 @@ timezone: Asia/Shanghai ### 2025.02.10 今天深入学习第二部分 以太坊虚拟机EVM的内容: -* 预编译合约 -* 以太坊状态机: state machine -* 虚拟机范式: virtual machine paradigm +* 以太坊状态机(state machine) +* 虚拟机范式(virtual machine paradigm) * EVM 和 EVM bytecode -* 栈(Stack) 和 程序计数器(program counter) +* 程序计数器(program counter) * Gas +* 栈(Stack) * 内存(Memory) * Storage * Wrapping up * EVM upgrades * EVM实现: Go(Geth), Rust(revm), Python(py-evm), C++(EVMONE) +* 预编译合约 ### 2025.02.11 +今天继续学习第二部分以太坊虚拟机的细节: +* 数据结构MPT: Merkle Patricia Trie +* Transaction剖析 +* JSON-RPC API +* 数据序列化RLP +* 区块构建 + ### 2025.02.12 ### 2025.02.13 From 64f87062d5307eca2cca0d33e09d67b06c795c94 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 11 Feb 2025 09:39:32 +0000 Subject: [PATCH 007/121] Update commit status table --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c5c3c9e..b2eb043 100644 --- a/README.md +++ b/README.md @@ -154,7 +154,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | Azleal | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | jjeejj | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | | buctor41 | ✅ | ✅ | ⭕️ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | | -| zhwindy | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | +| zhwindy | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | rectinajh | ✅ | ✅ | ✅ | ⭕️ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | letsgoexplore | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | Lvista | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | @@ -599,6 +599,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From 0af8a2c909202f1541f541f300e18b94cef92017 Mon Sep 17 00:00:00 2001 From: StarryDeserts Date: Tue, 11 Feb 2025 18:00:36 +0800 Subject: [PATCH 008/121] 2025.02.11 note MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 完成打卡 ✅ --- StarryDeserts.md | 66 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/StarryDeserts.md b/StarryDeserts.md index 0c71dc2..241e2db 100644 --- a/StarryDeserts.md +++ b/StarryDeserts.md @@ -355,6 +355,72 @@ timezone: Pacific/Auckland # 新西兰标准时间 (UTC+12) +### 2025.02.11 +#### 以太坊执行层规范(第3天) + +------ + +##### **交易执行与EVM机制** + +- **执行阶段**: + + 1. **检查点状态($$\sigma_0$$)**: + $$\sigma_0 \equiv \sigma \quad \text{except:} \quad + \begin{cases} + \sigma_0[\text{Sender}]_{\text{balance}} = \sigma[\text{Sender}]_{\text{balance}} - \text{upfrontCost} \\ + \sigma_0[\text{Sender}]_{\text{nonce}} = \sigma[\text{Sender}]_{\text{nonce}} + 1 + \end{cases}$$ + +- **EVM状态机**: + - **寄存器定义**: + $$\mu \equiv (\mu_{\text{gasAvailable}}, \mu_{\text{programCounter}}, \mu_{\text{memoryContents}}, \mu_{\text{activeWordsInMemory}}, \mu_{\text{stackContents}})$$ + +------ + +##### **合约创建流程** + +1. **地址生成**: + $$\text{地址} = \text{KEC}(\text{RLP}([\text{Sender}_{\text{address}}, \text{Sender}_{\text{nonce}} - 1]))[-20:]$$ + +2. **账户初始化**: + $$\sigma^*[\text{newAccount}] \equiv (\text{Nonce}=1, \text{Balance}=T_{\text{value}}, \text{Storage}=\text{TRIE}(\emptyset), \text{CodeHash}=\text{KEC}(()))$$ + +------ + +##### **Gas计算模型** + +- **内存扩展成本**: + $$\text{MemoryExpansionCost} = 3 \times \Delta_{\text{expansion}} + \left\lfloor \frac{\Delta_{\text{expansion}}^2}{512} \right\rfloor$$ + - $$\Delta_{\text{expansion}}$$:新增内存块数 + +------ + +##### **代码示例** + +### **R代码:基础费用模拟** + +```R +calculate_base_fee_per_gas <- function( + parent_gas_limit, parent_gas_used, parent_base_fee_per_gas, + max_change_denom = 8, elasticity_multiplier = 2 +) { + parent_gas_target <- parent_gas_limit %/% elasticity_multiplier + if (parent_gas_used == parent_gas_target) { + parent_base_fee_per_gas + } else if (parent_gas_used > parent_gas_target) { + gas_used_delta <- parent_gas_used - parent_gas_target + base_fee_per_gas_delta <- max( + (parent_base_fee_per_gas * gas_used_delta %/% parent_gas_target) %/% max_change_denom, + 1 + ) + parent_base_fee_per_gas + base_fee_per_gas_delta + } else { + gas_used_delta <- parent_gas_target - parent_gas_used + base_fee_per_gas_delta <- (parent_base_fee_per_gas * gas_used_delta %/% parent_gas_target) %/% max_change_denom + parent_base_fee_per_gas - base_fee_per_gas_delta + } +} +``` From 2238a4483df7d6faf5d8f7a1d67f7c45469b9603 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 11 Feb 2025 10:01:52 +0000 Subject: [PATCH 009/121] Update commit status table --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b2eb043..a4ee32e 100644 --- a/README.md +++ b/README.md @@ -124,7 +124,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | passer-byzhang | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | StillFantastic | ⭕️ | ✅ | ⭕️ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | | debugzhao | ✅ | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | -| StarryDeserts | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | +| StarryDeserts | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | KieSun | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | | k66 | ✅ | ✅ | ⭕️ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | | DVDguzhou | ✅ | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | @@ -600,6 +600,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From a4e763292fbfeab85def69a21578d7a68a628b5e Mon Sep 17 00:00:00 2001 From: Helios <131566676+HeliosLz@users.noreply.github.com> Date: Tue, 11 Feb 2025 18:15:05 +0800 Subject: [PATCH 010/121] Update HeliosLz.md --- HeliosLz.md | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/HeliosLz.md b/HeliosLz.md index 9ba209a..c8eb137 100644 --- a/HeliosLz.md +++ b/HeliosLz.md @@ -313,5 +313,45 @@ 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 测试 等,确保网络升级和新功能的稳定性。 + From 5eea94b3d91849a67780767890c75deb6b353479 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 11 Feb 2025 10:15:22 +0000 Subject: [PATCH 011/121] Update commit status table --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a4ee32e..cc154e9 100644 --- a/README.md +++ b/README.md @@ -119,7 +119,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | hotoo | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | | JoscelynFarr | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | cherry-yl-sh | ✅ | ⭕️ | ⭕️ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | -| HeliosLz | ⭕️ | ⭕️ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | +| HeliosLz | ⭕️ | ⭕️ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | lllapland | ✅ | ✅ | ⭕️ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | | passer-byzhang | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | StillFantastic | ⭕️ | ✅ | ⭕️ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | @@ -601,6 +601,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From eada1ae439711399d6778a0cd8fddb6da1041deb Mon Sep 17 00:00:00 2001 From: dundun930326 <69745663+dundun930326@users.noreply.github.com> Date: Tue, 11 Feb 2025 18:59:43 +0800 Subject: [PATCH 012/121] Update dundun930326.md --- dundun930326.md | 60 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/dundun930326.md b/dundun930326.md index 3654ce2..9e723ba 100644 --- a/dundun930326.md +++ b/dundun930326.md @@ -122,6 +122,66 @@ Root ├── 64 (d) → 6F67 (og) → "bark" ``` +### 2025.02.11 +TODO : responsibility、p2p、snap +今天看了執行層的詳細架構,但覺得有點太難了,所以用GPT幫我生重點。 + +以下是針對原文中第 2、3、4、5 部分的詳細解釋: + +--- + +## 1. 區塊結構與區塊處理流程 + +**區塊結構** +- 每個區塊作為區塊鏈中的基本單位,包含區塊頭、交易列表以及其他相關元數據。 +- **區塊頭:** 記錄了父區塊的哈希值、時間戳、難度指標、狀態樹根、交易樹根等關鍵參數。這些資訊不僅保證了區塊內容的不可篡改性,也成為驗證區塊合法性的依據。citeturn0fetch0 + +**區塊處理流程** +- **交易收集與排序:** 節點從網絡中收集各筆交易,並根據一定的排序規則(例如手續費優先等)進行整理,形成待打包的交易池。citeturn0fetch0 +- **區塊生成:** 節點根據共識規則,選取合適的交易打包成區塊,同時計算與該區塊相關的狀態轉換。citeturn0fetch0 +- **區塊驗證:** 新生成的區塊會經過嚴格的驗證程序,包括檢查區塊頭資訊、每筆交易的合法性以及狀態轉換的正確性。citeturn0fetch0 +- **鏈接與確認:** 驗證通過後,新區塊被其他節點認可並與之前的區塊鏈進行鏈接,從而形成完整且連續的區塊鏈。citeturn0fetch0 + +--- + +## 2. 狀態轉換函數 + +**概念說明** +- 狀態轉換函數定義了從當前區塊狀態到下一個區塊狀態的轉變規則。每筆交易在執行時,都會根據該函數更新賬戶狀態、智能合約存儲以及其他鏈上數據。citeturn0fetch0 + +**細節內容** +- **交易執行:** 每筆交易可能涉及調用智能合約、轉賬或合約部署等操作,其執行結果將改變系統內部狀態。citeturn0fetch0 +- **錯誤處理:** 當交易執行過程中遇到錯誤(如資金不足或非法操作)時,系統會根據預設規則進行回滾或標記錯誤,確保不會影響其他交易的正確執行。citeturn0fetch0 +- **數據一致性:** 嚴格定義的狀態轉換邏輯確保所有節點在處理相同交易時,能夠得出一致的狀態更新結果,從而維持整個網絡的一致性。citeturn0fetch0 + +--- + +## 3. Ethereum 虛擬機(EVM)運作機制 + +**EVM 基本架構** +- **指令集與計算模型:** Ethereum 虛擬機(EVM)是一個基於堆疊運算的虛擬機,內置完整的指令集,用以執行智能合約的邏輯。citeturn0fetch0 +- **Gas 機制:** 為防止無限循環和濫用資源,EVM 在執行每條指令時都需消耗一定的 gas,且由交易發起者提前支付。這不僅保護了網絡資源,同時也激勵開發者優化合約代碼。citeturn0fetch0 + +**執行流程** +- **智能合約執行:** 當合約被調用時,EVM 根據合約代碼逐條執行指令,同時根據設定的 gas 限制進行資源控制。citeturn0fetch0 +- **存儲與運算:** 在合約執行過程中,EVM 負責讀取、寫入及計算相關數據,並維護一個內部存儲空間來管理合約狀態。citeturn0fetch0 +- **結果與回執:** 執行結束後,EVM 生成交易回執,其中記錄了執行結果、剩餘 gas 以及在執行過程中產生的事件或錯誤信息。citeturn0fetch0 + +--- + +## 4. 交易驗證與處理流程 + +**交易結構** +- 每筆交易包含發起方、接收方、轉賬金額、gas 限制與價格以及數據負載(通常用於智能合約的調用)等信息。citeturn0fetch0 +- 交易中必須包含數字簽名,以證明發起者的身份和交易的合法性。citeturn0fetch0 + +**驗證步驟** +- **格式檢查:** 首先檢查交易數據結構是否符合規範要求。citeturn0fetch0 +- **簽名驗證:** 通過公鑰密碼學方法驗證數字簽名,確保交易來自合法的發起者。citeturn0fetch0 +- **Gas 檢查:** 驗證交易所設定的 gas 限制是否合理,並確認發起者賬戶中有足夠餘額支付所需費用,以防濫用網絡資源。citeturn0fetch0 +- **狀態轉換檢查:** 在執行交易前後,對比系統狀態變化是否符合預期,從而防止任何非法或不當的狀態更新。citeturn0fetch0 + +--- From 83d3d6c2f64fec1e087d058ad142aced4f7a10ef Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 11 Feb 2025 10:59:59 +0000 Subject: [PATCH 013/121] Update commit status table --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index cc154e9..d7a4c3d 100644 --- a/README.md +++ b/README.md @@ -165,7 +165,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | zt2 | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | | yiwen4 | ✅ | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | affe | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | -| dundun930326 | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | +| dundun930326 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | Echocipher | ✅ | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | poyucheese | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | | amandakelake | ✅ | ✅ | ✅ | ⭕️ | ✅ | | | | | | | | | | | | | | | | | | | | | @@ -602,6 +602,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From 4aa6dafe6295776c4c13d9c9f29f7103bf2afd24 Mon Sep 17 00:00:00 2001 From: chenfang Date: Tue, 11 Feb 2025 19:18:36 +0800 Subject: [PATCH 014/121] feat: 20250211 note --- CHENFANGC.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHENFANGC.md b/CHENFANGC.md index 92872d3..d40a3e5 100644 --- a/CHENFANGC.md +++ b/CHENFANGC.md @@ -165,4 +165,11 @@ EOA 可以发起交易,交易类型包括: 共识层客户端 共识层客户端是实现以太坊共识协议的软件。不同的客户端可能在性能、编程语言和功能上有所差异,但它们都遵循相同的协议规范,以确保网络的互操作性。 +### 2025.02.11 + +### Development 开发 + +包括计算机、数学、密码学、算法、编程、网络、分布式系统和区块链、安全、终端、shell 脚本和版本控制…… +(学不完,看不懂 T.T……今天工作量大,没有看视频啊) + From 45db9f4d96619b6116ef3ec86add6caf0217f216 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 11 Feb 2025 11:19:35 +0000 Subject: [PATCH 015/121] Update commit status table --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d7a4c3d..cbe4bcf 100644 --- a/README.md +++ b/README.md @@ -101,7 +101,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | Name | 2.06 | 2.07 | 2.08 | 2.09 | 2.10 | 2.11 | 2.12 | 2.13 | 2.14 | 2.15 | 2.16 | 2.17 | 2.18 | 2.19 | 2.20 | 2.21 | 2.22 | 2.23 | 2.24 | 2.25 | 2.26 | 2.27 | 2.28 | 3.01 | 3.02 | | ------------- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | -| brucexu-eth | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | +| brucexu-eth | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | PayFv | ⭕️ | ✅ | ✅ | ⭕️ | ✅ | | | | | | | | | | | | | | | | | | | | | | chloezhu010 | ✅ | ✅ | ⭕️ | ⭕️ | ✅ | | | | | | | | | | | | | | | | | | | | | | coratann | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | @@ -160,7 +160,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | Lvista | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | lanpan999 | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | liuxulife | ✅ | ✅ | ✅ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | -| CHENFANGC | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | +| CHENFANGC | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | ppatrick007 | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | | zt2 | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | | yiwen4 | ✅ | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | @@ -603,6 +603,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From 3fe79cc58ade528f092f3744e759beee4739c740 Mon Sep 17 00:00:00 2001 From: Zaki <140870617+marvelshan@users.noreply.github.com> Date: Tue, 11 Feb 2025 19:27:58 +0800 Subject: [PATCH 016/121] Read: Client Architecture --- marvelshan.md | 120 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) diff --git a/marvelshan.md b/marvelshan.md index 1768ef2..3b5e6c6 100644 --- a/marvelshan.md +++ b/marvelshan.md @@ -469,5 +469,125 @@ EELS 則是構建在執行層上的規範,可以用於運行測試,驗證新 ### 2025.02.11 +![image](https://github.com/user-attachments/assets/ba2ff0d7-5834-4ac0-ad24-56cd87ee22bf) + +### 1. 執行層的角色與架構 +執行層的主要職責包括: +- 執行交易(Transaction Execution) +- 驗證區塊鏈數據並存儲本地副本 +- 透過 Gossip 協議與其他執行層客戶端通訊 +- 維護交易池(Transaction Pool) +- 滿足共識層(Consensus Layer)需求,以驅動整體運作 + +執行層架構的核心組件: +- **執行引擎(Execution Engine):** 負責驅動執行層,並受共識層驅動。 +- **DevP2P(Networking Layer):** 透過引導節點(Boot Nodes)初始化,以進入以太坊網絡。 +- **Engine API:** 例如 `fork choice updated` 方法,可透過訂閱特定同步模式來從其他節點下載區塊。 + +--- + +### 2. 以太坊虛擬機(EVM) +- EVM 為以太坊提供虛擬化的 CPU,確保不同硬體架構(如 x86、ARM、RISC-V)下的執行結果一致。 +- EVM 的作用類似於 JVM(Java 虛擬機),讓所有以太坊客戶端能夠對計算結果達成共識。 +- **三明治複雜性模型(Sandwich Complexity Model):** + - 外層應保持簡單,所有複雜性集中於中間層。 + - 以太坊的最外層是 EVM 代碼,高層為 Solidity,透過編譯器轉譯為 EVM 字節碼。 + +--- + +### 3. 以太坊的狀態(State) +- **以太坊是狀態機(State Machine):** 透過交易在不同狀態間轉換。 +- 與比特幣不同,以太坊維護**全域狀態**(Global State),而比特幣只維護 UTXO(未花費交易輸出)。 +- **狀態的組成部分:** + - 以太坊地址、餘額 + - 智能合約的代碼與數據 + - 當前網絡狀態(State & Network State) + +--- + +### 4. 交易(Transactions) +- 交易會觸發**狀態轉換(State Transition)**,透過 EVM 進行處理。 +- 交易在 EVM 內部執行後,如果合法,就會改變以太坊的全域狀態。 + +--- + +### 5. DevP2P(點對點網絡通信) +- **作用:** 執行層客戶端透過 DevP2P 傳播交易與區塊。 +- 交易先存入**記憶池(Mempool)**,再透過 P2P 傳遞給其他客戶端。 +- 每個接收交易的節點都會驗證交易的有效性,並再次廣播至網絡。 + +--- + +### 6. JSON-RPC API(執行層對外接口) +- **用途:** + - 透過 JSON-RPC API 與執行層互動,例如查詢以太坊狀態或發送交易。 + - 錢包(如 MetaMask)或 DApp 透過 JSON-RPC API 與以太坊網絡通訊。 +- **交易流程:** + 1. 使用錢包簽署交易 + 2. 交易經執行層驗證 + 3. 廣播交易至整個網絡 + +--- + +### 7. Engine API(共識層與執行層的接口) +- **作用:** 連接共識層與執行層,提供兩類主要端點: + - **New Payload(V1/V2/V3):** 負責區塊驗證與插入 + - **Fork Choice Updated(V1/V2/V3):** 負責狀態同步與區塊建構 + +--- + +### 8. 同步(Sync) +- **以太坊的交易處理依賴於全球狀態,而非單一節點的本地狀態。** +- 執行層透過**LMD-GHOST 算法**決定最佳分叉選擇,並透過 Engine API 傳遞至執行層。 +- **同步方式:** + 1. 下載遠端節點的區塊 + 2. 驗證區塊,並在 EVM 中執行 + +--- + +### 9. 執行層架構組件 +- **Engine(執行引擎):** 負責執行 Engine API,並連接至共識層。 +- **認證機制:** Engine API 透過 JSON-RPC(HTTP)提供服務,並透過 JWT(JSON Web Token)驗證請求來源。 +- **安全性:** + - Engine API **僅供共識層訪問**,不對外開放。 + - JWT 只用於驗證來源,**不加密**傳輸流量。 + +--- + +### 10. 負責交易驗證的例行程序(Routines) +- **Payload 驗證** + - 透過區塊頭(Block Header)與執行環境規則驗證區塊內容。 +- **合併後(The Merge)的變化** + - 以前,執行層負責共識、排序區塊、處理區塊重組。 + - 現在,這些任務交由**共識層**,執行層主要負責**狀態轉換(State Transition)。** + +--- + +### 11. 共識層與執行層的交互 +- **共識層如何與執行層互動?** + - 共識層在**Deneb 信標鏈規範**(Beacon Chain Specs)中定義**執行負載(Execution Payload)**。 + - 負載透過 `execution_engine` 函數傳遞到執行層。 + - **驗證流程:** + 1. **高級檢查**(如父區塊哈希、時間戳驗證)。 + 2. **基礎檢查**(輕量級驗證)。 + 3. **傳輸至執行層進行區塊驗證**。 + 4. **通知負載函數(notify payload)**:將執行負載傳遞給執行引擎。 + 5. **執行引擎執行狀態轉換,並返回成功或失敗結果**。 + +--- + +### 12. 狀態轉換函數(State Transition Function, STF) +- **區塊級狀態轉換函數(Block Level STF)** + - 是執行層的核心功能,負責區塊驗證與插入。 + - 雖然在 Geth 具體實作,但不同客戶端的 STF 概念相同。 + - 在 EELS Python 規範客戶端中,STF 才明確被提及,其他客戶端則將 STF 功能拆分至不同架構組件中。 + +參考: + +[以太坊的節點](https://ithelp.ithome.com.tw/m/articles/10289488) + +### 2025.02.12 + + From b2b10b8e61b4e44a34ec9c0aa84369758c2151d8 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 11 Feb 2025 11:28:36 +0000 Subject: [PATCH 017/121] Update commit status table --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index cbe4bcf..265994e 100644 --- a/README.md +++ b/README.md @@ -140,7 +140,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | Amberrrrrr | ✅ | ✅ | ⭕️ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | | | yahsinhuangtw | ✅ | ✅ | ✅ | ⭕️ | ✅ | | | | | | | | | | | | | | | | | | | | | | 0xKarl98 | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | -| marvelshan | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | +| marvelshan | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | rogers3333 | ✅ | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | deporter | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | LouisTsai-Csie | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | @@ -604,6 +604,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From 61af89c282730b3d6a1a7ff96aed950072f225d0 Mon Sep 17 00:00:00 2001 From: jeasonzhang Date: Tue, 11 Feb 2025 19:53:28 +0800 Subject: [PATCH 018/121] Update JeasonZhang.md --- JeasonZhang.md | 94 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 93 insertions(+), 1 deletion(-) diff --git a/JeasonZhang.md b/JeasonZhang.md index 48892e5..4e2e6d8 100644 --- a/JeasonZhang.md +++ b/JeasonZhang.md @@ -441,6 +441,98 @@ ### 2025.02.11 -内容 +##### **EPF WIKI WEEK5** + +#### **I. 核心学习目标** + +**主题**: 以太坊研究生态与路线图演进 +**目标**: 掌握以太坊六大发展阶段(Merge/Surge/Scourge/Verge/Purge/Splurge)的技术规划及当前研究热点。 + +------ + +#### **II. 以太坊路线图解析** + +##### **1. 六大发展阶段** + +| 阶段 | 核心目标 | 关键技术 | +| ----------- | ---------------- | ------------------------------------------------------------ | +| **Merge** | PoS共识完善 | 单槽最终性(SSF)、秘密领导者选举(SLE)、提款机制优化 | +| **Surge** | 扩容与数据可用性 | EIP-4844(Blob交易)、数据可用性采样(DAS)、ZK Rollup互操作性 | +| **Scourge** | MEV治理与抗审查 | ePBS(Enshrined PBS)、MEV销毁、质押上限机制 | +| **Verge** | 状态验证效率提升 | Verkle树、SNARK化(信标链状态转换、EVM验证) | +| **Purge** | 协议简化 | EIP-4444(历史数据修剪)、状态过期机制 | +| **Splurge** | 用户体验优化 | 账户抽象(ERC-4337)、EIP-1559最终形态、深度密码学整合 | + +------ + +#### **III. 当前研究热点** + +##### **1. 密码学前沿** + +- **KZG多项式承诺**:用于Blob数据验证([KZG仪式](https://scroll.io/blog/kzg)) +- **Verkle树结构**:替代Merkle Patricia Trie,提升状态证明效率([Vitalik解析](https://vitalik.eth.limo/general/2021/06/18/verkle.html)) + +##### **2. 扩容技术** + +- **数据可用性采样(DAS)**:通过随机抽样验证数据可用性 +- **跨Rollup互操作**:标准化跨链消息协议 + +##### **3. 抗MEV机制** + +- **包含列表(Inclusion Lists)**:防止交易审查 +- **MEV-Burn**:通过协议内拍卖销毁MEV收益 + +------ + +#### **IV. 关键升级进展** + +##### **1. 近期里程碑** + +- **Dencun升级**:EIP-4844实施,降低Layer2成本 +- **Pectra升级**:Verkle树预编译合约部署 + +##### **2. 开发者工具** + +- **Helios轻客户端**:Rust实现的快速同步客户端([构建指南](https://a16zcrypto.com/posts/article/building-helios-ethereum-light-client/)) +- **EVM对象格式(EOF)**:优化合约代码存储结构 + +------ + +#### **V. 学习资源推荐** + +##### **必读材料** + +- [以太坊终极形态](https://vitalik.eth.limo/general/2021/12/06/endgame.html)(Vitalik长文) +- [Blob空间经济学](https://domothy.com/blobspace/)(Domothy分析) +- [以太坊数据结构演进](https://arxiv.org/pdf/2108.05513.pdf)(学术论文) + +##### **实践指南** + +- [EthRoadmap.com](https://ethroadmap.com/):交互式路线图可视化 +- [执行票据提案](https://ethresear.ch/t/execution-tickets/17944):参与协议改进讨论 + +------ + +#### **VI. 技术术语对照** + +| 英文术语 | 中文解释 | +| -------------------------- | ----------------------- | +| Single Slot Finality | 单槽最终性 | +| Data Availability Sampling | 数据可用性采样 | +| Enshrined PBS | 协议内提议者-构建者分离 | +| Verkle Proofs | Verkle树证明 | +| MEV Burn | MEV销毁机制 | + +------ + +通过本课程的系统学习,开发者可全面把握以太坊技术演进的宏观框架,深入参与核心协议研究。建议结合[Ethresear.ch论坛](https://ethresear.ch/)跟踪最新提案,通过节点工作坊实践客户端运维。 + +### 2025.02.12 + +##### **EPF WIKI WEEK6** + +### 2025.02.13 + +##### **EPF WIKI WEEK7** From ac90897cf7d6250dcafa73019928e20769ecaa20 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 11 Feb 2025 11:53:46 +0000 Subject: [PATCH 019/121] Update commit status table --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 265994e..2b388f6 100644 --- a/README.md +++ b/README.md @@ -175,7 +175,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | dixia | ✅ | ✅ | ✅ | ⭕️ | ✅ | | | | | | | | | | | | | | | | | | | | | | dajuguan | ✅ | ✅ | ✅ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | | | timfaner | ✅ | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | -| JeasonZhang | ✅ | ⭕️ | ⭕️ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | +| JeasonZhang | ✅ | ⭕️ | ⭕️ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | LikKee | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | phoebe-dot | ✅ | ✅ | ✅ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | | PubYuCHe | ✅ | ✅ | ⭕️ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | | @@ -605,6 +605,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From 191e7566e851de8966cdcc35d1d041a39981ba6e Mon Sep 17 00:00:00 2001 From: D9 <33143119+beyond009@users.noreply.github.com> Date: Tue, 11 Feb 2025 20:04:31 +0800 Subject: [PATCH 020/121] Update d0d0d9.md --- d0d0d9.md | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/d0d0d9.md b/d0d0d9.md index 5487f91..4a1e29e 100644 --- a/d0d0d9.md +++ b/d0d0d9.md @@ -104,6 +104,11 @@ continue running on consumer-grade hardware without missing out MEV exposed ### 2025.02.10 +#### Gasper +https://medium.com/@jamaltheatlantean/what-is-gasper-20f6697d3dc6 + +Gasper结合了**Casper FFG(Friendly Finality Gadget)和LMD-GHOST(Latest Message Driven - Greediest Heaviest Observed SubTree) + #### Committee ▪ Validators within the network will be randomly shuffled under different committees. ▪ Each validator will make one attestation per epoch. The exact slot the validator is @@ -128,12 +133,19 @@ A checkpoint is a block in the first slot of an epoch. If there is no such bloc #### FFG Vote When casting an LMD GHOST vote, a validator also votes for the checkpoint in its current epoch, called the target. This vote is called a Casper FFG vote, and also includes a prior checkpoint, called the source. In the diagram, a validator in Epoch 1 voted for a source checkpoint of the genesis block, and a target checkpoint of the block at Slot 64. In Epoch 2, the same validator voted for the same checkpoints. Only validators assigned to a slot cast an LMD GHOST vote for that slot. However, all validators cast FFG votes for each epoch checkpoint. +Casper FFG 主要负责区块链的最终确定性(finality),确保一旦一个区块被认为是最终的,它就不会被更改。这通过在每个周期(称为epoch)结束时执行检查点来实现。 + #### Attestations An attestation contains both an LMD GHOST vote and an FFG vote. Optimally, all validators submit one attestation per epoch. An attestation has 32 slot chances for inclusion on-chain. This means a validator may have two attestations included on-chain in a single epoch. Validators are rewarded the most when their attestation is included on-chain at their assigned slot; later inclusion is a decaying reward. To give validators time to prepare, they are assigned to committees one epoch in advance. Proposers are only assigned to slots once the epoch starts. Nonetheless, secret leader election research aims to mitigate attacks or bribing of proposers -#### Gasper -https://medium.com/@jamaltheatlantean/what-is-gasper-20f6697d3dc6 +### 2025.02.11 + +[共识介绍视频](https://www.youtube.com/watch?v=5gfNUVmX3Es) + + + + From 303880f325edc6d7e739fcd37b554f67a5ffb9a8 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 11 Feb 2025 12:04:47 +0000 Subject: [PATCH 021/121] Update commit status table --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 2b388f6..5e03fd3 100644 --- a/README.md +++ b/README.md @@ -107,7 +107,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | coratann | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | luffythink | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | Henry | ✅ | ✅ | ✅ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | -| d0d0d9 | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | +| d0d0d9 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | henryleo | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | | zhouCode | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | | mrmign | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | @@ -606,6 +606,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From 1e5b600aaaffbdcc548e6e93876e95e3c6386083 Mon Sep 17 00:00:00 2001 From: jjeejj Date: Tue, 11 Feb 2025 20:43:35 +0800 Subject: [PATCH 022/121] jjeejj add 2025.02.11 --- jjeejj.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/jjeejj.md b/jjeejj.md index 99de35a..3fcad67 100644 --- a/jjeejj.md +++ b/jjeejj.md @@ -95,4 +95,13 @@ timezone: Pacific/Auckland # 新西兰标准时间 (UTC+12) 2. JSON-RPC 1. 远景是所有的客户端提供相同的 api, 用户可以运行他们选择的任意客户端,并于所有工具完美集成 +### 2025.02.11 + +1. Week3: 共识层 CL 是以太坊的一个核心组件,核心任务使用 Pos (Proof of Stake) 来确保网络中的安全性、一致性、去中心化 + 1. 负责共识算法:验证者选择、区块提议、区块验证、最终性 + 2. 确保每个交易只只能包含在一个区块终 + 3. 奖惩机制 + 4. 网络同步 + 5. 主要的参与者是验证者 + From 658f4aeeb3cc606affe1dde9940d6ecbeca1c094 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 11 Feb 2025 12:43:57 +0000 Subject: [PATCH 023/121] Update commit status table --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 5e03fd3..1eab074 100644 --- a/README.md +++ b/README.md @@ -152,7 +152,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | huahuahua1223 | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | dethan3 | ✅ | ✅ | ✅ | ⭕️ | ✅ | | | | | | | | | | | | | | | | | | | | | | Azleal | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | -| jjeejj | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | +| jjeejj | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | buctor41 | ✅ | ✅ | ⭕️ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | | | zhwindy | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | rectinajh | ✅ | ✅ | ✅ | ⭕️ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | @@ -607,6 +607,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From b6263d93e838b7c5eb437caab3a9f6308d26f2af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=99=AE=E7=BD=97=E5=88=97=E5=A1=94=E5=88=A9=E4=BA=9A?= =?UTF-8?q?=E7=89=B9?= <31700009+zhouCode@users.noreply.github.com> Date: Tue, 11 Feb 2025 22:00:50 +0800 Subject: [PATCH 024/121] Update zhouCode.md --- zhouCode.md | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/zhouCode.md b/zhouCode.md index 932c4ba..eef0800 100644 --- a/zhouCode.md +++ b/zhouCode.md @@ -538,4 +538,43 @@ func build(env Environment, pool txpool.Pool, state state.StateDB) (types.Block, - 由于能源需求低,发行较少的以太币就可以激励大家参与 - 与工作量证明相比,对不当行为的经济处罚让 51% 攻击的代价变得更高。 - 如果 51% 攻击是为了攻破加密经济的防御,那么社区可以求助于诚实链的社交恢复。 + +### 2025.02.11 + +#### Study Group 2024 week3 学习 + +#### 以太坊测试与安全 + +##### 测试的核心 + +- **预状态(Pre-state)**:测试前的区块链状态(合约代码、存储、余额等)。 +- **环境(Environment)**:区块参数(时间戳、燃料限制、基础费用、分叉激活时间)。 +- **交易(Transactions)**:触发特定EVM操作的输入数据。 +- **后状态(Post-state)**:测试后预期的区块链状态(存储变更、状态根等)。 +- **测试生成(Test Filling)**:通过工具(如Go Ethereum的`evm`模块)将测试定义转换为可执行的测试夹具(Fixture)。 + +##### **测试工具与框架** + +- **执行规范测试库(Ethereum Execution Spec Tests)**: + - 使用Python编写,支持复杂参数化测试(如不同分叉规则)。 + - 依赖Go Ethereum生成测试夹具,未来计划通过[EELS](https://github.com/ethereum/execution-specs)实现独立验证。 +- **Hive框架**: + - 用于跨层端到端测试,模拟共识层与执行层的交互(如Engine API调用)。 + - 支持并行测试多客户端(如Geth、Nethermind)的兼容性。 + +##### **共识层测试** + +- **共识规范测试(Consensus Spec Tests)**: + - 将规范与测试代码合并,覆盖信标链状态转换、分片逻辑等。 + - 生成多种格式的测试夹具(如区块有效性、质押操作)。 + +##### **安全漏洞与披露** + +- **潜在风险**: + - 客户端错误验证有效/无效区块可能导致网络分叉。 + - 不同层(执行层/共识层)的客户端兼容性问题。 +- **漏洞披露流程**: + - 发现漏洞后通过[以太坊漏洞赏金计划](https://bounty.ethereum.org/)提交,最高可获得25万美元奖励。 + - 公开披露需在修复后进行(参考[历史案例库](https://github.com/ethereum/eth-sec))。 + From c39cacdaf8aff28a9951979aa1f9fa9a590d08a8 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 11 Feb 2025 14:01:06 +0000 Subject: [PATCH 025/121] Update commit status table --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1eab074..920f5da 100644 --- a/README.md +++ b/README.md @@ -109,7 +109,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | Henry | ✅ | ✅ | ✅ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | | d0d0d9 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | henryleo | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | -| zhouCode | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | +| zhouCode | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | mrmign | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | ghx1104 | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | | Coooder-Crypto | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | @@ -608,6 +608,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From 6306a8259f6e4e78e946df9e1b62709c54d86c07 Mon Sep 17 00:00:00 2001 From: ghx1104 <123364309+ghx1104@users.noreply.github.com> Date: Tue, 11 Feb 2025 22:22:46 +0800 Subject: [PATCH 026/121] Update ghx1104.md --- ghx1104.md | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/ghx1104.md b/ghx1104.md index e0c64c0..609e673 100644 --- a/ghx1104.md +++ b/ghx1104.md @@ -423,5 +423,43 @@ Splurge 包含一些额外的改进,进一步提升以太坊的功能: • EIP-1559 Endgame:优化 EIP-1559 的燃烧机制,以提高费用市场的稳定性。 • Account Abstraction(AA):允许智能合约账户拥有更强大的功能,例如灵活的支付方式、多重签名等,减少对外部钱包的依赖。 • Deep Cryptography:进一步增强密码学能力,为未来的扩展性提供保障。 - + + +### 2025.02.11 + +#### week5 + +* 实践:如何在以太坊网络上运行节点 + +1. 运行节点简介 +运行以太坊节点是参与以太坊网络的基础,分为 执行层(EL) 和 共识层(CL)。要成功运行完整节点,需要同时配置这两层客户端。 + +2. 选择客户端和环境 +选择合适的客户端对提高节点稳定性至关重要。常见的 EL 客户端有 Geth 和 Erigon,CL 客户端有 Prysm 和 Lighthouse。确保操作系统支持并行运行这两个客户端。 + +3. 获取和验证客户端 +从官方网站或 GitHub 下载客户端,验证二进制文件的完整性以防篡改。 + +4. 客户端配置 +配置执行层与共识层客户端,确保它们之间正确通信(通过 RPC)。 + +5. 在 Holesky 测试网运行 +使用 Holesky 测试网来验证客户端的设置,确保没有问题后再迁移到主网。 + +6. 运行自定义 Genesis +通过使用自定义 Genesis 文件创建临时(Ephemeral)以太坊网络,进行实验或测试。 + +7. 切换客户端 +如需更换客户端(例如从 Prysm 切换到 Lighthouse),只需停止当前客户端并配置新的客户端。 + +8. 使用客户端与 RPC 交互 +通过 HTTP、WebSocket 或 IPC 接口与节点交互,进行交易查询或钱包管理。 + +9. 添加验证者 +质押 ETH 成为验证者并加入共识层,配置验证者密钥并启动验证。 + +10. 系统监控和服务 +使用 systemd 配置客户端自动启动,结合 Prometheus 和 Grafana 进行节点监控。 + + From b4463a1b568ef9b675f5f696ebe73c71b41accd9 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 11 Feb 2025 14:23:23 +0000 Subject: [PATCH 027/121] Update commit status table --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 920f5da..ae920e4 100644 --- a/README.md +++ b/README.md @@ -111,7 +111,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | henryleo | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | | zhouCode | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | mrmign | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | -| ghx1104 | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | +| ghx1104 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | Coooder-Crypto | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | | rayjun | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | CJC824 | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | @@ -609,6 +609,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From 3446a0d8a9aeee7fe2e8ac12f7ebccf79e2ad483 Mon Sep 17 00:00:00 2001 From: ztz Date: Tue, 11 Feb 2025 22:30:59 +0800 Subject: [PATCH 028/121] Update zt2.md --- zt2.md | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/zt2.md b/zt2.md index f80fb03..63bfd8a 100644 --- a/zt2.md +++ b/zt2.md @@ -203,4 +203,53 @@ CA 具有两个附加属性: - 代码 - 存储 +### 2025.02.11 + +#### 执行层(Execution Layer) + + +##### 执行层的定义 + + +以太坊执行层是最初由黄皮书引入的,实现了以太坊作为全球计算机的状态转换(State Transition Function 或 STF),通俗来说,它具备两个核心角色: + + +- 决定某个区块是否能够上链 +- 决定该区块上链后,整个以太坊全球计算机的状态如何发生变化 + +为了支持核心角色,它也要负责一些具体的工作如: + + +- 验证区块链数据并进行本地副本保存 +- 实现稳定的客户端通信协议 +- 维护交易池 +- 满足共识层的要求 + +##### 执行层具体架构 + + +经过合并升级,以太坊网络中的执行层功能已发生结构性调整。此前,该层级肩负着区块链共识管理、区块序列验证及链重组处理等核心职责。而当前架构下,这些核心功能已全面移交至共识层运作,执行层因此实现了职能精简化转型。在现有体系中,执行层可被抽象理解为专门执行状态转换功能的核心模块。 + +![image](https://res.craft.do/user/full/ca875b0a-92a3-940e-21e3-a9ace35d9a4b/doc/EFD8C5C2-91E3-4D88-9218-08555760530E/9EB98687-5A5F-4D89-886E-B8984A0377BB_2/DscRQ5xcQAo0c0IyjH3jnNeZ2QMyGiB7En0mywTiQHAz/Image.png) + +从这张图中可以看到,执行层通过左下角的协议实现与其他执行层完成通信,在通信建立后接受其他执行层客户端发来的交易与区块,并同步维护本地状态(State)同时将新交易通过引擎 API 向共识层传递,接收共识层处理结果后交给 EVM 虚拟机执行具体交易逻辑,并完成状态转换后同步到本地状态(State)中,交给网络层协议完成状态对其他客户端的同步,最终利用 JSON-RPC 接口向 WEB3 钱包提供服务。 + + +- Engine API:共识层与执行层之间唯一的沟通桥梁。 + +关键概念:`execution_engine` + +###### execution_engine + + +`execution_engine` 负责执行层与共识层之间的沟通,同时承担了大量的复杂工作,简要描述如下: + + +1. 共识层获得区块后,对区块进行一系列高层级验证,该类验证比较轻量级,如验证父哈希的准确性、时间戳的准确性等等 +2. 共识层简单验证通过后,将具体区块细节传递给执行层,执行层进行精确验证,如区块头精确性验证、交易状态验证等 +3. 执行层完成核心验证后,最终交给执行引擎进行交易,并实现状态转换,通知共识层状态转换结果。 + +(注意,区块中的单个交易执行失败,整个区块都会被打回重来) + + From e127e050d8359420d8b96cbbc80ea277e0d827ae Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 11 Feb 2025 14:31:17 +0000 Subject: [PATCH 029/121] Update commit status table --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index ae920e4..7d0ed73 100644 --- a/README.md +++ b/README.md @@ -162,7 +162,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | liuxulife | ✅ | ✅ | ✅ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | | CHENFANGC | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | ppatrick007 | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | -| zt2 | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | +| zt2 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | yiwen4 | ✅ | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | affe | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | dundun930326 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | @@ -610,6 +610,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From 75f41b1dad688428f23709497e04ec1e50de3538 Mon Sep 17 00:00:00 2001 From: Chloe Zhu <157523999+Chloezhu010@users.noreply.github.com> Date: Tue, 11 Feb 2025 15:44:26 +0100 Subject: [PATCH 030/121] Update chloezhu010.md --- chloezhu010.md | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/chloezhu010.md b/chloezhu010.md index 91acd06..2ffa977 100644 --- a/chloezhu010.md +++ b/chloezhu010.md @@ -157,6 +157,23 @@ timezone: Europe/Berlin - Light clients and stateless: reduce the resource required for running nodes - RESTful api: eg. Besu - Improved json-rpc: add support for batch request, better error handling etc. - +### 2025.02.11 +- Blockchain level protocol + - reference link: https://epf.wiki/#/wiki/protocol/design-rationale + - Accounts over UTXOs + - UTXO (unspent tx output) + - Account + - What's the pros/ cons of account vs UTXO? Why Ethereum chooses account-based model? + - Merkle patricia trie + - a modified MPT + - deterministic and cryptographically verifiable + - Verkle tree + - vector commitments allow for much smaller proofs (aka witness) + - RLP (recursive length prefix) + - SSZ (simple serialize) + - Hunt for finality: Casper FFG + LMD GHOST + - Discv5: the discovery protocol + - a kademlia based DHT to store ENR records + - ENR (ethereum node record) contain routing info to establish connections between peers From 92413f08cbe53d6345f2d130bba8444c570b6044 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 11 Feb 2025 14:44:43 +0000 Subject: [PATCH 031/121] Update commit status table --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 7d0ed73..ea7b826 100644 --- a/README.md +++ b/README.md @@ -103,7 +103,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | ------------- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | | brucexu-eth | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | PayFv | ⭕️ | ✅ | ✅ | ⭕️ | ✅ | | | | | | | | | | | | | | | | | | | | | -| chloezhu010 | ✅ | ✅ | ⭕️ | ⭕️ | ✅ | | | | | | | | | | | | | | | | | | | | | +| chloezhu010 | ✅ | ✅ | ⭕️ | ⭕️ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | coratann | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | luffythink | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | Henry | ✅ | ✅ | ✅ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | @@ -611,6 +611,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From 385259ff9aef545e154aee184db3d7bd7fa23294 Mon Sep 17 00:00:00 2001 From: LGC Date: Tue, 11 Feb 2025 23:03:22 +0800 Subject: [PATCH 032/121] feat(leo): update 2.11 --- amandakelake.md | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/amandakelake.md b/amandakelake.md index 24773b0..2039c16 100644 --- a/amandakelake.md +++ b/amandakelake.md @@ -207,4 +207,51 @@ PoS 提供了一种不同于 PoW 的安全保证: - [ ] 分片深入 +### 2025.02.11 +[week4](https://epf.wiki/#/eps/week4?id=pre-reading) + +如何确保智能合约在复杂网络环境中的可靠性? + +EVM测试方法论 +- 字节码级模拟测试:通过EVM模拟器对合约字节码进行逐指令调试 +- Gas消耗追踪矩阵:建立不同操作码的Gas消耗基准值(如:SSTORE=20000 Gas) +- 状态树差异对比:记录每个交易前后的存储树哈希变化 + +```js +// 示例:网络层与合约层的集成测试用例 +describe("跨层事务测试", () => { + it("应正确处理网络延迟下的合约调用", async () => { + // 模拟300ms网络延迟 + network.setLatency(300); + const txReceipt = await contract.execute(); + expect(txReceipt.status).to.equal(1); + }); +}); +``` + +如何在开发环境中构建真实攻击场景? +```shell +ganache-cli \ + --fork https://mainnet.infura.io/v3/YOUR_PROJECT_ID@15890350 \ + --networkId 5777 \ + --gasLimit 12000000 \ + --allowUnlimitedContractSize + +``` +- 主网分叉测试:捕获真实链上攻击模式 +- 内存泄漏压力测试:持续运行72小时观察内存占用曲线 + +如何构建抗DDoS的测试网络架构? +1. 节点负载均衡策略 + - 于交易Gas的优先级队列 + - 动态调整的P2P连接池(最大连接数 = √(节点总数)*10) +2. 容错测试矩阵 +```python +# 网络故障注入测试示例 +for fault_type in ['packet_loss', 'latency_spike', 'partition']: + with NetworkFault(fault_type, duration=60): + assert consensus_algorithm.recovery_time < 15 + +``` + From ce4b6c32aebf91b396d4e9cd1671f85d6925e82b Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 11 Feb 2025 15:03:55 +0000 Subject: [PATCH 033/121] Update commit status table --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index ea7b826..b517ebd 100644 --- a/README.md +++ b/README.md @@ -168,7 +168,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | dundun930326 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | Echocipher | ✅ | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | poyucheese | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | -| amandakelake | ✅ | ✅ | ✅ | ⭕️ | ✅ | | | | | | | | | | | | | | | | | | | | | +| amandakelake | ✅ | ✅ | ✅ | ⭕️ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | ALiangNe | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | tienshaoku | ✅ | ✅ | ✅ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | | tannerang | ✅ | ⭕️ | ✅ | ⭕️ | ✅ | | | | | | | | | | | | | | | | | | | | | @@ -612,6 +612,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From d9faab6590b7d32464f01a762bfc622125a32678 Mon Sep 17 00:00:00 2001 From: poyucheese <113661710+poyucheese@users.noreply.github.com> Date: Tue, 11 Feb 2025 23:19:03 +0800 Subject: [PATCH 034/121] Update poyucheese.md 0211 --- poyucheese.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/poyucheese.md b/poyucheese.md index 5234d41..ec5804c 100644 --- a/poyucheese.md +++ b/poyucheese.md @@ -55,4 +55,20 @@ timezone: Asia/Shanghai 今天沒時間看新的東西,簡單複習消化 week 2 的內容,看其他人的筆記也能收穫很多不同觀點的看法。 +### 2025.02.11 + +#### [SGweek3](https://epf.wiki/#/eps/week3) + +今天看了 week 3 的內容,是關於以太坊的共識,包含爲什麼需要共識機制——因為要做到去中心化,此類共識機制如何解決拜占庭問題(確保惡意節點難以攻擊): + +- **PoW (Bitcoin)** 使創建區塊難度提升,攻擊成本大 +- **PoW + GHOST (Ethereum1.0)** 以太坊的出塊時間比 bitcoin 短,所以容易出現分叉 (新創建的區塊來不及被廣播),使用 GHOST 協議和獎勵接受沒成為最長鏈的叔塊,也保護礦工的權益 +- **PoS + Casper FFG + LMD GHOST (Ethereum2.0)** + - **Casper FFG (Friendly Finality Gadget)** + + >採用投票機制,驗證者透過 質押 ETH 來表決哪個區塊應該成為最終區塊。惡意驗證者若投票錯誤,將面臨懲罰。 + - **LMD GHOST (Latest Message Driven Greediest Heaviest Observed Subtree)** + + >透過權重最大(最多驗證者投票的)的子樹來決定主鏈,確保惡意節點無法輕易影響共識。 + From 696973bc683336a67ec4bb22700b89be7302fc0a Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 11 Feb 2025 15:19:20 +0000 Subject: [PATCH 035/121] Update commit status table --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b517ebd..38a37a7 100644 --- a/README.md +++ b/README.md @@ -167,7 +167,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | affe | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | dundun930326 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | Echocipher | ✅ | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | -| poyucheese | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | +| poyucheese | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | amandakelake | ✅ | ✅ | ✅ | ⭕️ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | ALiangNe | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | tienshaoku | ✅ | ✅ | ✅ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | @@ -613,6 +613,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From 73f60a483f69bc9c070532ace823829dbcdd2443 Mon Sep 17 00:00:00 2001 From: henryleo <197507345+henrycyberbio@users.noreply.github.com> Date: Tue, 11 Feb 2025 23:20:41 +0800 Subject: [PATCH 036/121] 2025.02.11 --- henryleo.md | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/henryleo.md b/henryleo.md index 5272b44..6582d23 100644 --- a/henryleo.md +++ b/henryleo.md @@ -167,12 +167,19 @@ BitTorrent 旨在解决依赖中心化服务器下载大文件导致的网络堵 以太坊坚持去中心化来实现无需许可、可信中立和抗审查,这并不意味着要求绝对的透明和排斥商业或其他组织,合约或者协议可以有不透明的部分,但规则和退出机制必须透明(个人理解)。要求和排斥是控制,以太坊不要控制,要**通过技术**构筑“无限花园”,这一点承接密码朋克的核心信念之一:“that the power of technology often creates new political realities.”。 - -#### Refs +###### Refs - [A Prehistory of the Ethereum Protocol | vitalik.eth.limo](https://vitalik.eth.limo/general/2017/09/14/prehistory.html) - [Inevitable Ethereum - World Computer](https://inevitableeth.com/home/ethereum/world-computer) - [密码朋克 | 以太坊协议的史前史](https://epf.wiki/#/wiki/protocol/prehistory?id=cypherpunks-write-code) +### 2025.02.11 + +#### 以太坊的组成 + +以太坊通过三个Part 组件致力于实现通用计算平台: +- EVM Ethereum Virtual Machine 以太坊虚拟机 +- Ethereum Blockchain 以太坊区块链 +- Ethereum Network 以太坊网络 From 8d488d36a189707d029cc3fb4c30aabb11b3c3f1 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 11 Feb 2025 15:21:15 +0000 Subject: [PATCH 037/121] Update commit status table --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 38a37a7..4700a09 100644 --- a/README.md +++ b/README.md @@ -108,7 +108,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | luffythink | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | Henry | ✅ | ✅ | ✅ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | | d0d0d9 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | -| henryleo | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | +| henryleo | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | zhouCode | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | mrmign | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | ghx1104 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | @@ -614,6 +614,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From 45bff5b1a5db006acb6cbef9b3119dfa39822f89 Mon Sep 17 00:00:00 2001 From: awsomecty <2693196915@qq.com> Date: Tue, 11 Feb 2025 23:31:48 +0800 Subject: [PATCH 038/121] Update awsomecty.md --- awsomecty.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/awsomecty.md b/awsomecty.md index c88601d..e79cbe7 100644 --- a/awsomecty.md +++ b/awsomecty.md @@ -100,5 +100,30 @@ Core development: 分别是EF Testing、EF DevOps、EF Ipsilon、EF JavaScript来负责 ### 2025.02.11 +1. 合并(The Merge) +目标:从挖矿(工作量证明)转向质押(权益证明),让网络更环保、更安全。 +已完成: +启动了信标链,为合并做准备。 +成功完成了合并,停止了挖矿,转向了质押。 +允许质押者提取他们的以太币。 +未来研究: +单槽最终性(SSF):让交易更快确认(从12分钟缩短到12秒),提升用户体验。 +量子安全签名:研究新的加密技术,防止未来可能出现的量子计算机攻击。 +2. 激增(The Surge) +目标:通过“卷叠”(rollups)和“数据分片”(data sharding)提升以太坊的交易处理能力。 +已完成: +实现了“Proto-danksharding”,降低了交易成本。 +未来研究: +Danksharding:进一步扩展rollups,让以太坊能处理更多交易。 +数据可用性采样(DAS):一种高效验证数据完整性的方法,减轻节点的负担。 +3. 净化(The Scourge) +目标:减少审查(censorship)风险,优化矿工提取价值(MEV)的分配,防止中心化。 +已完成: +MEV-Boost:将MEV部分分配给质押者。 +未来研究: +ePBS(增强型区块提议者和构建者分离):防止交易被审查,保护小质押者的利益。 +MEV-Burn(MEV燃烧):将MEV的一部分销毁,让所有以太币持有者受益。 +ET(执行票证):通过市场机制选择区块构建者,防止中心化。 +IL(包含列表):确保某些交易必须被包含,防止区块构建者随意审查。 From 7914a395ca04bb494fc524f436f6dad740722ab5 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 11 Feb 2025 15:32:04 +0000 Subject: [PATCH 039/121] Update commit status table --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 4700a09..67d88fc 100644 --- a/README.md +++ b/README.md @@ -185,7 +185,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | eddy8 | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | yenchihliao | ⭕️ | ⭕️ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | | DasNarrenschiff | ✅ | ⭕️ | ⭕️ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | -| awsomecty | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | +| awsomecty | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | devbards | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | | StellaWang5209 | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | pillowtalk-Qy | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | @@ -615,6 +615,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From 33200cbe5acfc69d7d3dbd0b479b0eec55f6b972 Mon Sep 17 00:00:00 2001 From: kidneyweakx Date: Tue, 11 Feb 2025 23:33:36 +0800 Subject: [PATCH 040/121] Update kidneyweakx.md --- kidneyweakx.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/kidneyweakx.md b/kidneyweakx.md index d466075..88c14cd 100644 --- a/kidneyweakx.md +++ b/kidneyweakx.md @@ -64,4 +64,7 @@ gas 算式挺複雜的,看了一陣子 # 2025.02.10 今天看的東西不多,大概搞懂坎昆升級後 Blob 的計算公式,總感覺現在這機制弄的有點複雜和雜亂 +# 2025.02.11 +EL Client 今天看的相對比較熟,之前玩過 quorum 和 besu 設計挺像的 + \ No newline at end of file From 385aeb6722ca9a8cb9e255e0329ff4bafec8a181 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 11 Feb 2025 15:33:59 +0000 Subject: [PATCH 041/121] Update commit status table --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 67d88fc..9cdbfa1 100644 --- a/README.md +++ b/README.md @@ -144,7 +144,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | rogers3333 | ✅ | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | deporter | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | LouisTsai-Csie | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | -| kidneyweakx | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | +| kidneyweakx | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | keroro520 | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | huangyan0914 | ✅ | ✅ | ✅ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | | 0xNezha | ✅ | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | @@ -616,6 +616,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From f8c3135ed0d6dcbf64583d91c47be5bae8aa61a6 Mon Sep 17 00:00:00 2001 From: yen Date: Tue, 11 Feb 2025 23:36:15 +0800 Subject: [PATCH 042/121] Update yenchihliao.md --- yenchihliao.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/yenchihliao.md b/yenchihliao.md index 51d87af..8ea24fe 100644 --- a/yenchihliao.md +++ b/yenchihliao.md @@ -97,4 +97,18 @@ Picked up/strengthened some key concepts - p2p protocol broadcast tx to square root of peers - snap sync protocol: contrast to full sync +### 2025.02.11 +Finished week3 + +Picked up/strengthened some key concepts +- Each "slot" has a block unless a validator failed/missed to propose +- Every blocks have a bunch of "attestation" +- Attestations of a block are included into the next block +- Every 32 slots forms a "Epoch" (for mainnet) +- Slashes and rewards are evaluated at the end of every epoch +- The full validator set is randomly shuffled and distributed to one of slots in a epoch +- Each validator only verifies once in a epoch +- Justification: 2/3 of validators attested +- Finialize: Justifying a justified block + From 055d2a6faad9d052682407e1cdfb4cffa9a0e394 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 11 Feb 2025 15:36:48 +0000 Subject: [PATCH 043/121] Update commit status table --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 9cdbfa1..f5e149e 100644 --- a/README.md +++ b/README.md @@ -183,7 +183,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | lknxt1995 | ✅ | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | nooma42 | ✅ | ⭕️ | ⭕️ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | | eddy8 | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | -| yenchihliao | ⭕️ | ⭕️ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | +| yenchihliao | ⭕️ | ⭕️ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | DasNarrenschiff | ✅ | ⭕️ | ⭕️ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | | awsomecty | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | devbards | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | @@ -617,6 +617,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From ce75d6132679661f3063a682d3ba108ccf9b0f1a Mon Sep 17 00:00:00 2001 From: ethan 3 Date: Tue, 11 Feb 2025 15:44:38 +0000 Subject: [PATCH 044/121] dethan3 note #5 --- dethan3.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/dethan3.md b/dethan3.md index 86be65a..e9419da 100644 --- a/dethan3.md +++ b/dethan3.md @@ -39,4 +39,13 @@ Week3 主要讲述了以太坊的共识层,需要了解 POS 的原理。 ### 2025.02.10 第五章讲了以太坊的路线图,当然这是2024年的路线图。今年应该要讲新的路线图,最好赶快报名今年的课程。 2月12日开始 + +### 2025.02.11 +以太坊的目标是成为一个世界计算机吗? +以太坊又3个部分组成:EVM, Blockchain, Network + +以太坊提供了一种无需信任的信任 + +自由加密运动是以太坊和所有加密货币活动的基础 + \ No newline at end of file From ea894ca0abb4734a5d1c150dc4acf7d45d8ac2c4 Mon Sep 17 00:00:00 2001 From: Joseph Huang <73107648+PubYuCHe@users.noreply.github.com> Date: Tue, 11 Feb 2025 23:44:40 +0800 Subject: [PATCH 045/121] Update PubYuCHe.md --- PubYuCHe.md | 47 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/PubYuCHe.md b/PubYuCHe.md index 995ba66..828b29b 100644 --- a/PubYuCHe.md +++ b/PubYuCHe.md @@ -45,6 +45,51 @@ EPF #1 week - 如果發生以下情況,則可能發生錯誤 - 存在無效交易,則整個區塊無效,狀態不會更新 -### 2025.02.08 +### 2025.02.11 + +區塊建立函數 + +1. 參數部分 +- 環境 (Environment): 這部分提供了區塊生成過程所必需的基本背景信息,例如當前時間、區塊鏈中的位置(區塊編號)、前一個區塊的資訊以及區塊費用的基準值。這些數據對確保區塊的正確生成和區塊鏈的連續性非常重要。 +- 交易池 (Tx pool): 這是一個臨時儲存待執行交易的集合。系統會根據交易的價值(例如支付的手續費)來排序,確保高價值交易能夠優先被執行,從而最大化收益。 +- 狀態資料庫 (StateDB): 此資料庫保存著所有與賬戶、合約狀態等相關的信息,任何交易執行後都可能對這些狀態做出改變,故需在區塊生成後更新。 +2. 返回結果 +- 區塊 (Block): 生成的新區塊,包含了一系列已執行的交易及相關區塊資訊。 +- 更新後的狀態資料庫 (Updated StateDB): 反映了所有交易執行後的最新狀態,這是整個區塊鏈運行過程中的核心數據。 +- 錯誤 (Error): 在區塊生成或交易執行過程中可能出現錯誤,這一部分用來返回和記錄相關錯誤信息。 +步驟詳解 +步驟 1:追蹤 gas 使用量並存儲交易 +- 在這一階段,系統不斷從交易池中選取交易,並將它們加入到待生成的區塊中,同時監控累積的 gas 消耗。當達到預定的 gas 限制時,就不再添加新的交易,確保區塊不會因為交易數量過多而超出計算或存儲的限制。 +這裡提到的「gas」是 Ethereum 用來衡量計算工作量的單位,每個區塊都有一個最大 gas 限制(例如 3000 萬),以防止過多計算影響網絡穩定性。 +步驟 2:從交易池中取得並執行最佳交易 +- 使用 Pop() 方法從排序好的交易池中取出最有價值的交易。這裡的「最佳」交易通常是指那些支付較高手續費的交易,因為礦工(或驗證者)傾向於優先處理這些交易以獲取更多收益。 +交易通過 Ethereum 的虛擬機(VM)進行執行,執行結果會更新狀態資料庫,並將成功執行的交易記錄到區塊中。 +如果在執行過程中某筆交易被發現無效(例如簽名錯誤或執行失敗),系統會記錄錯誤,但仍會繼續處理後續交易,直到沒有足夠的 gas 或交易池被清空。 +步驟 3:使用 Finalize 函數組裝區塊 +- 最後,Finalize 函數會根據已執行的交易列表以及區塊相關的資訊(如區塊頭資料)生成一個完整且可驗證的區塊。這個區塊會被添加到區塊鏈上,成為區塊鏈歷史的一部分。 + + +狀態轉移函數 + +newPayload 函數: + +起點與檢查: 此函數是從共識層(CL)觸發的,代表一個新的區塊提案進入流程。執行層(EL)在這個階段會檢查區塊的完整性,例如確認區塊數據的正確性與一致性。 +流程延伸: 當初步檢查通過後,流程深入到 insertBlockWithoutSetHead,正式啟動區塊的鏈上添加操作。 +insertBlockWithoutSetHead 函數: + +執行與驗證: 這個函數負責將區塊中的交易執行,並對區塊內容進行各項驗證。驗證通過後,將區塊及其交易狀態寫入資料庫。 +區別與後續: 與 insertChain 函數不同,此處不會立即更新正則鏈狀態,而是需要後續額外的 SetCanonical 操作來最終確定區塊在正則鏈中的地位。這種分步驟的設計有助於更細緻地控制區塊的驗證與最終確認過程。 +insertChain 函數及其子流程: + +verifyHeaders: 在正式執行區塊之前,首先必須對區塊頭進行嚴格檢查。這包括: +EIP-1559 屬性: 確保區塊頭中的 gas 限制符合網絡規範。 +其他檢查項目: 如 gas 限制、實際使用的 gas、區塊生成時間等,確保整體數據正確無誤。 +驗證通過後,區塊才被認為是有效的,可進入下一步執行。 +Process 函數: +參數與執行環境: 該函數需要區塊數據、狀態資料庫以及虛擬機配置。這些參數共同確保區塊在執行過程中能夠正確地影響狀態。 +狀態轉移機制: Geth 使用 state_processor 來完成狀態轉移。這個過程將每筆交易依次執行,更新狀態資料庫,並計算出新的狀態。 +後續更新: 當所有交易都處理完畢後,系統會更新其他關鍵指標,最終把區塊的最終狀態寫入區塊鏈,確保區塊成為鏈上歷史的一部分。 + +### 2025.02.12 From d65941b25257ed6b01a87987b330f9c25af1e65d Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 11 Feb 2025 15:44:59 +0000 Subject: [PATCH 046/121] Update commit status table --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index f5e149e..8f98ed6 100644 --- a/README.md +++ b/README.md @@ -178,7 +178,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | JeasonZhang | ✅ | ⭕️ | ⭕️ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | LikKee | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | phoebe-dot | ✅ | ✅ | ✅ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | -| PubYuCHe | ✅ | ✅ | ⭕️ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | | +| PubYuCHe | ✅ | ✅ | ⭕️ | ⭕️ | ⭕️ | ✅ | | | | | | | | | | | | | | | | | | | | | evanwu | ✅ | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | lknxt1995 | ✅ | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | nooma42 | ✅ | ⭕️ | ⭕️ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | @@ -618,6 +618,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From aa53fa050b18a6cf7da82a51ee09077d4c2db7ad Mon Sep 17 00:00:00 2001 From: Tanner Date: Tue, 11 Feb 2025 23:32:44 +0800 Subject: [PATCH 047/121] Update tannerang.md 0211 --- tannerang.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tannerang.md b/tannerang.md index 7bd7ae5..97cb886 100644 --- a/tannerang.md +++ b/tannerang.md @@ -39,6 +39,9 @@ EIP-1559 - 新建立的合約地址會是 `address = keccak256(rlp.encode([sender_address, sender_nonce]))[12:]` - 新合約 Nonce 等於 1,Balance 等於 pre-existingValue + msg.value​​ `σ∗[newAccount]≡(Nonce=1,Balance=preexistingValue+Tvalue​​,Storage=TRIE(∅)​,CodeHash=KEC(())​))` +### 2025.02.11 + +把 Week2 影片看完,筆記明日補上 From 2a499289b1ff2545e915f6c9c8b0db3b821a1ef0 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 11 Feb 2025 15:46:24 +0000 Subject: [PATCH 048/121] Update commit status table --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 8f98ed6..f7cb1c8 100644 --- a/README.md +++ b/README.md @@ -171,7 +171,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | amandakelake | ✅ | ✅ | ✅ | ⭕️ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | ALiangNe | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | tienshaoku | ✅ | ✅ | ✅ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | -| tannerang | ✅ | ⭕️ | ✅ | ⭕️ | ✅ | | | | | | | | | | | | | | | | | | | | | +| tannerang | ✅ | ⭕️ | ✅ | ⭕️ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | dixia | ✅ | ✅ | ✅ | ⭕️ | ✅ | | | | | | | | | | | | | | | | | | | | | | dajuguan | ✅ | ✅ | ✅ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | | | timfaner | ✅ | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | @@ -619,6 +619,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From 35a7fc539d7f820f001de9675f3ef11cd4e68a1a Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 11 Feb 2025 15:47:03 +0000 Subject: [PATCH 049/121] Update commit status table --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index f7cb1c8..f27d16f 100644 --- a/README.md +++ b/README.md @@ -150,7 +150,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | 0xNezha | ✅ | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | Garyamour | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | huahuahua1223 | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | -| dethan3 | ✅ | ✅ | ✅ | ⭕️ | ✅ | | | | | | | | | | | | | | | | | | | | | +| dethan3 | ✅ | ✅ | ✅ | ⭕️ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | Azleal | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | jjeejj | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | buctor41 | ✅ | ✅ | ⭕️ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | | @@ -620,6 +620,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From 8c74447974303ef27cb0b8fcc5503934c98c163f Mon Sep 17 00:00:00 2001 From: realgu <36865815+ChengruiGu@users.noreply.github.com> Date: Tue, 11 Feb 2025 23:49:45 +0800 Subject: [PATCH 050/121] Update realgu.md --- realgu.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/realgu.md b/realgu.md index b13ca2f..c0fa4c4 100644 --- a/realgu.md +++ b/realgu.md @@ -30,4 +30,10 @@ timezone: Asia/Shanghai - why don't we just have a hash of all transactions concatenated? why do we run a lot more hashes by building a merkle tree? The Merkle tree is useful because it allows users to verify a specific transaction without downloading an entire blockchain—which can be hundreds of gigabytes in size. For example, say that you wanted to verify that transaction TD is included in the block in the diagram above. If you have the root hash (HABCDEFGH), you can query the network about HD. It might return HC, HAB, and HEFGH. The Merkle tree allows you to verify that everything is accounted for with three hashes: given HAB, HC, HEFGH, and the root HABCDEFGH, HD (the only missing hash) has to be present in the data. Additionally, the structure is helpful because the process is very fast. It seems as if hashing thousands of transactions would be time-consuming, but modern computers can do it in milliseconds. Because it is easy for computers to do, it makes sense to use the technique to verify large amounts of data, like the data contained in a blockchain. Merkle roots, trees, and block hashes are what create the unalterable chain of transactions and blocks. - merkle-patricia trie [checkthis](https://ethereum.org/en/developers/docs/data-structures-and-encoding/patricia-merkle-trie/) +### 2025.02.09 +- 1e = 1 billion gwei +- 一笔交易大概需要21000 gas unit,每个block 的 gas limit 目前大概 30m gas unit,base fee是 gwei / gas unit +- 晕了 EL Spec 很难读下去,暂时跳过吧 +- + From 7bc3f7bd429297d4802c27179a34091311f0de43 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 11 Feb 2025 15:50:00 +0000 Subject: [PATCH 051/121] Update commit status table --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index f27d16f..4d10cae 100644 --- a/README.md +++ b/README.md @@ -621,6 +621,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From 8c7418da2c1b34747874b8dfd48f655d474dedee Mon Sep 17 00:00:00 2001 From: realgu <36865815+ChengruiGu@users.noreply.github.com> Date: Tue, 11 Feb 2025 23:50:13 +0800 Subject: [PATCH 052/121] Update realgu.md --- realgu.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/realgu.md b/realgu.md index c0fa4c4..12e421a 100644 --- a/realgu.md +++ b/realgu.md @@ -30,7 +30,7 @@ timezone: Asia/Shanghai - why don't we just have a hash of all transactions concatenated? why do we run a lot more hashes by building a merkle tree? The Merkle tree is useful because it allows users to verify a specific transaction without downloading an entire blockchain—which can be hundreds of gigabytes in size. For example, say that you wanted to verify that transaction TD is included in the block in the diagram above. If you have the root hash (HABCDEFGH), you can query the network about HD. It might return HC, HAB, and HEFGH. The Merkle tree allows you to verify that everything is accounted for with three hashes: given HAB, HC, HEFGH, and the root HABCDEFGH, HD (the only missing hash) has to be present in the data. Additionally, the structure is helpful because the process is very fast. It seems as if hashing thousands of transactions would be time-consuming, but modern computers can do it in milliseconds. Because it is easy for computers to do, it makes sense to use the technique to verify large amounts of data, like the data contained in a blockchain. Merkle roots, trees, and block hashes are what create the unalterable chain of transactions and blocks. - merkle-patricia trie [checkthis](https://ethereum.org/en/developers/docs/data-structures-and-encoding/patricia-merkle-trie/) -### 2025.02.09 +### 2025.02.10 - 1e = 1 billion gwei - 一笔交易大概需要21000 gas unit,每个block 的 gas limit 目前大概 30m gas unit,base fee是 gwei / gas unit - 晕了 EL Spec 很难读下去,暂时跳过吧 From a61320ba281513415d0b2cece4a99d4adbad42dd Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 11 Feb 2025 15:50:32 +0000 Subject: [PATCH 053/121] Update commit status table --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 4d10cae..d16cccd 100644 --- a/README.md +++ b/README.md @@ -129,7 +129,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | k66 | ✅ | ✅ | ⭕️ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | | DVDguzhou | ✅ | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | armada2013 | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | -| realgu | ✅ | ✅ | ⭕️ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | +| realgu | ✅ | ✅ | ⭕️ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | | Eizz0 | ✅ | ✅ | ✅ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | | | kernel1983 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | JC13043DB | ✅ | ⭕️ | ⭕️ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | @@ -622,6 +622,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From 75cba6bd7d668190ae45b072e4ab64492fa6f0e3 Mon Sep 17 00:00:00 2001 From: "k66 (Lana Chen)" Date: Tue, 11 Feb 2025 23:51:43 +0800 Subject: [PATCH 054/121] Update k66.md --- k66.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/k66.md b/k66.md index efd1309..139ebc3 100644 --- a/k66.md +++ b/k66.md @@ -120,4 +120,25 @@ Week3 + Satoshi solves Byzantine General's Problem + POW and heaviest chain algorithm mean any node 最終會converge to same current state as any other +### 2025.02.11 + +總費時: 約30分鐘 + +Week3 ++ 承續前一日,week3影片,但我不太懂,想說之後回頭再看一遍。 + +Week4 ++ 講安全及測試 ++ EVM testing: EEST(Ethereum/Execution Spec Test) + - test Filling: 皆為json files + - Pre-State 停在此 + - Environment + - Transaction(s) + - Post-State + +以下為明天: ++ 共識層的測試: ethereum/consensus-specs ++ Cross-Layer(Interop) Testing: `Hive`, `Devnet`, `Shadow-Forks`, `Testnets` ++ 安全: 淺在的issues, bugs + From a53ddebd471f95b6a9a4ef47bce090af06cdc109 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 11 Feb 2025 15:52:00 +0000 Subject: [PATCH 055/121] Update commit status table --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d16cccd..2af36ba 100644 --- a/README.md +++ b/README.md @@ -126,7 +126,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | debugzhao | ✅ | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | StarryDeserts | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | KieSun | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | -| k66 | ✅ | ✅ | ⭕️ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | +| k66 | ✅ | ✅ | ⭕️ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | DVDguzhou | ✅ | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | armada2013 | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | realgu | ✅ | ✅ | ⭕️ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | @@ -623,6 +623,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From abdbf84231bf5df07f63bbf712a01b226a6d550b Mon Sep 17 00:00:00 2001 From: Patrick <65023578+ppatrick007@users.noreply.github.com> Date: Tue, 11 Feb 2025 23:54:01 +0800 Subject: [PATCH 056/121] Update ppatrick007.md --- ppatrick007.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/ppatrick007.md b/ppatrick007.md index 247b9d7..9e4d31c 100644 --- a/ppatrick007.md +++ b/ppatrick007.md @@ -188,4 +188,19 @@ Hi, 我是国内一名理科研究生,会一些编程语言,平时科研主 - **深度加密(Deep Cryptography)**:研究更高效的加密方法,以提高隐私性和安全性。 +### 2025.02.11 + +### 主题:共识层与执行层规范(Consensus and Execution Spec) + +#### 主要内容 +今天学习的重点是深入了解 **共识层(Consensus Layer)** 和 **执行层(Execution Layer)** 的规范。 + +#### 共识层规范(Consensus Specs) +- **Hsiao-Wei Wang 的讲座**:介绍了以太坊 **共识规范(Consensus Spec)**,包括其架构、工作原理以及如何在不同的客户端实现。 +- **Pyspec**:通过 Python 编写的以太坊共识规范实现,适用于验证共识规则。ß + +#### 执行层规范(Execution Layer Specs) +- **Sam Wilson 的讲座**:讨论了 **执行层规范(EELS)**,重点是执行引擎与智能合约执行过程的规范定义。 +- 通过演示,Sam 展示了如何通过修改执行层规范来添加新的 **EVM 操作码(Opcode)**。 + From 9247b21ea3068c457f8c8d7aaea81d7bada2a2d8 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 11 Feb 2025 15:54:18 +0000 Subject: [PATCH 057/121] Update commit status table --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 2af36ba..66eff70 100644 --- a/README.md +++ b/README.md @@ -161,7 +161,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | lanpan999 | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | liuxulife | ✅ | ✅ | ✅ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | | CHENFANGC | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | -| ppatrick007 | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | +| ppatrick007 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | zt2 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | yiwen4 | ✅ | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | affe | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | @@ -624,6 +624,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From c28ce1abfe6b16c4b7613b7194fbf5d4a569bb5f Mon Sep 17 00:00:00 2001 From: tienshaoku Date: Tue, 11 Feb 2025 23:59:15 +0800 Subject: [PATCH 058/121] feb 11th --- tienshaoku.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tienshaoku.md b/tienshaoku.md index bbd1e60..085e0c9 100644 --- a/tienshaoku.md +++ b/tienshaoku.md @@ -99,6 +99,8 @@ user ---(User API)>>> execution engine ---(Engine API)>>> beacon node ---(Beacon ### 2025.02.09 +### 2025.02.10 + #### Execution Layer Spec - The Execution Layer focuses exclusively on executing the state transition function (STF). This role addresses two primary questions: From c4fd93dfc4e76fd24a619e285c4f83713d6b6664 Mon Sep 17 00:00:00 2001 From: devbards <151926970+devbards@users.noreply.github.com> Date: Tue, 11 Feb 2025 23:59:50 +0800 Subject: [PATCH 059/121] Update devbards.md --- devbards.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/devbards.md b/devbards.md index 0deeaf3..67973a8 100644 --- a/devbards.md +++ b/devbards.md @@ -46,6 +46,13 @@ Week 5's content is much more complex than I expected. It seems like I need to f I realized that my fundamental knowledge of cryptocurrencies is too limited, and jumping straight into BFT feels like taking on a boss fight way beyond my level—everything just seems vague and confusing. So, I’ve decided to borrow some introductory books on cryptocurrencies to build a stronger foundation. Additionally, I noticed that writing notes in English might not be as helpful for the Chinese-speaking community. Therefore, once I have a more complete understanding, the recording style would change somehow. ### 2025.02.11 +From the reading on the history of cryptocurrencies, blockchain techniques, and consensus mechanisms: + +Bitcoin uses a reward mechanism to incentivize miners to become nodes in its P2P network. However, this raises the question—once the total supply of Bitcoin reaches its limit and no more Bitcoin can be "mined," how will the network continue to operate? The alternative mechanism I found is that transaction fees will sustain network operations, which in turn creates the necessity for higher fees. This has led to the development of off-chain solutions like the Lightning Network. + +Ethereum, on the other hand, is gradually replacing PoW with a PoS mechanism, where participants stake ETH to take part in consensus and earn rewards. To enhance security, the slashing mechanism punishes malicious actors. Unlike Bitcoin, Ethereum does not have a fixed supply limit, but by implementing Base Fee burning, it introduces a deflationary aspect to ETH. + +Understanding these concepts gives me a deeper appreciation of the motivations behind founding this study group—it’s truly fascinating! ### 2025.02.12 From 870c0f6027b63d0c2a1cda6f9097717e11e8eefe Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 11 Feb 2025 16:00:03 +0000 Subject: [PATCH 060/121] Update commit status table --- README.md | 103 +++++++++++++++++++++++++++--------------------------- 1 file changed, 52 insertions(+), 51 deletions(-) diff --git a/README.md b/README.md index 66eff70..7f0a62f 100644 --- a/README.md +++ b/README.md @@ -102,91 +102,91 @@ Telegram:https://t.me/ETHPandaOrg/5427 | Name | 2.06 | 2.07 | 2.08 | 2.09 | 2.10 | 2.11 | 2.12 | 2.13 | 2.14 | 2.15 | 2.16 | 2.17 | 2.18 | 2.19 | 2.20 | 2.21 | 2.22 | 2.23 | 2.24 | 2.25 | 2.26 | 2.27 | 2.28 | 3.01 | 3.02 | | ------------- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | | brucexu-eth | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | -| PayFv | ⭕️ | ✅ | ✅ | ⭕️ | ✅ | | | | | | | | | | | | | | | | | | | | | +| PayFv | ⭕️ | ✅ | ✅ | ⭕️ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | chloezhu010 | ✅ | ✅ | ⭕️ | ⭕️ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | coratann | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | -| luffythink | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | -| Henry | ✅ | ✅ | ✅ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | -| d0d0d9 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | -| henryleo | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | -| zhouCode | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | -| mrmign | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | -| ghx1104 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | -| Coooder-Crypto | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | -| rayjun | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | +| luffythink | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | +| Henry | ✅ | ✅ | ✅ | ✅ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | +| d0d0d9 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | +| henryleo | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | +| zhouCode | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | +| mrmign | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | +| ghx1104 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | +| Coooder-Crypto | ✅ | ✅ | ✅ | ✅ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | +| rayjun | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | CJC824 | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | William-02-02 | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | -| hotoo | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | +| hotoo | ✅ | ✅ | ✅ | ✅ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | JoscelynFarr | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | -| cherry-yl-sh | ✅ | ⭕️ | ⭕️ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | -| HeliosLz | ⭕️ | ⭕️ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | +| cherry-yl-sh | ✅ | ⭕️ | ⭕️ | ✅ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | +| HeliosLz | ⭕️ | ⭕️ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | lllapland | ✅ | ✅ | ⭕️ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | | passer-byzhang | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | -| StillFantastic | ⭕️ | ✅ | ⭕️ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | +| StillFantastic | ⭕️ | ✅ | ⭕️ | ✅ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | | debugzhao | ✅ | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | -| StarryDeserts | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | -| KieSun | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | -| k66 | ✅ | ✅ | ⭕️ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | +| StarryDeserts | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | +| KieSun | ✅ | ✅ | ✅ | ✅ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | +| k66 | ✅ | ✅ | ⭕️ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | DVDguzhou | ✅ | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | armada2013 | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | -| realgu | ✅ | ✅ | ⭕️ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | +| realgu | ✅ | ✅ | ⭕️ | ✅ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | Eizz0 | ✅ | ✅ | ✅ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | | | kernel1983 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | -| JC13043DB | ✅ | ⭕️ | ⭕️ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | +| JC13043DB | ✅ | ⭕️ | ⭕️ | ✅ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | GuoyangLiu24 | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | -| cooper | ⭕️ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | +| cooper | ⭕️ | ✅ | ✅ | ✅ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | chyyynh | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | -| frankmint2024 | ✅ | ⭕️ | ✅ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | | -| Amberrrrrr | ✅ | ✅ | ⭕️ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | | -| yahsinhuangtw | ✅ | ✅ | ✅ | ⭕️ | ✅ | | | | | | | | | | | | | | | | | | | | | +| frankmint2024 | ✅ | ⭕️ | ✅ | ⭕️ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | +| Amberrrrrr | ✅ | ✅ | ⭕️ | ⭕️ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | +| yahsinhuangtw | ✅ | ✅ | ✅ | ⭕️ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | 0xKarl98 | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | -| marvelshan | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | +| marvelshan | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | rogers3333 | ✅ | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | deporter | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | -| LouisTsai-Csie | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | -| kidneyweakx | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | +| LouisTsai-Csie | ✅ | ✅ | ✅ | ✅ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | +| kidneyweakx | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | keroro520 | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | -| huangyan0914 | ✅ | ✅ | ✅ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | +| huangyan0914 | ✅ | ✅ | ✅ | ✅ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | | 0xNezha | ✅ | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | Garyamour | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | huahuahua1223 | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | -| dethan3 | ✅ | ✅ | ✅ | ⭕️ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | +| dethan3 | ✅ | ✅ | ✅ | ⭕️ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | Azleal | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | -| jjeejj | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | -| buctor41 | ✅ | ✅ | ⭕️ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | | -| zhwindy | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | -| rectinajh | ✅ | ✅ | ✅ | ⭕️ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | +| jjeejj | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | +| buctor41 | ✅ | ✅ | ⭕️ | ⭕️ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | +| zhwindy | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | +| rectinajh | ✅ | ✅ | ✅ | ⭕️ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | letsgoexplore | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | -| Lvista | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | +| Lvista | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | lanpan999 | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | -| liuxulife | ✅ | ✅ | ✅ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | -| CHENFANGC | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | -| ppatrick007 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | -| zt2 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | +| liuxulife | ✅ | ✅ | ✅ | ✅ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | +| CHENFANGC | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | +| ppatrick007 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | +| zt2 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | yiwen4 | ✅ | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | affe | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | -| dundun930326 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | +| dundun930326 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | Echocipher | ✅ | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | -| poyucheese | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | -| amandakelake | ✅ | ✅ | ✅ | ⭕️ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | +| poyucheese | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | +| amandakelake | ✅ | ✅ | ✅ | ⭕️ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | ALiangNe | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | -| tienshaoku | ✅ | ✅ | ✅ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | -| tannerang | ✅ | ⭕️ | ✅ | ⭕️ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | +| tienshaoku | ✅ | ✅ | ✅ | ⭕️ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | +| tannerang | ✅ | ⭕️ | ✅ | ⭕️ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | dixia | ✅ | ✅ | ✅ | ⭕️ | ✅ | | | | | | | | | | | | | | | | | | | | | -| dajuguan | ✅ | ✅ | ✅ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | | +| dajuguan | ✅ | ✅ | ✅ | ⭕️ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | | timfaner | ✅ | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | -| JeasonZhang | ✅ | ⭕️ | ⭕️ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | +| JeasonZhang | ✅ | ⭕️ | ⭕️ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | LikKee | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | -| phoebe-dot | ✅ | ✅ | ✅ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | -| PubYuCHe | ✅ | ✅ | ⭕️ | ⭕️ | ⭕️ | ✅ | | | | | | | | | | | | | | | | | | | | +| phoebe-dot | ✅ | ✅ | ✅ | ✅ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | +| PubYuCHe | ✅ | ✅ | ⭕️ | ⭕️ | ⭕️ | ✅ | | | | | | | | | | | | | | | | | | | | | evanwu | ✅ | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | lknxt1995 | ✅ | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | -| nooma42 | ✅ | ⭕️ | ⭕️ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | +| nooma42 | ✅ | ⭕️ | ⭕️ | ✅ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | | eddy8 | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | -| yenchihliao | ⭕️ | ⭕️ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | -| DasNarrenschiff | ✅ | ⭕️ | ⭕️ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | -| awsomecty | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | -| devbards | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | +| yenchihliao | ⭕️ | ⭕️ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | +| DasNarrenschiff | ✅ | ⭕️ | ⭕️ | ✅ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | +| awsomecty | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | +| devbards | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | StellaWang5209 | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | pillowtalk-Qy | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | yoona333 | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | @@ -625,6 +625,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From cad018a70963e465863b09fc063e8d06b4d781e6 Mon Sep 17 00:00:00 2001 From: d1xia <667070+dixia@users.noreply.github.com> Date: Tue, 11 Feb 2025 23:28:19 +0700 Subject: [PATCH 061/121] 11 Feb 2025 11 Feb 2025 --- dixia.md | 42 ++++++++++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/dixia.md b/dixia.md index 580fa86..8697fb5 100644 --- a/dixia.md +++ b/dixia.md @@ -24,10 +24,10 @@ Node and EL. But is this a physical scope separation? Need to learn more. EOA controlled by key pair. Contract controlled by code. -Every smart contract's persistent storage is just an array of 32bytes. the root is a MPT hash. Does balance take up space of storage? +Every smart contract's persistent storage is just an array of 32 bytes. The root is a MPT hash. Does balance take up space of storage? Nope -Message are just tx from contract without signature. but then how does other contracts know the message is from the initial contract? -And how does EVM or consensus verify the message(virt tx)? +Messages are just tx from contract without signature but then how do other contracts know the message is from the initial contract? +And how does EVM verify the message (virtual tx)? https://cs251.stanford.edu/lectures/lecture7.pdf [0] @@ -37,32 +37,32 @@ Block Data Structure: world state root has MPT hash of all accounts on Ethereum. It takes 16tb to run an archive node rn. -EVM still use stack (max: 1024) to execute code but with JUMP instruction code. +EVM still uses stack (max: 1024) to execute code but with JUMP instruction code. -Burn ether preventing off-chain fee refund agreement to proposers that I did not thought before. A proposer could create/encourage fake txs to farm more ether reward if eth not burn and refund gas fee off-chain. The fee they paid would be less than eth reward to block proposer which it is the case given there are eth inflation for block proposers. But why would proposer are incentivized to do this? they could just collect reward from block building with the trouble of creating fake txs unless the block reward is proportional to the txs they included? +Burn ether preventing off-chain fee refund agreement to proposers (I did not think before). A proposer could create/encourage fake txs to farm more ether reward if eth not burned and refund gas fee off-chain. The fee they paid would be less than eth reward to block proposer which is the case given there is ether inflation for block proposers. But why would proposers be incentivized to do this? They could just collect reward from block building without the trouble of creating fake txs unless the block reward is proportional to the txs they included? -In bitcoin's world, miner has fixed cost for mining the block but they do get fee reward as well. So this could apply to Bitcoin as well +In bitcoin's world, miners have fixed cost for mining the block but they do get fee reward as well. So this could apply to Bitcoin as well. ### 2025.02.08 -#### Why would proposer engage into off-chain fee refund agreement +#### Why would proposers engage in off-chain fee refund agreement -It is not due to the block reward as it is not proportional to the txs they included. But for the following reason: +It is not due to the block reward as it is not proportional to the txs they included. But for the following reasons: -1. Proposer could fake up transactions to create a impression/illusion of higher activity on the chain. Given if they could get the gas fee back the cost of artificially creating txs is very low (transaction fee + effort to inflate txs). But that would require you control majority of the validator nodes or can reliably predict the next block proposer. The former could be the case actually right now? given there are 2-3 block builder building most of the blocks.(builder == proposer?) +1. Proposers could fake transactions to create an impression/illusion of higher activity on the chain. Given if they could get the gas fee back, the cost of artificially creating txs is very low (transaction fee + effort to inflate txs). But that would require you control majority of the validator nodes or can reliably predict the next block proposer. The former could be the case actually right now? Given there are 2-3 block builders building most of the blocks (builder == proposer?) -2. To bid up the gas fee so other users have to pay more to get their txs included. This could require the same condition as above. As you intentionally pay a higher gas fee but can recover most of it back. It would be in the interest of proposer to do so. This would apply to Bitcoin as well. If majority of mining pool has an agreement. Could very well be the case for other chains. +2. To bid up the gas fee so other users have to pay more to get their txs included. This could require the same condition as above. As you intentionally pay a higher gas fee but can recover most of it back. It would be in the interest of proposers to do so. This would apply to Bitcoin as well. If majority of mining pools have an agreement. Could very well be the case for other chains. #### -gas fee right felt like a spam preventing mechanism rather than a fee market which pricing different resources. +Gas fee before EIP-1559 feels like a spam preventing mechanism rather than a fee market which prices different resources. -encrypted mempool: total gas case has to be unencrypted. Cosmos has encrypted mempool. general idea is no complete solution available yet +Encrypted mempool: total gas case has to be unencrypted. Cosmos has encrypted mempool. General idea no one have seen a complete solution available yet. ### 2025.02.10 -A epoch has 32 slots. +An epoch has 32 slots. -A validator will be randomly selected to be a proposer for a slot. so the validator is the proposer. +A validator will be randomly selected to be a proposer for a slot. So the validator is the proposer. 1 slot has 3 phases and a block: @@ -83,13 +83,23 @@ why have a slot instead of a block? proposer can reorder txs in a slot. so I guess other validators has no way to verify the order of txs in a block when they attest to it. I guess this is why validators only follow the fork-choice rule -given the deadline for attesetion is 4 seconds, so that give you some idea on how much MEV it can take place on the time dimension. +given the deadline for attesetion is 4 seconds, so that give you some idea on how much bot could MEV using the time advantage. #### spam txs -actually once is a validator is chosen to be a proposer, it can know therefore it can start to spam txs. +actually once is a validator is chosen to be a proposer, it can know therefore it could time the opportunity to spam txs. https://www.paradigm.xyz/2023/04/mev-boost-ethereum-consensus https://epf.wiki/#/eps/week3 + +### 2025.02.11 + +a commmitte is of 128 validators. +a validator run a beacon node + +still not sure why a committe concept is needed after watch all these video + +PoW consensus use economic (hash power) to reach consensus which looks a lot simpler. through it does give entity who has most computing power an advantage so it is more close to "real" economy where pow could at certain time depeg from real economy power as long as stakeholder/token holder does not need to have a real economy power in the real world. (eth will have price but it is less impact by commodity price such as electricity + ) it is easier to develop as inherent economy on its own compare to Bitcoin i.e. if someone is very good at investing/trading, he or she could acquire ether at lower price. But you could alway need to pay for a market price for electricity. This reset the game each time but does make bitcoin's opeartion more close to "real world" From 2e125516e8e00a052b9efce0a1ff5876a2281724 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 11 Feb 2025 16:28:40 +0000 Subject: [PATCH 062/121] Update commit status table --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 7f0a62f..a500b7a 100644 --- a/README.md +++ b/README.md @@ -626,6 +626,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From f89fe016c1d3f5793475e34dbf43a02647e3056f Mon Sep 17 00:00:00 2001 From: d1xia <667070+dixia@users.noreply.github.com> Date: Tue, 11 Feb 2025 23:35:58 +0700 Subject: [PATCH 063/121] rewrite 11 Feb 2025 rewrite note --- dixia.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dixia.md b/dixia.md index 8697fb5..160bd31 100644 --- a/dixia.md +++ b/dixia.md @@ -101,5 +101,5 @@ a validator run a beacon node still not sure why a committe concept is needed after watch all these video -PoW consensus use economic (hash power) to reach consensus which looks a lot simpler. through it does give entity who has most computing power an advantage so it is more close to "real" economy where pow could at certain time depeg from real economy power as long as stakeholder/token holder does not need to have a real economy power in the real world. (eth will have price but it is less impact by commodity price such as electricity - ) it is easier to develop as inherent economy on its own compare to Bitcoin i.e. if someone is very good at investing/trading, he or she could acquire ether at lower price. But you could alway need to pay for a market price for electricity. This reset the game each time but does make bitcoin's opeartion more close to "real world" +PoW consensus use economic (hash power) to reach consensus which looks a lot simpler. Through it does give entity who has most computing power an advantage so it is more close to "real" economy where PoS could at certain time depeg from real economy power. As long as stakeholder/token holder has a little real world economy power(pay for server and bandwdith). (eth will have price but it is less impact by commodity price such as electricity + ) it is easier to develop as independent set of stakerholders on its own economy compare to Bitcoin i.e. if someone is very good at investing/trading, he or she could acquire ether at lower price. But you alway need to pay for a market price for electricity. PoW resets the game each time but does make bitcoin's opeartion more close to "real world" From 606cf14f74ff5516995f20e7b41199ab42166455 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 11 Feb 2025 16:36:19 +0000 Subject: [PATCH 064/121] Update commit status table --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index a500b7a..75ce564 100644 --- a/README.md +++ b/README.md @@ -627,6 +627,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From 917e8ec05b6e332b1eca35b72cfab6d25eb2ee83 Mon Sep 17 00:00:00 2001 From: dundun930326 <69745663+dundun930326@users.noreply.github.com> Date: Wed, 12 Feb 2025 01:36:41 +0800 Subject: [PATCH 065/121] Update dundun930326.md --- dundun930326.md | 99 +++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 79 insertions(+), 20 deletions(-) diff --git a/dundun930326.md b/dundun930326.md index 9e723ba..70b39d3 100644 --- a/dundun930326.md +++ b/dundun930326.md @@ -134,57 +134,116 @@ TODO : responsibility、p2p、snap **區塊結構** - 每個區塊作為區塊鏈中的基本單位,包含區塊頭、交易列表以及其他相關元數據。 -- **區塊頭:** 記錄了父區塊的哈希值、時間戳、難度指標、狀態樹根、交易樹根等關鍵參數。這些資訊不僅保證了區塊內容的不可篡改性,也成為驗證區塊合法性的依據。citeturn0fetch0 +- **區塊頭:** 記錄了父區塊的哈希值、時間戳、難度指標、狀態樹根、交易樹根等關鍵參數。這些資訊不僅保證了區塊內容的不可篡改性,也成為驗證區塊合法性的依據。 **區塊處理流程** -- **交易收集與排序:** 節點從網絡中收集各筆交易,並根據一定的排序規則(例如手續費優先等)進行整理,形成待打包的交易池。citeturn0fetch0 -- **區塊生成:** 節點根據共識規則,選取合適的交易打包成區塊,同時計算與該區塊相關的狀態轉換。citeturn0fetch0 -- **區塊驗證:** 新生成的區塊會經過嚴格的驗證程序,包括檢查區塊頭資訊、每筆交易的合法性以及狀態轉換的正確性。citeturn0fetch0 -- **鏈接與確認:** 驗證通過後,新區塊被其他節點認可並與之前的區塊鏈進行鏈接,從而形成完整且連續的區塊鏈。citeturn0fetch0 +- **交易收集與排序:** 節點從網絡中收集各筆交易,並根據一定的排序規則(例如手續費優先等)進行整理,形成待打包的交易池。 +- **區塊生成:** 節點根據共識規則,選取合適的交易打包成區塊,同時計算與該區塊相關的狀態轉換。 +- **區塊驗證:** 新生成的區塊會經過嚴格的驗證程序,包括檢查區塊頭資訊、每筆交易的合法性以及狀態轉換的正確性。 +- **鏈接與確認:** 驗證通過後,新區塊被其他節點認可並與之前的區塊鏈進行鏈接,從而形成完整且連續的區塊鏈。 --- ## 2. 狀態轉換函數 **概念說明** -- 狀態轉換函數定義了從當前區塊狀態到下一個區塊狀態的轉變規則。每筆交易在執行時,都會根據該函數更新賬戶狀態、智能合約存儲以及其他鏈上數據。citeturn0fetch0 +- 狀態轉換函數定義了從當前區塊狀態到下一個區塊狀態的轉變規則。每筆交易在執行時,都會根據該函數更新賬戶狀態、智能合約存儲以及其他鏈上數據。 **細節內容** -- **交易執行:** 每筆交易可能涉及調用智能合約、轉賬或合約部署等操作,其執行結果將改變系統內部狀態。citeturn0fetch0 -- **錯誤處理:** 當交易執行過程中遇到錯誤(如資金不足或非法操作)時,系統會根據預設規則進行回滾或標記錯誤,確保不會影響其他交易的正確執行。citeturn0fetch0 -- **數據一致性:** 嚴格定義的狀態轉換邏輯確保所有節點在處理相同交易時,能夠得出一致的狀態更新結果,從而維持整個網絡的一致性。citeturn0fetch0 +- **交易執行:** 每筆交易可能涉及調用智能合約、轉賬或合約部署等操作,其執行結果將改變系統內部狀態。 +- **錯誤處理:** 當交易執行過程中遇到錯誤(如資金不足或非法操作)時,系統會根據預設規則進行回滾或標記錯誤,確保不會影響其他交易的正確執行。 +- **數據一致性:** 嚴格定義的狀態轉換邏輯確保所有節點在處理相同交易時,能夠得出一致的狀態更新結果,從而維持整個網絡的一致性。 --- ## 3. Ethereum 虛擬機(EVM)運作機制 **EVM 基本架構** -- **指令集與計算模型:** Ethereum 虛擬機(EVM)是一個基於堆疊運算的虛擬機,內置完整的指令集,用以執行智能合約的邏輯。citeturn0fetch0 -- **Gas 機制:** 為防止無限循環和濫用資源,EVM 在執行每條指令時都需消耗一定的 gas,且由交易發起者提前支付。這不僅保護了網絡資源,同時也激勵開發者優化合約代碼。citeturn0fetch0 +- **指令集與計算模型:** Ethereum 虛擬機(EVM)是一個基於堆疊運算的虛擬機,內置完整的指令集,用以執行智能合約的邏輯。 +- **Gas 機制:** 為防止無限循環和濫用資源,EVM 在執行每條指令時都需消耗一定的 gas,且由交易發起者提前支付。這不僅保護了網絡資源,同時也激勵開發者優化合約代碼。 **執行流程** -- **智能合約執行:** 當合約被調用時,EVM 根據合約代碼逐條執行指令,同時根據設定的 gas 限制進行資源控制。citeturn0fetch0 -- **存儲與運算:** 在合約執行過程中,EVM 負責讀取、寫入及計算相關數據,並維護一個內部存儲空間來管理合約狀態。citeturn0fetch0 -- **結果與回執:** 執行結束後,EVM 生成交易回執,其中記錄了執行結果、剩餘 gas 以及在執行過程中產生的事件或錯誤信息。citeturn0fetch0 +- **智能合約執行:** 當合約被調用時,EVM 根據合約代碼逐條執行指令,同時根據設定的 gas 限制進行資源控制。 +- **存儲與運算:** 在合約執行過程中,EVM 負責讀取、寫入及計算相關數據,並維護一個內部存儲空間來管理合約狀態。 +- **結果與回執:** 執行結束後,EVM 生成交易回執,其中記錄了執行結果、剩餘 gas 以及在執行過程中產生的事件或錯誤信息。 --- ## 4. 交易驗證與處理流程 **交易結構** -- 每筆交易包含發起方、接收方、轉賬金額、gas 限制與價格以及數據負載(通常用於智能合約的調用)等信息。citeturn0fetch0 -- 交易中必須包含數字簽名,以證明發起者的身份和交易的合法性。citeturn0fetch0 +- 每筆交易包含發起方、接收方、轉賬金額、gas 限制與價格以及數據負載(通常用於智能合約的調用)等信息。 +- 交易中必須包含數字簽名,以證明發起者的身份和交易的合法性。 **驗證步驟** -- **格式檢查:** 首先檢查交易數據結構是否符合規範要求。citeturn0fetch0 -- **簽名驗證:** 通過公鑰密碼學方法驗證數字簽名,確保交易來自合法的發起者。citeturn0fetch0 -- **Gas 檢查:** 驗證交易所設定的 gas 限制是否合理,並確認發起者賬戶中有足夠餘額支付所需費用,以防濫用網絡資源。citeturn0fetch0 -- **狀態轉換檢查:** 在執行交易前後,對比系統狀態變化是否符合預期,從而防止任何非法或不當的狀態更新。citeturn0fetch0 +- **格式檢查:** 首先檢查交易數據結構是否符合規範要求。 +- **簽名驗證:** 通過公鑰密碼學方法驗證數字簽名,確保交易來自合法的發起者。 +- **Gas 檢查:** 驗證交易所設定的 gas 限制是否合理,並確認發起者賬戶中有足夠餘額支付所需費用,以防濫用網絡資源。 +- **狀態轉換檢查:** 在執行交易前後,對比系統狀態變化是否符合預期,從而防止任何非法或不當的狀態更新。 --- +### 2025.02.12 +### RPC 遠端程序呼叫 +在以太坊及其他區塊鏈中,RPC(Remote Procedure Call,遠端程序呼叫)是一種協定,允許應用程式與區塊鏈節點進行互動。透過RPC,開發者可以查詢區塊鏈資料、發送交易,以及與智能合約互動。 +以太坊實現了JSON-RPC規範,這是一種無狀態、輕量級的遠端程序呼叫協定,使用JSON作為資料格式。以太坊客戶端通常支援多種傳輸協定,包括HTTP、WebSocket和IPC,這使得開發者能夠以多種方式與以太坊網路互動。 +在區塊鏈生態系統中,RPC是去中心化應用程式(DApps)與區塊鏈網路溝通的關鍵橋樑。開發者可以使用RPC介面查詢區塊資訊、發送交易請求,或與智能合約進行互動。例如,當使用者在DApp中發起交易時,應用程式會透過RPC將交易資訊傳送至區塊鏈節點,節點再將交易廣播至整個網路。 + +總而言之,RPC在以太坊和其他區塊鏈中扮演著關鍵角色,提供了應用程式與區塊鏈網路之間的溝通管道,支持各種區塊鏈操作的實現。 + +### responsibility、p2p、snap +--- + +### 1. Responsibility(責任/職責分工) + +在以太坊架構中,「responsibility」主要描述各系統組件或層級在協議中各自承擔的明確角色與任務。例如: + +- **層級職責分離** + 自從以太坊完成合併(The Merge)之後,整個系統被劃分為兩大層級: + - **執行層(Execution Layer)**:負責處理交易、執行智能合約以及維護帳戶狀態。 + - **共識層(Consensus Layer)**:負責區塊排序、驗證以及確保全網達成共識。 + 這種分工確保各層均有其明確「責任」,有助於系統模組化、易於維護和未來獨立升級。 + +- **節點責任** + 每個以太坊節點在網路中均承擔著驗證交易與區塊、維護最新網路狀態以及通過 P2P 網絡傳播數據的責任,從而確保網絡的安全性與去中心化運作。 + +總體而言,「responsibility」體現了以太坊中「各司其職」的設計理念,是確保系統穩定運作與安全的重要基石。 + +--- + +### 2. P2P(點對點網絡) + +「P2P」是「peer-to-peer」的縮寫,代表以太坊中節點間進行直接通信的去中心化網路架構,主要特點包括: + +- **無中心化伺服器** + 以太坊網絡中的節點直接互相連接,無需依賴單一中心伺服器。透過分散式網絡協議(如 devp2p),各節點可以互相傳送交易、區塊及狀態資訊,這增強了網絡的抗審查能力與容錯性。 + +- **節點發現與數據傳輸** + 節點能自動發現其他節點並建立安全加密的通信鏈路,確保數據(例如交易與區塊資訊)能夠迅速且可靠地在整個網絡中廣播與傳播。 + +- **網絡健壯性** + 去中心化的 P2P 結構能有效防止單點故障和集中式攻擊,即使部分節點下線,整個網絡依然可以穩定運作並維持共識。 + +--- + +### 3. Snap(快照同步機制) + +在以太坊中,「snap」通常指的是**snap sync**(快照同步)機制,這是一種用來加速新節點同步的技術手段: + +- **狀態快照機制** + 由於以太坊的歷史數據量龐大,若從創世區塊開始逐筆重放交易來構建最新狀態,所需時間和資源極高。snap sync 機制允許新節點直接從其他已同步的節點下載一份包含當前狀態(如帳戶餘額、智能合約存儲等)的快照,從而跳過重放所有歷史交易的步驟。 + +- **快速驗證與更新** + 節點下載快照後,會進行必要的驗證以確保資料正確無誤。隨後,新節點只需處理快照之後的新區塊,迅速趕上最新狀態,從而大幅縮短同步時間。 + +- **提升網絡擴展性** + snap sync 使得新節點能夠更快接入網絡,降低了同步過程中的計算與存儲負擔,這對於應對網絡規模不斷增長具有重要意義。 + +總結來看,「snap」在以太坊中代表利用狀態快照進行快速同步的一種高效機制,使新節點無需從頭重放全部歷史交易即可快速獲得最新狀態,從而促進了網絡的高效擴展與穩定運作。 + +--- From 638ea29dd2b857d8be946b45a3f5cff61c15ee99 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 11 Feb 2025 17:36:59 +0000 Subject: [PATCH 066/121] Update commit status table --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 75ce564..93ff9d7 100644 --- a/README.md +++ b/README.md @@ -165,14 +165,14 @@ Telegram:https://t.me/ETHPandaOrg/5427 | zt2 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | yiwen4 | ✅ | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | affe | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | -| dundun930326 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | +| dundun930326 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | Echocipher | ✅ | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | poyucheese | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | amandakelake | ✅ | ✅ | ✅ | ⭕️ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | ALiangNe | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | tienshaoku | ✅ | ✅ | ✅ | ⭕️ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | tannerang | ✅ | ⭕️ | ✅ | ⭕️ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | -| dixia | ✅ | ✅ | ✅ | ⭕️ | ✅ | | | | | | | | | | | | | | | | | | | | | +| dixia | ✅ | ✅ | ✅ | ⭕️ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | dajuguan | ✅ | ✅ | ✅ | ⭕️ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | | timfaner | ✅ | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | JeasonZhang | ✅ | ⭕️ | ⭕️ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | @@ -628,6 +628,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From 3850da75082549c19291c5b47d5a3fe9c16fb263 Mon Sep 17 00:00:00 2001 From: KJ Date: Tue, 11 Feb 2025 13:19:40 -0500 Subject: [PATCH 067/121] Update kernel1983.md --- kernel1983.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/kernel1983.md b/kernel1983.md index cd991a3..52b8413 100644 --- a/kernel1983.md +++ b/kernel1983.md @@ -112,4 +112,18 @@ N年前研究 POW 的同时,我也瞎写过 POS https://github.com/kernel1983/ 摸鱼为主。 +### 2025.02.12 + +今天随机阅读了其它同学的学习笔记,一些提到 Verkle 树能解决状态爆炸问题。应该有一些计算机基础的人,都会否定这个想法。 + +首先,有一些语言上的艺术,在误导大家学习:压缩是什么?一般无损压缩需要能够解压还原。如果我有1G数据,我通过一些方法可以验证数据,比如默克尔树,那么我生成的是证明,默克尔根并没有起到压缩的作用,因为它无法解压成原始数据。所以说 Verkle 树能把不断增加的全局状态压缩到一个很小的数据,仅仅用于验证。 + +EVM 在执行中必须访问全局状态,如果是默克尔根或者 Verkle 树,则根本无法用于运行 EVM。我们还是需要全局状态,保存不断变大的全局状态,去支持 EVM 的运行。 + +我在研究区块链分片的时候,一开始就非常轻松的完成了对于交易的分片。对于全局状态的分片,一直没有很好的方案。但是在去年,我们意识到,全局状态爆炸,本来就是需要被抑制的,不断增长的全局状态会影响节点运行的去中心化(除非有完美的分片方案,但是这非常不切实际)。抑制全局状态,意味着我们无需全局状态的分片,这两者达到了空前的统一。 + +同时,我们也认识到,区块链中必须要有稀缺性资源,我们可以认为的定义 coin 的总量,故意制造稀缺,但是更需要定义这些 coin 与什么资源相关。在比特币中,coin 用于支付交易手续费。这里有一个悖论,成功的区块链代币将不断上涨,不断上涨的代币将抑制链上繁荣,区块链不再繁荣则会导致区块链的失败。我们称为 BTC 悖论(这不是说 BTC 会失败,而是采用 BTC 类似代币模型,用代币支付链手续费的其它区块链,会受到这一悖论魔咒的困扰,包括 ETH)。这个悖论简单说,区块链的繁荣将导致失败。 + +改进方法:在我们 Zentra 中,会利用全局状态的稀缺性,设计代币。这样的设计将鼓励链上繁荣,币价上涨不会抑制链上活跃度。 + From faa18dca062cb0d2aa305c223e02a265427fe392 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 11 Feb 2025 18:19:55 +0000 Subject: [PATCH 068/121] Update commit status table --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 93ff9d7..dc0c245 100644 --- a/README.md +++ b/README.md @@ -629,6 +629,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From 887585a745f5b6bafe44e202453a684a36cd2a83 Mon Sep 17 00:00:00 2001 From: lllapland <13949798+lllapland@users.noreply.github.com> Date: Wed, 12 Feb 2025 03:57:07 +0800 Subject: [PATCH 069/121] update lllapland.md --- lllapland.md | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/lllapland.md b/lllapland.md index faa291a..2741bb0 100644 --- a/lllapland.md +++ b/lllapland.md @@ -211,9 +211,28 @@ https://epf.wiki/#/eps/week3 | **Communication Complexity** | **O(n²)** -> multiple rounds of message exchanges, where each node broadcasts messages to all other nodes 🌟| **O(n)** | ----- -TBC +### 2025.02.11 +https://epf.wiki/#/eps/week3 + +- PoS + - in-protocol signal allow for **penalties**, not just rewards (compared to PoW) + - scenarios: + - double signing + - going offline + - equivocation -> voting for multiple competing blocks at the same height + - how? + - **slashing**: cutting validator's stake for malicious behavior + - **inactivity leak**: gradual stake reduction for being offline to maintain network liveness + - benefits: + - reduce attack surface + - less resource intensive +- attestation: a validator's vote to confirm a block is valid + - TBC + + + + From 4ce51b6f80767760dacc2bcbf5636c1657861f68 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 11 Feb 2025 19:57:52 +0000 Subject: [PATCH 070/121] Update commit status table --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index dc0c245..094bde1 100644 --- a/README.md +++ b/README.md @@ -120,7 +120,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | JoscelynFarr | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | cherry-yl-sh | ✅ | ⭕️ | ⭕️ | ✅ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | | HeliosLz | ⭕️ | ⭕️ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | -| lllapland | ✅ | ✅ | ⭕️ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | +| lllapland | ✅ | ✅ | ⭕️ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | passer-byzhang | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | StillFantastic | ⭕️ | ✅ | ⭕️ | ✅ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | | debugzhao | ✅ | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | @@ -630,6 +630,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From 850080947be2629ee612d99465aa5e94bd91b373 Mon Sep 17 00:00:00 2001 From: lllapland <13949798+lllapland@users.noreply.github.com> Date: Wed, 12 Feb 2025 05:05:58 +0800 Subject: [PATCH 071/121] update lllapland.md --- lllapland.md | 45 +++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 41 insertions(+), 4 deletions(-) diff --git a/lllapland.md b/lllapland.md index 2741bb0..7817a07 100644 --- a/lllapland.md +++ b/lllapland.md @@ -220,15 +220,52 @@ https://epf.wiki/#/eps/week3 - scenarios: - double signing - going offline - - equivocation -> voting for multiple competing blocks at the same height + - equivocation -> voting for multiple **competing blocks** at the same height [💡 tutorial](https://youtu.be/5gfNUVmX3Es?si=z7ba-EZ48kbH4I5V) - how? - - **slashing**: cutting validator's stake for malicious behavior + - **slashing**: cutting validator's stake for malicious behavior (up to 32 ETH) - **inactivity leak**: gradual stake reduction for being offline to maintain network liveness - benefits: - reduce attack surface - less resource intensive -- attestation: a validator's vote to confirm a block is valid - - TBC +- Bribe attacks -> influence validator behavior through **economic incentives** + - examples: + - paying validators to vote for specific blocks + - bribing validators to stay offline + - mitigations: + - slashing penalties make bribe acceptance **more costly than potential gains** + - withdrawal delays increase the cost of malicious behavior +- GHOST vs. Casper + - ethereum 2.0's consensus mechanism uses a modified version of **GHOST** combined with **Casper FFG** (Finality Gadget) + +| Mechanism | Purpose | Consensus Type | Key Features | +|-----------|---------|---------------|--------------| +| **GHOST** | **fork-choice rule** to determine the canonical chain | **PoW & PoS** | • considers the entire tree of blocks
• chooses the **heaviest** subtree
• prevents short-chain attacks | +| **Casper FFG** | **finality gadget** for PoS consensus | **PoS** | • checkpoint-based finalization
• uses validator voting
• provides economic finality through slashing | + +> Note: LMD-GHOST specifically looks at validators' latest messages to determine the head of the chain + +### 2025.02.12 +https://epf.wiki/#/eps/week3 + +- Attestation: statement or proof of a certain fact + - Ethereum's PoS consensus [tutorial](https://youtu.be/5gfNUVmX3Es?si=_fkMJ6mn3LQGAE4V&t=83) + - epoch -> **a time unit** used to **organize validator duties** and **finalize** blocks efficiently + - **1 epoch = 32 slots** (Each slot is **12 seconds**) + - **1 slot** = opportunity to **propose a block** + - How to? + 1. **a validator is selected** to propose a block in **each slot** + 2. **other validators attest** using **BLS signatures** (aggregating hundreds of signatures into a single signature) + - validators are assigned to different **committees** + - each committee is responsible for validating **specific shards** + 3. **attestations are aggregated** and included in the next block + 4. **epoch ends after 32 slots** (~6.4 min). + 5. **If 2/3 validators agree, finalization occurs** + - EAS: Ethereum Attestation Service 🔥 [tutorial](https://youtu.be/DMGj5GNll0k?si=LFfMfwQp7LqfNyCV&t=967) + - [usage cases / ideas](https://docs.attest.org/docs/category/example-use-cases) + - identity + - statements + - etc. + From eace7e58e7d7e382b3504836d312adb0e90655fb Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 11 Feb 2025 21:06:16 +0000 Subject: [PATCH 072/121] Update commit status table --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 094bde1..4b115f6 100644 --- a/README.md +++ b/README.md @@ -120,7 +120,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | JoscelynFarr | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | cherry-yl-sh | ✅ | ⭕️ | ⭕️ | ✅ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | | HeliosLz | ⭕️ | ⭕️ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | -| lllapland | ✅ | ✅ | ⭕️ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | +| lllapland | ✅ | ✅ | ⭕️ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | passer-byzhang | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | StillFantastic | ⭕️ | ✅ | ⭕️ | ✅ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | | debugzhao | ✅ | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | @@ -631,6 +631,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From 9c756def991a16c90ad2c9e429ed4aec79824e0f Mon Sep 17 00:00:00 2001 From: lllapland <13949798+lllapland@users.noreply.github.com> Date: Wed, 12 Feb 2025 05:14:46 +0800 Subject: [PATCH 073/121] format --- lllapland.md | 34 ++++++++++++---------------------- 1 file changed, 12 insertions(+), 22 deletions(-) diff --git a/lllapland.md b/lllapland.md index 7817a07..ae4d9a4 100644 --- a/lllapland.md +++ b/lllapland.md @@ -27,24 +27,14 @@ https://epf.wiki/#/eps/week1 - **FOSS (Free & Open Source Software)**: Software that respects users' freedom and community - **GNU**: Foundation for open-source software, influencing Ethereum's development principles. GNU stands for "GNU's Not Unix" - Cryptography - - **Key Usage** - - Symmetric: Same key for encryption & decryption - - Asymmetric: Uses a public/private key pair - - **Security** - - Symmetric: Less secure if the key is exposed - - Asymmetric: More secure; only the private key must be kept secret - - **Speed** - - Symmetric: Faster (simpler computation) - - Asymmetric: Slower (complex mathematical operations) - - **Key Distribution** - - Symmetric: Requires secure key exchange - - Asymmetric: Public key can be shared openly - - **Common Algorithms** - - Symmetric: AES, DES, RC4 - - Asymmetric: RSA, ECC, Diffie-Hellman - - **Use Cases** - - Symmetric: Encrypting files, database security - - Asymmetric: Digital signatures, 🌟 **blockchain**, secure communication (TLS, PGP) + | **Characteristic** | **Symmetric Encryption** | **Asymmetric Encryption** | + |-------------------|-------------------------|--------------------------| + | **Key Usage** | same key for encryption & decryption | public/private key pair | + | **Security** | less secure if key is exposed | more secure; only private key must be kept secret | + | **Speed** | faster (simpler computation) | slower (complex mathematical operations) | + | **Key Distribution** | requires secure key exchange | public key can be shared openly | + | **Common Algorithms** | AES, DES, RC4 | RSA, ECC, Diffie-Hellman | + | **Use Cases** | encrypting files, database security | digital signatures, 🌟 **blockchain**, secure communication (TLS, PGP) | #### Implementations and Development @@ -220,14 +210,14 @@ https://epf.wiki/#/eps/week3 - scenarios: - double signing - going offline - - equivocation -> voting for multiple **competing blocks** at the same height [💡 tutorial](https://youtu.be/5gfNUVmX3Es?si=z7ba-EZ48kbH4I5V) + - equivocation -> voting for multiple **competing blocks** at the same height [💡](https://youtu.be/5gfNUVmX3Es?si=z7ba-EZ48kbH4I5V) - how? - **slashing**: cutting validator's stake for malicious behavior (up to 32 ETH) - **inactivity leak**: gradual stake reduction for being offline to maintain network liveness - benefits: - reduce attack surface - less resource intensive -- Bribe attacks -> influence validator behavior through **economic incentives** +- Bribe attacks -> attackers influence validator behavior through **economic incentives** - examples: - paying validators to vote for specific blocks - bribing validators to stay offline @@ -239,10 +229,10 @@ https://epf.wiki/#/eps/week3 | Mechanism | Purpose | Consensus Type | Key Features | |-----------|---------|---------------|--------------| -| **GHOST** | **fork-choice rule** to determine the canonical chain | **PoW & PoS** | • considers the entire tree of blocks
• chooses the **heaviest** subtree
• prevents short-chain attacks | +| **GHOST** | **fork-choice rule** to determine the canonical chain | **PoW & PoS** | • usually considers the entire tree of blocks (special case: LMD-GHOST looks at validators' latest messages)
• chooses the **heaviest** subtree
• prevents short-chain attacks | | **Casper FFG** | **finality gadget** for PoS consensus | **PoS** | • checkpoint-based finalization
• uses validator voting
• provides economic finality through slashing | -> Note: LMD-GHOST specifically looks at validators' latest messages to determine the head of the chain + ### 2025.02.12 https://epf.wiki/#/eps/week3 From d634123e50ed7c7c79b912bbffec12272aaf890d Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 11 Feb 2025 21:15:04 +0000 Subject: [PATCH 074/121] Update commit status table --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 4b115f6..5d6b0f6 100644 --- a/README.md +++ b/README.md @@ -632,6 +632,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From b5b8744973fcbb0b97f7fcda4813713eecc00fcf Mon Sep 17 00:00:00 2001 From: lllapland <13949798+lllapland@users.noreply.github.com> Date: Wed, 12 Feb 2025 05:16:27 +0800 Subject: [PATCH 075/121] format --- lllapland.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/lllapland.md b/lllapland.md index ae4d9a4..071b676 100644 --- a/lllapland.md +++ b/lllapland.md @@ -229,7 +229,7 @@ https://epf.wiki/#/eps/week3 | Mechanism | Purpose | Consensus Type | Key Features | |-----------|---------|---------------|--------------| -| **GHOST** | **fork-choice rule** to determine the canonical chain | **PoW & PoS** | • usually considers the entire tree of blocks (special case: LMD-GHOST looks at validators' latest messages)
• chooses the **heaviest** subtree
• prevents short-chain attacks | +| **GHOST** | **fork-choice rule** to determine the canonical chain | **PoW & PoS** | • usually considers the **entire tree of blocks** (special case: LMD-GHOST looks at validators' **latest messages**)
• chooses the **heaviest** subtree
• prevents short-chain attacks | | **Casper FFG** | **finality gadget** for PoS consensus | **PoS** | • checkpoint-based finalization
• uses validator voting
• provides economic finality through slashing | @@ -242,14 +242,14 @@ https://epf.wiki/#/eps/week3 - epoch -> **a time unit** used to **organize validator duties** and **finalize** blocks efficiently - **1 epoch = 32 slots** (Each slot is **12 seconds**) - **1 slot** = opportunity to **propose a block** - - How to? - 1. **a validator is selected** to propose a block in **each slot** - 2. **other validators attest** using **BLS signatures** (aggregating hundreds of signatures into a single signature) - - validators are assigned to different **committees** - - each committee is responsible for validating **specific shards** - 3. **attestations are aggregated** and included in the next block - 4. **epoch ends after 32 slots** (~6.4 min). - 5. **If 2/3 validators agree, finalization occurs** + - How to? + 1. **a validator is selected** to propose a block in **each slot** + 2. **other validators attest** using **BLS signatures** (aggregating hundreds of signatures into a single signature) + - validators are assigned to different **committees** + - each committee is responsible for validating **specific shards** + 3. **attestations are aggregated** and included in the next block + 4. **epoch ends after 32 slots** (~6.4 min) + 5. **If 2/3 validators agree, finalization occurs** - EAS: Ethereum Attestation Service 🔥 [tutorial](https://youtu.be/DMGj5GNll0k?si=LFfMfwQp7LqfNyCV&t=967) - [usage cases / ideas](https://docs.attest.org/docs/category/example-use-cases) - identity From ec0b27bba350753893791ec899fe150a8bf15593 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 11 Feb 2025 21:16:57 +0000 Subject: [PATCH 076/121] Update commit status table --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 5d6b0f6..6723db6 100644 --- a/README.md +++ b/README.md @@ -633,6 +633,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From 054246d7de2ce44e22d2274e42149f0ae28fcdf5 Mon Sep 17 00:00:00 2001 From: Ray Date: Wed, 12 Feb 2025 08:01:05 +0800 Subject: [PATCH 077/121] update ray 02-12 --- rayjun.md | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/rayjun.md b/rayjun.md index e914730..55126c6 100644 --- a/rayjun.md +++ b/rayjun.md @@ -209,5 +209,28 @@ EVM 中有一些关键的组件: - 应用:Celo - 在以太坊协议中,节点和验证者是共识系统的参与者,slot 和 epoch 控制共识时间,Block 和 Attestations 是共识系统中的核心要素,达成共识需要依赖这些数据 - +### 2025.02.12 +- 以太坊从 PoW 转成 PoS 的核心原因:能耗高且扩展性有限 + - 以太坊当前的共识协议:LMD GHOST + Casper FFG = Gasper + - PoW 和 PoS 本身不是共识协议,而是一线共识协议的机制,主要作用是用来抵抗 Sybil 攻击,让参与网络有一定的成本 + - PoW 和 PoS 都是通过分叉选择来选择链的方向: + - PoW:依据完成的总计算量 + - PoS:依据特定链的总质押价值 +- The Merge 在升级的时候使用的是 TTD 而不是区块高度, TTD 其实就是每个区块难度的累加,之所以不使用区块高度,是为了方式有人恶意加速或者减缓 The Merge 升级的进度 +- 以太坊的共识层称之为 Beacon Chain,它负责监督提出和证明新区块的验证者,确保网络的完整性和安全性。 + - Validator 的限制 + - 当前需要质押 32 个 ETH 才能成为 Validator + - Block Proposer 的选择过程依赖 RANDAO 和 VDF 来保证随机性 + - Validator 会被分成多个委员会,负责区块提议和证明 + - 如果 Validator 作恶,那么他们的资金就会面临处罚 + - slot 和 epoch:每个 slot 12 秒,一个 epoch 为 32 个 slot,每个 slot 都需要指定一名 validator 来提议区块,而验证委员会者证明该区块的有效性 + - Block Proposer 由 RANDAO 选出,选择的过程中,会加权计算 Validator 的余额 + - Validator 可以同时成为 Block Proposer 和 Committees 成员,这种情况很少,概率为 1/32 + - Validator 和 Attestations:Blocker Proposer 时被伪随机(因为缺乏真正的随机院)选择来构建区块的验证者,大多数情况下,验证者时对区块进行投票的 asstester,这些投票记录在信标链中 + - Committees:委员会至少由 128 名验证者组成,在一个 epoch 中,每个 slot 都会分配至少一个 Committees,也就是说在一个 epoch 中,validator 只会存在一个 Committees 中,所以这里也就说明了为什么一个 Validator 在一个 slot 中 同时为 Block Proposer 和 Committees 成员的概率很小 + - Committees 中 Validator 的数量至少要有 128 个 + - 如果网络的 Validator 少于 8192 个,那么就会有一些 slot 的委员会人数不足,如果 Validator 的数量超过 8192 ,那么每个 slot 都至少有两个完整的委员会 + - 如果委员会的规则不足 128,整个网络的 validator 人数少于 4096 时,网络的安全性就会很低 + - Blob 中的数据实际存储在共识层,执行层只存储 blob 的 KZG commitments + From 4c6aa13d66dbc314fa03b0b0ea25eabd5e50133d Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Wed, 12 Feb 2025 00:01:43 +0000 Subject: [PATCH 078/121] Update commit status table --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 6723db6..9262cc0 100644 --- a/README.md +++ b/README.md @@ -103,7 +103,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | ------------- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | | brucexu-eth | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | PayFv | ⭕️ | ✅ | ✅ | ⭕️ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | -| chloezhu010 | ✅ | ✅ | ⭕️ | ⭕️ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | +| chloezhu010 | ✅ | ✅ | ⭕️ | ⭕️ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | coratann | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | luffythink | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | Henry | ✅ | ✅ | ✅ | ✅ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | @@ -113,7 +113,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | mrmign | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | ghx1104 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | Coooder-Crypto | ✅ | ✅ | ✅ | ✅ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | -| rayjun | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | +| rayjun | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | CJC824 | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | William-02-02 | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | hotoo | ✅ | ✅ | ✅ | ✅ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | @@ -130,7 +130,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | DVDguzhou | ✅ | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | armada2013 | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | realgu | ✅ | ✅ | ⭕️ | ✅ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | -| Eizz0 | ✅ | ✅ | ✅ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | | +| Eizz0 | ✅ | ✅ | ✅ | ⭕️ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | | kernel1983 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | JC13043DB | ✅ | ⭕️ | ⭕️ | ✅ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | GuoyangLiu24 | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | @@ -634,6 +634,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From 3d7fc28ade0a06567b4bd47d7bf979075a639ea0 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Wed, 12 Feb 2025 01:21:32 +0000 Subject: [PATCH 079/121] Update commit status table --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 9262cc0..c8ba37e 100644 --- a/README.md +++ b/README.md @@ -635,6 +635,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From f856f2dad4a189bbb391d273cbe85acadfca3619 Mon Sep 17 00:00:00 2001 From: cooper Date: Wed, 12 Feb 2025 11:41:27 +0800 Subject: [PATCH 080/121] update cooper.md --- cooper.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cooper.md b/cooper.md index 9f9fbca..a3e1181 100644 --- a/cooper.md +++ b/cooper.md @@ -289,7 +289,10 @@ EVM 字节码是程序的字节序列(8 位)的表示。字节码中的每 ### 2025.02.12 > 周三 -笔记内容 +#### 学习总结 +参考:https://epf.wiki/#/wiki/EL/evm + +细致的了解了EVM的执行流程,以及EVM的执行引擎。 ### 2025.02.13 > 周四 From b956582785887a5a85186d714c91c105e7d15a0e Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Wed, 12 Feb 2025 03:43:18 +0000 Subject: [PATCH 081/121] Update commit status table --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c8ba37e..8e9f8d2 100644 --- a/README.md +++ b/README.md @@ -134,7 +134,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | kernel1983 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | JC13043DB | ✅ | ⭕️ | ⭕️ | ✅ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | GuoyangLiu24 | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | -| cooper | ⭕️ | ✅ | ✅ | ✅ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | +| cooper | ⭕️ | ✅ | ✅ | ✅ | ✅ | ⭕️ | ✅ | | | | | | | | | | | | | | | | | | | | chyyynh | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | frankmint2024 | ✅ | ⭕️ | ✅ | ⭕️ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | | Amberrrrrr | ✅ | ✅ | ⭕️ | ⭕️ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | @@ -636,6 +636,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From 9b2cc0643ad417b1b6b6e84d01c49d1f4c1ee004 Mon Sep 17 00:00:00 2001 From: Bruce Xu <95468177+brucexu-eth@users.noreply.github.com> Date: Wed, 12 Feb 2025 16:59:57 +1300 Subject: [PATCH 082/121] Update brucexu-eth.md --- brucexu-eth.md | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/brucexu-eth.md b/brucexu-eth.md index a882632..d8f955a 100644 --- a/brucexu-eth.md +++ b/brucexu-eth.md @@ -190,10 +190,42 @@ Light clients are nodes that do not contain entire blockchain data. Instead, the 选择要验证的 tx 的相关 hash 即可,因为上层的 hash 节点都是计算生成的。 -TODO https://epf.wiki/#/eps/week1 - TODO 跑一下代码 https://github.com/dajuguan/lab/blob/main/eth/randao.py +# 2025.02.12 + +## https://epf.wiki/#/eps/week1 + +![image](https://github.com/user-attachments/assets/3635c3a4-c051-4557-a8cb-0621a5b84467) + +The Merge 的过程,其实是构建了一个平行的 Beacon Chain 一直在运行和检测,之后把 execution layer 接过来。 + +As hinted above, the main high level components of Ethereum are execution and consensus layer. These are 2 networks which are connected and dependent on each other. Execution layer provides the execution engine, handles user transaction and all state (address, contract data) while consensus implements the proof-of-stake mechanism ensuring security and fault tolerance. + +The traditional development cycle for new features or changes is Idea - Research - Development - Testing - Adoption. However, problems might arise at any moment of this cycle resulting in iterating again from the beginning. + +The coordination mainly happens via regular calls which are scheduled in the PM repo. + +The ideas and proposed changes from the community are coordinated using EIP process. Additionally, there are a few discussion forums. The biggest one discussing core upgrades is https://ethresear.ch. Another forum which is connected to the EIP process and serves for discussion about specific proposals is Ethereum Magicians. Lots of important discussion is also happening on the R&D Discord server (ping us in EPFsg discord to get an invite) and in client team groups. There are also offsites or workshops where many core developers meet in person to speed up the process face to face. + +通过 https://github.com/ethereum/pm 学习到的社区协调和管理经验: + +1. 通过创建 issues + tag 来放议题、会议链接等信息,例如 https://github.com/ethereum/pm/issues/1253 包括全部的会议,不仅仅是 ACDE ACDC +2. 提供了一个 Google Calendar 来快速添加,但是目前不知道是自动还是人工维护的 +3. 欢迎大家通过评论的方式,添加议题等 +4. 写清楚了议题如何添加、谁能参加、谁主持等 +5. ECH 提供了字幕稿,然后下面有个大表单,可以看到每次会议的录屏、notes、讨论等等 + +对 LXDAO 的启发: + +- 可以考虑将会议集中在这里管理,避免在论坛占用大家的注意力 +- 提供会议的速记和内容稿,作为社区周报的内容,而非比较制式的,重点在于引导大家讨论 + +TODO https://notes.ethereum.org/@mikeneuder/rcr2vmsvftv + +TODO https://epf.wiki/#/eps/week2 + + From c88180d21ac6db030ce6d3b1e37c67ad45f0db37 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Wed, 12 Feb 2025 04:00:12 +0000 Subject: [PATCH 083/121] Update commit status table --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 8e9f8d2..d1b9e93 100644 --- a/README.md +++ b/README.md @@ -101,7 +101,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | Name | 2.06 | 2.07 | 2.08 | 2.09 | 2.10 | 2.11 | 2.12 | 2.13 | 2.14 | 2.15 | 2.16 | 2.17 | 2.18 | 2.19 | 2.20 | 2.21 | 2.22 | 2.23 | 2.24 | 2.25 | 2.26 | 2.27 | 2.28 | 3.01 | 3.02 | | ------------- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | -| brucexu-eth | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | +| brucexu-eth | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | PayFv | ⭕️ | ✅ | ✅ | ⭕️ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | chloezhu010 | ✅ | ✅ | ⭕️ | ⭕️ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | coratann | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | @@ -637,6 +637,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From 11df980a8f3169c79cd108f8300518e756afc56c Mon Sep 17 00:00:00 2001 From: realgu <36865815+ChengruiGu@users.noreply.github.com> Date: Wed, 12 Feb 2025 12:26:04 +0800 Subject: [PATCH 084/121] Update realgu.md --- realgu.md | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/realgu.md b/realgu.md index 12e421a..8336313 100644 --- a/realgu.md +++ b/realgu.md @@ -34,6 +34,28 @@ timezone: Asia/Shanghai - 1e = 1 billion gwei - 一笔交易大概需要21000 gas unit,每个block 的 gas limit 目前大概 30m gas unit,base fee是 gwei / gas unit - 晕了 EL Spec 很难读下去,暂时跳过吧 -- + +### 2024.02.11 +State Trasition Function: +``` +func stf(parent types.Block, block types.Block, state state.StateDB) (state.StateDB, error) { //1 + if err := core.VerifyHeaders(parent, block); err != nil { //2 + // header error detected + return nil, err + } + for _, tx := range block.Transactions() { //3 + res, err := vm.Run(block.header(), tx, state) + if err != nil { + // transaction invalid, block is invalid + return nil, err + } + state = res + } + return state, nil +} +``` +问题: what exactly does a 'state' contains? what are the tries? + + From 3acb10334e2fbff59a60377e242dfa919baf117d Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Wed, 12 Feb 2025 04:26:18 +0000 Subject: [PATCH 085/121] Update commit status table --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index d1b9e93..9cd114e 100644 --- a/README.md +++ b/README.md @@ -638,6 +638,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From 1d1bb2e2fab98aad47c60025a077fb42cbfcc1af Mon Sep 17 00:00:00 2001 From: jeasonzhang Date: Wed, 12 Feb 2025 12:41:56 +0800 Subject: [PATCH 086/121] Update JeasonZhang.md --- JeasonZhang.md | 177 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 175 insertions(+), 2 deletions(-) diff --git a/JeasonZhang.md b/JeasonZhang.md index 4e2e6d8..32f9025 100644 --- a/JeasonZhang.md +++ b/JeasonZhang.md @@ -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** From d48d249509e07f604a3b3321560fc86f0116e0b9 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Wed, 12 Feb 2025 04:42:11 +0000 Subject: [PATCH 087/121] Update commit status table --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 9cd114e..394a2ff 100644 --- a/README.md +++ b/README.md @@ -639,6 +639,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From 87ec93134de586b63f491760e28da6e39f1ad241 Mon Sep 17 00:00:00 2001 From: ztz Date: Wed, 12 Feb 2025 13:44:22 +0800 Subject: [PATCH 088/121] Update zt2.md --- zt2.md | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/zt2.md b/zt2.md index 63bfd8a..226fdfb 100644 --- a/zt2.md +++ b/zt2.md @@ -251,5 +251,35 @@ CA 具有两个附加属性: (注意,区块中的单个交易执行失败,整个区块都会被打回重来) +### 2025.02.12 + +#### Bridge + +无论是智能合约还是以太坊,其根本是建立在一个个的节点(node)之上,依靠节点上 EVM 虚拟机的计算能力实现上层业务逻辑的构造。 + +其缺陷在于,无论智能合约逻辑有如何复杂,但它永远只能够在以太坊钩织的数据里漫游而无法接触到以太坊网络以外的数据,因为 EVM 限制其获取以太坊网络以外的数据,如互联网数据。 + +脱离了外部世界的以太坊合约是不完整的,而“桥”则是一个构建起外部世界与以太坊世界数据流通的通道。 + +运行了 bridge 的服务,可以通过主动向以太坊链上的合约 push 外部世界的数据,从而完成外部数据上链的工作,这样,以太坊网络中,就存在了外部世界的数据,这通常维护在某个智能合约中。 + +![image](https://github.com/user-attachments/assets/2075b70e-4bb8-40b8-a0c3-7ee7ae4ba66f) + +同样,如果某个服务能够将两个链的数据进行互通,则也可以视作一种桥:Blockchain Bridges + +![image](https://github.com/user-attachments/assets/2ed7c94c-3782-4d36-b15b-17a3b0f538d3) + +这里就引入了另一个概念,预言机(Oracle):区块链预言机是位于以太坊与外部世界之间的实体,负责在两者之间传递信息。 + +预言机一般包括: + +- Oracle 智能合约部分:存在于以太坊中的代码,处理请求并协调内部与外部客户端之间的交互。 +- Oracle 外部接口(节点):与以太坊进行通信的计算机和服务器。节点是能够进行极其快速且低成本计算的中心化实体。它们还连接到外部数据源,并可以将这些数据发布到链上。 + +![image](https://github.com/user-attachments/assets/ea77b6ba-dfc6-4fa8-8d3b-4cc25fcfd002) + +预言机解决方案:[Chainlink](https://chain.link/): + +image From 531971c7aa6d0319bf4abd9e3fcd6e9e520f4372 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Wed, 12 Feb 2025 05:44:38 +0000 Subject: [PATCH 089/121] Update commit status table --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 394a2ff..d7812b0 100644 --- a/README.md +++ b/README.md @@ -131,7 +131,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | armada2013 | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | realgu | ✅ | ✅ | ⭕️ | ✅ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | Eizz0 | ✅ | ✅ | ✅ | ⭕️ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | -| kernel1983 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | +| kernel1983 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | JC13043DB | ✅ | ⭕️ | ⭕️ | ✅ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | GuoyangLiu24 | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | cooper | ⭕️ | ✅ | ✅ | ✅ | ✅ | ⭕️ | ✅ | | | | | | | | | | | | | | | | | | | @@ -162,7 +162,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | liuxulife | ✅ | ✅ | ✅ | ✅ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | | CHENFANGC | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | ppatrick007 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | -| zt2 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | +| zt2 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | yiwen4 | ✅ | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | affe | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | dundun930326 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | @@ -640,6 +640,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From 2b53131fc17b2133f694b0b8f9ce6595ddbf6583 Mon Sep 17 00:00:00 2001 From: d1xia <667070+dixia@users.noreply.github.com> Date: Wed, 12 Feb 2025 13:20:35 +0700 Subject: [PATCH 090/121] 12 Feb 2025 --- dixia.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/dixia.md b/dixia.md index 160bd31..ce13618 100644 --- a/dixia.md +++ b/dixia.md @@ -92,7 +92,7 @@ actually once is a validator is chosen to be a proposer, it can know therefore i https://www.paradigm.xyz/2023/04/mev-boost-ethereum-consensus https://epf.wiki/#/eps/week3 - + ### 2025.02.11 @@ -103,3 +103,9 @@ still not sure why a committe concept is needed after watch all these video PoW consensus use economic (hash power) to reach consensus which looks a lot simpler. Through it does give entity who has most computing power an advantage so it is more close to "real" economy where PoS could at certain time depeg from real economy power. As long as stakeholder/token holder has a little real world economy power(pay for server and bandwdith). (eth will have price but it is less impact by commodity price such as electricity ) it is easier to develop as independent set of stakerholders on its own economy compare to Bitcoin i.e. if someone is very good at investing/trading, he or she could acquire ether at lower price. But you alway need to pay for a market price for electricity. PoW resets the game each time but does make bitcoin's opeartion more close to "real world" + +### 2025.02.12 + +fork choice rule == LMD GHOST + + \ No newline at end of file From 5736813bb5026d57fe5f1d079bba0a1c57fd5e9e Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Wed, 12 Feb 2025 06:21:42 +0000 Subject: [PATCH 091/121] Update commit status table --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d7812b0..99d9efb 100644 --- a/README.md +++ b/README.md @@ -172,7 +172,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | ALiangNe | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | tienshaoku | ✅ | ✅ | ✅ | ⭕️ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | tannerang | ✅ | ⭕️ | ✅ | ⭕️ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | -| dixia | ✅ | ✅ | ✅ | ⭕️ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | +| dixia | ✅ | ✅ | ✅ | ⭕️ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | dajuguan | ✅ | ✅ | ✅ | ⭕️ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | | timfaner | ✅ | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | JeasonZhang | ✅ | ⭕️ | ⭕️ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | @@ -641,6 +641,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From d0240311811b133469b3a5e6ee0b3321e4b7fb67 Mon Sep 17 00:00:00 2001 From: H Jiang Date: Wed, 12 Feb 2025 15:31:59 +0800 Subject: [PATCH 092/121] 2.12 --- rectinajh.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/rectinajh.md b/rectinajh.md index fdf3080..a4136bd 100644 --- a/rectinajh.md +++ b/rectinajh.md @@ -37,4 +37,7 @@ https://epf.wiki/#/wiki/protocol/history 今天学习执行层数据规范最初被指定是根据黄皮书来设计的 https://epf.wiki/#/wiki/EL/el-specs +### 2025.02.12 +今天学习执行层客户端的架构设计 +https://epf.wiki/#/wiki/EL/el-architecture From 13964e45f211e2d4690de3b79d8673aae26a9639 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=99=AE=E7=BD=97=E5=88=97=E5=A1=94=E5=88=A9=E4=BA=9A?= =?UTF-8?q?=E7=89=B9?= <31700009+zhouCode@users.noreply.github.com> Date: Wed, 12 Feb 2025 16:29:05 +0800 Subject: [PATCH 093/121] Update zhouCode.md --- zhouCode.md | 44 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/zhouCode.md b/zhouCode.md index eef0800..660a2fd 100644 --- a/zhouCode.md +++ b/zhouCode.md @@ -541,7 +541,7 @@ func build(env Environment, pool txpool.Pool, state state.StateDB) (types.Block, ### 2025.02.11 -#### Study Group 2024 week3 学习 +#### Study Group 2024 week4 学习 #### 以太坊测试与安全 @@ -577,4 +577,46 @@ func build(env Environment, pool txpool.Pool, state state.StateDB) (types.Block, - 发现漏洞后通过[以太坊漏洞赏金计划](https://bounty.ethereum.org/)提交,最高可获得25万美元奖励。 - 公开披露需在修复后进行(参考[历史案例库](https://github.com/ethereum/eth-sec))。 +### 2025.02.12 + +#### Study Group 2024 week5 学习 + +#### **合并(The Merge)** + +- 以太坊从工作量证明(PoW)转向权益证明(PoS)的重要性,信标链(Beacon Chain)的启动与合并后的经济安全性提升。 +- 最终性(Finality)概念的引入(12.6分钟完成区块最终确认)。 +- 签名聚合(Signature Aggregation)和秘密领导者选举(Whisk协议)的研究进展。 + +#### **激增(The Surge)** + +- **数据可用性采样(DAS)**: 通过多项式承诺(如KZG)实现高效数据验证,支持Rollup扩展。 +- **EIP-4844(Proto-Danksharding)**: 引入“Blob”存储结构,降低Rollup数据成本,已上线主网。 +- **Rollup分类**: 乐观Rollup与零知识Rollup的对比,强调数据可用性对挑战机制的重要性。 + +#### **The Scourge** + +- **提议者-构建者分离(PBS)**: 减少验证者中心化风险,通过MEV-Boost临时方案过渡到协议内实现。 +- **最大有效余额(Max EB)**: 从32 ETH提升至2048 ETH,优化验证者效率。 +- **流动性质押(Liquid Staking)**: 探索降低罚没风险的新机制(如质押上限)。 + +#### **验证(The Verge)** + +- **Verkle树**: 取代Merkle树,实现更高效的轻客户端验证和状态证明,支持无状态验证。 +- **ZK化(ZK-SNARKs)**: 未来将共识层和执行层交易验证集成零知识证明,提升可扩展性。 + +#### **清洗(The Purge)** + +- **历史过期(EIP-4444)**: 节点不再存储超过1年的历史数据,依赖Portal Network等去中心化存储方案。 +- **状态简化**: 移除旧版协议支持(如RLP序列化),向SSZ过渡。 + +#### **挥霍(The Splurge)** + +- **账户抽象(ERC-4337)**: 支持智能合约钱包,实现社交恢复、批量交易等高级功能。 +- **EVM优化(EOF)**: 提升EVM兼容性,支持模块化升级。 +- **加密创新**: 全同态加密(FHE)、一次性签名(One-Shot Signatures)等前沿研究。 + +#### 其他关键讨论 + +- **量子抗性**: 长期规划中替换BLS签名,采用抗量子算法(如STARKs)。 +- **路线图复杂性**: 未来可能面临协议僵化(Ossification)风险,需平衡创新与稳定性。 From 707c3cb91ccf595d4cbd92130cde7d7602298630 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Wed, 12 Feb 2025 08:29:28 +0000 Subject: [PATCH 094/121] Update commit status table --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 99d9efb..97057e4 100644 --- a/README.md +++ b/README.md @@ -109,7 +109,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | Henry | ✅ | ✅ | ✅ | ✅ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | | d0d0d9 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | henryleo | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | -| zhouCode | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | +| zhouCode | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | mrmign | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | ghx1104 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | Coooder-Crypto | ✅ | ✅ | ✅ | ✅ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | @@ -642,6 +642,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From 9464ee70d46d5bf7411860c5f11511b59e5ad49e Mon Sep 17 00:00:00 2001 From: chenfang Date: Wed, 12 Feb 2025 17:35:08 +0800 Subject: [PATCH 095/121] feat: 20250212 note --- CHENFANGC.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHENFANGC.md b/CHENFANGC.md index d40a3e5..90ea742 100644 --- a/CHENFANGC.md +++ b/CHENFANGC.md @@ -172,4 +172,12 @@ EOA 可以发起交易,交易类型包括: 包括计算机、数学、密码学、算法、编程、网络、分布式系统和区块链、安全、终端、shell 脚本和版本控制…… (学不完,看不懂 T.T……今天工作量大,没有看视频啊) +### 2025.02.12 + +### 以太坊和形式化验证 + +- 协议验证、智能合约验证 + +安全和活跃的保证是以太坊去中心化基础设施的核心。形式化验证在验证以下各项的正确性方面起着关键作用 + From c741b5aa5e328ed36e5e145db7baab8d83376f43 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Wed, 12 Feb 2025 09:38:47 +0000 Subject: [PATCH 096/121] Update commit status table --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 97057e4..6a1c2d9 100644 --- a/README.md +++ b/README.md @@ -160,7 +160,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | Lvista | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | lanpan999 | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | liuxulife | ✅ | ✅ | ✅ | ✅ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | -| CHENFANGC | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | +| CHENFANGC | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | ppatrick007 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | zt2 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | yiwen4 | ✅ | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | @@ -643,6 +643,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From 54d0e9e3c4cf32cadbeba6600acffc98c7e4f10c Mon Sep 17 00:00:00 2001 From: StarryDeserts Date: Wed, 12 Feb 2025 17:57:04 +0800 Subject: [PATCH 097/121] 2025.02.12 note MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 完成打卡 ✅ --- .starrydeserts_image/Layered-Architecture.png | Bin 0 -> 163806 bytes StarryDeserts.md | 115 +++++++++++++++++- 2 files changed, 112 insertions(+), 3 deletions(-) create mode 100644 .starrydeserts_image/Layered-Architecture.png diff --git a/.starrydeserts_image/Layered-Architecture.png b/.starrydeserts_image/Layered-Architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..8a6c7b0b7561d1074904062935be09cd50c58c98 GIT binary patch literal 163806 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�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 L-dz>G2GLD5y%w9Ln`AUE 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
  • q*K+R#V)sSZ<-yKzjcf25h8Cv*B zys519UDGi%^RlIz%w@F&P1#r|R(}mp;HzW4%pa!k4yP3|AZHS20D}*E4K@LB^hwW| z>;!nfeJZV|PD$R*x6K8^R7uEnr-&(Mc>)$QqFg`y`wMVwJc(Ov51#x)#D1YWLi)r0 zjajMg)-eGmiD9w5T>hjqM(_K0%HdN_IJ?0SUtJG5&X{FEVJvzZ%#9T)htth}qHq1X z!2q4SX4Ulcw9~|wIQ8wd+M=C8%StmPFZ3o?3no$Uda1(?H7)ZAd%cI@{5yBzre=GK zocy^4vW`w%aLHdOiVjUj4}@HB`NHx8BlAxERl7893VpT0uTJ*(N=;w7wqK$wDJsWl z!O|BKhXuFF!s|ev<)qjQhdl~Di{PzVxWuC&(G0S?hyXbmk3z|<#YV*f+*m@Lo_)&g zSFDlzM7sje79Jp`wR$8-JwiUC9H;Q0|GvfdQ}f@`#TsDieo>_SfvgT; zw03?ITLV!X*%qkBx&Hp0K?& za8p-wwv3!fRxzARf|b*G=S_O@Di-ji@u;aTrgGkU3C-&P79CM zVNNYJq|HKE^%I9p)Fs!8F!7%u8qv{8I_A{2DXGF+0#jnK;yqHrWiV|u*g8bBomQl~ z^L(>?t7^+$K&uBby>m~?fwZj-(Xc$pPh}V={LW5Hw8Tn{5w@6AQWMJ z1McF0&APqUcB!0sB~q-=G(#y*n$xIl)-oEx@CsZ{U-(}7@P1p0<#+?~_}ts$&9Ks5 zi>mF^rptm2h0XP#Ly~zP>0*fKyvkG|8ZNWnUfB{NO#%NSoG((RPG);O*7;SX$w_8b zGu6sN5I&O<6^1*XNb!(!TBGKDi7<0iY=G?G)SE^MLskljEBKn?HQ2bgN1rN@C$ZNbg zQWwxl@q%lr%4vN9y?(A+9!Irk!8IYJOl#7ooeT$l!rBa+o^QhsXFmB9tu3{{=@^yJ+jTzU+fE?bs zx1)w30>=G@-~5)tpij5CBM;5_6k`JPN6QkPU1DHizY&NQ1U$gX* z<(ia`p$rmtq$0jj zTn&#Tuzz&&rm>l!F&9t~u5)ioe<*qE&@D{+%UgOR9N(sJgsEG6rsG$a(AoCacSNDD z$@10TI1nnk5tvd`!~FX<4?{Or&oZeoo4aQS<`(kCoG=N6ItZ+bDcoUMo+vI`f&^sMK^ z+OY|BdV>~3GR^U(wd(ONeBu<~o~@Snx}~f`ndv7G3R%eY6GuyezK9NZ2+aTN5_tqa_PJ zFL5gt7d<~#JZW!%T=wT{>oP1Yzdqz?KL#VRkgJ0|k0n;oN5&&9jgvO`WK3J-zc(vE z{5?P3imAPn--VJr=^MpKyf;Ch1Rnhn$-cM-^h|_Lfw_ar5V7#Rt@GU=JDA^QPlf2` zOS-3k^65oo^2fdPyxl)3CJOB7!2Enk4occXTEpr#`%DpjO)RZv_s27!b@>SN16*?# zUcKF8>ULiSP}&{;JLveeBl*if(8csTx{dZ3EU*-LQlTSzV>kR#GG2fhFMWQMy$&rP8RUpz;e8!+{JSU{!uFi#&zBCIAZ&Yta;4kf`UDFmwf?v#Tlx9& q|Bn0rj(fjQ{GW9H|Ie6g`Kyjm-0(Q}RFMGuyQZXZrBKl-@c#jqM=`Ac literal 0 HcmV?d00001 diff --git a/StarryDeserts.md b/StarryDeserts.md index 241e2db..46f2069 100644 --- a/StarryDeserts.md +++ b/StarryDeserts.md @@ -396,9 +396,7 @@ timezone: Pacific/Auckland # 新西兰标准时间 (UTC+12) ------ -##### **代码示例** - -### **R代码:基础费用模拟** +##### **R代码:基础费用模拟** ```R calculate_base_fee_per_gas <- function( @@ -423,4 +421,115 @@ calculate_base_fee_per_gas <- function( } ``` + + +### 2025.02.12 + +#### 以太坊执行层架构(第1天) + +------ + +##### **客户端架构概览** + +###### 核心职责 + +1. **区块链数据验证与存储** + - 维护本地区块链副本 + - 通过默克尔树验证数据完整性 +2. **网络通信** + - 使用DevP2P协议进行点对点通信 + - 交易池(mempool)管理 +3. **共识层协作** + - 实现Engine API接口 + - 响应`forkChoiceUpdated`和`newPayload`调用 + +##### 分层架构 + +Layered-Architecture + +------ + +##### **EVM设计原理** + +###### 虚拟机核心特征 + +- **硬件无关性** + 通过`EVM字节码`实现跨平台一致性,类似JVM设计理念 +- **沙盒环境** + 每个交易在隔离环境中执行,保证状态变更原子性 + +###### 三明治复杂性模型 + +1. **外层(简单)** + - Solidity/Yul等高级语言 + - JSON-RPC接口 +2. **中间层(复杂)** + - 编译器(Solidity→EVM字节码) + - Gas计量系统 +3. **内层(简单)** + - EVM指令集(约140个操作码) + +------ + +##### **状态管理机制** + +###### 全局状态组成 + +| 组件 | 存储内容 | 数据结构 | +| -------- | ----------------------- | --------------- | +| 账户状态 | 余额/Nonce/合约代码哈希 | Merkle-Patricia | +| 合约存储 | 智能合约变量数据 | Merkle-Patricia | +| 交易收据 | 交易执行日志 | Bloom Filter | + +###### 状态转换公式 +$$\sigma_{t+1} \equiv \Upsilon(\sigma_t, T)$$ + +- $$\sigma_t$$: 当前状态 +- $$T$$: 交易集合 +- $$\Upsilon$$: 状态转换函数 + +------ + +##### **交易生命周期** + +###### 处理流程 + +1. **接收** + 通过JSON-RPC接口接收签名交易 +2. **验证** + - 签名有效性 + - Nonce连续性 + - Gas预算充足 +3. **传播** + 通过DevP2P协议广播至全网节点 +4. **打包** + 被矿工/验证者选入候选区块 +5. **执行** + 在EVM中触发状态转换 + +###### Gas计算模型 +$$\text{总Gas成本} = \text{固有成本} + \sum(\text{操作码Gas} \times \text{执行次数})$$ + +------ + +##### **网络层(DevP2P)** + +###### 关键协议 + +| 协议 | 功能 | 传输内容 | +| ------ | ------------ | ------------- | +| eth/66 | 区块同步 | 区块头/体数据 | +| eth/67 | 交易传播 | 原始交易数据 | +| les/4 | 轻客户端支持 | 状态证明 | + +###### 节点发现机制 + +1. 使用Kademlia DHT协议 +2. 通过ENR记录存储节点元数据 +3. 维护动态路由表(Bucket结构) + + + + + From 2389180100f008f87e87656380a3b0fa83a091c6 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Wed, 12 Feb 2025 09:59:09 +0000 Subject: [PATCH 098/121] Update commit status table --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 6a1c2d9..b2bc004 100644 --- a/README.md +++ b/README.md @@ -124,7 +124,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | passer-byzhang | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | StillFantastic | ⭕️ | ✅ | ⭕️ | ✅ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | | debugzhao | ✅ | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | -| StarryDeserts | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | +| StarryDeserts | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | KieSun | ✅ | ✅ | ✅ | ✅ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | k66 | ✅ | ✅ | ⭕️ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | DVDguzhou | ✅ | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | @@ -644,6 +644,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From d763d9e8cf5bafd8a9e7b682c94b3c484a2a30e1 Mon Sep 17 00:00:00 2001 From: Helios <131566676+HeliosLz@users.noreply.github.com> Date: Wed, 12 Feb 2025 18:30:13 +0800 Subject: [PATCH 099/121] Update HeliosLz.md --- HeliosLz.md | 150 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 150 insertions(+) diff --git a/HeliosLz.md b/HeliosLz.md index c8eb137..bea409e 100644 --- a/HeliosLz.md +++ b/HeliosLz.md @@ -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:类似于银行确保所有账户信息和交易记录没有被篡改或遗漏。 + From 23e6aa307cefd4f7db54a98a82c0b356fb3fb95c Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Wed, 12 Feb 2025 10:30:29 +0000 Subject: [PATCH 100/121] Update commit status table --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b2bc004..18d7282 100644 --- a/README.md +++ b/README.md @@ -119,7 +119,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | hotoo | ✅ | ✅ | ✅ | ✅ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | JoscelynFarr | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | cherry-yl-sh | ✅ | ⭕️ | ⭕️ | ✅ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | -| HeliosLz | ⭕️ | ⭕️ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | +| HeliosLz | ⭕️ | ⭕️ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | lllapland | ✅ | ✅ | ⭕️ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | passer-byzhang | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | StillFantastic | ⭕️ | ✅ | ⭕️ | ✅ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | @@ -645,6 +645,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From 3d04284b77f07f1d032f0c319a9f0bfff394cdcb Mon Sep 17 00:00:00 2001 From: Zaki <140870617+marvelshan@users.noreply.github.com> Date: Wed, 12 Feb 2025 19:17:07 +0800 Subject: [PATCH 101/121] Read: Besu and Reth --- marvelshan.md | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/marvelshan.md b/marvelshan.md index 3b5e6c6..bc01a63 100644 --- a/marvelshan.md +++ b/marvelshan.md @@ -588,6 +588,77 @@ EELS 則是構建在執行層上的規範,可以用於運行測試,驗證新 ### 2025.02.12 +#### Besu +- **私密交易**:僅限於部署或調用智能合約,無法進行 Ether 轉帳。 +- **私密智能合約**:只有指定的參與方節點可以讀取和寫入合約內容。 +- **應用場景**:適用於聯盟鏈中,特定企業之間的隱私保護需求,例如投票系統。 + +- 基本知識 + - **Ethereum 智能合約**:智能合約是可編程的區塊鏈協議,用於執行合約條款。 + - **Ballot 智能合約**:一個投票合約範例,包含投票權分配、投票、查看結果等功能。 + - **Besu 私密智能合約**:與一般智能合約的區別在於,只有參與方節點可以操作合約。 + +- Besu 私密交易參數設定 + - **PrivateFrom**:發起方的公鑰。 + - **PrivateFor**:參與方的公鑰列表。 + - **Payload**:智能合約的操作數據,編碼為 16 進位字串。 + - **GasLimit**:交易所需的 Gas 上限。 + - **Nonce**:交易序號,確保交易唯一性。 + +- 發佈私密智能合約 + - **步驟**: + 1. **定義候選人名單**:例如 `["Alice", "Bob", "Kevin"]`。 + 2. **型態轉換**:將候選人名單轉換為智能合約所需的 `[32]byte` 格式。 + 3. **參數打包**:使用 ABI 打包合約的建構函數參數。 + 4. **產生 Payload**:將合約的 Bytecode 與打包後的參數結合。 + 5. **產生 Private Raw Transaction**:使用 `NewContractCreation` 創建交易。 + 6. **發佈合約**:透過 `eea_sendRawTransaction` 發佈合約,並取得合約地址。 + +- 寫入私密智能合約 + - **賦予投票權**: + - 使用 `giveRightToVote` 函數,賦予特定帳戶投票權。 + - 打包參數並產生 Payload,發送私密交易。 + - **投票**: + - 使用 `vote` 函數,進行投票。 + - 打包參數並產生 Payload,發送私密交易。 + +- 讀取私密智能合約 + - **查看投票結果**: + - 使用 `winnerName` 函數,查看當前最高票的候選人。 + - 透過 `priv_call` RPC 方法讀取合約數據。 +--- +#### Reth + +1. **Reth 使用 MDBX 作為主要的資料庫** + - MDBX(Lightning Memory-Mapped Database Extended)是一個高效能、低開銷的鍵值存儲系統,專門設計來處理高並發讀寫操作。 + - Reth 透過一層 **抽象(abstraction)**,讓底層存儲層具有靈活性,未來若要更換 MDBX,變更的成本可以降到最低。 + +2. **Codecs(編碼/解碼)** + - Reth 透過 **Compact Trait** 來進行數據壓縮,比如: + - 壓縮 **無符號整數(unsigned integers)** 的前導 0 + - 優化存儲 **區塊頭(headers)、訪問列表(access-lists)** 等數據 + +3. **DB Abstractions(資料庫抽象層)** + - **Database Trait** + - 提供 **唯讀** 或 **讀寫** 交易的基本 API,讓 Reth 操作底層數據時不需要直接依賴 MDBX,而是透過這一層抽象來與資料庫交互。 + + - **Cursor(游標)** + - 用於 **遍歷資料庫**,提高查詢和計算效率。 + - **特點**: + - 適用於 **Merkle Root 計算**,因為連續存取數據比隨機讀取快得多。 + - 在寫入大量數據時,**先排序再寫入** 會大幅提升性能,游標可以幫助我們更有效地管理這個過程。 + +**Reth執行擴展(ExEx):** + +Reth引入了執行擴展(Execution Extensions,簡稱ExEx),這是一個框架,用於構建高性能和複雜的鏈下基礎設施作為執行後掛鉤。可用於實現Rollup、索引器、MEV機器人等,與現有方法相比,代碼量減少了10倍以上。這使得開發人員能夠以標準化的方式構建可重用的ExEx,類似於Cosmos SDK模組或Substrate Pallets的工作方式。 + +參考: + +[如何透過 Private Transaction 操作 Hyperledger Besu 私密智能合約](https://medium.com/bsos-taiwan/how-to-use-besu-private-smart-contract-51e33c5b6d62) + +[Paradigm:介紹 Reth 執行擴充(ExEx),建構高效能的鏈下基礎設施](https://web3caff.com/zh_tc/archives/103079) + +### 2025.02.13 From 07dcdcf896a591ddbc5f5befdcc4e6261abc6d41 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Wed, 12 Feb 2025 11:18:09 +0000 Subject: [PATCH 102/121] Update commit status table --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 18d7282..72dcdd1 100644 --- a/README.md +++ b/README.md @@ -101,7 +101,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | Name | 2.06 | 2.07 | 2.08 | 2.09 | 2.10 | 2.11 | 2.12 | 2.13 | 2.14 | 2.15 | 2.16 | 2.17 | 2.18 | 2.19 | 2.20 | 2.21 | 2.22 | 2.23 | 2.24 | 2.25 | 2.26 | 2.27 | 2.28 | 3.01 | 3.02 | | ------------- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | -| brucexu-eth | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | +| brucexu-eth | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | PayFv | ⭕️ | ✅ | ✅ | ⭕️ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | chloezhu010 | ✅ | ✅ | ⭕️ | ⭕️ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | coratann | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | @@ -140,7 +140,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | Amberrrrrr | ✅ | ✅ | ⭕️ | ⭕️ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | | yahsinhuangtw | ✅ | ✅ | ✅ | ⭕️ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | 0xKarl98 | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | -| marvelshan | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | +| marvelshan | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | rogers3333 | ✅ | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | deporter | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | LouisTsai-Csie | ✅ | ✅ | ✅ | ✅ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | @@ -646,6 +646,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From f53138e2350f594364878756b3095e17bed190d8 Mon Sep 17 00:00:00 2001 From: Phoebe <51879065+Phoebe-dot@users.noreply.github.com> Date: Wed, 12 Feb 2025 19:40:45 +0800 Subject: [PATCH 103/121] Update phoebe-dot.md --- phoebe-dot.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phoebe-dot.md b/phoebe-dot.md index 4ea9c48..17b03a2 100644 --- a/phoebe-dot.md +++ b/phoebe-dot.md @@ -63,7 +63,7 @@ Note ### 2025.02.12 -Note +向AI 老师请教了一下关于ZK技术的底层逻辑,好难理解啊,是怎么把中文组成这样让人看不懂的句子的 😎 慢慢理解吧 大脑吸收需要时间 ### 2025.02.13 From 88fc3959e9687b0d0de6b12425bb99c4903cec52 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Wed, 12 Feb 2025 11:41:04 +0000 Subject: [PATCH 104/121] Update commit status table --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 72dcdd1..a7ebba3 100644 --- a/README.md +++ b/README.md @@ -177,7 +177,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | timfaner | ✅ | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | JeasonZhang | ✅ | ⭕️ | ⭕️ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | LikKee | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | -| phoebe-dot | ✅ | ✅ | ✅ | ✅ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | +| phoebe-dot | ✅ | ✅ | ✅ | ✅ | ⭕️ | ⭕️ | ✅ | | | | | | | | | | | | | | | | | | | | PubYuCHe | ✅ | ✅ | ⭕️ | ⭕️ | ⭕️ | ✅ | | | | | | | | | | | | | | | | | | | | | evanwu | ✅ | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | lknxt1995 | ✅ | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | @@ -647,6 +647,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From 7fe468885d8cda45990627d5497eda4df027de3a Mon Sep 17 00:00:00 2001 From: Chloe Zhu <157523999+Chloezhu010@users.noreply.github.com> Date: Wed, 12 Feb 2025 13:23:58 +0100 Subject: [PATCH 105/121] Update chloezhu010.md --- chloezhu010.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/chloezhu010.md b/chloezhu010.md index 2ffa977..132c031 100644 --- a/chloezhu010.md +++ b/chloezhu010.md @@ -175,5 +175,30 @@ timezone: Europe/Berlin - Discv5: the discovery protocol - a kademlia based DHT to store ENR records - ENR (ethereum node record) contain routing info to establish connections between peers +### 2025.02.12 +- Pros Cons of Account vs UTXO + - Account: How it works in high level + - the blockchain maintains a global state composed of accounts + - each account has a balance (in smart contract, storage and code) + - tx directly modify the state of these accounts + - UTXO: How it works in high level + - the blockchain tracks unspent tx outputs + - a UTXO represents a chunk of crypto that has been created as an output of a tx, but has not yet been spent + - tx consume existing UTXO and create new ones + - Comparison + | | Account-based | UTXO-based | + | -------- | ------- | ------- | + | state representation | global state of accounts & balances | set of unspent tx outputs | + | tx logic | directly modify account balance | consume UTXOs and create new ones | + | complexity | easier for dev, esp. for smart contractss | more complex for devs, esp. for advanced logic | + | parallelizability | limited, as txs modifying the same account must be processed sequentially | high, as independent UTXOs can be processed in parallel | + +- Why MTP then Verkle tree +- What's RLP? What's its purpose? +- What's SSZ? What's its purpose? + - What's union? + - What's ephemeral header? +- What's discv5? +- From efe2ce6d0961aa62f61dffbcfafa5e5edd87db76 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Wed, 12 Feb 2025 12:24:14 +0000 Subject: [PATCH 106/121] Update commit status table --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a7ebba3..06eb213 100644 --- a/README.md +++ b/README.md @@ -103,7 +103,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | ------------- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | | brucexu-eth | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | PayFv | ⭕️ | ✅ | ✅ | ⭕️ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | -| chloezhu010 | ✅ | ✅ | ⭕️ | ⭕️ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | +| chloezhu010 | ✅ | ✅ | ⭕️ | ⭕️ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | coratann | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | luffythink | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | Henry | ✅ | ✅ | ✅ | ✅ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | @@ -648,6 +648,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From 6f84e7a567b0e5200a41e8f609ce1b73c3b44c53 Mon Sep 17 00:00:00 2001 From: Chloe Zhu <157523999+Chloezhu010@users.noreply.github.com> Date: Wed, 12 Feb 2025 13:24:16 +0100 Subject: [PATCH 107/121] Update chloezhu010.md --- chloezhu010.md | 1 + 1 file changed, 1 insertion(+) diff --git a/chloezhu010.md b/chloezhu010.md index 132c031..7107df4 100644 --- a/chloezhu010.md +++ b/chloezhu010.md @@ -186,6 +186,7 @@ timezone: Europe/Berlin - a UTXO represents a chunk of crypto that has been created as an output of a tx, but has not yet been spent - tx consume existing UTXO and create new ones - Comparison + | | Account-based | UTXO-based | | -------- | ------- | ------- | | state representation | global state of accounts & balances | set of unspent tx outputs | From 262ca6bd6eaccf7cf2d4504c3504987c40b58782 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Wed, 12 Feb 2025 12:24:33 +0000 Subject: [PATCH 108/121] Update commit status table --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 06eb213..ee57ff7 100644 --- a/README.md +++ b/README.md @@ -649,6 +649,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From e2cf129884e90a868a7a60b42b57fefab4084939 Mon Sep 17 00:00:00 2001 From: yck Date: Wed, 12 Feb 2025 20:36:09 +0800 Subject: [PATCH 109/121] Update KieSun.md --- KieSun.md | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/KieSun.md b/KieSun.md index 3fe1657..1537bb7 100644 --- a/KieSun.md +++ b/KieSun.md @@ -297,4 +297,52 @@ EIP-7702 和 EIP-3074 共同构成了以太坊账户抽象路线图的重要组 这个提案代表了以太坊在账户抽象方向上的重要一步,将为整个生态系统带来深远的影响。[1] ``` +### 2025.02.12 + +``` +# 以太坊共识层架构总结 + +## 核心主题 +本文主要介绍了以太坊共识层(CL)的架构设计、共识机制和工作原理。 + +## 关键要点 + +### 1. 共识协议架构 +- 以太坊采用双重共识协议组合:LMD GHOST 和 Casper FFG,合称为 Gasper [1] +- LMD GHOST 主要提供活性(liveness),确保链的持续运行 +- Casper FFG 提供安全性(safety),通过定期确认来保护链 [4] + +### 2. 分叉选择机制 +- 使用分叉选择规则来帮助网络达成一致的线性历史 [1][2] +- 主要通过选择"头区块"(head block)来隐式选择一个分支 +- 所有被选择的区块必须符合协议规则且其所有祖先区块也必须有效 [2] + +### 3. 系统架构组件 +主要包含两个核心组件 [6]: +- Beacon 节点:负责协调权益证明共识,与其他节点通信 +- 验证者:需要质押32 ETH,负责在PoS系统中提议区块 + +### 4. 状态转换机制 +- 每个节点通过应用状态转换函数来更新状态 [7] +- Beacon链是基于时隙(slot)驱动的,包含以下转换: + - 每时隙转换 + - 每区块转换 + - 每纪元转换 [8] + +### 5. 系统特性 +- 在网络条件良好时同时提供安全性和活性 +- 在网络分区等问题发生时优先保证活性 +- 执行层(EL)和共识层(CL)并行运行,通过Engine-API进行通信 [6] + +## 技术亮点 +- 采用模块化设计,将共识层和执行层分离 +- 通过双重共识协议互补,在实践中取得良好效果 +- 清晰的状态转换机制确保网络一致性 [7][8] + +## 实际应用 +- 以太坊主网是生产环境的实例,管理真实的ETH +- 提供测试网络供开发者和验证者测试新功能 +- 支持多客户端实现,提高系统的多样性和稳定性 [6] +``` + From b0291e084c35b077e606f8a26e2668454273cab6 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Wed, 12 Feb 2025 12:36:24 +0000 Subject: [PATCH 110/121] Update commit status table --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index ee57ff7..e038e44 100644 --- a/README.md +++ b/README.md @@ -125,7 +125,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | StillFantastic | ⭕️ | ✅ | ⭕️ | ✅ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | | debugzhao | ✅ | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | StarryDeserts | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | -| KieSun | ✅ | ✅ | ✅ | ✅ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | +| KieSun | ✅ | ✅ | ✅ | ✅ | ✅ | ⭕️ | ✅ | | | | | | | | | | | | | | | | | | | | k66 | ✅ | ✅ | ⭕️ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | DVDguzhou | ✅ | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | armada2013 | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | @@ -650,6 +650,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From 3e71c46ccddca9399de593c851e5da703ba2d0ff Mon Sep 17 00:00:00 2001 From: Chloe Zhu <157523999+Chloezhu010@users.noreply.github.com> Date: Wed, 12 Feb 2025 13:45:02 +0100 Subject: [PATCH 111/121] Update chloezhu010.md --- chloezhu010.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/chloezhu010.md b/chloezhu010.md index 7107df4..93c495d 100644 --- a/chloezhu010.md +++ b/chloezhu010.md @@ -194,7 +194,21 @@ timezone: Europe/Berlin | complexity | easier for dev, esp. for smart contractss | more complex for devs, esp. for advanced logic | | parallelizability | limited, as txs modifying the same account must be processed sequentially | high, as independent UTXOs can be processed in parallel | -- Why MTP then Verkle tree +- Why MPT then Verkle tree + - MPT + - a data structure, that combines merkle tree (provide cryptographic proofs to verify the data integrity) and patricia trie (a compressed trie that stores key-value pairs) + - Verkle tree + - more advanced data structure to address the issue of MPT + - vector commitment + merkle tree, it uses vector commitment (eg. polynomial commitments) to create smaller & more efficient proofs + - Comparison + + | | MPT | Verkle tree | + | -------- | ------- | ------- | + | proof size | large (scale with tree depth) | small (constant or logarithmic) | + | efficiency | less efficient for deep trees | more efficient for deep trees | + | stateless clients | inefficient due to large proof | efficient due to compact proof | + | scalability | limited by proof size & depth | better scalability for large states | + | cryptographic basis | merkle proof (hash-based) | vector commitment (eg. polynomial) | - What's RLP? What's its purpose? - What's SSZ? What's its purpose? - What's union? From 9027e2a121839e654fa3304d24b3f0ccec31f4c9 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Wed, 12 Feb 2025 12:45:19 +0000 Subject: [PATCH 112/121] Update commit status table --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index e038e44..555d0fc 100644 --- a/README.md +++ b/README.md @@ -651,6 +651,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From 9ef3f98713ef1943b0fcc25bcc1f7521eecb89c7 Mon Sep 17 00:00:00 2001 From: Yahsin Date: Wed, 12 Feb 2025 21:16:51 +0800 Subject: [PATCH 113/121] Update yahsinhuangtw.md --- yahsinhuangtw.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/yahsinhuangtw.md b/yahsinhuangtw.md index dc13bd3..32f017e 100644 --- a/yahsinhuangtw.md +++ b/yahsinhuangtw.md @@ -50,4 +50,16 @@ https://youtu.be/UihMqcj-cqc?si=MqL3ac9Xg30LPJmE 這裡要強調的重點是,merkle tree 在以太坊驗證資料上持續扮演重要角色。以太坊技術底層中到處都有使用到 merkle tree,主要用途是在以太坊的驗證資料方面。你要驗證有龐大的 40 gb 的 state 資料的某一塊小小的資料時,你不需要全部 40 gb 都撈出來驗證,只要一小塊 tree 的某些節點資料拿出來就可以驗證。 +### 2025.02.12 + +今日晚上殘酷學習時間,拜讀了 Nic Lin 林老師今天發表的新文章「Ethereum Pectra 硬分叉介紹」https://medium.com/taipei-ethereum-meetup/ethereum-pectra-eips-introduction-1f90f4ea25d5 + +Screenshot 2025-02-12 at 9 12 55 PM + +中間段落提到,EIP-7251: Increase the MAX_EFFECTIVE_BALANCE 這段,提及 EIP-7251 之後,質押下限(MIN_ACTIVATION_BALANCE)仍然是 32 ETH,但上限(MAX_EFFECTIVE_BALANCE)大幅調高為 2048 ETH。這裡意思是之後就可以質押 32~2048 ETH 這麼大一個範圍。 + +Screenshot 2025-02-12 at 9 12 16 PM + +還有一段提到 EIP-7702 這個改進,最關鍵的改動是,之後 EOA 可以搖身一變成合約。老師文中舉例,如果你填一個 Safe 合約地址,那你的 EOA 就會變身成為 Safe 合約。 + From 041ad5bd7c3a20827ada12f5c9825dc0dd19708d Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Wed, 12 Feb 2025 13:17:07 +0000 Subject: [PATCH 114/121] Update commit status table --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 555d0fc..d1ff09a 100644 --- a/README.md +++ b/README.md @@ -138,7 +138,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | chyyynh | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | frankmint2024 | ✅ | ⭕️ | ✅ | ⭕️ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | | Amberrrrrr | ✅ | ✅ | ⭕️ | ⭕️ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | -| yahsinhuangtw | ✅ | ✅ | ✅ | ⭕️ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | +| yahsinhuangtw | ✅ | ✅ | ✅ | ⭕️ | ✅ | ⭕️ | ✅ | | | | | | | | | | | | | | | | | | | | 0xKarl98 | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | marvelshan | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | rogers3333 | ✅ | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | @@ -652,6 +652,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From 04676c5ff65db7cd8eb78755160b03bb70470889 Mon Sep 17 00:00:00 2001 From: D9 <33143119+beyond009@users.noreply.github.com> Date: Wed, 12 Feb 2025 21:57:30 +0800 Subject: [PATCH 115/121] Update d0d0d9.md --- d0d0d9.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/d0d0d9.md b/d0d0d9.md index 4a1e29e..fd76fe9 100644 --- a/d0d0d9.md +++ b/d0d0d9.md @@ -145,6 +145,29 @@ An attestation contains both an LMD GHOST vote and an FFG vote. Optimally, all [共识介绍视频](https://www.youtube.com/watch?v=5gfNUVmX3Es) +### 2025.02.12 + +#### Research and Roadmap + +[Ethereum Roadmap](https://github.com/eth-protocol-fellows/protocol-studies/blob/main/docs/eps/presentations/week5.pdf) + +##### Scourge +(very) brief overview of MEV +ePBS / Inclusion Lists / MEV Burn +Max EB, Stake capping + +##### Verge +Verkle Trees +SNARKify everything + +##### Purge +【EIP-4444](https://eips.ethereum.org/EIPS/eip-4444) +Protocol simplifications + +##### Splurge +[EIP-1559 endgame](https://ethresear.ch/t/multidimensional-eip-1559/11651) +Account Abstraction +Deep cryptography From 2d54e666baace0a85f4a686cf4cf33d24fde9ed7 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Wed, 12 Feb 2025 13:57:48 +0000 Subject: [PATCH 116/121] Update commit status table --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d1ff09a..7d34da4 100644 --- a/README.md +++ b/README.md @@ -107,7 +107,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | coratann | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | luffythink | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | Henry | ✅ | ✅ | ✅ | ✅ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | -| d0d0d9 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | +| d0d0d9 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | henryleo | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | zhouCode | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | mrmign | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | @@ -653,6 +653,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From 46debf042d88930792f504e8a981e668688c259d Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Wed, 12 Feb 2025 13:59:52 +0000 Subject: [PATCH 117/121] Update commit status table --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 7d34da4..b70e07a 100644 --- a/README.md +++ b/README.md @@ -155,7 +155,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | jjeejj | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | buctor41 | ✅ | ✅ | ⭕️ | ⭕️ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | | zhwindy | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | -| rectinajh | ✅ | ✅ | ✅ | ⭕️ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | +| rectinajh | ✅ | ✅ | ✅ | ⭕️ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | letsgoexplore | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | Lvista | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | lanpan999 | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | @@ -654,6 +654,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From 8d3fe0fb00abc776d502a400c4e88077523d001f Mon Sep 17 00:00:00 2001 From: jjeejj Date: Wed, 12 Feb 2025 22:18:28 +0800 Subject: [PATCH 118/121] jjeejj add 2025.02.12 --- jjeejj.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/jjeejj.md b/jjeejj.md index 3fcad67..42f8f69 100644 --- a/jjeejj.md +++ b/jjeejj.md @@ -104,4 +104,10 @@ timezone: Pacific/Auckland # 新西兰标准时间 (UTC+12) 4. 网络同步 5. 主要的参与者是验证者 +### 2025.02.12 + +1. Week4: 主要讲测试和安全方面 + 1. 存在很多工具,都没有用过啊,感觉有点头大 + + From 316fedc018697f752d43288861b1a0e11d7a8794 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Wed, 12 Feb 2025 14:19:03 +0000 Subject: [PATCH 119/121] Update commit status table --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b70e07a..48e5c3d 100644 --- a/README.md +++ b/README.md @@ -152,7 +152,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | huahuahua1223 | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | | dethan3 | ✅ | ✅ | ✅ | ⭕️ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | Azleal | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | -| jjeejj | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | +| jjeejj | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | buctor41 | ✅ | ✅ | ⭕️ | ⭕️ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | | | zhwindy | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | rectinajh | ✅ | ✅ | ✅ | ⭕️ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | @@ -655,6 +655,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 + From 41a497757faba32ff6b2f2ee97f6fe603f38fb66 Mon Sep 17 00:00:00 2001 From: ghx1104 <123364309+ghx1104@users.noreply.github.com> Date: Wed, 12 Feb 2025 22:19:18 +0800 Subject: [PATCH 120/121] Update ghx1104.md --- ghx1104.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/ghx1104.md b/ghx1104.md index 609e673..bc75e59 100644 --- a/ghx1104.md +++ b/ghx1104.md @@ -462,4 +462,32 @@ Splurge 包含一些额外的改进,进一步提升以太坊的功能: 使用 systemd 配置客户端自动启动,结合 Prometheus 和 Grafana 进行节点监控。 +### 2025.02.12 + +#### week6 + + +1. Hsiao-Wei Wang on Consensus Specs + +Hsiao-Wei Wang 是一位在以太坊共识协议方面具有深厚经验的研究者,主要关注以太坊的共识层(Consensus Layer)。他在演讲中可能会讨论 以太坊共识规范(Consensus Specs),这涉及到如何确保网络参与者在没有中央权威的情况下达成一致,以及如何保持网络的安全性和稳定性。 + +共识规范主要包括: + • 权益证明(PoS):以太坊从工作量证明(PoW)转向 PoS 后,如何确保验证者的选举和网络的持续一致性。 + • 信标链(Beacon Chain):用于协调共识层的机制,它通过区块链上的验证者来确保网络状态的同步。 + • 区块生成和验证:如何验证交易和生成新区块,并在分布式网络中保持一致。 + +在此话题中,Hsiao-Wei Wang 可能还会讨论 共识算法的改进、安全性分析 和 网络扩展性 等问题。 + +2. Sam Wilson on EELS + +Sam Wilson 可能会讨论 EELS(Ethereum Execution Layer Security),这是一个专注于提高以太坊执行层(Execution Layer)安全性的议题。执行层处理以太坊网络中的所有交易、智能合约和计算,因此其安全性至关重要。 + +EELS 可能涉及的内容包括: + • 智能合约的安全性:确保合约执行不被恶意攻击利用。 + • 交易处理和验证:确保交易的有效性和可靠性,避免恶意交易影响整个网络。 + • 数据存储和状态管理:确保以太坊节点在处理大量数据时,仍能保持高效且安全的操作。 + • 攻击防范机制:例如防止重放攻击、闪电贷攻击等。 + +Sam Wilson 可能会讨论如何加强执行层安全性,以确保以太坊网络能够处理更多的交易负载,同时保护用户和验证者免受潜在的攻击。 + From d87fe386d2ec61883d3f5fafdf880fc0974c7da4 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Wed, 12 Feb 2025 14:19:34 +0000 Subject: [PATCH 121/121] Update commit status table --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 48e5c3d..91a71a5 100644 --- a/README.md +++ b/README.md @@ -111,7 +111,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 | henryleo | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | | zhouCode | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | mrmign | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | -| ghx1104 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | +| ghx1104 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | Coooder-Crypto | ✅ | ✅ | ✅ | ✅ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | | | rayjun | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | | | CJC824 | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | | | | | | @@ -656,6 +656,7 @@ Telegram:https://t.me/ETHPandaOrg/5427 +