一文读懂Bitcoin:数字货币的革命性创新

入门区块链

Posted by Luke on June 22, 2025

You may find interesting:


一文读懂Solana:加密货币的性能代表

入门区块链


一文读懂以太坊-智能合约驱动的区块链革命

入门区块链

目录


通过历史纵深和技术纵深构建双重叙事线索,避免知识碎片化

第一章 比特币历史

1.1 BTC诞生由来

1.1.1 中本聪白皮书诞生的时代背景 —— 2008金融危机

  • 金融危机的爆发与影响 :2008 年,一场由美国次贷危机引发的全球金融危机爆发,这场危机是近几十年来最严重的全球经济危机之一。美国房地产泡沫破裂,大量次级抵押贷款违约,导致金融机构遭受巨大损失。以雷曼兄弟倒闭为开端,危机迅速向全球蔓延,各国金融市场一片混乱,股市暴跌,企业倒闭,失业率飙升,全球经济陷入了深度衰退。
时间轴 08年次贷危机-关键事件
2007 年 4 月 美国第二大次级房贷公司新世纪金融公司申请破产保护,次贷危机初现端倪。
2007 年 8 月 法国巴黎银行冻结旗下三只共同基金,引发市场恐慌,标普、花旗等多家金融机构随后宣布次级贷款相关资产减值,美联储开始本轮首次降息。
2008 年 3 月 美联储召开紧急会议挽救投资银行贝尔斯登,避免其破产引发系统性风险。
2008 年 7 月 美国第二大贷款银行因迪美银行因存在大量坏账被联邦监管机构关闭。
2008 年 9 月 7 日 房利美和房地美被美国政府接管。
2008 年 9 月 15 日 雷曼兄弟宣布破产,成为金融危机全面爆发的标志性事件。同日,美林证券被美国银行收购。
2008 年 9 月 16 日 美联储以 850 亿美元收购美国国际集团(AIG)的股权,避免其倒闭引发更大危机。
2008 年 9 月 19 日 美国联邦政府为所有货币市场共同基金提供保险,防止挤兑潮。
2008 年 9 月 21 日 高盛和摩根士丹利申请成为常规商业银行,接受美联储监管并获得保护。
2008 年 9 月 26 日 华盛顿共同银行破产,被摩根大通收购其分支机构和贷款业务,其余部分由联邦储蓄保险公司接管。
2008 年 10 月 3 日 美国国会通过 7000 亿美元的不良资产救助计划。
2008 年 10 月 14 日 美国政府公布向 9 家银行注入 1250 亿美元资金的计划。
2008 年 11 月 25 日 美联储宣布将向消费信贷市场注资 800 亿美元。
  • 对金融体系的质疑与不满 :
    • 信任缺失 :金融机构的过度冒险行为、信用评级机构的失误以及监管部门的失职等,导致人们对传统金融体系的信任大幅降低,担心自己的存款和投资安全
    • 货币超发与贬值 :为了应对危机,各国政府纷纷采取量化宽松政策,大量印钞向市场注入流动性,试图刺激经济复苏。然而这种做法引发了货币贬值,人们发现自己的财富因货币超发而被稀释
    • 去中心化:用户直接进行点对点的交易,没有中央银行作为中介,避免对中心化机构的过度依赖
    • 抗通胀性:BTC总量固定约2100万枚,每四年通过“减半”机制减少新币产出,预计2140年全部入市流通。这种稀缺性使其具备抗通胀特性,为用户提供更稳定的资产存储选择

1.1.2 BTC创世区块诞生的明示

中本聪在创世区块(Genesis Block)的coinbase参数中嵌入了来自2009年1月3日英国《泰晤士报 The Times》的头版标题:“The Times 03/Jan/2009 Chancellor on brink of second bailout for banks”。这条信息是被明文地嵌入到区块数据中,表达了对当时金融体系的不信任

coinbase 是每个区块中第一笔交易的输入脚本(scriptSig),通常用于矿工记录额外数据或签名信息。

1.2 关键里程碑

1.2.1 从万枚买披萨到万亿市值

