Skip to content

Commit

Permalink
Some updateds
Browse files Browse the repository at this point in the history
  • Loading branch information
hsyodyssey committed Oct 4, 2022
1 parent d77d05f commit 1366a9d
Show file tree
Hide file tree
Showing 9 changed files with 59 additions and 36 deletions.
2 changes: 1 addition & 1 deletion CN/00_geth.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

Geth是基于Go语言开发以太坊的客户端,它实现了Ethereum协议(黄皮书)中所有需要的实现的功能,包括状态管理,挖矿,网络通信,密码学模块,数据库模块,EVM解释器等模块。而Go-ethereum是包含了Geth在内的一个代码库,它包含了Geth本身,以及编译Geth所需要的其他代码段。

Geth实现了Ethereum的运行逻辑,同时提供了高层的API方便用户调用,我们需要的就是从Ethereum的主业务逻辑出发深入Go-ethereum代码库,沿着Ethereum主工作逻辑,以及高层的API的底层实现,从而理解Ethereum具体实现的细节。
Geth实现了Ethereum的运行逻辑,同时提供了高层的API方便用户调用,我们需要的就是从Ethereum的主业务逻辑出发深入Go-ethereum代码库,沿着Ethereum主工作逻辑,深入高层的API的底层实现,从而理解Ethereum具体实现的细节。

### Geth CLI

Expand Down
1 change: 0 additions & 1 deletion CN/02_transaction.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
# 一个Transaction的生老病死/Transaction CRUD


## General

