比特币纸

合法imtoken钱包下载 2023-02-09 07:23:01

我最后一次阅读比特币论文是几年前。今天区块链火了,我决定再仔细看一遍,看完之后写下自己的想法。

本文试图从宏观到微观,先静态,后动态的方式来描述比特币系统。文章大部分内容来自中本聪的比特币论文,加上自己的一些理解。

世界地图上的比特币

今天,比特币在物理上是一个分布式系统,在全球拥有超过 12,000 个节点。这些节点中的每一个都可能是普通的笔记本电脑、台式机、服务器或专用的“矿工”。归根结底,它是一台具有计算和存储能力的计算机。这些节点通过 Internet 连接在一起,并使用 TCP/IP 协议进行通信。

比特币论文

节点

每个比特币节点上存储的数据是相同的,或者大致相同。换句话说,比特币系统中的每个节点都拥有所有比特币数据。这些数据被组织在一个称为区块链的数据结构中,一旦数据存储在链上,就很难篡改。

比特币论文

块的大小最大为1MB,由一些不同类型的数据组成,其中一部分是前一个块的hash值,这样每个块都包含一个指向前一个块的hash,构成了一个很常见的数据。这种结构,链表,被称为区块链。区块链的聪明之处在于数据难以篡改。如果要修改链上某个区块中的数据,它的 Hash 值会发生变化,这样后续的每个区块都会发生变化。

堵塞

块由两部分组成:标题和正文。块的最大大小为 1MB比特币双花是指什么,其中头部占用 80 字节。头部包含前一个区块的哈希值、本区块正文内容的哈希值以及填充数据Nonce。填充数据 Nonce 用于调整和控制当前区块的 Hash 值。它的功能将在接下来的区块是如何生成的描述中介绍。

比特币论文

其实所谓区块的Hash值,是指区块的80字节头部的Hash值。区块链如何保证正文内容不被篡改?它使用一种称为 Merkle Tree 的数据结构。

在密码学和计算机科学中,哈希树或默克尔树是一种树,其中每个叶节点都用数据块的哈希标记,每个非叶节点都用其子节点标签的密码哈希标记。哈希树允许对大型数据结构的内容进行有效和安全的验证。哈希树是哈希列表和哈希链的概括。

这样,通过将实际数据存储在叶子节点中,逐层计算Hash,最后将根节点Root Hash保存到块头中,这样任何叶子数据发生变化,从根开始的路径上的Hash值节点到叶子节点,包括Root Hash里面都得改。这样可以确保数据不被篡改。

那么这样做有什么好处呢?这给区块链带来了删除数据的能力,即Merkle Tree叶子节点的数据不能被修改,但是可以直接删除,不再保存,同时它的Root Hash保持不变,block Hash也保持不变不变。这确保了在不断向区块链添加新区块的过程中,数据不会爆炸式增长,从而可以将所有区块存储在单个计算机节点上。

在比特币系统中,构成块体的默克尔树的叶子节点存储一笔交易。

贸易

比特币交易用于将比特币从一个人传递给另一个人,就像一个人在现实世界中支付另一个人一样。不同的是,现实世界需要货币的实体和货币背后的政府背书,而在比特币世界中,交易不仅表达了交易本身,还代表了比特币的所有权。

比特币论文

因此,每笔交易都包含上一笔交易的Hash值,用于输入;它还包含交易对象的公钥,用于输出。这样,比特币的所有权就从之前交易中包含的公钥对应的私钥的持有者转移到了当前交易中包含的公钥对应的私钥的持有者身上。

当然,因为私钥代表了一笔交易的所有权,所以每笔交易都必须以交易中包含的公钥对应的私钥作为其输入进行签名才能生效。

持有私钥就可以进行交易,那么如何防止持有者将一个比特币支付给多人,也就是如何解决双花问题呢?答案是所有交易数据都是公开的,存储在区块链上,不可篡改。这样,在验证新交易时,可以通过遍历已有交易来判断是否存在双花现象。

交易链

在论文中,比特币被定义为一条交易链,它的所有权在交易中流动,在最后一笔交易中持有与公钥对应的私钥的人,就拥有了交易链所代表的比特币的所有权。

比特币论文

