「力场 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++开发的库,而且有些节点用的是过时的版本。所以,即使在同一时间,大家运行的客户端都会略有不同。

比特币官方客户端钱包是用什么语言开发的_『学概念找员外』比特币网络(三)...相关推荐

  1. 比特币官方客户端钱包是用什么语言开发的_5种主流比特币客户端的开发选型...

    bitcoin客户端是接入比特币网络的必备软件,也是开发者构建基于比特币区块链的去中心化应用的基础平台.本文将介绍主流的五种bitcoin客户端软件,开发者可以根据自己的需求进行选择. 1.Bitco ...

  2. python语言平台无关_从零开始学Python自然语言处理(十二)——上下文无关文法...

    前文传送门: 在说上下文无关文法之前,我们来看看形式语言理论,什么是形式语言理论?形式语言理论形式语言理论是用数学方法研究自然语言或者程序设计语言的理论.研究语言组成规则,而不研究语言的具体含义.说到 ...

  3. r语言electricity数据集_怎么学习用 R 语言进行数据挖掘?

    [有些小马虎的地方,比如:案例3中,测试集的train_Num前面应该有个负号的,否则就也成训练集了]====2016.1.28日重新补充购物篮关联分析apriori算法====2016.1.20补充 ...

  4. php程序员学什么语言好就业_为什么学汽修好就业

    职教典范 工匠摇篮 HUZHEN 保定虎振 包教包会·保障就业 初中毕业了,对于那些不想接着读高中的同学们来说,学一门技术是一个不错的选择.掌握一门技术可以更好的来应对未来激烈的竞争,可是很多人却不知 ...

  5. unity3D用什么语言开发好?

    unity3D用什么语言开发好? 一.总结 一句话总结:选c# 同时U3D团队也会把支持的重心转移到C#,也就是说文档和示例以及社区支持的重心都在C#,C#的文档会是最完善的,C#的代码实例会是最详细 ...

  6. ETH官方客户端Geth的使用

    介绍 Geth是由以太坊基金会提供的官方客户端软件,用Go编程语言编写的.Geth提供了一个交互式命令控制台,通过命令控制台中包含了以太坊的各种功能(API).全名go-ethereum,github ...

  7. 【Groovy】使用 Groovy 语言开发服务器 Server 和客户端 Client 套接字程序 ( 服务器客户端完整代码示例 | 运行服务器端与客户端效果及过程分析 )

    文章目录 一.服务器端完整代码 Server.groovy 二.客户端完整代码 Client.groovy 三.运行服务器端与客户端效果及过程分析 一.服务器端完整代码 Server.groovy 参 ...

  8. mixin network_基于Mixin Network的Go语言比特币开发教程 : 用 Mixin Messenger 机器人接受和发送比特币...

    基于Mixin Network的Go语言比特币开发教程 : 用 Mixin Messenger 机器人接受和发送比特币 在 上一篇教程中, 我们创建了自动回复消息的机器人,当用户发送消息"H ...

  9. 284页beego官方中文文档,Go语言进阶必备

    Go语言作为出身名门的后起之秀,大家所熟知的Docker和Kubernets(K8S)就是使用Go语言开发的,以其简单高效.高并发.跨平台的优势,称霸于容器领域. 根据 Stack Overflow ...

最新文章

  1. keepalive实验配置
  2. javax.naming.NoInitialContextException: Need to specify class name in environment or system property
  3. secureCRT 下载文件
  4. 菜鸟系列docker——docker基本概念(1)
  5. Divide it!
  6. Mongodb 基础 查询表达式
  7. springMvc json 参数
  8. 必须掌握的八个cmd命令行
  9. Python:Mysql编程(基础操作命令)
  10. 【读书笔记】《谈谈方法》(笛卡尔)
  11. 高通SDX12平台:启动流程梳理
  12. zabbix 监控下载安装
  13. 微信小程序中的添加收获地址的流程
  14. python实现多进程工资计算器
  15. 使用Wechaty搭建微信文件日程匣子
  16. 【学术】可以分享一下关于“社会计算”有哪些国内外顶级会议吗?
  17. CSP CCF: 201903-2 二十四点 (C++)
  18. nextInt与nextLine
  19. 如何从TI官方网站导入例程
  20. 最新最全论文合集——视频目标分割

热门文章

  1. 计算机自动启动无法开机,开机自启动被关闭,无法保护计算机安全,这是为啥。怎么办?...
  2. python文件输入和输出程序_python -o 和-i 输入和输出文件如何理解
  3. 【PAT笔记】C++标准模板库STL(一)——vector的用法和示例
  4. python:array,mat,tolist,list
  5. 重磅推荐几个接私活的利器!
  6. 科普:String hashCode 方法为什么选择数字 31 作为乘子
  7. 面试问到java并发_那些面试官必问的JAVA多线程和并发面试题及回答
  8. 进腾讯了!(实习面经分享)
  9. 杭电2669拓展欧几里得
  10. 消息中间体activeMQ