时间 事件描述 重要性/影响
2007年5月 中本聪开始编写比特币代码 比特币的技术起点
2008年8月18日 注册域名 bitcoin.org 提前为发布做准备,构建网络与社群
2008年10月31日 发布白皮书《Bitcoin: A Peer-to-Peer Electronic Cash System》 奠定技术基础,首次提出去中心化电子货币概念
2009年1月9日 发布比特币 v0.1 源代码 首个客户端软件问世,技术开放
2010年5月22日 程序员 Laszlo 用 10,000 BTC 购买两个披萨(“披萨节”) 比特币首次具有现实世界的购买力,BTC首次估值
2010年7月 首个交易所 Mt.Gox 上线 BTC首次具备市场定价机制
2010年11月 中本聪将项目管理权移交给Gavin Andresen等开发者,从此消失 去中心化社区治理开启,中本聪逐渐退出
2011年6月 Mt.Gox 首次被黑,用户BTC被盗 暴露交易所风险,用户安全意识开始加强
2013年11月 BTC首次突破1000美元 标志性增长,媒体广泛关注
2014年2月 Mt.Gox(门头沟)宣布破产,约85万BTC被盗 引发监管讨论,BTC价格暴跌,用户信任受到重创
2017年8月1日 BTC因扩容问题分裂为 BTC 与 BCH(比特币现金) 社区分歧公开化,首次重大硬分叉事件
2017年12月 BTC价格首次突破20,000美元 大规模散户入场,泡沫化风险初显
2020年5月 第三次区块奖励减半(12.5 → 6.25 BTC) 通胀率下降,挖矿激励变化
2021年2月 特斯拉宣布购买15亿美元BTC并支持支付 企业接受比特币,价格迅速上涨
2021年9月 萨尔瓦多成为全球首个将比特币作为法定货币的国家 主权国家接受BTC作为货币,具有里程碑意义
2022年5月 Luna-Terra 崩盘引发加密市场雪崩 整个行业遭遇信任危机,监管压力增大
2022年11月 FTX 崩盘事件 再次引发系统性风险讨论,监管全面加强
2024年4月20日 第四次减半(6.25 → 3.125 BTC) 长期通缩机制继续,矿工收入再减
2024年1月11日 美国SEC批准比特币现货ETF(如BlackRock、Fidelity等) 比特币获得主流金融认可,大量机构资金入场
2025年3月6日 特朗普签署行政令建立比特币战略储备 向“数字黄金”地位进一步靠近

人物画像判断:中本聪可能是工业界的实干家,并非理论先行的学院派专家;英式和美式英语均非常好; “我在建造比特币时,其实是倒着来的。我必须写下所有的代码,才能使自己相信它真的可行,然后我才写下理论。我认为我能在写出具体设计之前就公开代码” –from Satoshi Nakamoto

1.2.2 社区分裂史:核心开发者 vs 矿工权力博弈

  • 问题的出现 : 随着比特币的流行,网络面临着交易拥堵和手续费上升等问题,成为引发社区分裂的导火索
    • 大区块支持者(矿工)的立场 :部分矿工支持增加区块大小,例如从 1MB 扩展到 8MB 甚至更大。他们认为更大的区块可以容纳更多的交易,从而缓解交易拥堵问题,降低交易手续费,提高比特币的实用性,吸引更多的用户和商家使用比特币进行日常交易,进而有利于比特币的广泛采用和普及。矿工收入主要来源:区块奖励和交易手续费(打包)
    • 小区块支持者(核心开发者)的立场 :核心开发者倾向于保持较小的区块大小,他们担心大区块会导致网络中心化,因为大区块需要更多的存储和带宽资源,可能只有大型矿池和机构才能承担相应的成本,从而使得普通矿工和节点逐渐退出网络,威胁到比特币的去中心化特性。
  • 比特币现金(BCH)的诞生 :2017年8月由于在区块大小限制问题上无法达成共识,一部分支持大区块的开发者和矿工决定进行硬分叉,从而创建了比特币现金(BCH)。这次分叉是比特币社区分裂的一个重要标志性事件,BCH 继承了比特币的原始代码和基本架构(2100万枚、2140年挖完),但在区块大小等参数上进行了调整,以实现更高的交易吞吐量。

定义与作用 : 交易手续费是指用户在进行比特币交易时,自愿支付给矿工的一笔费用,以激励矿工将他们的交易包含在区块中进行验证和确认。这类似于快递服务中的 “快递费”,用户支付一定的费用来确保自己的包裹(交易)能够被及时处理和配送(确认)。 目前还未形成规模。
不是 gas 费 : 在比特币系统中,交易手续费与以太坊中的 gas 费是不同的概念。以太坊的 gas 费是用来支付智能合约执行时所消耗的计算资源,而比特币交易手续费主要与交易数据的大小以及交易的优先级有关。
如何分配给矿工 : 当用户发起一笔比特币交易时,会指定愿意支付的手续费金额。矿工会根据手续费的高低以及交易的数据大小等综合选择将哪些交易打包进区块进行验证。矿工可以自由选择他们想要打包的交易,因此通常会优先选择手续费较高的交易,以最大化自己的收入。

第二章 核心概念

2.1 什么是区块

区块链是一种共享的、不可变的数字分类账,也是一个去中心化的分布式数据库,数据存储在多台计算机上,具有防篡改功能。每笔交易先被分组到区块中,再经共识机制验证,通过后该区块链接在一起,形成安全透明的链条。 比特币和区块链的关系:比特币在区块链生态系统中扮演着核心角色,它采用区块链技术作为底层基础设施,充当分布式账本,记录并验证所有比特币交易。

2.1.1 区块结构

