主页 > imtoken冷钱包怎么创建 > 北京大学《区块链技术与应用》系列课程学习笔记肖震老师[4] BTC的工作原理

北京大学《区块链技术与应用》系列课程学习笔记肖震老师[4] BTC的工作原理

imtoken冷钱包怎么创建 2023-06-22 06:50:05

目录

一、BTC网络 1、BTC网络工作原理

比特币工作在应用层,底层是P2P网络。 也就是说,在比特币系统中,比特币协议运行在应用层,最底层,即网络层,运行的是P2P Overlay Network。 比特币系统网络层的P2P网络比较简单,所有节点都是比较平等的,没有超级节点(Super Node or Master Node)。 如果你想加入这个网络比特币现在每个区块大小是多少字节,你至少需要一个种子节点(Seed Node),联系种子节点,它会通知你它知道的网络中的其他节点。 每个节点通过TCP进行通信,有利于穿透防火墙。 当你需要离开网络时,你不需要通知其他节点,你只需要直接退出应用程序,其他节点没有收到你的消息,过一段时间就会删除你。

比特币网络的设计原则是简单、稳健但不高效(Simple, robust, but not efficient)。 每个节点维护一个邻居节点的集合。 消息以泛洪的形式在网络中传播。 当一个节点第一次听到消息时,它会把它传播给所有的邻居节点,并记录它已经收到消息。 ,下次收到这条消息时,就不需要转发给邻居节点了。 邻居节点的选择是随机的,不考虑底层拓扑。 例如,加利福尼亚的节点可能是阿根廷节点的邻居节点。 这种设计的好处是鲁棒性大大增强,但是牺牲了效率。 在计算机科学中,鲁棒性是指计算机系统在执行过程中处理错误或算法在遇到输入、操作等异常情况时继续正常运行的能力。

比特币网络的传播属于Best Effort:在BTC网络上发布的一笔交易不一定会被所有节点接收到,部分节点可能不会按照比特币协议的要求进行转发。 可能不合法转发,不合法再转发。 而且,不同的节点接收交易的顺序也可能不同(网络传输的延迟可能会很大)。 这是去中心化系统要面临的实际问题,只能做到最好。

2. 新交易的传播

在比特币系统中,每个节点都维护着一个等待上传到链上的交易集合。 如果某个集合中的交易都是合法交易写入区块链(具有合法签名),则节点在第一次收到交易时将其写入此集合,并转发给所有邻居,当收到这笔交易以后,不需要再转发给邻居节点,避免交易在网络上被无线传输。

如果几乎同时在网络上发布了两笔相互冲突的交易,每个节点可能会根据其所在位置接收到不同的交易,那么另一笔交易对于本节点来说是非法的,不会被收录。 比如现在有一笔A→B的交易和一笔A→C的交易几乎同时发送,有的节点先听到A→B,加入到自己的交易集合中,而不会加入A的交易→C 直到区块链中有新的 Published,其中包含交易 A→B,则 A→B 将从交易集中删除。 还有一种可能是一些节点先听到了A→C的交易,然后将A→C添加到自己的交易集中,但是新的区块链生成了,其中包含了A→B的交易,那么A→C也会删除,因为此时的A→C是非法事务,与A→B冲突。 也就是说,判断哪笔交易是合法交易,主要看是接收到A→B交易的节点先获得记账权,还是接收到A→C交易的节点先获得记账权。

3.新区块的传播

新区块的传播类似于新发布交易的传播,但每个节点不仅要检查区块内容是否合法,还要检查该区块是否在最长的合法链上。 块越大,它在网络上传播的速度就越慢。 比特币协议要求区块大小不能超过 1M 字节。 由于 BTC 网络的效率比较低,一个 1M 的区块可能需要几十秒才能传播到比特币网络上的大多数节点。

二、BTC挖矿难度 1、什么是挖矿难度

比特币系统中的挖矿是不断修改区块头中的nonce和extra nonce的值,使得:

H(块头)≤目标。 目标阈值目标越小,越难挖掘。 因此,调整挖矿难度就是调整目标来调整目标空间在整个输出空间中的比例。比特币使用的哈希函数是SHA-256,生成的哈希值是256位,所以整个输出空间是

2^{256}

,调整目标空间的比例,直观上就是最终哈希值前面有多少个0,0越多,值越小,即挖矿难度越大。

挖矿难度与目标门槛成反比

difficulty = \frac{difficulty1target}{target}

. difficulty1target是指挖矿难度difficulty定义为1时目标阈值target的值,最小挖矿难度为1,所以这个常数也是target允许的最大值。

2、为什么要调整挖矿难度?

随着系统总算力的不断增加,如果挖矿难度保持不变,比特币系统平均出块时间会越来越短,平均出块时间总是会降低到1s甚至更长。 小的。 假设比特币系统的区块生成时间为1s,也就是说每1秒左右向比特币网络发布一个承载一系列交易的新区块,但在比特币网络中,该区块传播到大多数节点需要几十秒。 如果两个节点几乎同时发布区块,就会出现分叉,如果出块时间很短,这种分叉就会成为常态。 而且不只是二进制叉子,可能有很多叉子。

太多的分叉不利于BTC系统达成共识,还会危及比特币系统的安全。 比特币协议假定大部分计算能力存储在诚实节点中。 系统中的算力越强,安全性就越好,因为恶意节点掌握超过51%的算力进行攻击会更加困难。 如果出块时间很短,会导致分叉过多,从而分散诚实节点的算力。 此时,恶意节点可以集中算力扩大恶意分叉,这可能导致恶意节点可能不需要掌握51%的算力就可以达到分叉攻击的目的,这大大降低了BTC系统的安全性。

事实上,比特币系统中的平均区块生成时间不一定是最优的。 例如,以太坊的区块生成时间为 15 秒。 区块生成时间大大缩短,因此以太坊设计了一个新的共识协议——Ghost。 在这个协议中,分叉产生的Orphan Block不能像比特币系统那样简单丢弃,还必须给予一定的Uncle Reward。 因此,在不同的区块链系统中,无论设计出块时间多长,都必须保持稳定,不能让其无限减少。

3. 如何调整挖矿难度

比特币协议规定每2016个区块(约每14天)挖矿难度要重新调整一次,即调整目标阈值target。 具体的迭代更新公式为:

target = target*\frac{actuallytime}{expectedtime}

,其中期望时间为2016*10比特币现在每个区块大小是多少字节,实际时间为系统实际生成最新2016个区块所花费的时间。 实际时间越大,越需要降低难度,即提高目标; 实际时间越小,越需要增加难度,也就是降低目标。 为了避免系统出现一些意外情况,导致系统出现非常大的波动,每次对目标阈值target的调整最多不能超过4次。相对地,target的最小调整不能小于

\frac{1}{4}

.

4.如果出现恶意节点,不要调整目标

目标写在 BTC 系统的代码中。 每生成2016个区块,就需要调整target。 代码也是开源的,但是万一该调整的时候有恶意节点不调整目标怎么办。 这也是大多数节点的诚信问题。 在发布区块的区块头中,有一个“32字节的目标压缩编码”后形成的“4字节的nBits字段”。 如果目标没有按照协议调整,那么公布的区块头中的4字节nBits字段是不正确的,诚实节点不会接受这样的区块。