概念
下面给你结合概念 + 原理解释 + 示例类比 + 在设计加密货币时的作用 的深度讲解版,帮助你真正理解每个概念如何共同构成"一个加密货币系统"。
内容结构如下:
- 每个概念都有:定义 → 为什么需要 → 例子 → 在加密货币中的作用
- 内容逻辑自然衔接(从"如何设计货币 → 安全 → 共识 → 分布式系统")
📘 一、怎么设计一个加密货币(核心框架)
设计一套加密货币,你必须解决 3 个根问题:
- 谁有权发行?(发行权)
- 怎么验证交易?(合法性)
- 怎么达成共识?(全网同步、防攻击)
因此,设计币必须包含:
- 货币发行规则(coinbase / genesis / monetary policy)
- 去中心化账本(区块链)
- 防双花机制
- 分布式共识机制(PoW / PoS)
- 交易验证逻辑(签名、UTXO、余额检查)
- 节点的通信与抗攻击机制
下面逐一拆解概念。
📗 二、谁有权发行数字货币
1️⃣ 传统货币(中心化)
央行发行。
2️⃣ 加密货币(去中心化)
发行权由 数学规则 决定:
- 比特币发行者:矿工(通过挖矿)
- 块奖励由协议写死(2110万上限)
- 新币来自 coinbase transaction(铸币交易)
➡️ 结论:发行权不是人决定,是协议决定。
📘 三、怎么防止 Double Spending Attack(双花攻击)
双花:同一笔钱被花两次。
例如:
Alice 有 1 BTC 她同时向 Bob 和 Carol 各发 1 BTC 希望网络不同步导致都确认成功。
BTC 的防御:
① UTXO 模型
每个输出只能花一次,节点会检查:
该UTXO是否已被花过?
② 工作量证明 + 最长链规则
攻击者必须:
- 重写历史
- 超过全网算力
- 重新挖出更长链
难度极高 → 成本巨大 → 无法双花
📙 四、怎么验证交易合法性
验证流程(比特币):
① 签名验证(身份合法)
检查:
交易输入引用的公钥 + 签名 是否匹配?
谁的币 → 谁的私钥 → 才能花。
② UTXO 是否存在(余额合法)
输入引用的UTXO必须存在且未花费。
③ 输入金额 ≥ 输出金额(无凭空造币)
④ Script 脚本(锁定/解锁逻辑)
📘 五、铸币交易(Coinbase Transaction)
这是 每个区块的第一笔交易,由矿工创建。
包含:
- 区块奖励(新币发行)
- 交易手续费(来自区块内其他交易)
示例:
yaml
coinbase:
input: no previous output
output: miner's address + block reward
→ 新币产生机制 → 挖矿收入来源
📗 六、Distributed Consensus(分布式共识)
定义: 在没有中心服务器的情况下,使整个网络对"世界状态"达成一致。
区块链中的一致内容包括:
- 谁的余额是多少?
- 哪些交易有效?
- 哪个区块是最新的?
BTC 使用:
PoW + longest chain rule
- 最难挖的链 = 最可信
- 避免双花
- 抗恶意节点
📘 七、Distributed Hash Table(DHT)
不是比特币核心,但常用于 P2P 网络和区块链项目。
定义: 一种分布式存储结构,用哈希定位数据位置。
例如:
BitTorrent 查找文件块 Filecoin 存储文件索引
作用:
- 数据分散存
- 无中心
- 高扩展性
📕 八、CAP 定理(Consistency / Availability / Partition tolerance)
分布式系统的三大属性:
-
Consistency(强一致性) 所有节点看到同一份数据。
-
Availability(可用性) 节点持续可以响应请求。
-
Partition Tolerance(分区容忍性) 网络分裂时仍可运行。
⚠️ 定理:三者不可同时满足,只能满足其中两个。
区块链选择:
AP → 最终一致性(eventual consistency)
因为:
- 区块传播有延迟
- 全网只能做到最终同步
📘 九、Paxos(传统共识算法)
Paxos 是分布式系统中解决一致性的经典算法。
- 专为少量节点设计(一般 3--7 台)
- 用于银行、数据库(Google、Zookeeper)
⚠️ 并不适用于加密货币:
- 要求身份明确(区块链是匿名的)
- 要求节点数量不多(区块链节点多且不可信)
📙 十、Membership(分布式系统中的成员管理)
指:
- 哪些节点是合法成员?
- 如何加入?
- 如何踢出作恶节点?
传统系统:Paxos、Raft 都需要 membership control
比特币:
谁都能加入,不需要许可(permissionless)。
Membership 是公开开放的。
📘 十一、BTC 的共识机制是什么?
Proof of Work(工作量证明) + 最长链(Nakamoto Consensus)
核心:
- 挖矿 = 投入算力证明诚实
- 最长链视为"真实历史"
- 攻击者要篡改历史必须超过全网算力(几乎不可能)
📙 十二、Sybil Attack(女巫攻击)
定义: 攻击者创建大量虚假身份来控制系统。
例如:
- 制造 1 万个节点试图影响共识
- 在投票系统中伪造大量身份
区块链如何防御?
比特币:用 PoW 抗 Sybil
身份无意义 → 算力才是身份
你开 1000 个节点 = 你只是把自己的算力拆成 1000 份 = 总算力不变 = 没法影响共识
→ 这是 Nakamoto 共识的一个核心优势。
📌 总结(极简)
| 概念 | 问题 | 解决方式 |
|---|---|---|
| 发行权 | 谁能印钱? | Coinbase(矿工) |
| 双花 | 怎么防止一币两花? | PoW + 最长链 + UTXO |
| 交易验证 | 如何判断交易有效? | 签名 + UTXO + Script |
| 共识 | 全网怎么看法一致? | PoW(Nakamoto Consensus) |
| Sybil 攻击 | 虚假身份攻击 | 算力证明(PoW) |
| CAP | 分布式系统限制 | 区块链选择 AP |
课程内容总结
这一讲《04-BTC-协议》主要讲的是"比特币到底是如何运行的",也就是点对点电子现金系统的完整协议:节点需要遵守哪些规则、交易和区块如何在网络中传播、如何达成"哪条链是正确的"这一共识等。
协议整体框架
课程先从"什么叫协议"入手,把比特币协议拆成几个部分:节点规则、交易规则、区块规则、共识规则和网络传播规则。 目标是让你明白:任何一个想加入比特币网络的节点,只要实现并遵守这些公开规则,就能和全网自动达成一致,而不需要信任中心机构。
节点与角色
老师会区分几类典型节点角色:全节点(保存完整区块链并严格验证所有交易和区块)、轻节点/SPV 节点(只保存区块头,通过 Merkle 证明验证交易)、矿工节点(在全节点基础上额外参与出块和挖矿)。 不同节点在协议中的职责不同,但在"验证规则"上是一致的:不论是谁发来的区块或交易,只要不满足协议规则,就直接丢弃。
- 全节点负责:校验每个交易的签名、余额是否足够、脚本是否执行通过,以及区块难度、时间戳、大小等是否符合规范。
- 轻节点通过向全节点请求区块头和 Merkle 路径,来验证"某交易是否被某区块确认",不需要保存全部历史数据。
交易验证规则
课程详细说明比特币中的"合法交易"必须满足的条件,例如:所有输入都引用现有未花费输出、签名正确、没有双花、输入金额大于等于输出金额(差额为手续费)、脚本执行结果为真等。 这样任何节点只要收到一笔新交易,就能本地独立判断它是否有效,而不是靠别人说"这笔是对的"。
- 例子:如果某人试图用同一个 UTXO 同时给两个人转账,那么网络上最终只会有一笔交易成功进区块链,另一笔在后续验证中会被节点判定为"引用已花费输出"而被拒绝。
- 交易费的规则也在协议里写死:输入总额减去输出总额就是矿工可获得的手续费,若不符合(比如输出之和大于输入),节点会直接判定交易无效。
区块与共识规则
在区块层面,协议规定了:区块头字段必须符合格式、区块中所有交易都要逐笔验证、区块大小有上限、首笔交易必须是 coinbase 交易且奖励金额不能超过当前补贴加手续费之和、区块哈希必须小于当前难度目标等。 每个节点只要本地验证通过,才会接受该区块并接着在其上继续挖矿或同步,验证不过就丢弃,从而保证"错误区块无法扩散"。
- 协议还规定了"最长链(精确说是累计工作量最大链)原则":当存在多条合法链分叉时,节点要选择累计难度最高的那条作为当前主链,将余额状态等都以这条链为准。
- 这意味着短期内可能会出现临时分叉,但随着后续新区块叠加,最终只有一条链会"赢",另一条会被视为孤块链,被网络逐渐抛弃。
网络与消息传播
最后,课程讲解 P2P 网络层面的协议:节点如何发现其他节点、如何广播交易和区块、如何防止网络被垃圾消息淹没等。 比特币使用的是去中心化的点对点网络,每个节点与若干"邻居"保持连接,收到新交易或区块后会进行验证,再向其他邻居转发,从而实现全网扩散。
- 为了减少带宽浪费,协议设计了类似"先发哈希、再要正文"的消息交互方式:节点先告诉别人"我这里有哪些新对象的哈希",对方只会请求自己缺少的那部分数据。
- 课程也会提醒:由于网络是开放的,任何节点都可能不诚实,所以协议的设计必须让"只相信自己能验证的结果"成为默认行为,这样整体系统才能在敌对环境中依然保持一致性和安全性。
