了解比特币网络(干货)

想想哈

18-11-0611:46

比特币的网络基础

比特币使用了P2P网络架构,“比特币网络”是按照比特币P2P协议运行的一系列节点的集合。除此之外比特币网络中还有其他协议:

Stratum协议:一个扩展网络的桥接协议,可以将其他网络作为一个节点连入比特币网络中。应用于挖矿、以及轻量级或移动端比特币钱包之中。矿池挖矿协议:这个协议有很多种,主要用来把多个矿机算力聚合起来成为一个矿池,整个矿池作为一个节点进行挖矿,而不是每一台矿机都配备上钱包和硬盘存储(下一周介绍)。

P2P概念

指位于同一网络中的每台计算机都彼此对等,各个节点共同提供网络服务,不存在任何“特殊”节点。每个网络节点以“扁平(flat)”的拓扑结构相互连通,节点之间交互运作、协同处理;在对外提供服务的同时也使用网络中其他节点所提供的服务。具有可靠性、去中心化,以及开放性。

比特币网络中的节点

角色功能的介绍

比特币中虽然各个节点都是平等的,但是根据所提供的功能不同,各节点可能具有不同的角色,可以分出四大功能:

路由:参与比特币全网络,发现其他节点并维持数据通讯,对交易信息的验证(不是确认)与传播,同时也可能包含其他功能。这是所有都节点必须具备的。区块链数据库:保存由一份完整的、最新的区块链账本信息的拷贝,这可能会占用上百GB的硬盘,有这个功能的节电池成为全节点,没有的称为轻节点(又称为“SPV节点”)。挖矿:用计算硬件运行工作量证明pow算法,以相互竞争的方式对交易进行确认,并创建新的区块,同时获得新增比特币的奖励。钱包:使用钱包方便快捷的管理你的比特币。

比特币网络中常见的节点类型

比特币网络中的节点都是由以上四种功能相互组合出的,除了必须具备路由功能进行传递信息外,其他三种功能都可以儿根据不同的应用场景进行自由的组合。

各种角色组成了比特币网络

运行比特币P2P协议的比特币主网络,由不到5000个运行着比特币核心客户端、储存了全部区块链数据的监听节点,以及几百个运行着各类比特币P2P协议的应用(例如Bitcoin Classic, Bitcoin Unlimited)的节点,以及成千上万个只保存了部分区块链的数据的轻钱包节点共同组成。

其中那几百个应用节点,是指建立在比特币上的应用,这个应用内部可能存在一个上万节点的网络,但是连入比特币网络是只显示一个,也就是围绕一个比特币网络中的边缘路由器来建立应用、搭建其他服务,例如交易所、钱包、区块浏览器、矿池等。这是比特币的网络扩展能力。

如何成为一个节点

安装好比特币的客户端。客户端查找最近一个比特币的路由服务器,获取现有比特币节点的IP地址。根据IP地址找到这个节点,发送自己客户端的版本号。如果你的客户端可以兼容系统就会建立通讯,再发送自己的IP地址等信息。已有的节点会把你添加到“通讯录”中,并把自己的的”通讯录“发送给你,现在你知道了其他节点的IP,可以随便访问。如果你要成为一个全节点,向其他全节点申请,就会把完整的区块链数据全部传输给你。SPV节点(轻节点)

并不是所有的节点都有能力储存完整的区块链。许多比特币客户端被设计成运行在空间和功率受限的设备上,如智能手机、平板电脑、嵌入式系统等。通过简化的支付验证(SPV)的方式可以使它们在不必存储完整区块链的情况下进行工作。这种类型的客端被称为SPV客户端或轻量级客户端。

与需要下载一个区块全部账本数据的全节点不同,SPV节点只需下载一个区块头部的部分数据,而不用下载包含在每个区块中的交易信息,同时只保存上与自己相关的交易信息。由此产生的不含交易信息的区块链,大小只有完整区块链的1/1000,却可以做到足够的安全。

SPV:简单支付验证

通过对全节点的交易验证方式进行对比可以更好的理解:全节点:构造一条验证链,这条链是由沿着区块链按时间倒序一直追溯上去的,直到这一枚比特币挖出来的那个区块,有数个交易组成。

例如:一个全节点要检查高度300,000的区块中的某个交易,它会把从该区块开始一直回溯到创世区块的300,000个区块中的交易全部都链接起来,并建立一个完整的UTXO数据库,通过确认该UTXO是否还未被支付、够不够,来证实交易的有效性。

SPV节点:验证所有区块之间的链,但不会对所有的交易进行溯源,只是把区块链中仅仅与目前交易有关的过往交易链接起来。例如:SPV节点在验证UTXO时,只要知道在这笔交易中,将要用于“支付”的那笔UTXO是否已经在之前的区块里被验证通过,就可以了,别人的事情我们不用操心。如你你想验证一个其他交易,只需要向比特币网络中的全节点寻求验证,全节点就会把相应区块上的交易信息全部发给你,就就可以拿去验证了。

在绝大多数的实际情况中,具有良好连接的SPV节点是足够安全的,它在资源需求、实用性和安全性之间维持恰当的平衡。

内存池或交易池:几乎每个节点都会维护的一份未确认交易的临时列表,用以追踪记录那些被网络所知晓、但还未被区块链所包含的交易。

UTXO池:有些比特币客户端维护的一个UTXO数据库,是区块链中所有未支付交易输出的集合——表现为余额。

返回顶部