区块链学习笔记5——BTC网络
学习视频:北京大学肖臻老师《区块链技术与应用》
笔记参考:北京大学肖臻老师《区块链技术与应用》公开课系列笔记——目录导航页
比特币系统的工作过程
用户将交易发布到比特币网络上,节点收到交易后打包到区块中,然后将区块发布到比特币网络上,那么新发布的交易和区块在比特币网络上是如何传播的呢?
比特币网络的工作原理
比特币工作于应用层,其底层(网络层)运行的是一个P2P Overlay Network,比特币的P2P网络非常简单,所有节点都是对等的。
比特币要加入网络首先要知道一个种子节点,然后与种子节点联系,它会告诉你它所知道的网络中的其他节点。
结点之间通过tcp通信,这样有利于穿透防火墙。
离开网络时不需要做其他操作,直接退出应用程序即可,其他节点没有听到你的消息,过一段时间后就会把你删掉。
比特币的设计原则:简单、鲁棒,而不是高效
每个结点会维护一个邻居节点的集合,消息传播采取flooding的方法,节点第一次听到某个消息时,会把它传播给其他所有的邻居节点,同时记录这个消息已经收到过了,下次再收到时就不会再传播给其他邻居节点了。
邻居节点的选择是随机的,没有考虑底层的拓扑结构(一个在加利福尼亚的结点的邻居节点可能在阿根廷),这样增强了鲁棒性,但牺牲了效率。
每个结点还要维护一个等待上链的交易的集合,第一次听到交易,若是合法交易,则将其加入该交易集合并转发给邻居节点,以后再收到该交易就不再转发(避免网络上交易无限传输)。假如网络中存在两个冲突交易,如交易1:A->B,交易2:A->C(假设花费的同一笔钱)。具体接收哪个取决于节点先接收到哪个交易,之后收到另一个交易会将其放弃,结点位置不同,收到的交易也不同。
如果交易被写到区块链上,就删掉这个交易。
如果节点收到交易1,但又听到交易2被写到区块链上,那么交易1为非法交易,也会被删掉
新发布区块在网络中传播方式与新发布交易传播方式类似,每个节点除检查该区块内容是否合法,还要检查是否位于最长合法链上。区块越大,则网络上传输越慢。BTC协议对于区块大小限制为不大于1M大小。(比特币网络所采取的传输方式是非常耗带宽的,按照1M的大小来算,一个新发布的区块有可能需要几十秒才能传播到网络上的绝大多数结点)
比特币网络传播属于 Best effort(尽力而为) ,不能保证一定传输成功。以一个交易发布到网络上,未必所有节点都能收到,也未必所有节点收到交易顺序都一致。