在真实的交易中,可能会同时消耗多个币,可能会有变化等。考虑到这一点,论文将交易扩展为支持多输入交易和多输出公钥。至此,一次可以消费多个币,也可以拆分消费一枚币。

比特币论文

比特币的诞生

代表比特币的交易链中的每一笔交易都必须有至少一笔交易作为输入,那么第一笔交易是从哪里来的,也就是比特币是什么时候产生的呢?

区块的主体由交易组成的默克尔树组成,每个区块中的第一笔交易是特殊交易。特殊的是没有输入,用于奖励区块的生成者。这样,随着交易数量的增加,区块的数量也在增加,而随着区块数量的增加,比特币/交易链的数量也在增加,相当于货币的不断发行。

谁将生成块

第一个区块由中本聪生成,称为创世区块,也是唯一一个不包含其他区块哈希的区块。其余区块由比特币节点生成,比特币节点收集网络上未确认的交易,确认后形成区块,同时将区块添加到区块链中。

12000多个节点,是哪个节点生成的?比特币使用更多的 POW 机制来达成共识。比特币规定每个区块的哈希值末尾的位必须为0,这样节点在计算区块头哈希值时,必须不断调整填充字段Nonce的内容,以满足哈希值要求。由于 Sha256 的加密哈希特性,计算一个特定的哈希值非常困难,需要大量的计算资源。当一个节点找到一个合格的 Nonce 后,其他节点就特别容易验证。

节点不断地计算新区块的哈希值,这就是挖矿。新区块的奖励交易就是挖矿的收益。因为网络上的节点都在挖矿,每个节点都可能被挖到,网络也可能被分割(比如海底光缆被挖了,被网络攻击了等等),可能有多个网络上的合法区域。区块链,当这种情况发生时,论文规定长链获胜,短链被丢弃,其上与长链不一致的交易也被取消。

如果某个节点在某个时刻收到两条相同长度的链,它将同时保存两条链。同时,在第一个收到的链上进行挖矿,直到随着交易的进行,两条链中的一条获胜,失败的链被丢弃。

货币发行政策

作为一种货币,比特币也有它的货币政策。如前所述,随着区块的产生,货币继续发行。一个问题是,随着比特币网络的发展,节点越来越多,新区的生成速度会不断增加,这将导致比特币数量不断增加。为了解决这个问题,论文描述了一种自动调整哈希值计算难度的机制。通过根据出块速度自动调整哈希值末尾的0个数,发币速度不受全网算力影响。

根据论文的设计,当发行到一定数量时,计算出新区块将不再获得比特币奖励,即不再发行货币。比特币数量保持稳定,生成区块的节点仅获得交易费用奖励。交易手续费是指在一笔交易中,输入大于输出,超出部分被视为交易手续费,相当于给比特币节点一个小费。小费高的交易更容易吸引节点,因此更容易被确认,交易速度也更快。

隐私保护

与传统的银行交易只能用于个人查询不同,比特币交易对所有人开放。但是比特币双花是指什么,比特币的所有权是通过 RSA 密钥来证明的,即比特币系统不保证交易的私密性,而是保证比特币持有者的匿名性。

安全验证

只要控制了一定的算力,就可以打破比特币共识协议,从而撤销已确认的交易。文中对安全问题进行了论证,主要讨论了在不同的算力比例下,交易需要等待多少个区块才能被认为是安全的。这里就不赘述了,有兴趣的可以详细阅读论文。

与算力攻击相比,网络攻击似乎更容易一些。只要故意创建一个小的网络分区,就很容易导致该分区中的事务被撤销。但论文也提到,即使黑客控制了更多的算力等,也只能撤销交易,进行欺诈。受益于交易链公私钥的所有权证明,黑客无法花别人的钱。

为什么比特币有价值

因为每个人都认为它物有所值。法币背后是国家政府的信用。比特币更多地依赖信仰,就像黄金一样。

总结

该论文描述了比特币系统的整体设计,这是一个非常复杂的分布式计算系统。当然还有一些工程和安全问题没有讨论,但它足够精致,足够聪明,可以阅读。

熟悉分布式存储系统和分布式共识算法的人应该对文中的很多概念都非常熟悉。我认为会有一些疑问和一些问题。比如对网络的假设过于简单,只考虑了复制,没有考虑分片。还有很多。以后会找机会阅读代码和衍生系统,期待更多惊喜。