def test_from_bytes_including_prefix(self): address_prefixes = [AddressPrefix.EOA, AddressPrefix.CONTRACT] value: int = random.randint(0, 0xffffffff) input_data: bytes = value.to_bytes(4, 'big') data: bytes = hashlib.sha3_256(input_data).digest() for prefix in address_prefixes: body: bytes = data[-20:] self.assertEqual(20, len(body)) address_bytes: bytes = prefix.to_bytes(1, 'big') + body address = Address.from_bytes_including_prefix(address_bytes) self.assertEqual(prefix, address.prefix) self.assertEqual(body, address.body) for prefix in address_prefixes: size = random.randint(1, 32) if size == 20: size += 1 body: bytes = data[-size:] self.assertEqual(size, len(body)) address_bytes: bytes = prefix.to_bytes(1, 'big') + body address = Address.from_bytes_including_prefix(address_bytes) self.assertIsNone(address) address = Address.from_bytes_including_prefix(body) self.assertIsNone(address)
def test_from_bytes_including_prefix_invalid(self, prefix): value: int = random.randint(0, 0xffffffff) input_data: bytes = value.to_bytes(4, 'big') data: bytes = hashlib.sha3_256(input_data).digest() size = random.randint(1, 32) if size == 20: size += 1 body: bytes = data[-size:] assert size == len(body) address_bytes: bytes = prefix.to_bytes(1, 'big') + body address = Address.from_bytes_including_prefix(address_bytes) assert address is None address = Address.from_bytes_including_prefix(body) assert address is None
def ext_hook(code: int, data: bytes): if code == ExtType.ADDRESS.value: return Address.from_bytes_including_prefix(data) elif code == ExtType.MALFORMED_ADDRESS.value: return MalformedAddress(AddressPrefix.EOA, data[1:]) elif code == ExtType.BIGINT.value: return int.from_bytes(data, "big", signed=True) elif code in registry: cls = registry[code] return cls.from_bytes(data) return msgpack.ExtType(code, data)
def test_from_bytes_including_prefix_valid(self, prefix): value: int = random.randint(0, 0xffffffff) input_data: bytes = value.to_bytes(4, 'big') data: bytes = hashlib.sha3_256(input_data).digest() body: bytes = data[-20:] assert 20 == len(body) address_bytes: bytes = prefix.to_bytes(1, 'big') + body address = Address.from_bytes_including_prefix(address_bytes) assert prefix == address.prefix assert body == address.body