def stream_deserialize(cls, f, protover=PROTO_VERSION): recvbuf = ser_read(f, 4 + 12 + 4 + 4) # check magic if recvbuf[:4] != bitcoin.params.MESSAGE_START: raise ValueError("Invalid message start '%s', expected '%s'" % (b2x(recvbuf[:4]), b2x(bitcoin.params.MESSAGE_START))) # remaining header fields: command, msg length, checksum command = recvbuf[4:4+12].split(b"\x00", 1)[0] msglen = struct.unpack(b"<i", recvbuf[4+12:4+12+4])[0] checksum = recvbuf[4+12+4:4+12+4+4] # read message body recvbuf += ser_read(f, msglen) msg = recvbuf[4+12+4+4:4+12+4+4+msglen] th = hashlib.sha256(msg).digest() h = hashlib.sha256(th).digest() if checksum != h[:4]: raise ValueError("got bad checksum %s" % repr(recvbuf)) if command in messagemap: cls_map = messagemap[command] # print("Going to deserialize '%s'" % msg) return cls_map.msg_deser(_BytesIO(msg)) else: print("Command '%s' not in messagemap" % repr(command)) return None
def stream_deserialize(cls, f, protover=PROTO_VERSION): recvbuf = ser_read(f, 4 + 12 + 4 + 4) # check magic if recvbuf[:4] != bitcoin.params.MESSAGE_START: raise ValueError( "Invalid message start '%s', expected '%s'" % (b2x(recvbuf[:4]), b2x(bitcoin.params.MESSAGE_START)) ) # remaining header fields: command, msg length, checksum command = recvbuf[4 : 4 + 12].split(b"\x00", 1)[0] msglen = struct.unpack(b"<i", recvbuf[4 + 12 : 4 + 12 + 4])[0] checksum = recvbuf[4 + 12 + 4 : 4 + 12 + 4 + 4] # read message body recvbuf += ser_read(f, msglen) msg = recvbuf[4 + 12 + 4 + 4 : 4 + 12 + 4 + 4 + msglen] th = hashlib.sha256(msg).digest() h = hashlib.sha256(th).digest() if checksum != h[:4]: raise ValueError("got bad checksum %s" % repr(recvbuf)) if command in messagemap: cls_map = messagemap[command] # print("Going to deserialize '%s'" % msg) return cls_map.msg_deser(_BytesIO(msg)) else: print("Command '%s' not in messagemap" % repr(command)) return None
def msg_deser(cls, f, protover=PROTO_VERSION): c = cls() c.nVersion = struct.unpack(b"<i", ser_read(f, 4))[0] if c.nVersion == 10300: c.nVersion = 300 c.nServices = struct.unpack(b"<Q", ser_read(f, 8))[0] c.nTime = struct.unpack(b"<q", ser_read(f, 8))[0] c.addrTo = CAddress.stream_deserialize(f, True) if c.nVersion >= 106: c.addrFrom = CAddress.stream_deserialize(f, True) c.nNonce = struct.unpack(b"<Q", ser_read(f, 8))[0] c.strSubVer = VarStringSerializer.stream_deserialize(f) if c.nVersion >= 209: c.nStartingHeight = struct.unpack(b"<i", ser_read(f,4))[0] else: c.nStartingHeight = None else: c.addrFrom = None c.nNonce = None c.strSubVer = None c.nStartingHeight = None return c
def msg_deser(cls, f, protover=PROTO_VERSION): c = cls() c.nVersion = struct.unpack(b"<i", ser_read(f, 4))[0] if c.nVersion == 10300: c.nVersion = 300 c.nServices = struct.unpack(b"<Q", ser_read(f, 8))[0] c.nTime = struct.unpack(b"<q", ser_read(f, 8))[0] c.addrTo = CAddress.stream_deserialize(f, True) if c.nVersion >= 106: c.addrFrom = CAddress.stream_deserialize(f, True) c.nNonce = struct.unpack(b"<Q", ser_read(f, 8))[0] c.strSubVer = VarStringSerializer.stream_deserialize(f) if c.nVersion >= 209: c.nStartingHeight = struct.unpack(b"<i", ser_read(f, 4))[0] else: c.nStartingHeight = None else: c.addrFrom = None c.nNonce = None c.strSubVer = None c.nStartingHeight = None return c
def msg_deser(cls, f, protover=PROTO_VERSION): c = cls() c.message = VarStringSerializer.stream_deserialize(f) c.ccode = struct.unpack(b"<c", ser_read(f,1))[0] c.reason = VarStringSerializer.stream_deserialize(f) return c
def msg_deser(cls, f, protover=PROTO_VERSION): c = cls() c.nonce = struct.unpack(b"<Q", ser_read(f,8))[0] return c
def msg_deser(cls, f, protover=PROTO_VERSION): c = cls() c.locator = CBlockLocator.stream_deserialize(f) c.hashstop = ser_read(f, 32) return c
def msg_deser(cls, f, protover=PROTO_VERSION): c = cls() c.message = VarStringSerializer.stream_deserialize(f) c.ccode = struct.unpack(b"<c", ser_read(f, 1))[0] c.reason = VarStringSerializer.stream_deserialize(f) return c
def msg_deser(cls, f, protover=PROTO_VERSION): c = cls() c.nonce = struct.unpack(b"<Q", ser_read(f, 8))[0] return c