顾名思义,区块链的基本单元就是区块。每个区块通过一个哈希数值指向前一个区块,以此类推,可以一直追溯到创世区块。区块由区块头和区块体两部分组成,其中区块大小被限制在1M以内,区块头大小为80个字节,但随着比特币的发展,1M能存储的交易数量有限,导致大量交易积压。 查询BTC Blocks

graph LR A[创世区块0] --> B[区块1] B --> C[区块2] C --> D[区块3] D --> E[...]

区块头主要有如下几部分组成,共计80字节:

区块头参数名 大小 描述
preBlockHash 32字节 (父区块)上一个区块的哈希地址
time 4字节 本区块的创建时间戳
version 4字节 版本号,用于跟踪软件协议更新
difficultyTarget 4字节 本区块链工作量证明难度目标
nonce 4字节 用于证明工作量的计算参数
merkleRoot 32字节 本区块中所有交易的merkle树根的哈希值

区块体由交易数量numtransaction和交易数据transactions组成。每笔交易的副本都会被计算哈希值,然后这些哈希值会进行配对、哈希运算、再次配对、再次哈希运算,直到只剩下一个哈希值,也就是默克尔树的默克尔根。

pVAxhf1.jpg

2.1.2 区块链技术 VS 大数据技术

作为数据从业人员,当第一次了解Bitcoin技术实现时就产生一种莫名的熟悉感:分布式理念!简单对比hadoop,两者共同点在于都使用了“多个节点协同”的分布式系统理念,简单理解区别:“区块链 ≈ 分布式信任系统”、“Hadoop ≈ 分布式计算系统”

对比维度 区块链系统 大数据系统(如 Hadoop) 说明
核心目的 去中心化、数据不可篡改、可信共识、价值转移 高效处理海量数据(存储、查询、分析) 一个侧重信任与共识,一个侧重性能与计算
系统结构 去中心化分布式系统 中心化协调的分布式系统(Hadoop主从架构) 区块链更像“无主系统”,Hadoop 是“有主架构”
分布式存储 区块数据同步至全网所有全节点 HDFS文件切分为多个Block块,存储于不同节点中 区块链结构不可更改,HDFS文件写入后不可修改
多节点协作 节点协同维护账本一致性 节点协作完成分布式作业 区块链是开放网络,Hadoop是私有集群
数据一致性机制 共识机制(PoW等),节点对新区块达成一致 同步副本到多个节点机、block checksum机制 共识在区块链中至关重要,在Hadoop中靠备份和校验机制
任务执行模型 所有矿工节点争夺打包权 主节点分发任务MapReduce,各节点并行处理 区块链是竞争式执行,Hadoop是协调式并行执行
节点角色划分 所有全节点都可验证和存储完整账本数据 Master节点协调,Worker节点数据存储与计算 区块链节点更加“自治”,Hadoop有明确分工
存储冗余 每个全节点都存储完整链数据(高冗余) 数据复制默认3份,以容灾备份 区块链存储冗余远高于Hadoop
容错机制 通过去中心化和拜占庭容错设计实现容错 通过数据副本和任务重试机制容错 两者机制不同,但目的相同:高可用性
性能与吞吐量 低(如 BTC 每秒约7笔交易),重安全 高吞吐、高并发处理(PB级数据) 区块链牺牲性能换取信任,Hadoop专注性能

2.2 哈希

  • 哈希基本原理: 哈希函数是一种将任意长度的输入数据(可以是文本、数字、文件等)通过特定算法转换为固定长度输出的函数。SHA-256是哈希函数的一种,其输出长度为256位,通常以64个十六进制字符表示。
  • 特点:
    • 微小变化会导致输出哈希值发生巨大变化且不可测(演示哈希过程10kb→64字符)
    • 哈希就像是一种特殊的 “搅拌机”,不管输入多长的数据,它都能按照固定的规则,输出长度固定的摘要
    • 正向hash很快,反向不可能算输入
  • 比特币地址: 比特币地址是通过对用户的公钥进行多次哈希运算(包括SHA-256和RIPEMD-160等)得到的,这个过程确保了地址的安全性和唯一性
    • 1)对公钥进行SHA-256哈希运算,再通过RIPEMD-160哈希运算,得到160位的哈希值
    • 2)对结果再进行两次SHA-256哈希运算,取前4个字节作为校验码
    • 3)0x00、校验码、160位哈希值一起进行Base58Check编码,最终得到比特币地址
    • 注:虽然公钥是512位,但最终生成的比特币地址是基于160位哈希值,因此理论上比特币地址可能性数量是$2^{160} ≈ 1.5\times10^{48}$ (256位哈希$1.2\times10^{77}$),有人估计地球上沙子的数量$7.5\times10^{18}$,所以存在两个一样地址的可能性很低

