Skip to content

Commit cb2e9da

Browse files
committed
init
1 parent 4319363 commit cb2e9da

File tree

2 files changed

+82
-79
lines changed

2 files changed

+82
-79
lines changed

13区块链/原理/原理.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
---
33

44
## **1. 什么是区块链?**
5-
**区块链(Blockchain)** 是一种去中心化的、分布式账本技术(DLT),由**一系列区块(Blocks)**按时间顺序链接而成,每个区块包含一组交易数据,并通过密码学算法保证不可篡改。
5+
**区块链(Blockchain)** 是一种去中心化的、分布式账本技术(DLT),由 **一系列区块(Blocks)** 按时间顺序链接而成,每个区块包含一组交易数据,并通过密码学算法保证不可篡改。
66

77
### **📌 主要特点**
88
**去中心化(Decentralization)**:无需中心化机构(如银行)管理
@@ -14,7 +14,7 @@
1414
---
1515

1616
## **2. 区块链的基本结构**
17-
区块链由多个**区块(Block)** 组成,每个区块存储着交易数据,并通过**哈希值(Hash)**相互链接。
17+
区块链由多个**区块(Block)** 组成,每个区块存储着交易数据,并通过 哈希值(Hash)相互链接。
1818

1919
### **📌 区块结构**
2020
| **字段** | **描述** |

13区块链/原理/原理2.md

Lines changed: 80 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -12,32 +12,32 @@
1212
- 双重支付检测:当网络发现 **相同输入地址的交易** 被提交两次,会 **拒绝第二笔交易**,防止双花。
1313

1414
## 3️⃣ **双花攻击的常见方式**
15-
| **攻击方式** | **攻击原理** | **防御方法** |
16-
|------------|------------|------------|
17-
| **1. 直接攻击(Race Attack)** | 攻击者快速广播两笔交易,让商家接受未确认交易 | 等待 **多个区块确认** 后再交付商品 |
18-
| **2. 51% 攻击** | 攻击者掌控 **超过 51% 算力**,可以篡改已确认交易 | **提高网络算力,采用 PoS 机制** 降低攻击成本 |
19-
| **3. Finney 攻击** | 攻击者先挖出包含自己的交易的区块,再花费这笔钱 | 仅接受 **已确认交易** |
20-
| **4. 交易回滚攻击** | 交易确认后,攻击者创建更长的分叉链来回滚交易 | 采用 **6 个区块确认** 规则 |
15+
| **攻击方式** | **攻击原理** | **防御方法** |
16+
| ------------------------------ | ------------------------------------------------ | -------------------------------------------- |
17+
| **1. 直接攻击(Race Attack)** | 攻击者快速广播两笔交易,让商家接受未确认交易 | 等待 **多个区块确认** 后再交付商品 |
18+
| **2. 51% 攻击** | 攻击者掌控 **超过 51% 算力**,可以篡改已确认交易 | **提高网络算力,采用 PoS 机制** 降低攻击成本 |
19+
| **3. Finney 攻击** | 攻击者先挖出包含自己的交易的区块,再花费这笔钱 | 仅接受 **已确认交易** |
20+
| **4. 交易回滚攻击** | 交易确认后,攻击者创建更长的分叉链来回滚交易 | 采用 **6 个区块确认** 规则 |
2121

2222
# 📌 UTXO 模型 vs. Account 模型
2323

2424
## 1️⃣ **基本概念**
25-
| 模型 | 定义 |
26-
|------|------|
25+
| 模型 | 定义 |
26+
| -------------------------- | ---------------------------------------------------------------------------------------------------------- |
2727
| **UTXO(未花费交易输出)** | 每个交易的输出可以作为新的交易输入,所有未花费的交易输出构成账户余额。适用于简单的转账交易,易于并行处理。 |
28-
| **Account(账户模型)** | 账户有余额字段,交易直接修改账户余额,并记录状态变化。适用于智能合约。 |
28+
| **Account(账户模型)** | 账户有余额字段,交易直接修改账户余额,并记录状态变化。适用于智能合约。 |
2929

