class msg_version(MsgSerializable): command = b"version" def __init__(self, protover=PROTO_VERSION): super(msg_version, self).__init__(protover) self.nVersion = protover self.nServices = 1 self.nTime = int(time.time()) self.addrTo = CAddress(PROTO_VERSION) self.addrFrom = CAddress(PROTO_VERSION) self.nNonce = random.getrandbits(64) self.strSubVer = (b'/python-bitcoinlib:' + bitcoin.__version__.encode('ascii') + b'/') self.nStartingHeight = -1 @classmethod 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_ser(self, f): f.write(struct.pack(b"<i", self.nVersion)) f.write(struct.pack(b"<Q", self.nServices)) f.write(struct.pack(b"<q", self.nTime)) self.addrTo.stream_serialize(f, True) self.addrFrom.stream_serialize(f, True) f.write(struct.pack(b"<Q", self.nNonce)) VarStringSerializer.stream_serialize(self.strSubVer, f) f.write(struct.pack(b"<i", self.nStartingHeight)) def __repr__(self): return "msg_version(nVersion=%i nServices=%i nTime=%s addrTo=%s addrFrom=%s nNonce=0x%016X strSubVer=%s nStartingHeight=%i)" % (self.nVersion, self.nServices, time.ctime(self.nTime), repr(self.addrTo), repr(self.addrFrom), self.nNonce, self.strSubVer, self.nStartingHeight)
class msg_version(MsgSerializable): command = b"version" def __init__(self, protover=PROTO_VERSION): super(msg_version, self).__init__(protover) self.nVersion = protover self.nServices = 1 self.nTime = int(time.time()) self.addrTo = CAddress(PROTO_VERSION) self.addrFrom = CAddress(PROTO_VERSION) self.nNonce = random.getrandbits(64) self.strSubVer = b"/python-bitcoinlib:" + bitcoin.__version__.encode("ascii") + b"/" self.nStartingHeight = -1 @classmethod 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_ser(self, f): f.write(struct.pack(b"<i", self.nVersion)) f.write(struct.pack(b"<Q", self.nServices)) f.write(struct.pack(b"<q", self.nTime)) self.addrTo.stream_serialize(f, True) self.addrFrom.stream_serialize(f, True) f.write(struct.pack(b"<Q", self.nNonce)) VarStringSerializer.stream_serialize(self.strSubVer, f) f.write(struct.pack(b"<i", self.nStartingHeight)) def __repr__(self): return ( "msg_version(nVersion=%i nServices=%i nTime=%s addrTo=%s addrFrom=%s nNonce=0x%016X strSubVer=%s nStartingHeight=%i)" % ( self.nVersion, self.nServices, time.ctime(self.nTime), repr(self.addrTo), repr(self.addrFrom), self.nNonce, self.strSubVer, self.nStartingHeight, ) )