# 《比特币白皮书》精读笔记 文科友好版（复杂概念拆解+结合生活实例）

By [hellojessie.eth](https://paragraph.com/@hellojessie) · 2023-10-26

---

**写在前面 为何要阅读比特币白皮书？**
=====================

白皮书不仅仅是技术文档，阅读它除了理解比特币背后的核心思想，还能读到中本聪对于货币、信任和中心化的哲学思考。

在媒体和网络上，关于比特币的描述和解释五花八门，不一定都是准确的。直接阅读白皮书可以帮助你避免一些常见的误解或偏见。

其他的加密货币和区块链项目，大部分都有自己的白皮书。通过阅读比特币的白皮书，你可以更好地评估和比较这些项目的价值和潜力。

有些人可能会说：那我只读前面的“摘要”，了解下大致内容不行吗？那我要告诉你，全文看完之后，你才会对比特币有全面而深入的理解，摘要只是非常概括的介绍，还是推荐大家通读全文，多读几遍，有能力读英语原文就读英语原文，或者配合我整理的大白话阅读笔记一起阅读，相信你会有很大收获！

**笔记正文（按照正文章节展开）**
==================

1\. 简介（Introduction）
--------------------

这一部分主要介绍了比特币设计的背景和它核心想要解决的问题。

1.  现在的线上支付系统，有下面的一些问题：
    
    1.  **过度依赖金融机构**：互联网贸易几乎完全依赖金融机构（如银行或支付平台）作为中间人来处理电子支付。
        
    2.  **信任模型的固有缺点**：这种系统虽然大部分时候运行得很好，但它仍然基于信任模型，这意味着当某个交易出现信任问题时（比如买家或卖家不满意），就需要金融机构进来介入仲裁。
        
    3.  **交易撤销的问题**：因为金融机构可能需要介入仲裁，所以完全不可撤销的交易实际上是做不到的。例如买家声称没有收到商品或服务，或卖家声称没有收到付款，金融机构介入进行仲裁的过程中，金融机构可能会决定撤销或逆转交易。
        
    4.  **限制小额交易**：仲裁的过程会增加交易的成本，因为银行介入的成本和风险，所以很小的交易（比如只花几分钱买东西）变得不实际，高交易成本限制了很小的交易。
        
    5.  **不可撤销服务的高成本**：由于不可撤销的交易较难实现，所以如果你购买的服务或商品是不能退款（不可撤销）的，那么你需要支付的交易成本就更高，例如商家可能需要额外的保险或保障措施来降低风险，从而增加成本。
        
    6.  **过度索取个人信息**：因为交易可能会被退款（撤销交易），商家就要更小心，可能要求你提供更多信息，即使他们根本用不到这个信息。这就像一个网店可能会要求你提供身份证和家庭地址，即使你只是买了一本书。
        
    7.  **欺诈问题**：在这种支付系统中，不可避免的会出现一定比例的欺诈行为。比如欺诈者伪造身份、个人身份泄露、第三方金融机构失职等，并且，对于金融机构和商家来说，完全消除欺诈可能需要巨大的投资和资源。在某种程度上，他们可能认为承受一定比例的欺诈损失比持续增加安全措施的成本更为经济。
        
    8.  **传统金融系统的效率问题**。传统的金融交易，尤其是跨国交易，可能需要几天时间才能完成，而且可能伴随着高昂的手续费。
        
2.  虽然用现金支付可以避免上述问题，但在网上交易，我们无法直接用现金。
    
3.  所以我们需要一个新的线上支付方式，它不依赖中间人，是基于密码学原理（一种数学技术），而不是依靠信任。比特币通过去中心化的区块链技术和工作量证明机制来让买家和卖家可以直接交易，同时确保来交易的安全性和不可撤销性，也省去第三方参与带来的种种问题。
    

2\. 交易（Transactions）
--------------------

1\. 电子货币的定义

**electronic coin，也就是**电子货币，我们将“电子货币”定义为“数字签名的链条”（**chain of digital signatures**）。这里的“链”意味着每一次的交易都会添加一个新的数字签名，形成一个连续的链条。想象一下，你有一串珍珠项链，每一颗珍珠都代表之前的某一个签名，这整条项链就代表了该电子货币。

2\. 电子签名的作用机制

在电子货币的交易中，当一个人想要发送币给另一个人时，他会使用他的私钥（private key）来签署（sign）这笔交易，并使用接收者的公钥（public key）来指定谁是新的持有者。私钥是一个秘密的数字密码，只有持有者知道。它可以解锁与其配对的公钥。公钥则是一个数字地址，任何人都可以看到和使用它，但只有与之配对的私钥才能解锁它。

哈希（hash）是一种算法，它可以将任何大小的数据转换为固定大小的数字，这种转换是单向的，即给定原始数据可以得到一个哈希值（hash value），但从哈希值不能还原出原始的数据，这就为电子货币的交易提供了安全性。电子货币的拥有者可以通过将自己的上一次交易数据和下一个拥有者的公钥组成的哈希值数字签名，添加到此货币末尾，来将这枚货币转移给下一个拥有者，这时下一个拥有者也可以通过这个签名来验证这笔交易的合法性，从而确保交易的完整性和安全性，任何其他人如果想要对交易内容和收币人公钥作出微小更改，都会导致哈希值发生巨大变化，这使得篡改交易信息变得非常困难。

![](https://storage.googleapis.com/papyrus_images/85e34d254a15e1b3638df6b4219e74e1e0fc000909b3f8009c95c894a24e5b2d.png)

3\. 货币的转移方式（交易的发生）

每个货币的持有者，都是通过数字签名（**digital signing**）的方式，将货币转移到下一个持有者。就像你把你的珍珠项链送给了你的朋友，然后你的朋友再送给他的朋友，每次转移都会在项链上加一个新的珍珠，并附上前一个交易的签名信息。

4\. 验证货币的所有权

收款人可以通过验证签名来确认货币的所有权链。所有权链（**chain of ownership**）描述的是资产所有权的转移历史。这个"chain of ownership"其实就是通过上面说的"chain of digital signatures" 实现的 ，因为每一个数字签名都代表了资产的一个所有权转移。可以想象成，如果你的朋友想确认这条项链确实是从你那里得到的，他就可以通过检查这条项链上的每颗珍珠（签名）来确认。

5\. 解决双重支付的问题

因为在上面的机制下，收款人仍无法验证货币是否被之前的持有者双重支付，而如果引入可信任的中央机构来审查，就又面临着第一部分提到的第三方监管问题。所以，为了解决双重支付问题，比特币系统要求所有的交易都必须被公开宣布，并记录在一个公共账本上，这个账本就是“区块链”。从而，所有参与者可以对“交易顺序的单一历史”达成共识，共同承认最早的那次交易才是唯一有效的。通过这种方式，比特币解决了双重支付问题，创建了一个不依赖中央权威的全新金融系统。

3\. 时间戳服务器（Timestamp Server）
----------------------------

时间戳服务器的主要功能是为数据或文件提供一个时间证明，证明它在某个时间点是存在的。因为比特币需要确保交易是按时间顺序进行的，才能有效防止双重支付的问题，而这可以通过哈希和链式结构来实现，确保每个时间戳都是连续的。每个时间戳的哈希值都纳入了上一个时间戳，形成一条链，所以每增加一个新的时间戳，都会加强之前的时间戳。

![](https://storage.googleapis.com/papyrus_images/cfabfb10488f4de7fe04b1ad516f4db49d1b1f87610206a59ab9a37d5d253116.png)

总结来说：

1.  时间戳服务器通过对一组带时间戳的项目进行哈希处理，并发布该哈希值。
    
2.  时间戳证明了数据在该时间点必须已经存在，以便进入哈希中。
    
3.  每个时间戳在其哈希中都包括前一个时间戳，形成一个链，每个额外的时间戳都加强了之前的时间戳。
    

浅显**解释**：想象时间戳服务器就像一个公证处，它可以证明某个文件或数据在某个时间点是存在的。例如，当你写了一篇文章并想证明这是你在某个时间写的，你可以将它提交给这个“公证处”，它会给你一个时间戳，证明你的文章在那个时间是存在的。

4\. 工作量证明（Proof-of-Work）
------------------------

**为了在点对点的基础上实现分布式时间戳服务器**，我们需要使用类似于Adam Back的Hashcash（[https://www.wikidata.org/wiki/Q110828738）](https://www.wikidata.org/wiki/Q110828738%EF%BC%89%E7%9A%84%E5%B7%A5%E4%BD%9C%E9%87%8F%E8%AF%81%E6%98%8E%E7%B3%BB%E7%BB%9F%E3%80%82)的工作量证明系统。

1.  **工作量证明的操作方式**:
    
    1.  工作量证明（Proof-of-Work, PoW）涉及到寻找一个随机数值（nonce），nonce是一个可以被反复尝试和变化的值。**矿工们会将交易数据、前一个区块的哈希值和这个nonce结合在一起，然后对它们进行哈希运算（SHA-256哈希函数）。目标是找到一个nonce，让它计算出的哈希值前面有一定数量的连续零。**
        
    2.  由于哈希函数的性质，即使只是稍微改变输入的数据，输出的哈希值也会发生巨大的变化。因此，矿工们需要不断地尝试，改变nonce的值，直到找到一个满足条件的哈希值。而计算这个值所需的平均工作量是零位数量的指数，并且算出值的对错可以通过执行单个哈希来验证。
        
    3.  第一个成功找到满足条件的哈希值的矿工，就成功地完成了工作量证明。这个矿工有权将新的区块添加到区块链上，并获得比特币奖励。这个过程也是比特币挖矿的基础。
        
    
    **解释**: 想象你和你的朋友们在玩一个游戏，要求每个人找到一个特定的随机数，这个数字被哈希后可以得到一个“正确答案”，但是这个数字很难找到，但一旦被找到，其他人都可以轻松验证它的对错。工作量证明就是这样的一个“游戏”，确保某项工作确实已经完成。
    

![](https://storage.googleapis.com/papyrus_images/683f75fddecf86d642210d0092a46e70c2f4d0a70f7013e37ecbf6affa024b69.png)

**2\. 时间戳网络中的工作量证明**:

在时间戳网络中，我们通过增加块中的一个值（nonce）来实现工作量证明，直到找到一个值使块的哈希具有所需的零位。一旦花费了CPU算力使其满足工作量证明，块就不能更改，除非重新完成一遍之前所有的工作，从而进一步确保了不可篡改性。想象你正在建造一个乐高塔，每增加一个乐高块都需要特定的努力和时间。一旦你建好了塔，如果你想更改底部的一个块，你必须拆掉上面的所有块并重新开始。

**3\. 工作量证明与多数决策**:

工作量证明还解决了如何在分布式系统中达成共识的问题。当某个矿工解决了计算nounce的问题，他会将解决方案告诉其他矿工。如果大多数矿工都同意这个解决方案是正确的，那么这个解决方案就被接受，新的区块就被添加到区块链上。这种方法确保了系统的安全性，因为要欺骗系统，一个坏人需要控制超过半数的计算能力，这在实际中几乎是不可能的。

反过来，如果区块链的决策基于一个IP地址一个投票权，那么任何能够分配到多数IP的人都可能破坏决策。而工作量证明确保每个参与者只能根据他们的“努力”（在这里是计算能力）投票，从而使系统更公平。

*   **调整工作量证明难度**:
    
    1.  在比特币系统中，工作量证明的难度不是固定的，而是可以调整的。这是为了确保新的区块大约每10分钟产生一次，不管全球有多少矿工在挖矿。
        
    2.  想象你正在玩一个射击游戏，目标是每10分钟射中一个靶子。开始时，靶子很大，你很容易射中。但随着时间的推移，越来越多的玩家加入游戏，大家都很容易射中靶子，导致每10分钟射中的靶子数量超过了一个。为了维持每10分钟只射中一个靶子的目标，游戏管理员决定缩小靶子的大小，使其更难射中。这里，靶子的大小就像是比特币中的工作量证明难度。当有更多的矿工（玩家）时，系统会增加难度（缩小靶子），确保每10分钟只有一个新的区块产生（只射中一个靶子）。
        
    3.  如果不调整难度，随着更多的矿工加入，区块会被更快地挖出，这可能会导致系统的不稳定。工作量证明的难度由移动平均值确定，意味着系统会根据过去一段时间内（例如2016个区块的时间）实际挖矿的速度来调整难度。如果这段时间内挖矿速度过快（即区块产生的时间小于预期的10分钟），系统会提高难度。如果挖矿速度过慢，系统会降低难度。这种调整机制确保新的区块大约每10分钟产生一次。
        

5\. **网络（Network）**
-------------------

为了使比特币系统正常运行，网络（network）必须按照以下步骤进行操作：

1.  **新交易的广播**: 当有新的交易产生时，这些交易会被广播到所有的节点（nodes），就像你在朋友圈分享了一条新动态，所有关注你的朋友都可以看到这条动态。
    
2.  **节点收集交易**:每个节点会收集这些新的交易，并将它们组合成一个块（block）。
    
3.  **寻找工作量证明**: 每个节点都会努力为其块完成困难的工作量证明（Proof-of-Work），这个答案非常难找，但是找到它可以证明你完成了一个任务。
    
4.  **广播找到的工作量证明**: 当一个节点完成工作量证明，它会将这个块广播给所有其他的节点。就像当你在游戏中取得了高分，你可能会想要告诉所有的朋友，这就是节点在做的事情。
    
5.  **接受块的条件**: 其他节点只有在验证块中的所有交易都是有效的，并且之前这笔资金之前从来没有被花费过，才会接受这个块。
    
6.  **总是在最长的链上工作**:
    

节点总是认为最长的链是正确的，并会继续在其上工作。如果两个节点同时广播了不同版本的下一个块，一些节点可能先接收到其中一个。在这种情况下，它们会在首先接收到的那个块上工作，但会保存另一个分支，以防它变得更长。当找到下一个工作量证明并且有别的分支变得更长时，之前在原有分支上工作的节点会切换到这个更长的分支。

想象你正在建造一个乐高塔，你总是想要确保你的塔是最高的。如果有人告诉你他们建造了一个更高的塔，你可能会想要加高你的塔，或者转而在那个更高的塔上继续建造。

此外，新的交易广播不一定需要到达所有的节点。只要它们到达了许多节点，它们很快就会被放入一个块中。如果一个节点没有收到一个块，当它收到下一个块并意识到它错过了一个时，它会请求那个遗漏的块。

6\. **激励（Incentive）**
---------------------

为了鼓励节点（nodes）支持比特币网络的运行，并将新的比特币释放出来进入流通中，比特币网络采用了特定的激励机制：

1.  **创世交易（Coinbase Transaction）**:
    
    1.  按规定，一个区块（block）中的第一笔交易是比较特殊的，它会创建一个新的币，这个币归区块的创建者所有。这就为节点提供了挖矿并支持网络的动力，并为比特币的初始分发提供了一种方式，因为没有中央机构（central authority）来发行它们。
        
    2.  这种稳定地增加固定数量的新币的方式，可以类比为金矿工消耗资源挖金矿从而将黄金加入流通。在比特币的情况下，则消耗的是CPU时间和电力。
        
2.  **交易费用（Transaction Fees）**:
    
    1.  激励也可以通过交易费用来资助。如果交易的输出值小于其输入值，其差额就是交易费，这个费用会加到包含该交易的区块的总激励值中。
        
    2.  一旦全部预定数量的比特币都进入了流通，激励就将完全转向交易费，同时抑制了通货膨胀（inflation）。
        
3.  **诚实的激励（Incentive to Stay Honest）**:
    
    如果一个攻击者拥有比所有诚实节点（即遵循比特币协议的节点）加起来还要多的计算能力（CPU算力），那么他在理论上有能力控制比特币网络。这种能力使他面临选择：
    
    \*\*选择一：撤销支付。\*\*攻击者可以使用他的计算能力来重新写区块链的历史，这样他可以撤销已经完成的交易。例如，他可以花费一些比特币购买商品或服务，然后在交易完成后，使用他的计算能力撤销这笔交易，这样他就可以再次使用那些比特币。这种行为相当于“双重支付”（double-spending）。
    
    \*\*选择二：生成新的币。\*\*攻击者也可以选择正当地使用他的计算能力来挖矿，从而获得新的比特币作为奖励。
    
    这两种选择中，按照比特币的设计，攻击者会发现后者（即正当地挖矿）更有利可图。因为如果他选择欺骗系统，那么比特币的价值和信誉可能会受到损害，这也会影响到他自己的财富。而如果他选择正当地挖矿，他可以获得更多的比特币奖励，而不会损害系统的信誉。
    

通过这种激励机制，比特币网络确保了其安全性和公平性，其设计使欺骗系统变得不划算，从而鼓励参与者诚实地行事，同时也鼓励了更多的参与者为网络做出贡献。

7\. **回收磁盘空间（Reclaiming Disk Space）**
-------------------------------------

为了有效地管理存储空间并确保比特币系统的可持续运行，比特币网络采用了一些策略来回收磁盘空间：

为了减少存储需求，所有的交易都被打包进一个哈希树结构，这种结构称为默克尔树（Merkle Tree）。只有树的根（root）被包含在区块的哈希中（block's hash）。这样，老的区块可以通过删除不再需要的交易数据来压缩，只保留关键的哈希信息，具体来说，它只保留区块的头部信息和最终的未花费交易集（set of unspent transactions）。

![](https://storage.googleapis.com/papyrus_images/d8d0290664b490d1bc11167136f93d6d46bbd7233a45203e89d260041f11353e.png)

每个不包含交易的区块头大约是 80 bytes。如果每 10 分钟生成一个区块，每年则生成80 bytes \* 6 \* 24 \* 365 = 4.2 MB，2008 年在售的典型计算机有 2 GB 内存，并且摩尔定律预测目前每年内存增加 1.2 GB，所以就算区块头一定要存在内存里，存储也不是问题。

8\. **简化的支付验证（Simplified Payment Verification）**
------------------------------------------------

简化的支付验证（SPV）是一种轻量级的验证方法，允许用户在不下载整个区块链的情况下验证支付。以下是其核心内容：

1.  **不需要完整的区块链**:
    
    1.  用户只需要保留最长工作量证明链的区块头信息。他们可以通过查询网络节点（nodes）来获取这些信息，直到确信自己找到了最长的链。
        
    2.  用户不必自己检查交易，用户不必自己检查每一笔交易的完整性，但可以通过查看交易在区块链中的位置，来确认网络节点是否已经接受了它（即依赖于网络的其他节点来执行这些验证）。
        
    3.  随后添加到该链的区块也可以进一步确认网络已接受该交易。因为在比特币中，当一个交易被包含在一个区块中后，随后在该区块之后添加的每一个新区块都会进一步加强对该交易的确认。每一个新的区块都意味着网络达成了对该交易有效性的更深层次的共识。通常，六个确认（即一个交易被包含在一个区块中后，再有六个新的区块被添加到链上）被认为是非常安全的，因为在这之后，修改或撤销该交易变得非常困难。
        
    4.  当用户需要验证某笔支付时，他们可以请求并检查该交易被连接到的默克尔分支。这个分支可以证明某笔交易是被包含在一个区块中的，而无需下载整个区块。
        

![](https://storage.googleapis.com/papyrus_images/0a58709a554eb24b8417c3bc388f397b3d156bc51b6e8ea8acd82eac2611d6d7.png)

**2\. 安全性考虑**:

*   SPV的验证方式在诚实的节点控制网络时是可靠的。但如果网络被攻击者破坏，这种简化的方法可能会被欺骗。
    
*   为了防范这种风险，当网络节点检测到无效的区块或有潜在的攻击行为时，它们可以发出警报。这会提示用户下载完整的区块和警报交易，以检查和确认不一致性。
    
*   经常接收支付的企业可能会为了更独立的安全性和更快的验证，而运行自己的节点。
    

通过SPV，比特币网络为用户提供了一种在不牺牲太多安全性的前提下，轻量级地验证交易的方法。这种方法特别适合移动设备和其他存储和计算能力有限的设备。因为它们不需要下载和存储整个区块链，从而节省了大量的存储空间和处理能力。

9\. **合并和分割交易额（Combining and Splitting Value）**
-----------------------------------------------

虽然理论上可以按最小单位的比特币叠加处理，但如果每一单位比特币都需要单独处理为一个交易，那么这种处理方式将变得非常不便。为了允许交易额的合并和分割，比特币设计了基于多个输入和输出的交易体系。

1.  **多输入和多输出**:
    
    1.  一个交易可以包含以下两种类型的输入：
        
        1.  **单一输入来源于一个较大的前一交易**: 例如，你之前收到了5比特币，现在你想用其中的2比特币购买商品。这个交易会引用那5比特币的交易作为输入。
            
        2.  **多个输入合并较小的金额**: 例如，你之前分别收到了1比特币、2比特币和3比特币的三笔支付，现在你想用6比特币购买商品。这个交易会引用这三笔支付作为输入。
            
    2.  对于输出，一个交易最多会有两个：一个用于支付，另一个（如果有的话）返回给发送者作为找零。
        
    3.  这种设计方式意味着，每一笔交易都可以引用之前的交易输出作为其输入，并生成新的输出。
        
2.  **交易历史的简化**:
    
    为了验证一个交易的有效性，你只要查看它所依赖的之前的交易，确保它引用的交易输出是有效的（即未被双重消费）并且满足交易的其他规则即可。你不需要提取一个交易的完整独立历史记录。
    

通过这种设计，比特币系统能够高效地处理大量的小额交易，同时确保每一笔交易都可以被独立验证，而不需要参考整个交易历史。

**10\. 隐私（Privacy）**
--------------------

传统的银行常通过限制信息的访问，来实现一定程度的隐私，只有涉及的各方和受信任的第三方可以访问。但由于比特币的所有交易都需要公开宣布，所以比特币通过保持公钥的匿名性来实现隐私。虽然公众可以看到某人正在向另一个人发送一定数量的货币，但没有任何信息将交易与特定某人关联起来。即交易的时间和大小是公开的，但并不知道交易的各方是谁。

1.  **传统隐私模型 vs. 新隐私模型**:
    
    *   **传统隐私模型（Traditional Privacy Model）**:
        
        在这个模型中，交易和身份信息是受信任的第三方所知的，而公众则不知道。
        
    *   **新隐私模型（New Privacy Model）**:
        
        比特币采用的是这种模型。在这个模型中，交易信息是公开的，但身份信息（即比特币地址的所有者）保持匿名。
        
2.  **新隐私模型的潜在风险**:
    

为了增加额外的隐私层，建议每次交易都使用一个新的比特币地址。这样，外部观察者就不能通过地址确定两笔交易是否属于同一个人。但不可避免地，当一个交易有多个输入地址时，这表明这些输入地址很可能属于同一个人。这是因为在比特币中，一个交易的多个输入必须由同一个人签名。风险在于，如果某个比特币地址的所有者被揭露，可能会暴露出属于这一所有者的其他交易。

![](https://storage.googleapis.com/papyrus_images/19a293105c2c794f83a9413b890e6954e5241ef8a515e4d665c06e20ec2d9e44.png)

**11\. 计算（Calculations）**
-------------------------

这部分主要探讨了攻击者试图生成一个比诚实链更快的替代链的情况。计算方法比较烧脑，理解核心思路、原理还有结论即可。以下是其核心内容：

1.  **攻击者的限制**:
    
    1.  \*\*即使攻击者成功地生成了一个替代链，他也不能随意更改系统，例如凭空创造价值或夺取从未属于他的资金。\*\*因为根据比特币的协议规则，交易的输入必须是之前未花费的输出，且交易必须有正确的签名才算是有效交易，诚实的节点永远不会接受包含无效交易的区块。
        
    2.  由于以上的限制，攻击者只能尝试更改他自己最近进行的交易，以重复使用他最近已经花费过的资金。
        
2.  **攻击者成功的概率（Attacker Success Probability）**
    
    1.  诚实链和攻击者链之间的竞赛，可以一种叫做“二项式随机漫步”的统计和随机过程来描述。诚实的链每增加一个区块，它的领先优势就增加1，这被视为“成功事件”。而攻击者的链每增加一个区块，诚实的链的领先地位就减少1，这被视为“失败事件”。这个模型可以帮助我们更好的理解这个竞赛。
        
    2.  攻击者从给定的差距中迎头赶上诚实者的概率类似于赌徒的破产问题（Gambler's Ruin problem）\*\*。这里，攻击者是赌徒，他尽管拥有较少的算力，但仍然试图通过连续地挖矿来赶上或超过诚实链。每当攻击者找到一个区块，他就向前迈进一步；每当诚实的网络找到一个区块，攻击者就后退一步。赌徒的破产问题可以用数学模型来描述，这个模型可以计算在给定的条件下赌徒破产的概率。\*\*这种模型也同样可以被用来计算攻击者赶上或超过诚实链的概率，即攻击者成功的概率（Attacker Success Probability）。
        
    3.  概率计算过程：
        
        1.  **前提假设**：
            
            *   `p` 是诚实节点找到下一个区块的概率。
                
            *   `q` 是攻击者找到下一个区块的概率。
                
            *   我们假设 `p > q`，即诚实节点的总算力大于攻击者。
                
        2.  **二项式随机漫步**：
            
            *   当诚实的链增加一个区块，它领先 +1。
                
            *   当攻击者的链增加一个区块，诚实链领先 -1。
                
        3.  **赌徒的破产问题**：
            
            *   这里的问题可以看作是一个赌徒试图从亏损中赢回来，直到达到平衡点。赌徒的亏损相当于攻击者需要赶上的区块数。
                
            *   `q(z）` 是攻击者从 `z` 个区块的亏损中赶上的概率。
                
        4.  **计算** `q(z）`：
            
            *   如果 `p <= q`，假设不成立，那么 `q(z） = 1`。（假设不成立时）
                
            *   如果 `p > q`，假设成立时，那么 `q(z） = (q/p)^z`，这个概率随着攻击者需要赶上的区块数的增加而指数级地下降。即由于形势对他不利，如果他没有在早期幸运地快速赶上，他落得越远赶上的机会就越渺茫。
                
    4.  **防范策略**
        
    
    假设付款人是一个攻击者，他想让某个接收方相信他已经支付了，然后通过持续工作，预先准备一条区块链，直到他足够幸运获得了大幅领先，然后在这条“平行链”上更改了这笔交易，虽然接收方会接到警告，但攻击者希望当接收方接收到警告时，已经为时已晚。
    
    **接收方的策略**：
    
    为了防止攻击者预先准备一个区块链分支，接收方可以在签名之前短时间内生成并提供一个新的公钥给支付方。这样，付款人（攻击者）就无法提前对交易签名，不能预先在“平行链”获得领先，也就无法在这个平行链上添加他想要更改的交易。
    
    **接收方的等待策略**：
    
    那么接收方在该等待多久，才能保证攻击者无法赶上呢？
    
    我们假设接收方等待的这笔交易被添加到了一个区块中，并且在其后已经连上了 `z` 个新区块。
    
    接收方不知道攻击者已经取得了多少进展，但假设诚实的区块的生成时间是平均的，那么攻击者的潜在进展将遵循一个泊松分布，其期望值为 `λ = z * (q/p)`。
    
    **计算攻击者赶上的概率**：
    
    为了得到攻击者现在还能赶上的概率，我们使用泊松分布来计算攻击者可能取得的每个进展的概率，并乘以他从那个点赶上的概率。
    
    这个计算比较复杂，我们只需要知道，公式中的 `∑` 是一个概率求和，它考虑了所有可能的进展情况。然后为了避免无限求和的情况，公式进行了重排变换，最后转化成C语言代码进行计算。
    
    这部分的核心是提供了一个方法，帮助接收方确定他们应该等待多少个区块确认，以确保情况是安全的，即使发送方尝试进行攻击，也几乎无法成功。
    
    白皮书最后计算出了，想要使攻击者成功的概率 `P` 小于0.1%时，不同的 `q` 值，和需要等待的区块数 `z`**的数据。例如，如果攻击者控制了10%的算力（**`q=0.1`），**那么在接收方等待了5个区块后，攻击者赶上的概率就已经小于0.1%了。**
    

![](https://storage.googleapis.com/papyrus_images/614633b92ace549861f6c73608dbb7709974a2179029b3f76d130814578881d9.png)

这部分的数学分析为比特币网络提供了一个安全参数的选择指南，帮助用户了解在给定的网络条件下，交易需要过多少区块后确认才能被认为是安全的。

12\. 总结
-------

比特币白皮书提出了一种不依赖信任的电子交易系统。我们从通用的**数字签名货币体系**开始讲起，这个体系提供了强有力的所有权控制。

但由于缺乏防止双重支付的方法而不尽完善。为解决这个问题，我们引入**时间戳服务器**，用于验证和记录每笔交易的时间，从而确保交易的顺序，并提出一种**使用工作量证明来记录公共交易历史的点对点网络**，只要诚实节点控制了网络中的大部分 CPU 算力，对于攻击者，交易历史将很快变得在计算上不可篡改。

该网络因其结构简洁而强大。节点们只需很少的协调就能同时工作。它们不需要被认证，只需按照工作量证明机制工作即可。**任何节点也可以随时离开和重新加入网络**，回来时只需要接受当前最长工作量证明链即可。各个节点使用 CPU 算力来投票，通过延长有效区块来表达接受，通过拒绝在无效区块上工作来表达抵制。**任何所需的网络规则和激励，都可以通过这种工作量证明的共识机制来实施和加强。**

---

*Originally published on [hellojessie.eth](https://paragraph.com/@hellojessie/MiCgVrHwKJQ9sP5P55fg)*
