4.BTC-协议

概念

下面给你结合概念 + 原理解释 + 示例类比 + 在设计加密货币时的作用深度讲解版,帮助你真正理解每个概念如何共同构成"一个加密货币系统"。

内容结构如下:

  1. 每个概念都有:定义 → 为什么需要 → 例子 → 在加密货币中的作用
  2. 内容逻辑自然衔接(从"如何设计货币 → 安全 → 共识 → 分布式系统")

📘 一、怎么设计一个加密货币(核心框架)

设计一套加密货币,你必须解决 3 个根问题:

  1. 谁有权发行?(发行权)
  2. 怎么验证交易?(合法性)
  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)

分布式系统的三大属性:

  1. Consistency(强一致性) 所有节点看到同一份数据。

  2. Availability(可用性) 节点持续可以响应请求。

  3. Partition Tolerance(分区容忍性) 网络分裂时仍可运行。

⚠️ 定理:三者不可同时满足,只能满足其中两个。

区块链选择:

AP → 最终一致性(eventual consistency)

因为:

  • 区块传播有延迟
  • 全网只能做到最终同步

📘 九、Paxos(传统共识算法)

Paxos 是分布式系统中解决一致性的经典算法。

  • 专为少量节点设计(一般 3--7 台)
  • 用于银行、数据库(Google、Zookeeper)

⚠️ 并不适用于加密货币:

  • 要求身份明确(区块链是匿名的)
  • 要求节点数量不多(区块链节点多且不可信)

📙 十、Membership(分布式系统中的成员管理)

指:

  • 哪些节点是合法成员?
  • 如何加入?
  • 如何踢出作恶节点?

传统系统:Paxos、Raft 都需要 membership control

比特币:

谁都能加入,不需要许可(permissionless)。

Membership 是公开开放的。


📘 十一、BTC 的共识机制是什么?

Proof of Work(工作量证明) + 最长链(Nakamoto Consensus)

核心:

  1. 挖矿 = 投入算力证明诚实
  2. 最长链视为"真实历史"
  3. 攻击者要篡改历史必须超过全网算力(几乎不可能)

📙 十二、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 网络层面的协议:节点如何发现其他节点、如何广播交易和区块、如何防止网络被垃圾消息淹没等。 比特币使用的是去中心化的点对点网络,每个节点与若干"邻居"保持连接,收到新交易或区块后会进行验证,再向其他邻居转发,从而实现全网扩散。

  • 为了减少带宽浪费,协议设计了类似"先发哈希、再要正文"的消息交互方式:节点先告诉别人"我这里有哪些新对象的哈希",对方只会请求自己缺少的那部分数据。
  • 课程也会提醒:由于网络是开放的,任何节点都可能不诚实,所以协议的设计必须让"只相信自己能验证的结果"成为默认行为,这样整体系统才能在敌对环境中依然保持一致性和安全性。
相关推荐
老前端的功夫1 小时前
移动端兼容性深度解析:从像素到交互的全方位解决方案
前端·前端框架·node.js·交互·css3
代码与野兽1 小时前
AI交易,怎么让LLM自己挑选数据源?
前端·javascript·后端
CC码码1 小时前
前端文本分割工具,“他”来了
前端·javascript·程序员
linhuai1 小时前
flutter实现Mock数据
前端
Keely402851 小时前
浏览器指纹识别:从原理到防护的完整指南
前端·浏览器
沐道PHP1 小时前
nvm安装node低版本失败-解决方案
前端
韩曙亮2 小时前
【Web APIs】JavaScript 执行机制 ( 单线程特点 | 同步任务与异步任务 | 同步先行、异步排队 | 事件循环机制 )
开发语言·前端·javascript·异步任务·同步任务·web apis·js 引擎
linhuai2 小时前
Flutter如何实现头部固定
前端
单调7772 小时前
npm你还了解多少
前端