# 比特币是如何运作的

By [aizo.btc](https://paragraph.com/@aizo-btc) · 2023-05-12

---

**原文地址：**[**How Does Bitcoin Work?**](https://learnmeabitcoin.com/)

**编译**：Suri     **整理**：Aizo     **校对**：Aizo

比特币，一个创建于2009年的电子支付系统，可以让你向世界上任何一个人汇款，而且不需要征求任何许可即可创建账户。

它的出现，是为了应对现代金融体系。在现代金融体系中，少数几家大银行控制着开户权限和交易处理权限。这意味着货币的控制是集中的，我们唯一能做的就是相信银行。

> “我们只能相信银行，让其保管我们的钱，但在一波波的信贷泡沫中，它们把我们的钱借出去，只留下一小部分储备金”——中本聪

银行业的集中化以及由此引发的2007年金融危机刺激了比特币的发展。比特币由中本聪匿名设计，是于[2009年1月发布](https://www.metzdowd.com/pipermail/cryptography/2009-January/014994.html)的一个支付系统，其运行无需中央控制。也就是说，任何人都可以运行该程序或使用该系统。

以下是对其工作原理的简单解释。

什么是比特币？
-------

其实，比特币只是一个计算机程序，任何人都可以[下载](https://bitcoin.org/en/download)并在电脑上运行它。

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

这个程序运行时，它会连接到其他也在运行这个程序的电脑，那些电脑将开始与你的电脑共享一个文件。这一文件被称为“[区块链](https://learnmeabitcoin.com/technical/blockchain)”，它实质上就是一个巨大的[交易列表](https://learnmeabitcoin.com/technical/transaction-data)。

![](https://storage.googleapis.com/papyrus_images/097cff0bba0923e0cd9e7357449ea2adf268caa4744deaaeb775d67716e24590.jpg)

当区块链网络中出现新的交易时，这一交易信息会从一台电脑传到另一台电脑，直到每台电脑都有一份交易的副本。大约每隔10分钟，区块链网络中随机的一台计算机（[节点](https://learnmeabitcoin.com/beginners/nodes)）会将其收到的最新交易信息添加到区块链中，并与其他电脑共享这一更新。

![](https://storage.googleapis.com/papyrus_images/537d09dfe559583fd74ce9820ef37cc3c89d1a9278f9fdd90d7b1094e6aa805f.jpg)

因而，比特币程序创建了一个由计算机组成的大型网络，这些计算机相互通信，共享文件，并时刻更新最新的交易信息。

比特币解决了什么问题？
-----------

在比特币出现之前，人们也可以在计算机网络中传递交易信息。但问题是，这些交易信息可以是相互冲突的。例如，你可以创建两个独立的交易，但花的是同一份钱，并同时将这两个交易的信息发送到网络中。

这就是所谓的 "双重消费"。

![](https://storage.googleapis.com/papyrus_images/d07e5f7a407bb4525d9f973ff1de21b02097f275a005e0b8c3599dbc8a16a19c.jpg)

因此，要创建一个没有中央控制得电子支付系统，最大的问题就是要弄清楚哪一个交易是“先来”的。当这个计算机网络独立运行时，这一问题就很难解决，因为有些计算机会先收到绿色交易的信息，而有些会先收到红色交易的信息。

那么，谁来决定哪一个是 "先来"，并记录在区块链中的呢？

比特币解决这个问题的方法是，强制每个计算机节点在将交易信息写入区块链前，把收到的所有交易信息保存在[内存池](https://learnmeabitcoin.com/technical/memory-pool)中。然后，每隔10分钟，随机一个节点会将其内存中的交易信息写入区块链中。

![](https://storage.googleapis.com/papyrus_images/aa93781296e2e8d33de4736c2e9e8cb0d7210fb1b7e37c354cc0d55a0da3460b.jpg)

更新后的区块链信息与整个计算机网络共享，各个节点将更新信息中的交易视为“正确”交易，并从自身内存中删除所有冲突的交易。因此，记录在区块链中的交易不会出现“双重消费”，所以节点都可以在彼此同意的情况下更新信息。

![](https://storage.googleapis.com/papyrus_images/640e8fe729e0f87bda8a3c6e54bfd10341ca79e469903491f160fe2fb5491d3b.jpg)

向区块链中添加交易信息的过程被称为“[挖矿](https://learnmeabitcoin.com/mining)”，其实质上是整个计算机网络范围内的竞争，无法由其实单个节点控制。

“挖矿”是如何运作的？
-----------

首先，每个计算机节点将其收到的最新交易信息存储在内存池（计算机上的临时内存）中。接着，所有节点都可以尝试将自己内存池中的交易信息“挖”到区块链中。

为此，计算机先将内存池中的交易信息收集到一个“[区块](https://learnmeabitcoin.com/beginners/blocks)”中，然后利用处理能力将这一交易区块添加到区块链上。

![](https://storage.googleapis.com/papyrus_images/a3aff6a02efc01ec6b2a313bc13a7df53f699c28f4f755cf3640bcc4d45db066.jpg)

那么，计算机的处理能力在这一过程中为什么至关重要呢？要将交易区块添加到区块链上，就要先将其输入到一个名为“[哈希](https://learnmeabitcoin.com/technical/hash-function)”的函数中，它实质上是一个微型计算机程序，能接收任意数量的数据，然后将其打乱，并输出一个完全随机（但唯一）的数字。

![](https://storage.googleapis.com/papyrus_images/077e3adf8dd9eb2c9c973b19dfb81f16ec74418133c60a3024af84515c71890e.jpg)

要将交易区块成功添加到区块链上，输出的这个数字（即[区块哈希值](https://learnmeabitcoin.com/technical/block-hash)）必须低于[目标值](https://learnmeabitcoin.com/technical/target)（一个各方都同意的阈值）。

![](https://storage.googleapis.com/papyrus_images/25bd906418b3ec046e4302d1498a5706781000b88ddf3d459b5a89c710e979a6.jpg)

若输出的哈希值不低于目标值，则可以对区块内的数据进行小幅调整，并再次将其输入哈希函数中，它会再次输出一个不同的哈希值，若依然不低于目标值，则再次调整，如此反复。

![](https://storage.googleapis.com/papyrus_images/9fa9622a389b3e7dabf35af92e27c9d205174a6da6e1969b3d10960229a87c57.jpg)

所以，“挖矿”的过程就是计算机利用处理能力，以最快的速度运行哈希函数，以期成为第一台哈希值低于目标值的计算机。第一台成功的计算机可以将其交易区块添加到区块链上，并共享给其他人。

> ### 注意：
> 
> 尽管理论上所有计算机都可以尝试“挖矿”，但用家用电脑“挖矿”却不再行得通。因为现在有专门快速（并有效）运行哈希函数的硬件，也就是说，现在“挖矿”的大多数都是那些会用专门硬件以及能获取廉价电力的人。

比特币从何而来？
--------

为了激励人们使用计算机的处理能力尝试在区块链上添加新的交易区块，每个添加成功的新区块都会提供固定数量的新比特币。也就是说，如果你能成功“挖”出一个新区块，你就能获得这些比特币奖励。

![](https://storage.googleapis.com/papyrus_images/0b84a849c5089e31ecda10fae9999a91653354bb6dcecb1f0e1af04700d8554b.jpg)

这种新比特币奖励被称为区块奖励，整个过程也被称为“挖矿”。

为什么叫它“区块链”?
-----------

正如我们所见，各笔交易并不是单独添加到共享文件上的，而是集中添加到区块中。每个新区块都建立在现有区块的基础上，所以这个共享文件其实是由链条般的区块组成的，这也是为什么它被称为“区块链”。

![](https://storage.googleapis.com/papyrus_images/14c9a5b489fb2dcd814e9554583e24ee0753de3e01bcc5eca0d01ff7f5c24aa8.jpg)

此外，每个节点将始终把收到的[最长区块链](https://learnmeabitcoin.com/technical/longest-chain)作为“官方”版本。也就是说，矿工们的“挖矿”行为是建立在现存最长区块链的“顶端”，因为所有不属于最长区块链上的区块，都会被节点视为无效区块。

![](https://storage.googleapis.com/papyrus_images/56a2db297094973f2ea97bcbfe0afe0999d526b23db477c3dc04afb1852ec9f5.jpg)

因此，如果想要重写交易历史，需要重建一个更长的区块链，让其他节点以它为现存最长区块链。但是，要做到这一点，需要单方面拥有比其他所有节点加起来还要多的计算机处理能力。

![](https://storage.googleapis.com/papyrus_images/e9916e8ca7789903c268107ad208be007efe638762dfb6f4554826fff7c11788.jpg)

结果就是，计算机网络整体的努力使其难以被“推翻”从而重写区块链。

交易是如何进行的？
---------

我们可以把区块链看成一个储存保险箱的设施（这些保险箱就是我们称为“[输出端](https://learnmeabitcoin.com/technical/output)”的东西），每个保险箱中有不同数量的比特币。

![](https://storage.googleapis.com/papyrus_images/1e35b6897b468dca6039489669d2746f5cac000128d7a9811814149048d26aee.jpg)

当进行比特币交易时，我们解开一些保险箱（输出端）的锁，将其中的比特币放入新保险箱并锁上新的[锁](https://learnmeabitcoin.com/beginners/output_locks)。

![](https://storage.googleapis.com/papyrus_images/2010b7f2ded38110104f25a70e1389008376bbad78af7fe159bc55d7814eeb84.jpg)

实际上，我们就是将一定数量的比特币放入一个新的保险箱，并在上面加了一把锁，只有跟我们交易的人才可以解开这把锁。

例如，如果我想把比特币发给你，我会从区块链中选择那些我能打开的保险箱，将其中的比特币放到一个新的保险箱，并加上一把只有你能解开的锁。当然，如果我不想把解锁的所有比特币都发给你，我还可以创建一个新的保险箱作为“变数”，并将它也上锁。

![](https://storage.googleapis.com/papyrus_images/880f66cf3364c8e2bf297d98c9a37f733d8270807db8cfae6d60b32c67922048.jpg)

同样的，如果你想将收到的比特币发给别人，那你就重复这一过程：选择你能解锁的现有保险箱，解锁，创建新的保险箱。因此，比特币交易就形成了一个线状结构，一系列的交易构成了比特币的流动。

![](https://storage.googleapis.com/papyrus_images/bc7c4814570b5ae8918cd26c76d6d1c814fa5dc7f5d3e64e85cc6b4edc2c71f4.jpg)

还有就是，当交易被“挖”到区块链上时，交易中被用完（用掉）的保险箱不能再用于另一交易，但新创建的保险箱可以在未来的交易中使用。

![](https://storage.googleapis.com/papyrus_images/0aa320e4f779f8336a71f0cc3f948ab052db5eea677e2cd8e28213c6ba1b33e2.jpg)

你如何拥有比特币？
---------

为了能够“接收”比特币，我们需要有一套自己的[钥匙](https://learnmeabitcoin.com/beginners/keys_addresses)。这套钥匙就像账号和密码，只是在比特币中它们被称为[公钥](https://learnmeabitcoin.com/technical/public-key)和[私钥](https://learnmeabitcoin.com/technical/private-key)。

例如，如果我把比特币发给你，你要先给我你的公钥。在创建交易时，我会把你的公钥放进保险箱（输出端）的锁里，当你想把比特币再发给别人时，你可以用你的私钥解锁这个保险箱。

![](https://storage.googleapis.com/papyrus_images/f54c31b9167737c1cecbcd6ad23658ccd62324541a30d4d4096e4c225623451d.jpg)

那么，公钥和私钥从何而来呢？实际上，我们可以用密码学自己生成。

简单来说，私钥只是一个很大的随机数字，而公钥则是由这个私钥计算出来的数字。但巧妙的是，我们可以把公钥给别人，别人却不能从公钥中计算出私钥。

![](https://storage.googleapis.com/papyrus_images/9bf30784b4c8704be3dc823af2c6b690bf30f19cb96213d16b899a81a71268d2.jpg)

当你想要解锁属于你公钥的保险箱时，你无需透露私钥，只需用私钥创建一个所谓的“[数字签名](https://learnmeabitcoin.com/beginners/digital_signatures)”，它能证明你是此公钥的所有者并解锁保险箱。而且，这个“数字签名”只能用于这次交易，无法解锁其他属于同一公钥的保险箱。

![](https://storage.googleapis.com/papyrus_images/2af19c44596e97d65f5634de04d71ec57e09a487816dbbec7f21e39d4b2de732.jpg)

这一系统被称为“[公钥加密](https://zh.wikipedia.org/wiki/RSA%E5%8A%A0%E5%AF%86%E6%BC%94%E7%AE%97%E6%B3%95)”，诞生于1978年。利用这一系统，比特币无需中央机构发布账号和密码，所有人都可以创建秘钥，从而安全地发送和接收比特币。

上述内容汇总
------

要[使用比特币](https://learnmeabitcoin.com/beginners/getting-started)，我们需要生成自己的公钥和秘钥（私钥是一个很大的随机数字，公钥由它计算而来）。秘钥生成非常简单，可以用电脑生成，甚至可以用计算机生成。大多数人会使用比特币钱包来生成和管理秘钥。

要接收比特币，我们需要把公钥给发送比特币的人，他将创建一笔交易，即先解锁他拥有的比特币，再创建一个新的比特币“保险箱”，并将我们的公钥放入锁中。

这笔交易会被发送至比特币网络上的一个节点，然后在计算机间传播，直至所有节点有该交易的副本。

每个节点都能尝试将其收到的最新交易“挖”到区块链上。挖矿过程就是一个节点将内存池中的交易信息收集到一个区块上，并反复将该区块的数据运行哈希函数（每次进行小幅调整），以期得到一个低于目标值的区块哈希值。

首先取得低于目标值的区块哈希值的节点可以将其区块添加到其区块链上，并将这一区块信息广播给其他节点。其他节点也会将这一区块添加到他们的区块链上，并从内存池中删除所有与之冲突的交易，然后重新开始挖矿，以期在这个新区块之上再建立一个新区块。

最后，开采该区块的矿工将在区块内放置他们自己的[特殊交易](https://learnmeabitcoin.com/technical/coinbase-transaction)，这使他们能够收集一定数量的比特币，但这些比特币当时并不存在，而是在建立一定数量的新区块之后会进行分发。这种区块奖励激励着各个节点持续建设区块链，同时在整个比特币网络中分配新币。

![](https://storage.googleapis.com/papyrus_images/8179952c750bad5fc1ccd901ac38990842951a98eb91c3bd3ae4ff48730bc8f7.jpg)

总结
--

比特币是一个计算机程序，它与世界各地的计算机共享一个安全文件。这一安全文件由交易信息组成，利用密码学，这些交易使人们可以自由发送和接收数字保险箱。因此，一个所有人都可以使用的电子支付系统就出现了，它可以在没有中央控制得情况下运行。

自2009年1月发布以来，比特币网络一直不间断地运行。2019年，它处理了超过1.12亿笔交易，总额为15,577,763,114,629.34美元(15.58万亿美元)。

比特币程序本身也在积极开发中。自发布以来，已有600多人参与了它的代码建设，因为程序是“开源”的，所有人都可以查看其代码并参与建设。

[Subscribe](null)

---

*Originally published on [aizo.btc](https://paragraph.com/@aizo-btc/b0XCmF4sqli09ufyzVTK)*