2.3 公钥私钥

  • 对称加密:对称加密就像是你和朋友共享一把钥匙,这把钥匙既可以用来锁门(加密),也可以用来开门(解密)。
  • 非对称加密:公钥和私钥,256位二进制数字,常见非对称加密是RSA加密
    • 公钥可以分发给任何人,他们可以用它来给你发送加密信息,但只有你的私钥才能解密这些信息。反过来,你也可以用私钥来给信息签名,别人可以用你的公钥来验证签名的真实性。
  • 哪些地方体现加密过程
    1. 比特币地址生成:私钥生成公钥的过程可以看作是一种加密操作,通过算法的运算生成公钥,这个过程是单向的
    2. 典型过程:如果用户A想给用户B发送一条加密信息,用户A可以用用户B的公钥对信息进行加密,只有用户B用私钥才能解密查看这条信息。这体现了非对称加密的典型加密和解密过程,公钥用于加密信息,确保只有拥有对应私钥的人才能解密并查看信息内容

      典型过程在比特币中是不存在的,数字签名的过程是类加密解密过程,不是严格意义的加密解密。

2.4 数字签名

数字签名是一种基于密码学的验证机制,用于验证数据的完整性和发送者的身份。

  • 签名函数:
    1. 生成密钥对
      • 生成私钥 :用户通过随机数生成器创建一个随机的私钥(d)。这一步是整个签名过程的起点,私钥的安全性和随机性至关重要。
      • 生成公钥(Q) :利用椭圆曲线数字签名算法(ECDSA),根据私钥(d)计算出对应的公钥(Q = d * G,其中 G 是椭圆曲线的基点)。
    2. 创建交易 构建包含交易信息(如交易金额、接收方地址等)的原始交易数据(message)。这一步是将用户想要进行的交易内容以特定的格式组织起来。
    3. 交易数据哈希处理 对原始交易数据进行哈希运算(通常使用 SHA - 256 算法),生成交易哈希值(z)。这一步是为了将交易信息压缩成一个固定长度的摘要,便于后续处理和提高安全性。
    4. 生成签名(r,s)
      • 选择随机数 k :选择一个随机数 k(k 的选择必须满足在椭圆曲线的阶 n 范围内且不能重复使用),这是签名过程中的关键随机因素。
      • 计算 r :通过椭圆曲线运算,计算 r =(k * G).x mod n,其中(k * G)是椭圆曲线上的一个点,.x 表示取该点的 x 坐标,mod n 是模运算。r 反映了随机数 k 和椭圆曲线参数之间的关系。
      • 计算 s :根据公式 s =(z + r * d)/k mod n,其中 z 是交易哈希值,d 是私钥,k 是随机数。s 综合了交易信息、私钥和随机数 k 的信息。生成的数字签名就是(r,s)
  • 验证函数
    1. 检查签名格式和范围:先看 r 和 s 的值是不是在正常范围内,就像检查支票上的签名有没有涂改或超出范围一样。如果 r 或 s 不在规定范围内,直接就认为签名不对。
    2. 利用公钥和交易信息验证签名:用公钥、交易信息(通过哈希得到的摘要)和签名中的 r、s 进行一系列运算。这就好比把公钥当作一把钥匙,交易信息和签名当作锁,看能不能对上。如果对上了,说明这个签名是真的,就像确认了支票上的签名是账户主人签的一样。

    数字签名是一个抽象的过程,它利用密钥对(公钥和私钥)对信息进行加密和验证,以确保信息的真实性、完整性和不可否认性。 举例,软件下载中的数字签名 :当你从互联网上下载一个软件时,软件开发者通常会对软件进行数字签名。当你下载完成后,操作系统会检查软件的数字签名,以确保你下载的是正版软件,而不是被恶意篡改的版本。 在比特币中的作用 :当你发起一笔比特币交易时,你需要用你的私钥和交易哈希值来生成数字签名。这个签名会随着交易一起广播到比特币网络中。其他节点收到交易后,会用你的公钥对这个签名进行验证。如果验证通过,就说明这笔交易确实是你发起的,并且在传输过程中没有被篡改过。

第三章 交易机制

3.1 UTXO模型

3.1.1 UTXO和账号模型区别

UTXO模型(Unspent Transaction Output、未花费的交易输出),是区块链网络中一种重要的记账模式,在比特币系的数字货币中被广泛使用。核心设计思路是记录交易事件,而不记录最终状态,用户需要根据历史记录计算整体余额

  • UTXO和账户模型的区别:
    • 账户模型可以理解是余额模型,交易过程是频繁加减金额的过程,账户余额作为单一的数值存在
    • UTXO模型记录的是交易过程,对未花费的输出,生成新的UTXO返回给原地址,余额可能是多个UTXO的总额

    pVZKh9I.jpg

