『学概念找员外』比特币网络(三)

「力场 lichang.io」公链挖矿第一社区!

网络大小

比特币网络大小很难测量,因为它随时都在变化,而且没有一个中央权威机构。有些人通过研究给了一些估计:往高说,每个月可能有100万个IP地址成为比特币网络的节点(也可能是临时成为节点)。往低说,大约只有5000~10000节点永远在线并处理交易。这个数字有点出乎意料得小,不过这也是员外能查到的更新最近的数据了。

存储空间需求

完全有效的节点必须永久在线,这样才能接收到所有的交易数据。一个节点离线时间越久,当它重新连接到网络的时候,就需要越多时间来更新所有交易。就像你很久没有登录微信或者QQ了,在登录的第一时间,会有些许卡顿,这就是软件在自动的同步之前的所有聊天记录。这些节点还需要把完整的共识区块链都存储下来,也需要有好的网络连接,确保可以接收到所有交易并将其转播给其他节点。目前的存储空间大约要200多GB,低配电脑想要满足要求就略显吃力了。

最后,完全有效节点必须维护在交易中产生的(交易的输出)、未被消费掉的比特币的完整列表,这个列表最好放在内存而非硬盘里,这样,在接收到一个交易信息的时候,节点才能快速查看、运行脚本,验证签名是否有效,然后把交易放入交易池。到2014年年中,大约有4400万的交易被纳入区块链,其中有1200万个交易产生的比特币没有被使用。还好,这个数据不大,可以很容易地放进1G内存里。

轻量节点

除了完全有效节点之外,还有一种轻量节点(nightweight nodes),或者称为轻客户端,也叫简单付款验证 (Simple Payment Verification,简称SPV)客户端。事实上,在比特币系统里的大部分节点都是轻量节点。这些节点不会存储整个比特币区块链,它们只存储它们所关心的、需要进行核验的部分交易。如果你使用一个钱包软件,那里面就会有一个SPV节点,这个节点只会下载向你的账户付款的交易及区块头部。

一个SPV节点的安全等级远不如全节点。它可以核验那些很难被挖到的区块,因为它有区块头部数据,但它不能核验一个区块里所有交易记录的有效性,因为它没有所有的交易历史记录,也没有那些未被消费的比特币的列表。SPV节点只验证那些和它们相关的交易,所以它们必须依赖那些全节点去验证网络上的其他所有交易。这虽然是一种安全性上的妥协,却不是个坏主意:轻量节点依赖全节点去处理那些比较难的工作,但当某个区块由于某些原因未被矿工挖出来时(挖矿成本巨大),这些轻量节点也会做一些核验来确保这个区块不会被拒绝。

作为一个SPV节点可以节省很多资源。区块头部的大小只是整个区块链的千分之一。所以轻量节点不需要200多GB的存储空间,只需要200MB即可,即使一部智能手机也能成为比特币网络的轻量节点。

比特币是一个开源协议,比特币网络一定是由实现方式各不相同的软件系统在无缝交互。这样,即使有些软件系统有缺陷,也不至于使整个比特币网络瘫痪。比较好的现象是,人们用不同的语言不断地重新实现协议,有些人用C++、有些人用Go语言,还有不少人用其他语言。不好的现象是,绝大部分的节点都会调用比特币官方客户端的资源库(bitcoind library),这个库是比特币核心代码开发者们用C++开发的库,而且有些节点用的是过时的版本。所以,即使在同一时间,大家运行的客户端都会略有不同。

你可能感兴趣的:(『学概念找员外』比特币网络(三))