Пример #1
0
 def onFailure(self, callback = None):
     peer = Peer()
     peer.host = self.addrFrom
     Peers.removePeer(peer)
     callback(
         'error: Invalid ping message'
     )
Пример #2
0
 def onSuccess(self, callback=None):
     if len(self.addrList) > 0:
         peers = []
         for addr in self.addrList:
             peer = Peer()
             peer.host = addr
             peers.append(peer)
         Peers.addPeers(peers)
Пример #3
0
 def send(self):
     payload = Network.sendData(self.addrRecv, self.serialize())
     message = MessageFactory.getInstance(MessageType.ADDR)
     if message.deserialize(payload):
         message.onSuccess()
     else:
         peer = Peer()
         peer.host = self.addrRecv
         Peers.removePeer(peer)
         message.onFailure(self.sendFailure)
Пример #4
0
 def send(self):
     payload = Network.sendData(self.addrRecv, self.serialize())
     isValid = True
     message = MessageFactory.getInstance(MessageType.PONG)
     if message.deserialize(payload):
         if message.nonce == self.nonce:
             message.onSuccess()
         else:
             isValid = False 
     else:
         isValid = False 
     if isValid == False:
         peer = Peer()
         peer.host = self.addrRecv
         Peers.removePeer(peer)
         message.onFailure(self.sendFailure)
Пример #5
0
 def onSuccess(self, callback=None):
     message = MessageFactory.getInstance(MessageType.ADDR)
     peers = Peers.getPeers()
     message.count = len(peers)
     for peer in peers.copy():
         message.addrList.append(peer.host)
     callback(message.serialize())
Пример #6
0
 def onSuccess(self, callback=None):
     peer = Peers.getPeerByHost(self.addrFrom)
     syncVersion = False
     if peer == None:
         peer = Peer()
     else:
         syncVersion = peer.lastVersionNonce == None
     if peer.lastVersionNonce == None or peer.lastVersionNonce == self.nonce:
         peer.host = self.addrFrom
         peer.version = self.version
         peer.lastVersionNonce = self.nonce
         peer.chainHeadBlockHash = self.chainHeadBlockHash
         Peers.addPeer(peer)
         if syncVersion:
             Sync.synchronizeMessage(MessageType.VERSION, peer.host)
     message = MessageFactory.getInstance(MessageType.VERACK)
     callback(message.serialize())
Пример #7
0
    def send(self):
        peer = Peers.getPeerByHost(self.addrRecv)
        self.blockHashes.append(peer.chainHeadBlockHash)

        payload = Network.sendData(self.addrRecv, self.serialize())
        message = MessageFactory.getInstance(MessageType.INV)
        message.addrFrom = self.addrRecv
        if message.deserialize(payload):
            message.onSuccess()
        else:
            message.onFailure(self.sendFailure)
Пример #8
0
    def send(self):
        peer = Peers.getPeerByHost(self.addrRecv)
        if peer.lastVersionNonce == None:
            peer.lastVersionNonce = self.nonce
            Peers.addPeer(peer)
        else:
            self.nonce = peer.lastVersionNonce

        chainHeadBlock = Chain.getChain().getChainHeadBlock()
        self.chainHeadBlockHash = chainHeadBlock.hash()

        payload = Network.sendData(self.addrRecv, self.serialize())
        message = MessageFactory.getInstance(MessageType.VERACK)
        message.addrFrom = self.addrRecv
        if message.deserialize(payload):
            message.onSuccess()
        else:
            peer = Peer()
            peer.host = self.addrRecv
            Peers.removePeer(peer)
            message.onFailure(self.sendFailure)
Пример #9
0
 def onSuccess(self, callback=None):
     peer = Peers.getPeerByHost(self.addrFrom)
     peer.lastVersionNonce = None
     Peers.addPeer(peer)
Пример #10
0
def broadcastMessage(message):
    peers = Peers.getPeers()
    if len(peers) > 0:
        for peer in peers.copy():
            processMessage(message, peer.host)