/
登录
 找回密码
 立即注册

只需一步,快速开始

发帖
首页 区块链 Web3 仔细聊聊比特币,拆读《白皮书》-07

仔细聊聊比特币,拆读《白皮书》-07

3 小时前 评论(0)
接着上一篇,我们继续聊聊《比特币白皮书》的第 7 部分:回收硬盘空间 (Reclaiming Disk Space)。
回收硬盘空间
还是老规矩,原文和中文翻译放在这里,便于中英文对照,有条件的可以原文理解。
Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree 2 5 7 , with only the root included in the block's hash. Old blocks can then be compacted by stubbing off branches of the tree. The interior hashes do not need to be stored.
如果⼀枚硬币最近发⽣的交易发⽣在⾜够多的区块之前,那么,这笔交易之前该硬币的花销交易记录可以被丢弃 —— ⽬的是为了节省磁盘空间。为了在不破坏该区块的哈希的前提下实现此功能,交易记录的哈希将被纳⼊⼀个 Merkle 树之中,⽽只有树根被纳⼊该区块的哈希之中。通过砍掉树枝⽅法,⽼区块即可被压缩。内部的哈希并不需要被保存。


A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year. With computer systems typically selling with 2GB of RAM as of 2008, and Moore's Law predicting current growth of 1.2GB per year, storage should not be a problem even if the block headers must be kept in memory.
⼀个没有任何交易记录的区块头⼤约是 80 个字节。假设每⼗分钟产⽣⼀个区块,80 字节乘以 6 乘以 24 乘以 365,等于每年 4.2M。截⽌ 2008 年,⼤多数在售的计算机配有 2GB 内存,⽽按照摩尔定律的预测,每年会增加 1.2 GB,即便是区块头必须存储在内存之中也不会是什么问题。
拒绝臃肿
听起来,这个标题很像一个只有技术才关心的问题。但其实它要解决一个很现实的考虑,也是中本聪很聪明的设计之一:
如何让整个比特币系统一直能运行下去,而不是越跑越“臃肿”、把大家的电脑都撑爆?
通过前面的介绍,我们知道,比特币在运行过程中,每一条交易都会被记录到区块链上。每一笔交易产生一条记账记录,所有的交易连接起来,就会是一笔巨账。
可以设想:
全世界所有人的转账、支付、买卖,都记在一本账本上,而且一条都不能删。矿工那要保存一份完整的账本,各节点也要保准一份完整的账本,长此以往,账本越来越厚,磁盘空间会越来越不够用。
这是最大的问题。
不过中本聪也早就想到这个问题了,他的解决办法是:回收磁盘空间(Reclaiming Disk Space)。
解决思路
解决思路是这样的:不需要永远保存“全部细节”,只保存“最终结果”。

打个比方:就像超市小票和总账本。
你去超市买东西,收银机会打出小票;小票上有你买的每件商品名称、单价、时间。但超市不可能永远保留所有顾客的全部小票吧?那太多太不现实了。
所以超市的解决办法大致是这样:
顾客的小票你自己带走或丢掉(临时数据)。超市的总账本只保留关键数据,比如当天的销售总额、库存变化(最终结果) 等,就可以满足日常经营所需。
比特币也是同样的逻辑:
系统最初要验证每笔交易的细节(类似小票);但当一段时间过去后,这笔交易已经被确认,不可能再被修改的时候,就可以把细节删掉,只留下“这一页账已经对过了”的标记即可。
技术含量
再延伸一丢丢,技术上是怎么做到的呢?——用“区块头(Header)”保留摘要信息。
啥是区块头?区块头是区块的组成之一,包含区块的摘要(哈希、时间戳、上一个区块链接等),体积很小的东西;另一个组成是具体的交易明细,也就是交易数据,这个体积很大。
中本聪的方案是:过了一定时间后,不需要保存全部交易明细,只保留区块头。
打个比方,就想一本书,区块头相当于目录,交易明细相当于每一页的具体内容。你读书时不一定需要整本书都带着,有时候只需要目录就够用了。
这样一来,节点(电脑)就能节省大量硬盘空间,但仍然能验证区块链的连贯性,保持正常的运转。
删删删
你可能会好奇,过程中产生的数据为啥能删?万一要想查点啥呢。
首先,这需要点共识认知。就像银行不会每天重复查你十年前的交易小票,它只看“你的账户余额”是不是对的就 ok 了。
其次,因为旧交易已经“定案”,比特币的交易一旦被写进区块链的深处(比如经过六个以上区块确认),就几乎不可能被篡改,可以认为这个老数据已经安全无误,既然安全无误,就不需要再次验证证明。
没它不太行
为什么这个设计重要呢?
其实只要稍加思考就不难想到,如果没有这个设计,比特币将会发生的 2 个可怕后果:
第一个是账本无限膨胀。
节点保存不动,普通人根本跑不起,网络最后还是会慢慢被大公司维护和把持,很显然违背“去中心化”的初衷。
第二个是验证效率会越来越慢。
每次验证一笔新交易,都得从头读一遍所有历史记录,那个速度将难以忍受的慢。
基于以上种种考虑,中本聪的做法就像是给区块链装上了“瘦身功能”:历史交易确认后压缩存档;新区块继续轻装上阵、轻快运行。
写在最后
关于第 7 部分,今天就先聊到这,下一篇继续。希望对你有帮助!
您需要登录后才可以回帖 登录 | 立即注册
楼主
燕舞蝶

关注0

粉丝0

帖子1

最新动态