3.1.2 UTXO工作原理

  • 交易创建:当用户发起一笔交易时,需要收集足够的UTXO作为输入,UTXO总金额要大于或等于要发送的金额与手续费之和。然后指定交易的接收方地址和金额,以及可能的找零输出(返回给自己的地址)。例如,矿工有一个包含10个比特币的UTXO,要向用户A发送5个比特币,那么用户A会创建一笔交易,输入为这个10比特币的UTXO,输出为一个5比特币给用户A的输出和一个5比特币给自己的找零输出
  • 交易验证:网络中的节点会验证交易的合法性,包括检查输入的UTXO是否存在且未被花费、交易的签名是否有效、输入金额是否等于输出金额与手续费之和等。如果交易通过验证,就会被添加到区块链的交易池中,等待被打包进区块
  • 交易确认:当一个区块被矿工挖出并包含了该交易时,交易就被确认。此时,作为输入的 UTXO 被标记为已花费,而新产生的输出成为新的 UTXO,可供后续交易使用
    pVZKMhn.jpg

不仅区块连接是链式的,交易也是链式的。比特币钱包软件给人的印象是,比特币从钱包发送到钱包,但实际上,比特币是从一笔交易转移到另一笔交易。每笔交易都会花费之前在一笔或多笔先前交易中收到的比特币,因此一笔交易的输入是前一笔交易的输出。一笔交易可以创建多个输出,就像发送到多个地址一样,但每笔交易的每个输出在区块链中只能作为一次输入。任何后续引用都被视为禁止的双重支付——即试图两次花费相同的金额。 如果一笔交易的输出值超过其输入值,该交易将被拒绝;但如果输入值超过输出值,则任何差额都可以被视为该交易区块的矿工交易费。

3.2 交易全流程

六步图解:创建→签名→广播→打包→确认→不可逆 Luke向Bob发送交易、Bob再继续花费余额的工作流程:

3.2.1 Luke创建交易、并发送给Bob

Bob钱包生成私钥,并计算出公钥,再做哈希生成比特币地址,Luke创建第一笔交易Tx1,填写Bob生成的比特币地址(版本号 + 公钥哈希 + 校验和 → Base58Check编码)

Luke的钱包会将Bob的地址解码得到公钥哈希,并用它生成一个P2PKH输出脚本(Pay to Public Key Hash 直译 “支付到公钥哈希”)

其中,Tx1的scriptPubKey就是P2PKH脚本,锁定了Bob的公钥哈希public key hash。如果Bob想使用Tx1里的钱,就必须解锁脚本signature script(私钥签名+提供公钥)

Luke广播交易后,该交易被写入区块链。交易一旦确认,Tx1 output就是一个UTXO。Bob钱包扫描链上数据发现这个UTXO的锁定条件是自己的公钥哈希,就会显示为余额

pVZJGTK.jpg

3.2.2 Bob使用余额进行花费

当 Bob 决定花费之前收到的比特币(UTXO)时,需要创建一笔新交易(记为 Tx1)。这个过程可以分为以下几个步骤:

1. 引用 UTXO

  • Bob 首先要指定资金来源,即 Luke 之前转给他的那笔交易输出(Tx0)
  • 在新交易 Tx1 的输入部分,他写入:
    • 交易标识符(txid):指向 Tx0
    • 输出索引号(output index):指明要花费的是 Tx0 的哪一个输出 这一步就建立了 Tx1 → Tx0 的引用关系,明确告诉网络:“我要花掉这笔 UTXO”

2. 构造解锁脚本(scriptSig)

  • 在比特币系统中,每个输出(UTXO)都带有一个 锁定脚本(scriptPubKey)。
  • 对于最常见的 P2PKH 输出,Tx0 的锁定脚本要求:
    • 提供一个公钥,经过哈希后要等于 Tx0 中的公钥哈希;
    • 提供一个由对应私钥生成的有效签名。
  • 因此,Bob 必须在 Tx1 的输入部分提供一个 签名脚本(scriptSig),里面包含:
    • Bob 的完整公钥(未哈希),供网络检查其哈希值是否与 Tx0 中的公钥哈希一致
    • ECDSA 签名:Bob 用私钥对 Tx1 的关键信息(输入引用、输出金额和新锁定脚本等)做数字签名,证明他确实拥有该私钥 这样,scriptSig + scriptPubKey 配合执行时,网络就能验证 Bob 是否有权花费 Tx0 的输出。

3. 生成新的输出

  • Bob 在 Tx1 中还要写入新的输出,指定下一位接收者的地址(即对方的公钥哈希),以及支付给对方的金额(satoshi 数量)。
  • 这就形成了新的 锁定脚本(scriptPubKey),后续只有对应的私钥持有者才能再次花费。
  • 如果金额不足以正好支付,剩余的部分通常会以一个找零输出(change output)的形式再次锁定回 Bob 自己的地址。

4. 签名保护整个交易

  • Bob 的签名不仅证明了他对私钥的控制权,还保证了交易的完整性。
  • 一旦签名完成,除了签名脚本(scriptSig)本身之外,Tx1 的其他内容都受到加密保护,无法被篡改。

