EthTx - Ethereum transactions decoder
Introduction
Source Code: https://github.com/ethtx/ethtx
Installation
pip install ethtx
Requirements
The package needs a few external resources, defined in EthTxConfig object:
- Erigon/Geth node - required to have access to the raw Ethereum data; it must be a full archive node with
the
debugoption ON - Etherscan API key - required to get the source code and ABI for smart contracts used in transaction
- (Optional) MongoDB database - required to store smart contracts' ABI and semantics used in the decoding process.
If you don't want to setup permanent database, you can enter
mongomock://localhost/ethtx, then in-memory mongo will be set up that discards all data with every run.
Getting started
from ethtx import EthTx, EthTxConfig
from ethtx.models.decoded_model import DecodedTransaction
ethtx_config = EthTxConfig(
mongo_connection_string="mongomock://localhost/ethtx", ##MongoDB connection string,
etherscan_api_key="", ##Etherscan API key,
web3nodes={
"mainnet": {
"hook": "_Geth_archive_node_URL_", # multiple nodes supported, separate them with comma
"poa": _POA_chain_indicator_ # represented by bool value
}
},
default_chain="mainnet",
etherscan_urls={"mainnet": "https://api.etherscan.io/api", },
)
ethtx = EthTx.initialize(ethtx_config)
decoded_transaction: DecodedTransaction = ethtx.decoders.decode_transaction(
'0x50051e0a6f216ab9484c2080001c7e12d5138250acee1f4b7c725b8fb6bb922d')
Features
EthTx most important functions:
- Raw node data access:
web3provider = ethtx.providers.web3provider
from ethtx.models.w3_model import W3Transaction, W3Block, W3Receipt, W3CallTree
# read raw transaction data directly from the node
w3transaction: W3Transaction = web3provider.get_transaction(
'0x50051e0a6f216ab9484c2080001c7e12d5138250acee1f4b7c725b8fb6bb922d')
w3block: W3Block = web3provider.get_block(w3transaction.blockNumber)
w3receipt: W3Receipt = web3provider.get_receipt(w3transaction.hash.hex())
w3calls: W3CallTree = web3provider.get_calls(w3transaction.hash.hex())
- ABI decoding:
from ethtx.models.decoded_model import (
DecodedTransfer,
DecodedBalance,
DecodedEvent, DecodedCall,
)
from ethtx.models.objects_model import Transaction, Event, Block, Call
# read the raw transaction from the node
transaction = Transaction.from_raw(
w3transaction=w3transaction, w3receipt=w3receipt, w3calltree=w3calls
)
# get proxies used in the transaction
proxies = ethtx.decoders.get_proxies(transaction.root_call, "mainnet")
block: Block = Block.from_raw(
w3block=web3provider.get_block(transaction.metadata.block_number),
chain_id="mainnet",
)
# decode transaction components
abi_decoded_events: List[Event] = ethtx.decoders.abi_decoder.decode_events(
transaction.events, block.metadata, transaction.metadata
)
abi_decoded_calls: DecodedCall = ethtx.decoders.abi_decoder.decode_calls(
transaction.root_call, block.metadata, transaction.metadata, proxies
)
abi_decoded_transfers: List[
DecodedTransfer
] = ethtx.decoders.abi_decoder.decode_transfers(abi_decoded_calls, abi_decoded_events)
abi_decoded_balances: List[DecodedBalance] = ethtx.decoders.abi_decoder.decode_balances(
abi_decoded_transfers
)
# decode a single event
raw_event: Event = transaction.events[3]
abi_decoded_event: DecodedEvent = ethtx.decoders.abi_decoder.decode_event(
raw_event, block.metadata, transaction.metadata
)
# decode a single call
raw_call: Call = transaction.root_call.subcalls[0]
abi_decoded_call: DecodedCall = ethtx.decoders.abi_decoder.decode_call(
raw_call, block.metadata, transaction.metadata, proxies
)
- Semantic decoding:
from ethtx.models.decoded_model import DecodedTransactionMetadata
# semantically decode transaction components
decoded_metadata: DecodedTransactionMetadata = (
ethtx.decoders.semantic_decoder.decode_metadata(
block.metadata, transaction.metadata, "mainnet"
)
)
decoded_events: List[DecodedEvent] = ethtx.decoders.semantic_decoder.decode_events(
abi_decoded_events, decoded_metadata, proxies
)
decoded_calls: Call = ethtx.decoders.semantic_decoder.decode_calls(
abi_decoded_calls, decoded_metadata, proxies
)
decoded_transfers: List[
DecodedTransfer
] = ethtx.decoders.semantic_decoder.decode_transfers(
abi_decoded_transfers, decoded_metadata
)
decoded_balances: List[
DecodedBalance
] = ethtx.decoders.semantic_decoder.decode_balances(
abi_decoded_balances, decoded_metadata
)
# semantically decode a single event
decoded_event: DecodedEvent = ethtx.decoders.semantic_decoder.decode_event(
abi_decoded_events[0], decoded_metadata, proxies
)
# semantically decode a single call
decoded_call: Call = ethtx.decoders.semantic_decoder.decode_call(
abi_decoded_calls.subcalls[0], decoded_metadata, proxies
)
Metadata
Release files for EthTx 0.3.22
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| EthTx-0.3.22.tar.gz | 66.5 kB | Without provenance | Details for EthTx-0.3.22.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| EthTx-0.3.22-py3-none-any.whl | Python 3 | none | any | Details for EthTx-0.3.22-py3-none-any.whl |
Total release size: 185.7 kB
Release files / EthTx-0.3.22.tar.gz
| Download URL | EthTx-0.3.22.tar.gz |
|---|---|
| Size | 66.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ba4af0e73ff745d3dc55de3e0cd24611bd5835da125f53403d7060aabd8f786f
|
|
BLAKE2b-256 checksum How to use checksums |
3e3965dc2c848920d94de7982801ac15552b507c50e7016309913bef8e467074
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.9.16
|
Release files / EthTx-0.3.22-py3-none-any.whl
| Download URL | EthTx-0.3.22-py3-none-any.whl |
|---|---|
| Size | 119.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1c03fc473ec12317fca05d7ea177bf79bef4117fbe8f1d4614d3ee0e72804bf2
|
|
BLAKE2b-256 checksum How to use checksums |
8e64fe23f5704b002088990f29dc4c630936eb999cfb641d15ef64a83fcfce27
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.9.16
|
Security for EthTx 0.3.22
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.