Changeset View
Changeset View
Standalone View
Standalone View
test/functional/test_framework/messages.py
Show All 28 Lines | |||||
from test_framework.siphash import siphash256 | from test_framework.siphash import siphash256 | ||||
from test_framework.util import hex_str_to_bytes | from test_framework.util import hex_str_to_bytes | ||||
MIN_VERSION_SUPPORTED = 60001 | MIN_VERSION_SUPPORTED = 60001 | ||||
# past bip-31 for ping/pong | # past bip-31 for ping/pong | ||||
MY_VERSION = 70014 | MY_VERSION = 70014 | ||||
MY_SUBVERSION = b"/python-mininode-tester:0.0.3/" | MY_SUBVERSION = b"/python-mininode-tester:0.0.3/" | ||||
# from version 70001 onwards, fRelay should be appended to version messages (BIP37) | # from version 70001 onwards, fRelay should be appended to version | ||||
# messages (BIP37) | |||||
MY_RELAY = 1 | MY_RELAY = 1 | ||||
MAX_INV_SZ = 50000 | MAX_INV_SZ = 50000 | ||||
MAX_LOCATOR_SZ = 101 | MAX_LOCATOR_SZ = 101 | ||||
MAX_BLOCK_BASE_SIZE = 1000000 | MAX_BLOCK_BASE_SIZE = 1000000 | ||||
# 1 BCH in satoshis | # 1 BCH in satoshis | ||||
COIN = 100000000 | COIN = 100000000 | ||||
▲ Show 20 Lines • Show All 740 Lines • ▼ Show 20 Lines | def serialize(self): | ||||
r += ser_uint256_vector(self.vHash) | r += ser_uint256_vector(self.vHash) | ||||
vBytesArray = bytearray([0x00] * ((len(self.vBits) + 7) // 8)) | vBytesArray = bytearray([0x00] * ((len(self.vBits) + 7) // 8)) | ||||
for i in range(len(self.vBits)): | for i in range(len(self.vBits)): | ||||
vBytesArray[i // 8] |= self.vBits[i] << (i % 8) | vBytesArray[i // 8] |= self.vBits[i] << (i % 8) | ||||
r += ser_string(bytes(vBytesArray)) | r += ser_string(bytes(vBytesArray)) | ||||
return r | return r | ||||
def __repr__(self): | def __repr__(self): | ||||
return "CPartialMerkleTree(nTransactions={}, vHash={}, vBits={})".format(self.nTransactions, repr(self.vHash), repr(self.vBits)) | return "CPartialMerkleTree(nTransactions={}, vHash={}, vBits={})".format( | ||||
self.nTransactions, repr(self.vHash), repr(self.vBits)) | |||||
class CMerkleBlock: | class CMerkleBlock: | ||||
__slots__ = ("header", "txn") | __slots__ = ("header", "txn") | ||||
def __init__(self): | def __init__(self): | ||||
self.header = CBlockHeader() | self.header = CBlockHeader() | ||||
self.txn = CPartialMerkleTree() | self.txn = CPartialMerkleTree() | ||||
def deserialize(self, f): | def deserialize(self, f): | ||||
self.header.deserialize(f) | self.header.deserialize(f) | ||||
self.txn.deserialize(f) | self.txn.deserialize(f) | ||||
def serialize(self): | def serialize(self): | ||||
r = b"" | r = b"" | ||||
r += self.header.serialize() | r += self.header.serialize() | ||||
r += self.txn.serialize() | r += self.txn.serialize() | ||||
return r | return r | ||||
def __repr__(self): | def __repr__(self): | ||||
return "CMerkleBlock(header={}, txn={})".format(repr(self.header), repr(self.txn)) | return "CMerkleBlock(header={}, txn={})".format( | ||||
repr(self.header), repr(self.txn)) | |||||
# Objects that correspond to messages on the wire | # Objects that correspond to messages on the wire | ||||
class msg_version: | class msg_version: | ||||
__slots__ = ("addrFrom", "addrTo", "nNonce", "nRelay", "nServices", | __slots__ = ("addrFrom", "addrTo", "nNonce", "nRelay", "nServices", | ||||
"nStartingHeight", "nTime", "nVersion", "strSubVer") | "nStartingHeight", "nTime", "nVersion", "strSubVer") | ||||
▲ Show 20 Lines • Show All 370 Lines • ▼ Show 20 Lines | def __init__(self): | ||||
self.code = 0 | self.code = 0 | ||||
self.reason = b"" | self.reason = b"" | ||||
self.data = 0 | self.data = 0 | ||||
def deserialize(self, f): | def deserialize(self, f): | ||||
self.message = deser_string(f) | self.message = deser_string(f) | ||||
self.code = struct.unpack("<B", f.read(1))[0] | self.code = struct.unpack("<B", f.read(1))[0] | ||||
self.reason = deser_string(f) | self.reason = deser_string(f) | ||||
if (self.code != self.REJECT_MALFORMED and | if (self.code != self.REJECT_MALFORMED | ||||
(self.message == b"block" or self.message == b"tx")): | and (self.message == b"block" or self.message == b"tx")): | ||||
self.data = deser_uint256(f) | self.data = deser_uint256(f) | ||||
def serialize(self): | def serialize(self): | ||||
r = ser_string(self.message) | r = ser_string(self.message) | ||||
r += struct.pack("<B", self.code) | r += struct.pack("<B", self.code) | ||||
r += ser_string(self.reason) | r += ser_string(self.reason) | ||||
if (self.code != self.REJECT_MALFORMED and | if (self.code != self.REJECT_MALFORMED | ||||
(self.message == b"block" or self.message == b"tx")): | and (self.message == b"block" or self.message == b"tx")): | ||||
r += ser_uint256(self.data) | r += ser_uint256(self.data) | ||||
return r | return r | ||||
def __repr__(self): | def __repr__(self): | ||||
return "msg_reject: {} {} {} [{:064x}]".format( | return "msg_reject: {} {} {} [{:064x}]".format( | ||||
self.message, self.code, self.reason, self.data) | self.message, self.code, self.reason, self.data) | ||||
▲ Show 20 Lines • Show All 102 Lines • Show Last 20 Lines |