3030
## 3️⃣ **对比分析**
31-
| 对比项 | **UTXO 模型(比特币)** | **账户模型(以太坊)** |
32-
|--------|-----------------|-----------------|
33-
| **存储方式** | UTXO 存在全网,未花费即有效 | 账户存储在全局状态 |
34-
| **交易结构** | 输入/输出模型,每笔交易花费 UTXO 生成新的 UTXO | 账户余额更新,无需 UTXO |
35-
| **计算余额** | 需遍历 UTXO 集合累加 | 直接读取账户余额 |
36-
| **隐私性** | 交易链条可追踪,匿名性较好 | 账户地址固定,隐私性较低 |
37-
| **扩展性** | 轻量级存储,易并行处理 | 状态存储大,难以并行 |
38-
| **智能合约** | **不支持** | **支持** |
39-
| **交易费用** | 交易手续费基于 UTXO 大小 | 交易手续费 Gas 计算 |
40-
| **双花攻击防范** | 依赖 UTXO 是否已花费,防止双花 | 通过 nonce 确保交易顺序 |
31+
| 对比项 | **UTXO 模型(比特币)** | **账户模型(以太坊)** |
32+
| ---------------- | ---------------------------------------------- | ------------------------ |
33+
| **存储方式** | UTXO 存在全网,未花费即有效 | 账户存储在全局状态 |
34+
| **交易结构** | 输入/输出模型,每笔交易花费 UTXO 生成新的 UTXO | 账户余额更新,无需 UTXO |
35+
| **计算余额** | 需遍历 UTXO 集合累加 | 直接读取账户余额 |
36+
| **隐私性** | 交易链条可追踪,匿名性较好 | 账户地址固定,隐私性较低 |
37+
| **扩展性** | 轻量级存储,易并行处理 | 状态存储大,难以并行 |
38+
| **智能合约** | **不支持** | **支持** |
39+
| **交易费用** | 交易手续费基于 UTXO 大小 | 交易手续费 Gas 计算 |
40+
| **双花攻击防范** | 依赖 UTXO 是否已花费,防止双花 | 通过 nonce 确保交易顺序 |
4141

4242
---
4343

@@ -52,81 +52,84 @@
5252
- 侧链验证(如 Plasma 方案)
5353
- 零知识证明(ZKP) 场景
5454

