上QQ阅读APP看书,第一时间看更新
2.2 比特币中的P2P网络
在比特币网络中,每个节点可随机连接到其他节点,节点也可随时加入网络或离开网络。整个网络的节点总数是不确定的。各个节点在进行信息更新时,它们并不是实时一致的,而是只需在一定时间内达到一致。也就是说,部分节点的退出或崩溃,并不会带来整个网络的瘫痪;用户的加入和退出并不会对整体网络产生太大影响。
节点与节点之间的信息交换,主要以交易广播的方式体现。交易广播通过泛洪(flooding)的方式来实现。具体来说,节点发起一个交易的时候,会将这笔交易的信息告知所有相邻节点,相邻节点将根据存储的历史交易信息校验这笔交易是否可以进行,如果校验通过,这一交易信息会继续接力传播给下一批相邻节点。交易信息会像涟漪一样在节点群里扩散、传播开来。当节点接收到的交易信息与该节点交易池的信息重合,即表明这一信息已经传播一次,这才终止广播。由于每个交易有独一无二的哈希值,通过哈希值查询交易信息是否重复非常方便。
需注意的是,在P2P网络中,由于带宽等原因,信息的传递往往是有延迟的。因此不同节点的交易池内容略有不同。如果有人发起双重支付攻击,并且两笔支付到达了同一个节点,诚实的节点将会仅保留一个交易,另一个不再广播,最终网络中不同的节点可能在短时间内存在记录不同交易的分歧,但是没关系,随着时间的推移,共识机制保证了最终只会记录一笔交易,使得双重支付攻击无法成立。
简要而言,比特币项目在P2P网络中建立起一个现金支付系统,主要依靠以下因素:节点之间地位对等;交易信息在节点间以泛洪的方式传播;节点检查交易是否成立;由共识机制确定合法的交易信息。