5. 广播与验证

  • Bob 将包含输入、输出、公钥和签名的完整交易(Tx1)广播到比特币网络。
  • 所有对等节点和矿工都会独立验证:
    • 输入是否有效(引用的 UTXO 是否存在、未花费)
    • 签名是否正确(公钥与哈希匹配、签名能否被验证通过)
    • 交易格式是否规范
  • 验证成功后,交易才会被继续转发,并有机会进入区块链。

pVZJYFO.jpg

图示解释

  • Transaction 1 (TX0):Luke 转给 Bob 的交易输出,锁定了 Bob 的公钥哈希(scriptPubKey)
  • Bob’s Computer:Bob 的钱包,持有私钥,可以生成新交易(Tx1 模板)
  • Transaction 2 (TX1):Bob 创建的新交易,引用 Tx0(TXID + Output Index),在输入里加入签名和公钥,在输出里写入新的收款人和金额
  • “Signed Data” 箭头表示:Bob 的私钥对部分交易数据(输入、输出、公钥脚本)签名,生成的签名和公钥一起放入 Tx1 的 scriptSig,作为解锁条件

3.3 防伪双保险

3.3.1 为何修改旧区块需重做所有后续区块?

密码学锁链结构原因: 比特币区块链中,每个区块都包含前一个区块的哈希值,形成了一条密码学锁链。当一个旧区块被修改时,该区块的哈希值会发生变化。由于后续区块的哈希值计算依赖于前一个区块的哈希值,所以这个旧区块之后的所有区块的哈希值都会因为前一个区块哈希值的改变而受到影响。为了保持区块链的链式结构完整和一致性,就必须重新计算该旧区块以及所有后续区块的哈希值。
工作量证明机制要求: 每个区块的工作量证明(PoW)是基于该区块内容和前一个区块的哈希值进行的。如果修改了旧区块,那么该区块以及后续区块的工作量证明就不再有效,因为它们所基于的输入(区块内容和前区块哈希值)发生了变化。所以,需要为这个被修改的旧区块和所有后续区块重新找到一个新的工作量证明,即解决新的数学难题,这相当于要重做所有后续区块的工作量证明。

多米诺效应

3.3.2 双花攻击实战推演:本地双花 vs 51%攻击双花,如何避免?

本地双花

  • 攻击原理:攻击者在本地钱包或节点中,试图将同一笔比特币(已花费的UTXO)用于多笔交易。例如,攻击者先向商家A发送一笔交易支付商品费用,在该交易尚未被网络确认并打包进区块之前,攻击者又在本地创建另一笔交易,将同一笔比特币发送给自己或其他受控地址,试图进行双重花费。
  • 避免方法:等待交易确认。商家或接收方不立即确认交易完成,而是等待比特币网络对交易进行足够数量的确认(通常等待 6 个或更多区块确认)。因为随着新区块不断添加到区块链上,双花成功的概率会呈指数级递减。在交易未被确认前,商家可以认为交易存在被双花的风险,不交付商品或服务。
  • 网络验证机制:比特币网络中的节点会验证交易的输入是否有效,即检查交易的输入 UTXO 是否已经被花费过。如果一个 UTXO 已经被其他有效交易用作输入,那么后续试图再次使用该 UTXO 的交易将被网络识别为双花交易,不会被打包进区块,也难以在网络中成功广播。

51%攻击双花

  • 攻击原理:如果攻击者能够控制比特币网络中超过 50% 的算力(即哈希率),就可以发起 51% 攻击。攻击者可以先正常进行一笔交易,比如向商家 A 购买商品,该交易被网络确认并打包进区块链。然后,攻击者利用其控制的算力,重新计算包含该笔交易的区块以及后续区块的工作量证明,构建一条比原链更长的新链,在新链中篡改交易记录,将之前花费的比特币重新花费到自己控制的地址,从而实现双花攻击。
  • 避免方法:算力分散:比特币网络依靠众多矿工参与挖矿,算力分散在全球各地的大量节点上。只要网络中大多数矿工是诚实的,且算力总和超过攻击者,攻击者就难以控制超过 50% 的算力。对于比特币这样的大型成熟区块链网络,由于其庞大的矿工群体和高算力分布,实施 51% 攻击的成本极高(需要大量的计算设备和电力消耗等),在经济上通常是不可行的。
  • 多节点验证:网络中的多个节点会独立验证区块和交易的有效性。即使攻击者构建了一条更长的恶意链,但如果该链上的交易不符合比特币的共识规则(如存在双花等违规交易),其他诚实节点可能不会接受这条链。而且,大多数交易平台和节点会等待一定数量的确认,在攻击者的恶意链未超过诚实链并被广泛接受之前,交易不会被视为最终确认,从而降低双花风险。
  • 社区治理和经济激励:成功的51%攻击会损害整个区块链网络的信誉,影响所有参与者的利益,包括攻击者自己。社区可能会采取措施应对攻击,如通过软件升级修复漏洞或调整共识规则等。同时,矿工通常有经济激励来维护网络的正常运行和安全性,因为诚实挖矿可以获得区块奖励和交易手续费,而参与攻击可能会导致其失去声誉和经济收益。

