主页 > imtoken官网钱包app > 《精通比特币》第六章《比特币网络》解读——区块链基础知识

《精通比特币》第六章《比特币网络》解读——区块链基础知识

imtoken官网钱包app 2023-09-14 05:07:12

通过本章的学习,可以帮助你系统地了解比特币网络、网络中节点的分类、节点如何同步区块、轻量级客户端如何验证交易的有效性以及布隆过滤器的原理。

阅读时间:约15分钟。

第一节 比特币网络

比特币采用基于互联网的 P2P 网络架构。 P2P 是指连接在同一个网络中的节点彼此平等,共同提供服​​务,没有任何中心化的服务。 比特币系统是一种点对点的数字现金系统。 每个节点在对外提供服务的同时,也使用网络中其他节点提供的服务。 因此,P2P 网络是可靠的、去中心化的和开放的。

比特币网络意味着每个节点都按照比特币 P2P 协议运行。 当然,除了P2P协议之外,扩展后的比特币网络还有其他协议,比如Stratum协议、矿池挖矿协议等连接比特币系统相关组件的协议。

Stratum Protocol:是目前主流的矿机与矿池之间的通信协议。 非独立矿工挖矿时可以连接矿池服务器。 此时矿工不直接访问比特币网络,而是通过Stratum协议与矿池服务器通信,矿池服务器通过比特币P2P协议连接到比特币网络。 币网。

第二节 比特币网络中的节点

虽然加入比特币网络的每个节点都是完全平等的,但每个节点所包含的功能可能会根据每个节点的用途而有所不同。 一个完整的比特币节点(全节点)包括4个功能:路由、完整的区块链数据库、矿工、钱包服务。

各功能简要介绍如下:

路由:所有比特币节点都具有路由功能。 具有路由功能的节点可以传播验证交易和转发区块信息,保持与对等节点的连接。

完整的区块链数据库:存储区块链的完整数据,可以独立验证所有交易,不依赖于其他节点。

矿工:具有矿工功能的节点可以通过解决工作量证明算法问题来竞争创建新区块的资格,并获得比特币奖励和交易费用。

钱包:管理用户私钥,支持比特币交易和查询功能。

包含以上四种功能的节点称为比特币全节点,如比特币核心客户端。 根据用途的不同,有些节点只包含部分功能,常见的节点类型如下:

全区块链节点:仅包含完整的区块链数据库和路由功能。 此类节点通常用于构建基于比特币系统的应用服务,例如交易所。

独立矿工节点:包含矿工、完整的区块链和路由功能。 此类节点用于独立矿工挖矿。 独立矿工节点不需要依赖矿池服务器的任务分发和验证,因为他们有完整的区块链数据备份,可以独立挖矿创造新的区块。

轻量级(SPV)钱包节点:包含钱包和路由功能。 轻量级钱包没有完整的区块链数据库,无法独立完成交易验证,需要外部参照。

挖矿节点:包含矿工功能。 挖矿节点不直接连接到比特币网络。 它首先通过Stratum协议与矿池服务器通信,矿池服务器连接到比特币网络。

通过上面的介绍,我们对比特币网络以及网络中节点的类型和分类有了一个大概的了解。 下面主要描述实现过程,可以帮助大家理解其背后的运行机制。

第三节 新节点如何接入比特币网络

虽然比特币网络中没有专门的节点,但是当一个新的节点启动时,为了接入比特币网络并参与比特币系统的协作,需要连接到一个已知的运行节点,运行节点将将新节点的信息广播给其他节点,从而连接到网络。 因此,新节点接入比特币网络的关键是维护一个对等节点列表,帮助它们广播交易、区块等信息。

节点可以通过以下方式获取对等点列表:

方法一:由于节点可以不断加入和离开,所以本地维护的节点列表最好能长期稳定运行。 这样的节点被称为“种子节点”。 方法比特币的基础知识,客户端可以设置自动获取。 当然,新节点不一定需要与种子节点建立连接,但可以通过种子节点快速发现网络中的其他节点。 这包含在建立通信时在节点之间传递的信息中。

方法二:新节点可以设置至少一个其他节点的IP地址,节点通过这个IP地址可以引用连接到某个节点。

第三种方法:新节点只指定固定节点的IP地址。 此时节点只能连接到这些固定IP地址对应的节点,不会自动发现和维护与对端节点的连接。

当节点再次启动时,它不会尝试与所有获得的节点地址建立连接。 默认会与上次连接成功的节点建立连接。 如果上次连接成功的节点没有响应,该节点可以使用种子节点重启,获取新的节点列表。

第四节 全节点如何同步区块

