1
1
package io .iohk .ethereum .blockchain .sync .regular
2
2
3
3
import akka .actor .ActorRef
4
+ import io .iohk .ethereum .blockchain .sync .PeerListSupportNg .PeerWithInfo
4
5
import io .iohk .ethereum .blockchain .sync .regular .BlockBroadcast .BlockToBroadcast
5
6
import io .iohk .ethereum .domain .{Block , ChainWeight }
6
7
import io .iohk .ethereum .network .EtcPeerManagerActor .PeerInfo
7
8
import io .iohk .ethereum .network .p2p .MessageSerializable
8
9
import io .iohk .ethereum .network .p2p .messages .PV62 .BlockHash
9
10
import io .iohk .ethereum .network .p2p .messages .{CommonMessages , PV62 , PV64 , ProtocolVersions }
10
- import io .iohk .ethereum .network .{EtcPeerManagerActor , Peer }
11
+ import io .iohk .ethereum .network .{EtcPeerManagerActor , Peer , PeerId }
11
12
12
13
import scala .util .Random
13
14
@@ -22,24 +23,24 @@ class BlockBroadcast(val etcPeerManager: ActorRef) {
22
23
* @param blockToBroadcast, block to broadcast
23
24
* @param handshakedPeers, to which the blocks will be broadcasted to
24
25
*/
25
- def broadcastBlock (blockToBroadcast : BlockToBroadcast , handshakedPeers : Map [Peer , PeerInfo ]): Unit = {
26
- val peersWithoutBlock = handshakedPeers.filter { case (_, peerInfo) =>
26
+ def broadcastBlock (blockToBroadcast : BlockToBroadcast , handshakedPeers : Map [PeerId , PeerWithInfo ]): Unit = {
27
+ val peersWithoutBlock = handshakedPeers.filter { case (_, PeerWithInfo (_, peerInfo) ) =>
27
28
shouldSendNewBlock(blockToBroadcast, peerInfo)
28
29
}
29
30
30
31
broadcastNewBlock(blockToBroadcast, peersWithoutBlock)
31
32
32
- broadcastNewBlockHash(blockToBroadcast, peersWithoutBlock.keySet )
33
+ broadcastNewBlockHash(blockToBroadcast, peersWithoutBlock.values.map(_.peer).toSet )
33
34
}
34
35
35
36
private def shouldSendNewBlock (newBlock : BlockToBroadcast , peerInfo : PeerInfo ): Boolean =
36
37
newBlock.block.header.number > peerInfo.maxBlockNumber ||
37
38
newBlock.chainWeight > peerInfo.chainWeight
38
39
39
- private def broadcastNewBlock (blockToBroadcast : BlockToBroadcast , peers : Map [Peer , PeerInfo ]): Unit =
40
- obtainRandomPeerSubset(peers.keySet ).foreach { peer =>
40
+ private def broadcastNewBlock (blockToBroadcast : BlockToBroadcast , peers : Map [PeerId , PeerWithInfo ]): Unit =
41
+ obtainRandomPeerSubset(peers.values.map(_.peer).toSet ).foreach { peer =>
41
42
val message : MessageSerializable =
42
- if (peers(peer) .remoteStatus.protocolVersion == ProtocolVersions .PV64 ) blockToBroadcast.as64
43
+ if (peers(peer.id).peerInfo .remoteStatus.protocolVersion == ProtocolVersions .PV64 ) blockToBroadcast.as64
43
44
else blockToBroadcast.as63
44
45
etcPeerManager ! EtcPeerManagerActor .SendMessage (message, peer.id)
45
46
}
0 commit comments