{"id":15644975,"url":"https://github.com/tintinweb/ethereum-input-decoder","last_synced_at":"2025-04-15T11:53:27.993Z","repository":{"id":57427089,"uuid":"132886561","full_name":"tintinweb/ethereum-input-decoder","owner":"tintinweb","description":"Decode transaction inputs based on the contract ABI","archived":false,"fork":false,"pushed_at":"2018-07-04T18:30:42.000Z","size":36,"stargazers_count":58,"open_issues_count":1,"forks_count":18,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-10T20:21:45.090Z","etag":null,"topics":["blockchain","contract-abi","decode-transaction-inputs","decoder","ethereum"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tintinweb.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-05-10T10:41:15.000Z","updated_at":"2024-09-08T15:46:23.000Z","dependencies_parsed_at":"2022-09-05T02:41:23.707Z","dependency_job_id":null,"html_url":"https://github.com/tintinweb/ethereum-input-decoder","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tintinweb%2Fethereum-input-decoder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tintinweb%2Fethereum-input-decoder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tintinweb%2Fethereum-input-decoder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tintinweb%2Fethereum-input-decoder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tintinweb","download_url":"https://codeload.github.com/tintinweb/ethereum-input-decoder/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249067759,"owners_count":21207395,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["blockchain","contract-abi","decode-transaction-inputs","decoder","ethereum"],"created_at":"2024-10-03T12:03:49.430Z","updated_at":"2025-04-15T11:53:27.976Z","avatar_url":"https://github.com/tintinweb.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ethereum-input-decoder\nDecode transaction inputs and constructor arguments based on the ethereum contract ABI. Tries to lookup function\nsignature hashes from 4bytes.directory.\n\n* python3\n* suggested as a PR to [eth-abi #69](https://github.com/ethereum/eth-abi/pull/69)\n* the heavy lifting is done by `eth-abi`\n* utilized in [pyetherchain](https://github.com/tintinweb/pyetherchain) to decode and dump smart contract code with inputs\n\nDecode transaction inputs and constructor arguments to contract at [0xab7c74abc0c4d48d1bdad5dcb26153fc8780f83e](https://etherscan.io/address/0xab7c74abc0c4d48d1bdad5dcb26153fc8780f83e#code) to a more human friendly notation.\n\n#### Example: Decode providing the ABI as .json\n\nUsage:\n\n    python -m ethereum_input_decoder -a ./test/contract_abi_ab7c74abc0c4d48d1bdad5dcb26153fc8780f83e.json -c 000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000002903cadbe271e057edef157340b52a5898d7424f000000000000000000000000ba7ca1bcf210c1b37cf5818816c4a819c3040ea700000000000000000000000014cd6536d449e3f6878f2d6859e1ff92ae0990e60000000000000000000000000c24441e42277445e38e02dfc3494577c05ba46b -t 0x797af62798d790d3133e0049215669e09b55a0b59d586c95f94c2d56b2812040133d7707 -t 0x797af62798d790d3133e0049215669e09b55a0b59d586c95f94c2d56b2812040133d7707\n\nOutput:\n\n    ==[Constructor]==\n      Raw:         '000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000002903cadbe271e057edef157340b52a5898d7424f000000000000000000000000ba7ca1bcf210c1b37cf5818816c4a819c3040ea700000000000000000000000014cd6536d449e3f6878f2d6859e1ff92ae0990e60000000000000000000000000c24441e42277445e38e02dfc3494577c05ba46b'\n      Description: constructor None ((address[]) _owners = ('0x2903cadbe271e057edef157340b52a5898d7424f', '0xba7ca1bcf210c1b37cf5818816c4a819c3040ea7', '0x14cd6536d449e3f6878f2d6859e1ff92ae0990e6', '0x0c24441e42277445e38e02dfc3494577c05ba46b'), (uint256) _required = 2, (uint256) _daylimit = 1000000000000000000) returns ()\n\n    ==[Input]==\n      Raw:         '0x797af62798d790d3133e0049215669e09b55a0b59d586c95f94c2d56b2812040133d7707'\n      Description: function confirm ((bytes32) _h = b'\\x98\\xd7\\x90\\xd3\\x13\u003e\\x00I!Vi\\xe0\\x9bU\\xa0\\xb5\\x9dXl\\x95\\xf9L-V\\xb2\\x81 @\\x13=w\\x07') returns ((bool) )\n\n\n#### Example: Decode without providing the ABI and forcing an online lookup from 4bytes.directory\n\nUsage:\n\n    python -m ethereum_input_decoder -t 0x166eb4cb962ee1f494711b8726972fc3b23519008854ca46e73383da53aea339ee82ee7d0000000000000000000000000000000000000000000000000000000000000000\n\nOutput:\n\n    **online lookup**\n\n\n    ==[Input]==\n      Raw:         '0x166eb4cb962ee1f494711b8726972fc3b23519008854ca46e73383da53aea339ee82ee7d0000000000000000000000000000000000000000000000000000000000000000'\n      Description: function Put ((bytes32) arg0 = b'\\x16n\\xb4\\xcb\\x96.\\xe1\\xf4\\x94q\\x1b\\x87\u0026\\x97/\\xc3\\xb25\\x19\\x00\\x88T\\xcaF\\xe73\\x83\\xdaS\\xae\\xa39', (uint256) arg1 = 107881794066862459943708362605633226548906029344009971714560720257241323667456) returns ()\n\n\n## API\n\n```python\nfrom ethereum_input_decoder import ContractAbi\n\nca = ContractAbi(json.loads(json_abi_str))\nprint(ca.describe_input(b'797aaf...3d7707'))\n# function confirm ((bytes32) _h = b'\\x98\\xd7\\x90\\xd3\\x13\u003e\\x00I!Vi\\xe0\\x9bU\\xa0\\xb5\\x9dXl\\x95\\xf9L-V\\xb2\\x81 @\\x13=w\\x07') returns ((bool) )\nprint(ca.describe_constructor(b'000000...5ba46b\")))\n# constructor None ((address[]) _owners = ('0x2903cadbe271e057edef157340b52a5898d7424f', '0xba7ca1bcf210c1b37cf5818816c4a819c3040ea7', '0x14cd6536d449e3f6878f2d6859e1ff92ae0990e6', '0x0c24441e42277445e38e02dfc3494577c05ba46b'), (uint256) _required = 2, (uint256) _daylimit = 1000000000000000000) returns ()\n```\n```python\n# online lookup without having an ABI ready\nfrom ethereum_input_decoder AbiMethod\n\nprint(AbiMethod.from_input_lookup(Utils.str_to_bytes(txinput)))\n# function Put ((bytes32) arg0 = b'\\x16n\\xb4\\xcb\\x96.\\xe1\\xf4\\x94q\\x1b\\x87\u0026\\x97/\\xc3\\xb25\\x19\\x00\\x88T\\xcaF\\xe73\\x83\\xdaS\\xae\\xa39', (uint256) arg1 = 107881794066862459943708362605633226548906029344009971714560720257241323667456) returns ()\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftintinweb%2Fethereum-input-decoder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftintinweb%2Fethereum-input-decoder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftintinweb%2Fethereum-input-decoder/lists"}