def test_handle_wrong_signature(self): """ treating fixed array data as dynamic may give very strange results """ data = ( b'000000000000000000000000000000000000000000000000000000000000001d' b'000000000000000000000000000000000000000000000000000000000000001f' b'0000000000000000000000000000000000000000000000000000000000000026' ) with pytest.raises(ValueError): decode_abi(["uint256[]"], data)
def test_decode_string_dynamic(self): data = ( b'0000000000000000000000000000000000000000000000000000000000000020' b'0000000000000000000000000000000000000000000000000000000000000005' b'48656c6c6f000000000000000000000000000000000000000000000000000000' ) assert decode_abi(["string"], data) == ["Hello"]
def test_decode_bytes_dynamic(self): data = ( b'0000000000000000000000000000000000000000000000000000000000000020' b'0000000000000000000000000000000000000000000000000000000000000005' b'48656c6c6f000000000000000000000000000000000000000000000000000000' ) assert decode_abi(["bytes"], data) == [b"Hello"]
def test_ufixed64x192_static_array(self): data = ( b'000000000000000155554fbdad75200000000000000000000000000000000000' b'0000000000000000800000000000000000000000000000000000000000000000' b'0000000000000009fd70a3d70a3d800000000000000000000000000000000000' ) assert decode_abi(["ufixed64x192[3]"], data) == [[1.333333, 0.5, 9.99]]
def test_decode_dynamic_uint256_static_array(self): data = ( b'000000000000000000000000000000000000000000000000000000000000001d' b'000000000000000000000000000000000000000000000000000000000000001f' b'0000000000000000000000000000000000000000000000000000000000000026' ) assert decode_abi(["uint256[3]"], data) == [[29, 31, 38]]
def test_decode_bool_static_array(self): data = ( b'0000000000000000000000000000000000000000000000000000000000000001' b'0000000000000000000000000000000000000000000000000000000000000000' b'0000000000000000000000000000000000000000000000000000000000000001' ) assert decode_abi(["bool[3]"], data) == [[True, False, True]]
def test_fixed192x64_static_array(self): data = ( b'8000000000000000000000000000000000000000000000000000000000000000' b'fffffffffffffffffffffffffffffffffffffffffffffb2d6ea4a8c154c00000' b'7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000' ) assert decode_abi(["fixed192x64[3]"], data) == [[-2.0**191, -1234.5678, 2.0**191 - 1]]
def test_decode_bool_dynamic_array(self): data = ( b'0000000000000000000000000000000000000000000000000000000000000020' b'0000000000000000000000000000000000000000000000000000000000000003' b'0000000000000000000000000000000000000000000000000000000000000001' b'0000000000000000000000000000000000000000000000000000000000000000' b'0000000000000000000000000000000000000000000000000000000000000001' ) assert decode_abi(["bool[]"], data) == [[True, False, True]]
def test_decode_int256_static_array(self): pass data = ( b'8000000000000000000000000000000000000000000000000000000000000000' b'fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7961' b'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' b'000000000000000000000000000000000000000000000000000000000001869f' b'7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' ) assert decode_abi(["int256[5]"], data) == [[-2**255, -99999, -1, 99999, 2**255 - 1]]
def test_address_static_array(self): data = ( b'00000000000000000000000065b8e2a5ff60a33b140ce88f15041335dc8c42e5' b'0000000000000000000000003f1dd9e8c35196156d875b6162c3a6f92588c315' b'00000000000000000000000065d2ee62332f292cbad83bc92ae4799d69371fa5' ) assert decode_abi(["address[3]"], data) == [[ 0x65b8e2a5ff60a33b140ce88f15041335dc8c42e5, 0x3f1dd9e8c35196156d875b6162c3a6f92588c315, 0x65d2ee62332f292cbad83bc92ae4799d69371fa5 ]]
def test_decode_int256_dynamic_array(self): data = ( b'0000000000000000000000000000000000000000000000000000000000000020' b'0000000000000000000000000000000000000000000000000000000000000005' b'8000000000000000000000000000000000000000000000000000000000000000' b'fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7961' b'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' b'000000000000000000000000000000000000000000000000000000000001869f' b'7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' ) assert decode_abi(["int256[]"], data) == [[-2**255, -99999, -1, 99999, 2**255 - 1]]
def test_complex(self): assert decode_abi( ["uint256", "uint32[]", "bytes10", "bytes"], b'0000000000000000000000000000000000000000000000000000000000000123' b'0000000000000000000000000000000000000000000000000000000000000080' b'3132333435363738393000000000000000000000000000000000000000000000' b'00000000000000000000000000000000000000000000000000000000000000e0' b'0000000000000000000000000000000000000000000000000000000000000002' b'0000000000000000000000000000000000000000000000000000000000000456' b'0000000000000000000000000000000000000000000000000000000000000789' b'000000000000000000000000000000000000000000000000000000000000000d' b'48656c6c6f2c20776f726c642100000000000000000000000000000000000000' ) == [0x123, [0x456, 0x789], b"1234567890", b"Hello, world!"]
def test_decode_string_dynamic_array(self): """ Not sure if bytes[] or even bytes[5] is supported at this moment """ data = ( b'0000000000000000000000000000000000000000000000000000000000000020' b'0000000000000000000000000000000000000000000000000000000000000005' b'48656c6c6f000000000000000000000000000000000000000000000000000000' b'576f726c64000000000000000000000000000000000000000000000000000000' b'486f770000000000000000000000000000000000000000000000000000000000' b'4172650000000000000000000000000000000000000000000000000000000000' b'596f750000000000000000000000000000000000000000000000000000000000' ) assert decode_abi(["string32[]"], data) == [["Hello", "World", "How", "Are", "You"]]
def test_single_address(self): assert decode_abi( ["address"], b'000000000000000000000000901ecd3b3322b2e5a10d8cd86924c5209039ca7b' ) == [0x901ecd3b3322b2e5a10d8cd86924c5209039ca7b]
def test_decode_double_uint256(self): data = ( b'0000000000000000000000000000000000000000000000000000000000000003' b'0000000000000000000000000000000000000000000000000000000000000020' ) assert decode_abi(["uint256", "uint256"], data) == [3, 32]
def test_fixed192x64_decode_max(self): data = b"7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000" assert decode_abi(["fixed192x64"], data) == [(2.0**191) - 1]
def test_fixed192x64_decode_min(self): data = b"8000000000000000000000000000000000000000000000000000000000000000" assert decode_abi(["fixed192x64"], data) == [-2.0**191]
def test_decode_single_int256_minus_one(self): data = \ b'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' assert decode_abi(["int256"], data) == [-1]
def test_simple_ufixed128x128_decode(self): data = b'0000000000000000000000000000000155554fbdad7520000000000000000000' assert decode_abi(["ufixed128x128"], data) == [1.333333]
def test_decode_single_int256_plus_one(self): data = \ b'0000000000000000000000000000000000000000000000000000000000000001' assert decode_abi(["int256"], data) == [1]
def test_decode_string_10(self): data = b"48656c6c6f000000000000000000000000000000000000000000000000000000" assert decode_abi(["string10"], data) == ["Hello"]
def test_decode_single_int256_max_pos(self): data = \ b"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" assert decode_abi(["int256"], data) == [2**255 - 1]
def test_decode_single_uint256_max(self): data = \ b'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' assert decode_abi(["uint256"], data) == [2**256 - 1]
def test_decode_single_int256_max_neg(self): data = \ b'8000000000000000000000000000000000000000000000000000000000000000' assert decode_abi(["int256"], data) == [-(2**255)]
def test_decode_bool_false(self): data = \ b'0000000000000000000000000000000000000000000000000000000000000000' assert decode_abi(["bool"], data) == [False]
def test_decode_bool_true(self): data = \ b'0000000000000000000000000000000000000000000000000000000000000001' assert decode_abi(["bool"], data) == [True]
def test_decode_bytes_10(self): data = b"48656c6c6f000000000000000000000000000000000000000000000000000000" assert decode_abi(["bytes10"], data) == [b"Hello"]
def test_decode_single_uint256(self): data = \ b'0000000000000000000000000000000000000000000000000000000000000003' assert decode_abi(["uint256"], data) == [3]