全节点,即完整的比特币区块链的一个节点,拥有所有的交易信息。 全节点可以独立完成对交易信息的验证,通过比特币网络获取包含交易信息的新区块更新,并在验证无误后将此更新合并到本地区块链副本中。

截至2018年8月末,比特币区块链大小已经超过190G,完全同步还需要一个月左右的时间。

一个全节点连接到对等节点后,它做的第一件事就是构建一个完整的区块链。 同步过程如下:

1、新节点发送本地版本信息,包括本地区块高度(即区块数); 同时,对端节点会将自己的版本信息返回给新节点。

2、当对端节点识别到新节点的区块顶高小于自己的区块顶高时,对端节点将广播一批500个区块的区块哈希值可供共享。

3. 新节点通过发送消息请求获取区块信息。 当从对端节点读取区块同步区块链时,会在发送下一个区块同步请求之前同步区块信息,以防止网络拥堵。 收到每个块后,它将被添加到本地区块链。 这个过程可以在第 7 章中详细描述。

第 5 节 Simple Payment (SPV) 如何验证交易

普通用户使用比特币完成支付和转账交易,通常在智能手机等终端上完成,但受限于终端的空间和效率,需要在没有完整区块链的情况下进行操作,因此简单支付验证(SPV)客户端应运而生。

SPV 节点只需要下载区块头,不需要下载每个区块中的交易信息。 完整的区块链通过扫描区块链,可以建立一个完整的UTXO(未花费的交易输出)数据库比特币的基础知识,每一笔交易都可以从UTXO中得到验证。 SPV节点由于自身不存储交易信息,因此在验证时需要使用对端节点返回的信息来验证交易。

用户A在商户B消费支付,商户B验证支付有效(SPV验证)如下:

1、商户B只关心打到自己的比特币地址是否完成交易。 通过设置布隆过滤器,商家 B 只能接受包含他自己的比特币地址的交易。 (后面会详细介绍布隆过滤器的原理)

2.一旦比特币网络中的其他节点检测到一笔交易满足SPV节点设置的布隆过滤器的条件,其他节点就会发送检测到的区块的消息,消息中包含区块头,包含目标交易的默克尔路径. 关于Merkle路径,可以理解为每个区块中的所有交易都是成对哈希并逐层递归,最终形成一个只包含一个Merkle根节点的树结构,所以只要知道区块头,并且在树结构中的Merkle路径,可以在叶子节点中找到对应的交易。

3. 验证交易是否存在。 SPV节点将目标地址中交易的哈希值与对端节点返回的Merkle路径中交易的哈希值进行比较。 如果它们相等,则表示交易存在。 但是,交易的存在并不意味着它是有效的。 还可能存在双重支付的问题,即同一个来源的比特币被支付了两次,所以还是需要双重支付验证。

4.验证是否重复付款。 由于SPV节点本身会保存完整的区块头,在peer节点返回交易对应的区块后,SPV节点会查看交易所在区块之后的区块数。 一旦大于等于6,就说明这笔交易是被很多节点共识的,被篡改的可能性很低。

至此,简单的支付验证就完成了。

因此,简单支付验证最关键的部分是从点对点全节点获取包含交易的区块头和Merkle路径来验证交易。 但如果SPV节点在请求交易信息时直接将目标地址提供给全节点,则很容易将目标地址与其所属的钱包用户结合起来,从而暴露用户隐私。 因此,SPV节点在查询交易信息时,并不是直接将目标地址发送给对端节点,而是将目标地址对应的布隆过滤器发送给对端节点,对端节点再将输出值代入交易中into 进入过滤器进行验证。 如果验证匹配,则将匹配交易对应的区块的区块头和默克尔树返回给请求节点。

第六节布隆过滤器原理说明

布隆过滤器的实现是由一个变长数组N(即由N位二进制数组成的数组)和数量不定的M个哈希函数组成。 原理是将每个关键字依次通过多个哈希函数。 哈希函数计算后,每次哈希函数计算的结果对应二元数组,数组中对应位置的值置1。

SPV节点建立布隆过滤器的过程:

1、首先,SPV节点会初始化一个空白的没有关键字的布隆过滤器;

2、接下来,SPV节点会创建一个包含钱包所有地址的地址列表,并为每个地址创建对应的关键字,即能够匹配到对应地址的搜索模式。 通常,这个匹配关键字是支付给公钥的哈希脚本,即对应交易输出锁定脚本中公钥的哈希值;

3. SPV节点向布隆过滤器添加关键字。

第 7 节总结

通过本章的学习,相信你对比特币网络、网络中节点的分类、全节点如何同步区块、轻量级客户端如何验证交易的有效性、布隆过滤器的原理等都有了系统的了解。

如果您对文章中的表述有任何疑问或错误,欢迎在留言区讨论交流,一起精通比特币。