def recv_blockstate(self, data, peer): s = StringIO.StringIO(data.split(BTMessage.MSG_BLOCKSTATE, 1)[1]) sha256 = util.deser_uint256(s) if peer.has_header(sha256) == 'header': peer.inflight[sha256].state.deserialize(s) debuglog('btnet', "New block state for %i: \n" % sha256, peer.inflight[sha256]) self.maybe_download_nodes(peer, sha256)
def recv_blockstate(self, data, peer): s = StringIO.StringIO(data.split(BTMessage.MSG_BLOCKSTATE, 1)[1]) hash = util.deser_uint256(s) if peer.has_header(hash) == 'header': peer.inflight[hash].state.deserialize(s) debuglog('btcnet', "New block state for %i: \n" % hash, peer.inflight[hash])
def recv_node_request(self, data, peer): s = StringIO.StringIO(data.split(BTMessage.MSG_REQUEST_NODES)[1]) sha256 = util.deser_uint256(s) level = ord(s.read(1)) index = util.deser_varint(s) generations = ord(s.read(1)) flags = util.deser_varint(s) debuglog('btnet', "peer %s wants h=%s l=%i i=%i g=%i f=%i" % (str(peer), util.ser_uint256(sha256)[::-1].encode('hex'), level, index, generations, flags)) # fixme: maybe add choke/throttle checks here? self.send_nodes(peer, sha256, level, index, generations, flags)
def recv_txcount_proof(self, data, peer): print "received txcount proof from %s" % `peer` s = StringIO.StringIO(data.split(BTMessage.MSG_TXCOUNT_PROOF)[1]) sha256 = util.deser_uint256(s) txcount = util.deser_varint(s) levels, hashcount, path = 0, 1, txcount-1 while path: hashcount += path & 1 levels += 1 path = path >> 1 print "txcount proof received: %i, %i, %i " % (levels, hashcount, txcount) hashes = [s.read(32) for i in range(hashcount)] self.merkles[sha256].checktxcountproof(txcount, hashes)
def recv_node_request(self, data, peer): s = StringIO.StringIO(data.split(BTMessage.MSG_REQUEST_NODES)[1]) sha256 = util.deser_uint256(s) level = ord(s.read(1)) index = util.deser_varint(s) generations = ord(s.read(1)) flags = util.deser_varint(s) debuglog( 'btnet', "peer %s wants h=%s l=%i i=%i g=%i f=%i" % (str(peer), util.ser_uint256(sha256)[::-1].encode('hex'), level, index, generations, flags)) # fixme: maybe add choke/throttle checks here? self.send_nodes(peer, sha256, level, index, generations, flags)
def recv_txcount_proof(self, data, peer): print "received txcount proof from %s" % ` peer ` s = StringIO.StringIO(data.split(BTMessage.MSG_TXCOUNT_PROOF)[1]) sha256 = util.deser_uint256(s) txcount = util.deser_varint(s) levels, hashcount, path = 0, 1, txcount - 1 while path: hashcount += path & 1 levels += 1 path = path >> 1 print "txcount proof received: %i, %i, %i " % (levels, hashcount, txcount) hashes = [s.read(32) for i in range(hashcount)] self.merkles[sha256].checktxcountproof(txcount, hashes)
def recv_nodes(self, data, peer): s = StringIO.StringIO(data.split(BTMessage.MSG_RUN)[1]) sha256 = util.deser_uint256(s) level = ord(s.read(1)) index = util.deser_varint(s) generations = ord(s.read(1)) length = util.deser_varint(s) flags = util.deser_varint(s) if flags: raise NotImplementedError run = [s.read(32) for i in range(length)] result = self.merkles[sha256].checkaddrun(level, index, generations, length, run) if not result: print "Failed to add from peer=%s: l=%i i=%i g=%i h=%s" % (str(peer), level, index, generations, util.ser_uint256(sha256)[::-1].encode('hex')) debuglog('btnet', "Failed to add from peer=%s: l=%i i=%i g=%i h=%s" % (str(peer), level, index, generations, util.ser_uint256(sha256)[::-1].encode('hex'))) else: self.maybe_update_peers(sha256)
def recv_nodes(self, data, peer): s = StringIO.StringIO(data.split(BTMessage.MSG_RUN)[1]) sha256 = util.deser_uint256(s) level = ord(s.read(1)) index = util.deser_varint(s) generations = ord(s.read(1)) length = util.deser_varint(s) flags = util.deser_varint(s) if flags: raise NotImplementedError run = [s.read(32) for i in range(length)] result = self.merkles[sha256].checkaddrun(level, index, generations, length, run) if not result: print "Failed to add from peer=%s: l=%i i=%i g=%i h=%s" % ( str(peer), level, index, generations, util.ser_uint256(sha256)[::-1].encode('hex')) debuglog( 'btnet', "Failed to add from peer=%s: l=%i i=%i g=%i h=%s" % (str(peer), level, index, generations, util.ser_uint256(sha256)[::-1].encode('hex'))) else: self.maybe_update_peers(sha256)
def handle_txcount_req(self, data, peer): print "received proof req from", peer s = StringIO.StringIO(data.split(BTMessage.MSG_REQ_TXCOUNT, 1)[1]) sha256 = util.deser_uint256(s) self.send_txcount_proof(peer, sha256)