예제 #1
0
    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)
예제 #2
0
    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
예제 #3
0
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)
예제 #4
0
    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