北京大学肖臻老师《区块链技术与应用》公开课:06-BTC-网络


1.比特币的网络

比特币工作在应用层,应用层运行比特币协议(基于TCP/IP),它的底层是一个点对点(P2P)网络,由全球范围内的节点共同维护,所有节点都是平等协作的。要加入这个网络,首先得知道有一个种子节点(seed node),然后跟种子节点联系,它会告诉你,它所知道的网络中的其他节点,节点之间是通过p2p来通信的,这样有利于穿透防火墙,离开时不做任何操作,不用通知其他节点,就直接退出应用程序就可以,别的节点没有听到你的消息,过段时间后就会把你的信息删掉。

2.洪水算法(Flooding,也称Gossip协议)

比特币的网络设计原则是简单鲁棒性,而不是高效(simple robust but not efficient),消息(如交易和区块)传播在网络上采取洪水算法(Flooding,也称Gossip协议)的方式。这是一种去中心化的高效传播机制。节点第一次听到某个消息的时候,把它传播给所有邻居节点,同时记录一下这个消息我已经收到过了,下次再收到这个消息时就不转发给邻居节点了,直到全网覆盖。
邻居节点的选取是随机的,没有考虑底层的实际拓扑结构,比如一个在中国的节点、它选取的邻居节点可能在美国,这样设计的好处是增强鲁棒性。鲁棒性非常强但是牺牲的是效率,向身边人转账和向美国转账效率是差不多的。
比特币中的洪水算法传播流程:
以一笔新交易(TX)的传播为例:
1.交易发起:用户钱包将交易发送至连接的节点(Node A)。
2.首次广播:

  • Node A验证交易有效性(如签名、UTXO)。
  • 若有效,Node A将交易放入本地内存池,并通过inv消息(包含交易哈希)通知所有邻居节点(Node B, C, D)。同时记录一下这个消息我已经收到过了,下次再收到这个消息时就不转发给邻居节点了。

3.请求与转发:

  • 邻居节点若未见过该交易,回复getdata请求完整交易数据。
  • Node A通过tx消息发送交易详情,邻居节点验证后继续转发给自己的邻居。

4.全网覆盖:

  • 重复上述过程,指数级扩散,直至多数节点接收(通常在几秒内完成)。

3.待上链的交易集合(内存池,Mempool)

比特币系统中节点(全节点、矿工节点)要维护一个等待上链的交易的集合。用于存储尚未被打包进区块的待确定交易。第一次听到某个交易(合法)时,把这个交易写到这个集合,并且转发这个消息给邻居节点,以后再收到这个交易就不用转发了,这样避免这个交易无限的在网络传播下去,转发的前提是这个交易是合法的(有合法的签名,以前没被花过)。不同节点的内存池可能不一致(因网络延迟、手续费过滤策略等)。矿工从本地内存池中选择交易进行打包,内存池是矿工候选交易的直接来源。
什么时候离开内存池?
1.交易被打包进区块:如果矿工选择该交易并写入新区块,交易从内存池移除。但是如果区块未上链(因竞争失败成为孤块),这些交易会重新回到矿工的内存池,等待下次打包机会。其他节点从未收到这个孤块,因此它们的内存池不受影响,交易仍保留在原内存池中。
2.区块成功上链:所有节点同步新区块,从内存池中移除区块中已确认的所有交易。并清理与之冲突的交易。
3.交易被替换(RBF):更高手续费的交易替换原交易(需原交易支持RBF)。
4.交易过期(超时):默认约14天后,未被确认的交易会被节点丢弃。
5.内存池已满:低手续费交易可能被移除,优先保留高手续费交易。
冲突的交易怎么处理?
这里有可能有两个有冲突的交易,同时被广播到网络中,比如A->B,另一个A->C,每个节点根据在网络中的位置不同可能收到的交易不同,谁先加入这个集合,另一个与之冲突的就不可以写入进去,部分节点采用手续费替换策略(RBF):允许更高手续费的交易替换冲突的低手续费交易(需原交易标记为可替换)。已经写入区块链的交易,要从这个集合中删除,新发布的区块在网络上传播的方式和新发布的交易是类似的,每个节点要检查这个区块的内容的合法性外,还要检查是否在最长合法链上。
比特币网络传播机制
越大的区块在网络上传播越慢,比特币协议对区块大小有1M字节的限制,比特币网络采用的传播方式是非常耗带宽的,带宽是瓶颈,1M字节大小新发布的区块有可能需要几十秒才能传播到网上绝大部分节点,这已经是挺长时间的了。
比特币网络传播是尽力而为(best effort),一个交易发布到比特币网络不一定所有节点都能收到,而且不同节点收到的交易的顺序也是不同的,网络传播存在延迟,有时候延迟会很长,而且有的节点不一定按照比特币协议要求进行转发,比如有的节点该转发的不转发,导致某些合法的交易收不到,也有一些节点转发一些不该转发的消息。比如一些非法交易,这是我们面临的实际问题。
网络如何最终协调?
尽管内存池短期不一致,但比特币网络通过以下机制保证最终一致性:
1.区块确认:矿工将交易打包到区块后,所有节点同步新区块,冲突交易会被清除。
2.最长链原则:节点以最长链为准,无效交易(如双花)会被拒绝。
3.交易重播:未确认交易会持续被节点重新广播,直到被打包或过期。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值