第四章 共识机制

4.1 工作量证明(PoW)

POW作用: 它解决了去中心化网络中 “双重支付”(同一笔钱被重复使用)和 “信任缺失” 问题,确保所有节点维护唯一、权威的区块链账本。

  • 防双重支付:通过算力竞争确保同一笔交易不会被多个区块记录。
  • 去中心化信任:无需中心化机构,靠数学规则(哈希算法)和经济激励(区块奖励)维持共识。
  • 链的唯一性:当出现分叉时,算力更强的链会被全网认可,确保账本唯一。

POW运作流程:

graph LR A[节点收集待确认交易] --> B[组装交易成区块候选] B --> C[计算区块哈希值] C --> D{哈希值是否满足难度要求?} D -- 否 --> C D -- 是 --> E[广播新区块到全网] E --> F[其他节点验证区块] F -- 验证通过 --> G[将区块加入区块链]

步骤 1:交易收集与区块组装
节点从网络中收集未确认的交易,打包成 “区块候选”,并附上前一个区块的哈希值(确保链的连续性)
步骤 2:哈希计算与算力竞争
节点需要找到一个随机数(Nonce),使得区块的哈希值满足特定条件(如开头有 N 个 0)。 示例:目标哈希需以 “0000” 开头,节点需不断尝试不同 Nonce,直到计算出符合要求的哈希值。
步骤 3:全网验证与共识达成
率先算出合法哈希的节点广播新区块,其他节点验证:交易是否合法(如 UTXO 未被花费)、区块哈希是否符合难度要求、前一个区块哈希是否正确链接。 验证通过后,节点将新区块添加到本地链,形成全网共识。

PoW机制的核心要素

要素 说明
算力竞争 节点通过硬件(如 ASIC 矿机)进行哈希计算,算力越强,找到合法 Nonce 的概率越高。
难度调整 节点通过硬件(如 ASIC 矿机)进行哈希计算,算力越强,找到合法 Nonce 的概率越高。
激励机制 成功记账的节点获得 “区块奖励”(初始 50 BTC,每 4 年减半)+ 交易手续费

\(BTC总计数量 :50 × 6 × 24 × 365 × 4 ×(1+\frac{1}{2}+\frac{1}{4}...)= 2100万\)

挖矿难度动态调整,保持10分钟/块的节奏
最开始打包奖励50、每小时有6个十分钟、每4年减半

打包为什么是10min? 在 PoW 机制下,矿工需要通过计算复杂的数学问题来竞争创建下一个区块的权利,解决问题的过程被称为挖矿。比特币网络会根据全网算力调整挖矿难度,以确保平均每 10 分钟生成一个新区块。具体来说,比特币协议规定每 2016 个区块会进行一次难度调整。系统会根据过去 2016 个区块的总生成时间来调整当前的挖矿难度。如果过去 2016 个区块生成所需的时间少于预期的 2 周(2016 个区块应大约生成在两周的时间内),系统就会自动提高挖矿难度;反之,如果生成时间超出预期,系统就会降低难度。通过这种方式,无论全网算力如何变化,都能使区块生成速度保持在每 10 分钟一个的目标左右

4.2 51%攻击

  1. 现实推演:攻击比特币网络需耗资千亿美元的荒诞性
    要想发动 51% 攻击,攻击者必须拥有能够与比特币网络总算力相抗衡的算力,这就需要投入巨额的资金用于购置挖矿设备。以当前市场上主流的比特币矿机为例,一台性能较为出色的矿机价格在数万元不等。而要达到 51% 攻击所需的算力规模,攻击者至少需要部署数百万台这样的矿机,仅仅是矿机的采购成本,就高达数十亿美元。此外,挖矿过程中所消耗的电力成本同样是一个天文数字。比特币挖矿是一个极为耗电的过程,每台矿机的功率通常在数千瓦以上,数百万台矿机同时运行,每天所消耗的电量足以满足一个中等城市的日常用电需求。按照当前的电价计算,每天的电费支出就可能高达数百万美元甚至更多。而且,攻击者还需要考虑挖矿设备的维护成本、场地租赁成本以及专业技术人员的人工成本等诸多因素。综合以上各项成本,发动一场 51% 攻击所需的资金投入,保守估计将超过千亿美元。

  2. 对比:ETC遭遇攻击的真实案例
    2020 年 8 月,以太经典网络在短短一个月内,接连三次遭到 51% 攻击。攻击者利用强大的算力优势,成功实施双花攻击,导致大量交易被篡改,众多用户的资产遭受严重损失。据估算,此次攻击给以太经典网络造成的经济损失高达数百万美元。在攻击发生后,以太经典的市场价格大幅下跌,投资者信心受到极大打击。此次事件充分凸显了 51% 攻击对区块链网络的巨大破坏力,也为其他区块链项目敲响了警钟。

