|
12 | 12 | - 双重支付检测:当网络发现 **相同输入地址的交易** 被提交两次,会 **拒绝第二笔交易**,防止双花。 |
13 | 13 |
|
14 | 14 | ## 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 个区块确认** 规则 | |
21 | 21 |
|
22 | 22 | # 📌 UTXO 模型 vs. Account 模型 |
23 | 23 |
|
24 | 24 | ## 1️⃣ **基本概念** |
25 | | -| 模型 | 定义 | |
26 | | -|------|------| |
| 25 | +| 模型 | 定义 | |
| 26 | +| -------------------------- | ---------------------------------------------------------------------------------------------------------- | |
27 | 27 | | **UTXO(未花费交易输出)** | 每个交易的输出可以作为新的交易输入,所有未花费的交易输出构成账户余额。适用于简单的转账交易,易于并行处理。 | |
28 | | -| **Account(账户模型)** | 账户有余额字段,交易直接修改账户余额,并记录状态变化。适用于智能合约。 | |
| 28 | +| **Account(账户模型)** | 账户有余额字段,交易直接修改账户余额,并记录状态变化。适用于智能合约。 | |
29 | 29 |
|
30 | 30 | ## 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 确保交易顺序 | |
41 | 41 |
|
42 | 42 | --- |
43 | 43 |
|
|
52 | 52 | - 侧链验证(如 Plasma 方案) |
53 | 53 | - 零知识证明(ZKP) 场景 |
54 | 54 |
|
| 55 | +### MPT树结构 |
| 56 | + |
| 57 | + |
55 | 58 | ## 为什么区块链难以被篡改? |
56 | 59 |
|
57 | | -| **保障机制** | **作用** | |
58 | | -|--------------|---------| |
59 | | -| **哈希算法** | 任何篡改都会导致哈希值变化 | |
60 | | -| **链式结构** | 依赖前一个区块的哈希,篡改一个区块会影响整个链 | |
61 | | -| **共识机制** | 需要多数节点同意,攻击成本极高 | |
62 | | -| **去中心化** | 数据分布在多个节点,篡改需控制整个网络 | |
| 60 | +| **保障机制** | **作用** | |
| 61 | +| ------------ | ---------------------------------------------- | |
| 62 | +| **哈希算法** | 任何篡改都会导致哈希值变化 | |
| 63 | +| **链式结构** | 依赖前一个区块的哈希,篡改一个区块会影响整个链 | |
| 64 | +| **共识机制** | 需要多数节点同意,攻击成本极高 | |
| 65 | +| **去中心化** | 数据分布在多个节点,篡改需控制整个网络 | |
63 | 66 |
|
64 | 67 | ## 以太坊区块存储 |
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 | +| **适用场景** | 轻量级以太坊节点 | 高性能全节点 | |
72 | 75 |
|
73 | 76 | ### 以太坊数据存储类型 |
74 | 77 |
|
75 | | -| 数据类型 | 说明 | |
76 | | -|-----------|------------------------------------------------| |
77 | | -| **区块数据** | 以 **区块哈希** 作为键,存储区块头、交易列表等 | |
78 | | -| **状态数据** | 账户余额、合约存储,存储在 **Merkle Patricia Trie** 中 | |
79 | | -| **交易数据** | 以 **交易哈希** 作为键,存储交易详细信息 | |
80 | | -| **索引数据** | 交易索引、日志索引,加速查询 | |
| 78 | +| 数据类型 | 说明 | |
| 79 | +| ------------ | ------------------------------------------------------ | |
| 80 | +| **区块数据** | 以 **区块哈希** 作为键,存储区块头、交易列表等 | |
| 81 | +| **状态数据** | 账户余额、合约存储,存储在 **Merkle Patricia Trie** 中 | |
| 82 | +| **交易数据** | 以 **交易哈希** 作为键,存储交易详细信息 | |
| 83 | +| **索引数据** | 交易索引、日志索引,加速查询 | |
81 | 84 |
|
82 | 85 |
|
83 | 86 | ## **Merkle Tree vs. Merkle Patricia Trie 对比** |
84 | 87 |
|
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 | +| **区块链应用** | **比特币**(交易哈希验证) | **以太坊**(状态存储) | |
95 | 98 |
|
96 | 99 | ## 什么是对称 NAT(Symmetric NAT)? |
97 | 100 | 对称 NAT 是**同一个设备向不同目标建立连接时,NAT 会分配不同的外部端口。** |
98 | 101 |
|
99 | 102 | ## 📌 如何让 NAT 后的设备直接通信? |
100 | 103 |
|
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 | 快速、无需公网服务器 | 仅限局域网 | |
107 | 110 |
|
108 | 111 |
|
109 | 112 | ## 🌐 节点发现机制对比 |
110 | 113 |
|
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 | |
118 | 121 |
|
119 | 122 | --- |
120 | 123 |
|
121 | 124 | ## 🚀 推荐方案 |
122 | 125 |
|
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 协议** | 适用于高吞吐量交易传播 | |
130 | 133 |
|
131 | 134 |
|
132 | 135 | ## 1️⃣ DNS Seeds概念 |
@@ -257,15 +260,15 @@ Sybil 攻击是一种网络攻击方式,攻击者通过伪造大量虚假身 |
257 | 260 |
|
258 | 261 | ## **📌 智能合约 vs. 传统程序** |
259 | 262 |
|
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 | |
269 | 272 |
|
270 | 273 | ## go和智能合约交互 |
271 | 274 | - 通过 go-ethereum 库连接到以太坊节点。 |
|
0 commit comments