以太源码照抄 eth/peer
刀与菊滦
发表于 2023-1-5 10:46:24
60
0
0
peer 结构体记录了p2p网络上节点的相关信息
相关信息指3 p; X- Z5 G9 m# \! b' n" x* g
version 协议版本" c( X9 R1 v( A, L' ^
head 最新块的hash. |( O- b& u( D2 z) Z
td 挖矿困难度
knownTxs 一个存txs的set结构,我们向这个peer广播tx后将其加入这个set8 C& A \; g! i7 U
knownBlocks 存block的 和上面类似queuedTxsqueuedPropsqueuedAnns // 这3个用于异步发送的chan通道; e& _' I( _ K! E7 L8 O
peer 有两个主要方法1. broadcast 用于监听 peer结构体中的queued??? ,有新数据后广播出去6 R* p' j. j- t/ L# k8 J
2. HandShake 本地主机传自己的genesis hash 和协议版本与peer进行拉手,拉手成功后 根据拉手结果更新peer 的td 和head字段
# k& j: I. q' i% i0 L3 |
peersetpeerset主要包含了一个peers的数组,并加了个并发锁
方法- Register注册一个peer 到peerset的数组 同时调用peer的broadcast方法监听发送交易和block的请求6 ^( O" e& F6 p* s
- UnRegister 这个就没什么好说的了
- PeersWithoutBlock(hash common.Hash) 判断peer的knownBlocks包不包含hash,不包含返回这个peer- PeersWithoutTx 以上- BestPeer 返回难度最大的peer- Close
成为第一个吐槽的人