4.3 拜占庭将军问题

  1. 用叛徒将军比喻说明节点作恶场景
  2. 比特币如何用经济激励破解千年难题

拜占庭问题:由计算机科学家莱斯利・兰波特(Leslie Lamport)于 1982 年提出,是分布式系统领域的经典理论难题。其核心场景可概括为:在一个分布式节点网络中,部分节点可能恶意发送矛盾信息(称为 “叛徒节点”),如何确保诚实节点在不依赖中心化权威的情况下达成一致决策?

意义:比特币通过将经济激励与密码学结合,首次在完全去中心化的场景下实现了抗恶意攻击的共识,其核心逻辑并非 “消灭叛徒”,而是通过博弈论让叛徒的攻击成本远超收益,从而将系统维持在 “诚实节点主导” 的稳态。

第五章 进化之谜

5.1 软硬分叉

软分叉:新版本节点不接受老版本节点产生区块。但老版本节点接受新版本节点产生的区块 硬分叉:新版本节点不接受老版本节点产生区块。但老版本节点不接受新版本节点产生的区块

为了保持共识,所有节点使用相同的共识规则验证区块。然而,有时共识规则会以引入新功能或防止网络滥用而被更改。当新规则实施时,可能会有一段时间,未升级的节点遵循旧规则,升级的节点遵循新规则,从而产生两种可能的共识破坏方式:

  1. 遵循新共识规则的区块被新版本节点接受,但被老版本节点拒绝。例如,在一个块中使用了一个新的事务特征:升级的节点理解该特征并接受它,但未升级的节点拒绝它,因为它违反了旧规则。
  2. 违反新共识规则的区块被新版本节点拒绝,但被老版本节点接受。例如,在块中使用滥用事务特性:升级的节点拒绝它,因为它违反了新规则,但未升级的节点接受它,因为它遵循了旧规则。

第一种情况是,如果节点拒绝接收升级,从这些未升级节点获取区块链数据的挖矿软件将拒绝支持升级节点在同一条链上进行挖矿。这将导致两条永久不同的链——一条由未升级节点创建,另一条由升级节点创建——这被称为硬分叉。 硬分叉.jpg

硬分叉案例:比特币现金BCH(2017年8月)

  • 导火索:区块大小限制引发的扩容争议。比特币原协议规定区块大小≤1MB,导致交易拥堵。社区分为两派,一派主张通过隔离见证(软分叉)缓解拥堵,另一派主张直接扩大区块(硬分叉)。
  • 技术变更:
    • 新规则:区块大小上限从 1MB 提升至 8MB,允许更多交易打包。
    • 不兼容性:旧节点无法验证超过 1MB 的区块,导致链分裂。
  • 结果:
    • 原链保留为比特币(BTC),新链诞生为比特币现金(BCH)。
    • 持有 BTC 的用户按 1:1 比例获得 BCH(如分叉前持有 1 BTC,分叉后同时拥有 1 BTC 和 1 BCH)。

在第二种情况中,如果节点拒绝接收升级,只要升级节点掌控了大多数的算力,就可以避免区块链永久性分叉。这是因为,老版本节点会将升级节点所认可的所有区块都视为有效区块,于是升级节点能够构建出一条更强的链,这条链会被老版本节点接受为最佳有效的区块链。这种情况被称为软分叉。 软分叉.jpg

软分叉案例:隔离见证(SegWit)的兼容升级(2017年8月

  • 目的:通过优化交易结构缓解拥堵,同时为闪电网络铺路。
  • 技术变更:
    • 新规则:将交易签名(见证数据)从区块中 “隔离”,使区块可容纳更多交易。
    • 兼容性:新节点支持 SegWit 交易,可验证完整区块。旧节点将 SegWit 交易视为普通交易,但无法生成此类交易。
  • 激活机制:采用 “矿工投票”,当 80% 以上矿工支持时,规则自动生效。
  • 结果:
    • 区块链未分裂,所有节点逐步升级。
    • 区块实际容量提升约 30%,为闪电网络奠定基础。

问题list:

  1. 怎么验证A的广播是否是真实的? 李永乐:交易记录有hash值 、 广播的公钥和密码进行哈希值,两者对比就认为真实
  2. 矿工如何通过10^20次/秒计算争夺记账权?
  3. 比特币软件?如何更新?加密函数、区块生成时间等都可以更新
  4. 区块链和交易连差异??什么是区块链 ,什么是区块链?是有了btc后,人们总结出其背后的技术,blockchain里可以查看btc的真是区块信息
  5. 补充闪电网络解决小额支付?

信息来源:

  1. 原理和运用机制,讲运用机制和重点问题比较好,运用机制不是特别细
  2. 交大讲座PPT
  3. 区块体结构:通俗易懂揭秘比特币区块的内部结构CSDN区块和区块链
  4. UTXO模型GateLearn
  5. 区块链bitcoindeveloper
  6. 交易全流程bitcoindeveloper