Transaction是Ethereum
Expand Down
2 changes: 2 additions & 0 deletions CN/10_tire_statedb.md → CN/10_statedb_trie.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ type SecureTrie struct {

值得注意的是一个关键函数Prove的实现并不在这两个Trie的定义文件中,而是位于trie/proof.go文件中。

## StateDB

## Trie Operations

### Insert
Expand Down
16 changes: 12 additions & 4 deletions CN/13_rpc.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,17 @@
# RPC (远程过程调用)
# Ethereum中的API 调用: RPC and IPC

## Background
## RPC (远程过程调用)

### Background

一个应用可以通过RPC(Remote Procedure Call)的方式来调用某一个go-ethereum的实例(instance)。 通常,go-ethereum默认的对外暴露的RPC端口地址为8545。

## Appendix
在example/deploy/SendTransaction.go中,我们展示了一个通过RPC调用go-ethereum实例来发送Transaction的例子。

## IPC (进程间通信)

在example/deploy/SendTransaction.go中,我们展示了一个通过RPC调用go-ethereum实例来发送Transaction的例子。
### Background

IPC(Inter-Process Communication) 用于两个进程间进行通信,和共享数据。与RPC不同的是,IPC主要用在同一台宿主机上的不同的进程间的通信。

## Appendix
5 changes: 0 additions & 5 deletions CN/14_ipc.md

This file was deleted.

File renamed without changes.
File renamed without changes.
28 changes: 23 additions & 5 deletions CN/30_geth_private_network.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,21 @@

## 创建 Private 网络

首先创建一个包含创世state信息的genesis.json文件,如下所示。
### 共识算法的选择

Geth支持多种共识算法,包括基于PoA(Proof-of-Authority)的Clique协议,以及PoW的Ethash协议。Clique协议在生成区块的时候没有Hash计算的压力,非常适合用于搭建测试链。比如,Ethereum两个著名的测试网络Rinkeby and Görli都是基于POA的共识算法搭建的。

值得注意的是,在使用Clique协议作为共识算法的网络中,mining Block是没有收益的。所以,如果你想讲Mining Reward作为你网络中的一项特性的话,请使用的Ethash协议。

### 构建创始区块

首先创建一个包含创世state信息的genesis.json文件,如下所示。注意,本例中的Genesis文件没有设置共识算法,所以Geth会默认使用Ethash协议作为共识算法。

在genesis.json中,config字段决定了整个链的一些基本的设定,通常这些设定在创世区块初始化之后之后是不可修改的。我们来介绍一下其中比较重要的一些设置。

首先是chainId字段。我们知道目前在市面上除了Ethereum主网之外,还有很多使用直接使用Geth,或者基于定制化修改的Geth来运行的公有/私有网络。这些客制化区块链网络非常之多,涉及到各个层面,比如Ethereum官方运营的两个测试链网络,币安运行的Binance Smart Chain,以及一些Layer-2的节点,比如Optimism。正如我们之前提到的,考虑到Geth节点之间的通信都是依赖于P2P网络传输,假如两个Geth-base的网络使用了相同的创始数据进行初始化,那么势必会造成混乱,网络数据同步带来混乱。因此,Ethereum的开发人员设计了chainId就是来解决这个问题。chainId用于在P2P的网络世界中来区分这些基于不同的版本/创世节点的网络信息,起到了网络身份证的作用。比如Ethereum主网的chainId是1,Binance Smart Chain主网的chainId是56。关于不同chainId对应的网络信息,可以参考这个[网站](https://chainlist.org/)。

alloc字段用于给一些账户初始化一些本网络的Native Token。在创世区块生成之后,网络中的Native Token产生的来源只有Mining。

```json
{
Expand All @@ -24,7 +38,7 @@
}
},
"coinbase": "0x0000000000000000000000000000000000000000",
"difficulty": "0x20000",
"difficulty": "0x200",
"extraData": "",
"gasLimit": "0x2fefd8",
"nonce": "0x00000000000000755",
Expand All @@ -34,16 +48,20 @@
}
```

使用初始化命令:
### 构建网络

#### 初始化创世区块

```cmd
geth init --datadir <Datadir> genesis.json
```

运行节点:
#### 运行节点

```cmd
geth --datadir <Datadir> --networkid <networkid> --nodiscover --http --rpc --rpcport "8545" --rpcaddr "0.0.0.0" --rpccorsdomain "*" --rpcapi "eth,web3,net,personal,miner" console 2
```

## 使用区块链浏览器来查询链上数据
## Monitoring

区块链浏览器可以方便的查询链上数据。一般来说,它们通过go-ethereum实例的RPC接口来调用,实例的API,从而获取最新的链上信息。
41 changes: 21 additions & 20 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,48 +54,49 @@ Blockchain 系统在设计层面借鉴了很多数据库系统中的设计逻辑

## Contents(暂定)

### PART ONE - General Source Code Analysis: Basic Components
### PART ONE - General Source Code Analysis: Basic Workflow and Data Components

- [00_万物的起点从geth出发: Basic Geth](CN/00_geth.md)
- [01_State-based 模型 & Account](CN/01_account.md)
- [02_Transaction是怎么被打包的: 一个Transaction的生老病死](CN/02_transaction.md)
- [03_从Block到Blockchain: 区块链数据结构的构建](CN/03_block_blockchain.md)
- [02_Transaction: 一个Transaction的生老病死](CN/02_transaction.md)
- [03_从Block到Blockchain: 链状区块结构的构建](CN/03_block_blockchain.md)
- [04_一个新节点是怎么加入网络并同步区块的](CN/04_p2p_net_node_sync.md)
- [05_一个网吧老板是怎么用闲置的电脑进行挖矿的](CN/05_mining_hash_gpu.md)

### PART TWO - General Source Code Analysis: Services
### PART TWO - General Source Code Analysis: Lower-level Services

- [10_构建StateDB的实例](CN/10_trie_statedb.md)
- [10_StateDB的实例是如何构建的](CN/10_statedb_trie.md)
- [11_Blockchain的数据是如何持久化的](CN/11_leveldb_in_practice.md)
- [12_Signer一个签名者的实现](CN/12_signer.md)
- [13_如何实现节点的RPC调用](CN/13_rpc.md)
- [14_如何实现节点的IPC调用](CN/14_ipc.md)
- [12_Signer: 如何证明Transaction是合法的]
- [13_节点的调用 RPC and IPC](CN/13_rpc_ipc.md)
- [14_深入EVM: 设计与实现]

### PART THREE - Advanced Topics

- [20_结合BFT Consensus 解决拜占庭将军问题](CN/20_bft_consensus.md)
- [21_Plasma与 Zk Rollup](CN/21_zkp_Plasma.md)
- [22_ADS](CN/22_ads_merkel.md)
- [20_结合BFT Consensus 解决拜占庭将军问题]
- [21_从Plasma到Rollup](CN/21_rollup.md)
- [22_Authenticated data structures Brief](CN/22_ads.md)
- [23_Bloom Filter](CN/23_bloom_filter.md)
- [24_图灵机和停机问题](CN/24_turing_halting.md)
- [24_图灵机和停机问题]
- [25_Log-structured merge-tree in Ethereum](CN/25_lsm_tree.md)
- [26_Ethereum Transaction Concurrency](CN/26_txn_concurrency.md)
- [26_Concurrency in Ethereum Transaction](CN/26_txn_concurrency.md)
- [27_Zero-knowledge Proof]

### PART FOUR - Ethereum in Practice

- [30_使用geth构建一个私有网络](CN/30_geth_private_network.md)
- [31_如何编写Solidity语言](CN/31_solidity_in_practice.md)
- [32_使用预言机(Oracle)构建随机化的DApp](CN/32_oracle.md)
- [33_Query On Ethereum Data](CN/33_query.md)
- [32_使用预言机(Oracle)构建随机化的DApp]
- [33_Query On Ethereum Data]
- [34_layer2 in Practice]

### PART FIVE - APPENDIX

- [40_FQA](#tips)
- [41_Ethereum System Tunning](CN/41_system_tunning.md)
- [42_go-ethereum的开发思想](CN/42_developer_view.md)
- [43_Metrics in Ethereum](CN/43_metrics.md)
- [44_Golang with Ethereum](CN/44_golang_ethereum.md)

- [41_Ethereum System Tunning]
- [42_go-ethereum的开发思想]
- [43_Metrics in Ethereum]
- [44_Golang & Ethereum]
-----------------------------------------------------------

## How to measure the level of understanding of a system?
Expand Down

0 comments on commit 1366a9d

Please sign in to comment.