41
41
BIP0031_VERSION = 60000
42
42
MY_VERSION = 70014 # past bip-31 for ping/pong
43
43
MY_SUBVERSION = b"/python-mininode-tester:0.0.3/"
44
+ MY_RELAY = 1 # from version 70001 onwards, fRelay should be appended to version messages (BIP37)
44
45
45
46
MAX_INV_SZ = 50000
46
47
MAX_BLOCK_SIZE = 1000000
@@ -951,6 +952,7 @@ def __init__(self):
951
952
self .nNonce = random .getrandbits (64 )
952
953
self .strSubVer = MY_SUBVERSION
953
954
self .nStartingHeight = - 1
955
+ self .nRelay = MY_RELAY
954
956
955
957
def deserialize (self , f ):
956
958
self .nVersion = struct .unpack ("<i" , f .read (4 ))[0 ]
@@ -960,21 +962,32 @@ def deserialize(self, f):
960
962
self .nTime = struct .unpack ("<q" , f .read (8 ))[0 ]
961
963
self .addrTo = CAddress ()
962
964
self .addrTo .deserialize (f )
965
+
963
966
if self .nVersion >= 106 :
964
967
self .addrFrom = CAddress ()
965
968
self .addrFrom .deserialize (f )
966
969
self .nNonce = struct .unpack ("<Q" , f .read (8 ))[0 ]
967
970
self .strSubVer = deser_string (f )
968
- if self .nVersion >= 209 :
969
- self .nStartingHeight = struct .unpack ("<i" , f .read (4 ))[0 ]
970
- else :
971
- self .nStartingHeight = None
972
971
else :
973
972
self .addrFrom = None
974
973
self .nNonce = None
975
974
self .strSubVer = None
976
975
self .nStartingHeight = None
977
976
977
+ if self .nVersion >= 209 :
978
+ self .nStartingHeight = struct .unpack ("<i" , f .read (4 ))[0 ]
979
+ else :
980
+ self .nStartingHeight = None
981
+
982
+ if self .nVersion >= 70001 :
983
+ # Relay field is optional for version 70001 onwards
984
+ try :
985
+ self .nRelay = struct .unpack ("<b" , f .read (1 ))[0 ]
986
+ except :
987
+ self .nRelay = 0
988
+ else :
989
+ self .nRelay = 0
990
+
978
991
def serialize (self ):
979
992
r = b""
980
993
r += struct .pack ("<i" , self .nVersion )
@@ -985,13 +998,14 @@ def serialize(self):
985
998
r += struct .pack ("<Q" , self .nNonce )
986
999
r += ser_string (self .strSubVer )
987
1000
r += struct .pack ("<i" , self .nStartingHeight )
1001
+ r += struct .pack ("<b" , self .nRelay )
988
1002
return r
989
1003
990
1004
def __repr__ (self ):
991
- return 'msg_version(nVersion=%i nServices=%i nTime=%s addrTo=%s addrFrom=%s nNonce=0x%016X strSubVer=%s nStartingHeight=%i)' \
1005
+ return 'msg_version(nVersion=%i nServices=%i nTime=%s addrTo=%s addrFrom=%s nNonce=0x%016X strSubVer=%s nStartingHeight=%i nRelay=%i )' \
992
1006
% (self .nVersion , self .nServices , time .ctime (self .nTime ),
993
1007
repr (self .addrTo ), repr (self .addrFrom ), self .nNonce ,
994
- self .strSubVer , self .nStartingHeight )
1008
+ self .strSubVer , self .nStartingHeight , self . nRelay )
995
1009
996
1010
997
1011
class msg_verack (object ):
0 commit comments