Decoding¶
Decoding ABI Values¶
Binary values for a given ABI type can be decoded into python values as follows:
>>> from eth_abi import decode_single, decode_abi
>>> decode_single('uint256', b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0009')
12345
>>> decode_single('(bytes1,bytes1)', b'a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
(b'a', b'b')
>>> decode_abi(['bytes1', 'bytes1'], b'a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
(b'a', b'b')
The decode_single function can be used to perform any decoding operation
from a binary ABI value for an ABI type to a python value. As is seen in the
example above, decode_single supports decoding of tuple ABI values which
can be used to decode a single binary payload into a sequence of python values.
The decode_abi function provides an alternate API for decoding tuple
values. It accepts a list of type strings instead of a single tuple type
string. Internally, it uses the decode_single function to do this.
Because of this redundancy, it will eventually be removed in favor of
decode_single.
Both the decode_single and decode_abi functions accept either a
python bytes or bytearray value to indicate the binary data to be
decoded.