55+
### MPT树结构
56+
![树结构](https://raw.githubusercontent.com/Ice-Storm/ice-storm.github.io/master/images/mpt/4.png)
57+
5558
## 为什么区块链难以被篡改?
5659

57-
| **保障机制** | **作用** |
58-
|--------------|---------|
59-
| **哈希算法** | 任何篡改都会导致哈希值变化 |
60-
| **链式结构** | 依赖前一个区块的哈希,篡改一个区块会影响整个链 |
61-
| **共识机制** | 需要多数节点同意,攻击成本极高 |
62-
| **去中心化** | 数据分布在多个节点,篡改需控制整个网络 |
60+
| **保障机制** | **作用** |
61+
| ------------ | ---------------------------------------------- |
62+
| **哈希算法** | 任何篡改都会导致哈希值变化 |
63+
| **链式结构** | 依赖前一个区块的哈希,篡改一个区块会影响整个链 |
64+
| **共识机制** | 需要多数节点同意,攻击成本极高 |
65+
| **去中心化** | 数据分布在多个节点,篡改需控制整个网络 |
6366

6467
## 以太坊区块存储
65-
| 对比项 | LevelDB(Geth) | RocksDB(Erigon) |
66-
|-------------|-----------------|-----------------|
67-
| **存储结构** | LSM-Tree | LSM-Tree |
68-
| **读取性能** | 适中 | 更快(批量优化) |
69-
| **写入性能** | 适中 | 更快(优化合并写入) |
70-
| **磁盘占用** | 较大 | 更小(更高效压缩) |
71-
| **适用场景** | 轻量级以太坊节点 | 高性能全节点 |
68+
| 对比项 | LevelDB(Geth) | RocksDB(Erigon) |
69+
| ------------ | ---------------- | -------------------- |
70+
| **存储结构** | LSM-Tree | LSM-Tree |
71+
| **读取性能** | 适中 | 更快(批量优化) |
72+
| **写入性能** | 适中 | 更快(优化合并写入) |
73+
| **磁盘占用** | 较大 | 更小(更高效压缩) |
74+
| **适用场景** | 轻量级以太坊节点 | 高性能全节点 |
7275

7376
### 以太坊数据存储类型
7477

75-
| 数据类型 | 说明 |
76-
|-----------|------------------------------------------------|
77-
| **区块数据** |**区块哈希** 作为键,存储区块头、交易列表等 |
78-
| **状态数据** | 账户余额、合约存储,存储在 **Merkle Patricia Trie**|
79-
| **交易数据** |**交易哈希** 作为键,存储交易详细信息 |
80-
| **索引数据** | 交易索引、日志索引,加速查询 |
78+
| 数据类型 | 说明 |
79+
| ------------ | ------------------------------------------------------ |
80+
| **区块数据** |**区块哈希** 作为键,存储区块头、交易列表等 |
81+
| **状态数据** | 账户余额、合约存储,存储在 **Merkle Patricia Trie**|
82+
| **交易数据** |**交易哈希** 作为键,存储交易详细信息 |
83+
| **索引数据** | 交易索引、日志索引,加速查询 |
8184

8285

8386
## **Merkle Tree vs. Merkle Patricia Trie 对比**
8487

85-
| **对比项** | **Merkle Tree** | **Merkle Patricia Trie (MPT)** |
86-
|------------------|--------------------------------|----------------------------------|
87-
| **数据结构** | 二叉树(Binary Tree) | 前缀树(Trie)+ Merkle Hash |
88-
| **分支结构** | 每个节点最多有 **2** 个子节点 | 每个节点最多有 **16** 个子节点(Hex 0-15) |
89-
| **存储内容** | 叶子节点存储哈希值 | 叶子节点存储 **Key-Value 数据** |
90-
| **哈希计算方式** | 叶子节点存储数据的哈希,父节点存储子节点哈希的组合 | 每个节点存储 **Key-Value 哈希** |
91-
| **主要用途** | 区块链 **交易和区块哈希验证**(比特币) | 以太坊 **账户状态、存储、交易索引** |
92-
| **路径查找** | 需要遍历整个树结构 | 可以快速定位到具体的 Key |
93-
| **效率** | 适用于批量验证数据 | 适用于 **快速查询 & 修改** |
94-
| **区块链应用** | **比特币**(交易哈希验证) | **以太坊**(状态存储) |
88+
| **对比项** | **Merkle Tree** | **Merkle Patricia Trie (MPT)** |
89+
| ---------------- | -------------------------------------------------- | ------------------------------------------ |
90+
| **数据结构** | 二叉树(Binary Tree) | 前缀树(Trie)+ Merkle Hash |
91+
| **分支结构** | 每个节点最多有 **2** 个子节点 | 每个节点最多有 **16** 个子节点(Hex 0-15) |
92+
| **存储内容** | 叶子节点存储哈希值 | 叶子节点存储 **Key-Value 数据** |
93+
| **哈希计算方式** | 叶子节点存储数据的哈希,父节点存储子节点哈希的组合 | 每个节点存储 **Key-Value 哈希** |
94+
| **主要用途** | 区块链 **交易和区块哈希验证**(比特币) | 以太坊 **账户状态、存储、交易索引** |
95+
| **路径查找** | 需要遍历整个树结构 | 可以快速定位到具体的 Key |
96+
| **效率** | 适用于批量验证数据 | 适用于 **快速查询 & 修改** |
97+
| **区块链应用** | **比特币**(交易哈希验证) | **以太坊**(状态存储) |
9598

9699
## 什么是对称 NAT(Symmetric NAT)?
97100
对称 NAT 是**同一个设备向不同目标建立连接时,NAT 会分配不同的外部端口。**
98101

99102
## 📌 如何让 NAT 后的设备直接通信?
100103

101-
| 方案 | 适用场景 | 优势 | 劣势 |
102-
|--------------|----------------------|----------------------|------------------|
103-
| **直接连接** | 双方都有公网 IP 或者IPV6 | 简单、高效 | 需要公网 IP |
104-
| **UDP 打洞** | 一方或双方在 NAT 之后 | 速度快、资源消耗小 | 对称 NAT 可能失败 |
105-
| **服务器中继**| 双方都在 对称 NAT 之后 | 适用所有情况 | 服务器负担大 |
106-
| **局域网发现(mDNS)**| 设备在 同一 LAN | 快速、无需公网服务器 | 仅限局域网 |
104+
| 方案 | 适用场景 | 优势 | 劣势 |
105+
| ---------------------- | ------------------------ | -------------------- | ----------------- |
106+
| **直接连接** | 双方都有公网 IP 或者IPV6 | 简单、高效 | 需要公网 IP |
107+
| **UDP 打洞** | 一方或双方在 NAT 之后 | 速度快、资源消耗小 | 对称 NAT 可能失败 |
108+
| **服务器中继** | 双方都在 对称 NAT 之后 | 适用所有情况 | 服务器负担大 |
109+
| **局域网发现(mDNS)** | 设备在 同一 LAN | 快速、无需公网服务器 | 仅限局域网 |
107110

108111

109112
## 🌐 节点发现机制对比
110113

111-
| 发现机制 | 适用场景 | 方式 | 优势 | 劣势 | 应用示例 |
112-
|-------------------------|--------------------|--------------------------------------------|------------------------------|----------------------------|---------|
113-
| **硬编码节点(Bootstrap Nodes)** | 初次加入网络 | 预设一些种子节点,节点会定期从它们获取新的对等节点列表 | 简单,适用于小型网络 | 依赖中心化节点,故障影响加入 | 比特币、以太坊 |
114-
| **DNS 发现(DNS Seeds)** | 比特币等公链 | 通过 DNS 查询获取活跃节点 | 可靠,节点列表动态更新 | 需要依赖外部 DNS 服务器 | 比特币、Litecoin |
115-
| **Kademlia DHT(去中心化哈希表)** | 以太坊、IPFS、libp2p | 通过 DHT 存储和查询其他节点的地址 | 高度去中心化,可扩展 | 需要维护 DHT 表,占用带宽 | 以太坊、IPFS、Polkadot |
116-
| **mDNS(Multicast DNS)** | 局域网发现 | 通过局域网广播自动发现其他节点 | 适用于 LAN,无需外部服务器 | 仅适用于同一子网 | 私链、企业区块链 |
117-
| **Gossip 协议** | 传播交易 & 区块 | 通过已连接节点广播新的节点信息 | 无需额外存储,去中心化 | 初始连接需要其他发现机制 | 以太坊、Solana |
114+
| 发现机制 | 适用场景 | 方式 | 优势 | 劣势 | 应用示例 |
115+
| ---------------------------------- | -------------------- | ------------------------------------------------------ | -------------------------- | ---------------------------- | ---------------------- |
116+
| **硬编码节点(Bootstrap Nodes)** | 初次加入网络 | 预设一些种子节点,节点会定期从它们获取新的对等节点列表 | 简单,适用于小型网络 | 依赖中心化节点,故障影响加入 | 比特币、以太坊 |
117+
| **DNS 发现(DNS Seeds)** | 比特币等公链 | 通过 DNS 查询获取活跃节点 | 可靠,节点列表动态更新 | 需要依赖外部 DNS 服务器 | 比特币、Litecoin |
118+
| **Kademlia DHT(去中心化哈希表)** | 以太坊、IPFS、libp2p | 通过 DHT 存储和查询其他节点的地址 | 高度去中心化,可扩展 | 需要维护 DHT 表,占用带宽 | 以太坊、IPFS、Polkadot |
119+
| **mDNS(Multicast DNS)** | 局域网发现 | 通过局域网广播自动发现其他节点 | 适用于 LAN,无需外部服务器 | 仅适用于同一子网 | 私链、企业区块链 |
120+
| **Gossip 协议** | 传播交易 & 区块 | 通过已连接节点广播新的节点信息 | 无需额外存储,去中心化 | 初始连接需要其他发现机制 | 以太坊、Solana |
118121

119122
---
120123

121124
## 🚀 推荐方案
122125

123-
| 区块链类型 | 发现机制 | 适用原因 |
124-
|----------------|-----------------------------|---------|
125-
| **公链(比特币)** | **DNS Seeds** | 兼顾可靠性 |
126-
| **公链(以太坊)** | **Bootnodes(引导节点) + Kademlia DHT** | 兼顾可靠性和去中心化 |
127-
| **小型私链 / 测试网络** | **Bootstrap Nodes** | 简单易用,适合少量节点 |
128-
| **局域网 / 内网** | **mDNS** | 无需公网 IP,可快速发现节点 |
129-
| **高效消息传播** | **Gossip 协议** | 适用于高吞吐量交易传播 |
126+
| 区块链类型 | 发现机制 | 适用原因 |
127+
| ----------------------- | ---------------------------------------- | --------------------------- |
128+
| **公链(比特币)** | **DNS Seeds** | 兼顾可靠性 |
129+
| **公链(以太坊)** | **Bootnodes(引导节点) + Kademlia DHT** | 兼顾可靠性和去中心化 |
130+
| **小型私链 / 测试网络** | **Bootstrap Nodes** | 简单易用,适合少量节点 |
131+
| **局域网 / 内网** | **mDNS** | 无需公网 IP,可快速发现节点 |
132+
| **高效消息传播** | **Gossip 协议** | 适用于高吞吐量交易传播 |
130133

131134

132135
## 1️⃣ DNS Seeds概念
@@ -257,15 +260,15 @@ Sybil 攻击是一种网络攻击方式,攻击者通过伪造大量虚假身
257260

258261
## **📌 智能合约 vs. 传统程序**
259262

260-
| **对比项** | **智能合约(Smart Contract)** | **传统程序(Regular Software)** |
261-
|---------------|--------------------------------|--------------------------------|
262-
| **运行环境** | 区块链(EVM、WASM、Solana VM) | 传统服务器、本地计算机 |
263-
| **执行方式** | 自动触发 & 不可篡改 | 需人工或程序调用,可修改 |
264-
| **数据存储** | 分布式存储,数据不可篡改 | 服务器/数据库,数据可更改 |
265-
| **安全性** | 代码透明,需严格审计 | 代码可私有,可随时更新 |
266-
| **第三方依赖** | 无需信任第三方,依赖共识机制 | 依赖中心化服务器和第三方 |
267-
| **成本** | 需要支付 Gas 费,运行成本较高 | 服务器维护成本 |
268-
| **典型应用** | DeFi、NFT、DAO、链上游戏 | Web 应用、企业软件、移动 App |
263+
| **对比项** | **智能合约(Smart Contract)** | **传统程序(Regular Software)** |
264+
| -------------- | ------------------------------ | -------------------------------- |
265+
| **运行环境** | 区块链(EVM、WASM、Solana VM) | 传统服务器、本地计算机 |
266+
| **执行方式** | 自动触发 & 不可篡改 | 需人工或程序调用,可修改 |
267+
| **数据存储** | 分布式存储,数据不可篡改 | 服务器/数据库,数据可更改 |
268+
| **安全性** | 代码透明,需严格审计 | 代码可私有,可随时更新 |
269+
| **第三方依赖** | 无需信任第三方,依赖共识机制 | 依赖中心化服务器和第三方 |
270+
| **成本** | 需要支付 Gas 费,运行成本较高 | 服务器维护成本 |
271+
| **典型应用** | DeFi、NFT、DAO、链上游戏 | Web 应用、企业软件、移动 App |
269272

270273
## go和智能合约交互
271274
- 通过 go-ethereum 库连接到以太坊节点。

0 commit comments

Comments
 (0)