Ethereum event decoder and topic generator
Project description
eth-event
Tools for Ethereum event decoding and topic generation.
Installation
You can install the latest release via pip
:
pip install eth-event
Or clone the repository and use setuptools
for the most up-to-date version:
git clone https://github.com/iamdefinitelyahuman/eth-event.git
cd eth-event
python3 setup.py install
Usage
The public API is well documented within the docstrings. The following example may also help:
>>> from eth_event import get_topics
# generating a topic map
>>> abi = open('abi.json').read()
>>> topic_map = get_topic_map(abi)
>>> topic_map
{
'0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef': {
'name': 'Transfer',
'inputs': [
{'name': 'from', 'type': 'address', 'indexed': True},
{'name': 'to', 'type': 'address', 'indexed': True},
{'name': 'value', 'type': 'uint256', 'indexed': False}
]
}
}
# decoding event logs from a transaction receipt
>>> tx = token.transfer(account[1], 100, {'from': account[0]})
<Transaction object '0x615a157e84715d5f960a38fe2a3ddb566c8393cfc71f15b06170a0eff74dfdde'>
>>> eth_event.decode_logs(tx.logs, topic_map)
[{
'name': 'Transfer',
'address': "0x3194cBDC3dbcd3E11a07892e7bA5c3394048Cc87",
'data': [
{'name': 'from', 'type': 'address', 'value': '0xbd4940951bfa463f8fb6db762e55686f6cfdb73a', 'decoded': True},
{'name': 'to', 'type': 'address', 'value': '0xbd4940951bfa463f8fb6db762e55686f6cfdb73a', 'decoded': True},
{'name': 'tokens', 'type': 'uint256', 'value': 100, 'decoded': True}
],
}]
# decoding a structLog from Geth's debug_traceTransaction endpoint
>>> trace = web3.provider.make_request(
"debug_traceTransaction",
['0x615a157e84715d5f960a38fe2a3ddb566c8393cfc71f15b06170a0eff74dfdde', {}]
)
>>> struct_log = trace['result']['structLogs']
>>> eth_event.decode_trace(struct_log, topic_map, initial_address="0x3194cBDC3dbcd3E11a07892e7bA5c3394048Cc87")
[{
'name': 'Transfer',
'address': "0x3194cBDC3dbcd3E11a07892e7bA5c3394048Cc87",
'data': [
{'name': 'from', 'type': 'address', 'value': '0xbd4940951bfa463f8fb6db762e55686f6cfdb73a', 'decoded': True},
{'name': 'to', 'type': 'address', 'value': '0xbd4940951bfa463f8fb6db762e55686f6cfdb73a', 'decoded': True},
{'name': 'tokens', 'type': 'uint256', 'value': 100, 'decoded': True}
],
}]
Limitations
-
If an array is indexed in an event, the topic is generated as a sha3 hash and so cannot be decrypted. In this case, the unencrypted topic is returned and
decoded
is set toFalse
. -
Anonymous events cannot be decoded. Use the
allow_undecoded
kwarg when callingdecode_logs
anddecode_trace
to receive the undecoded log without raising an exception. -
When decoding a trace, the initial address for the call cannot be determined. To include addresses where decoded events were emitted you must supply the initial address with the
initial_address
keyword argument.
Tests
To run the test suite:
$ tox
Development
This project is still in development. Comments, questions, criticisms and pull requests are welcomed.
License
This project is licensed under the MIT license.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for eth_event-1.2.3-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5d86d049eded86d0fb41538590487e1ccea2e1fa3e6d16ee2fc0952be7e5c59a |
|
MD5 | 7ae3490ab7afa626b80d563584e38e0e |
|
BLAKE2b-256 | 87cc50f1b6482f72204e87a505dde4d31752b9ac24c7291b24dd66e927a2f3a3 |