ethereum_input_decoder


Nameethereum_input_decoder JSON
Version 0.2.2 PyPI version JSON
download
home_pagehttps://github.com/tintinweb/ethereum-input-decoder/
SummaryDecode transaction inputs based on the contract ABI
upload_time2018-07-04 18:35:07
maintainer
docs_urlNone
authortintinweb
requires_python
licenseGPLv3
keywords ethereum
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # ethereum-input-decoder
Decode transaction inputs and constructor arguments based on the ethereum contract ABI. Tries to lookup function
signature hashes from 4bytes.directory.

* python3
* suggested as a PR to [eth-abi #69](https://github.com/ethereum/eth-abi/pull/69)
* the heavy lifting is done by `eth-abi`
* utilized in [pyetherchain](https://github.com/tintinweb/pyetherchain) to decode and dump smart contract code with inputs

Decode transaction inputs and constructor arguments to contract at [0xab7c74abc0c4d48d1bdad5dcb26153fc8780f83e](https://etherscan.io/address/0xab7c74abc0c4d48d1bdad5dcb26153fc8780f83e#code) to a more human friendly notation.

#### Example: Decode providing the ABI as .json

Usage:

    python -m ethereum_input_decoder -a ./test/contract_abi_ab7c74abc0c4d48d1bdad5dcb26153fc8780f83e.json -c 000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000002903cadbe271e057edef157340b52a5898d7424f000000000000000000000000ba7ca1bcf210c1b37cf5818816c4a819c3040ea700000000000000000000000014cd6536d449e3f6878f2d6859e1ff92ae0990e60000000000000000000000000c24441e42277445e38e02dfc3494577c05ba46b -t 0x797af62798d790d3133e0049215669e09b55a0b59d586c95f94c2d56b2812040133d7707 -t 0x797af62798d790d3133e0049215669e09b55a0b59d586c95f94c2d56b2812040133d7707

Output:

    ==[Constructor]==
      Raw:         '000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000002903cadbe271e057edef157340b52a5898d7424f000000000000000000000000ba7ca1bcf210c1b37cf5818816c4a819c3040ea700000000000000000000000014cd6536d449e3f6878f2d6859e1ff92ae0990e60000000000000000000000000c24441e42277445e38e02dfc3494577c05ba46b'
      Description: constructor None ((address[]) _owners = ('0x2903cadbe271e057edef157340b52a5898d7424f', '0xba7ca1bcf210c1b37cf5818816c4a819c3040ea7', '0x14cd6536d449e3f6878f2d6859e1ff92ae0990e6', '0x0c24441e42277445e38e02dfc3494577c05ba46b'), (uint256) _required = 2, (uint256) _daylimit = 1000000000000000000) returns ()

    ==[Input]==
      Raw:         '0x797af62798d790d3133e0049215669e09b55a0b59d586c95f94c2d56b2812040133d7707'
      Description: function confirm ((bytes32) _h = b'\x98\xd7\x90\xd3\x13>\x00I!Vi\xe0\x9bU\xa0\xb5\x9dXl\x95\xf9L-V\xb2\x81 @\x13=w\x07') returns ((bool) )


#### Example: Decode without providing the ABI and forcing an online lookup from 4bytes.directory

Usage:

    python -m ethereum_input_decoder -t 0x166eb4cb962ee1f494711b8726972fc3b23519008854ca46e73383da53aea339ee82ee7d0000000000000000000000000000000000000000000000000000000000000000

Output:

    **online lookup**


    ==[Input]==
      Raw:         '0x166eb4cb962ee1f494711b8726972fc3b23519008854ca46e73383da53aea339ee82ee7d0000000000000000000000000000000000000000000000000000000000000000'
      Description: function Put ((bytes32) arg0 = b'\x16n\xb4\xcb\x96.\xe1\xf4\x94q\x1b\x87&\x97/\xc3\xb25\x19\x00\x88T\xcaF\xe73\x83\xdaS\xae\xa39', (uint256) arg1 = 107881794066862459943708362605633226548906029344009971714560720257241323667456) returns ()


## API

```python
from ethereum_input_decoder import ContractAbi

ca = ContractAbi(json.loads(json_abi_str))
print(ca.describe_input(b'797aaf...3d7707'))
# function confirm ((bytes32) _h = b'\x98\xd7\x90\xd3\x13>\x00I!Vi\xe0\x9bU\xa0\xb5\x9dXl\x95\xf9L-V\xb2\x81 @\x13=w\x07') returns ((bool) )
print(ca.describe_constructor(b'000000...5ba46b")))
# constructor None ((address[]) _owners = ('0x2903cadbe271e057edef157340b52a5898d7424f', '0xba7ca1bcf210c1b37cf5818816c4a819c3040ea7', '0x14cd6536d449e3f6878f2d6859e1ff92ae0990e6', '0x0c24441e42277445e38e02dfc3494577c05ba46b'), (uint256) _required = 2, (uint256) _daylimit = 1000000000000000000) returns ()
```
```python
# online lookup without having an ABI ready
from ethereum_input_decoder AbiMethod

print(AbiMethod.from_input_lookup(Utils.str_to_bytes(txinput)))
# function Put ((bytes32) arg0 = b'\x16n\xb4\xcb\x96.\xe1\xf4\x94q\x1b\x87&\x97/\xc3\xb25\x19\x00\x88T\xcaF\xe73\x83\xdaS\xae\xa39', (uint256) arg1 = 107881794066862459943708362605633226548906029344009971714560720257241323667456) returns ()
```

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/tintinweb/ethereum-input-decoder/",
    "name": "ethereum_input_decoder",
    "maintainer": "",
    "docs_url": null,
    "requires_python": "",
    "maintainer_email": "",
    "keywords": "ethereum",
    "author": "tintinweb",
    "author_email": "tintinweb@oststrom.com",
    "download_url": "https://files.pythonhosted.org/packages/88/64/067c42a1d21757ceea7106f5141849f76bcbe2289264a05b700743a7d9e8/ethereum_input_decoder-0.2.2.tar.gz",
    "platform": "",
    "description": "# 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>\\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&\\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>\\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&\\x97/\\xc3\\xb25\\x19\\x00\\x88T\\xcaF\\xe73\\x83\\xdaS\\xae\\xa39', (uint256) arg1 = 107881794066862459943708362605633226548906029344009971714560720257241323667456) returns ()\n```\n",
    "bugtrack_url": null,
    "license": "GPLv3",
    "summary": "Decode transaction inputs based on the contract ABI",
    "version": "0.2.2",
    "project_urls": {
        "Download": "https://github.com/tintinweb/ethereum-input-decoder/tarball/v0.2.2",
        "Homepage": "https://github.com/tintinweb/ethereum-input-decoder/"
    },
    "split_keywords": [
        "ethereum"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "8864067c42a1d21757ceea7106f5141849f76bcbe2289264a05b700743a7d9e8",
                "md5": "335a6824d22a1451eec5ae89c4837775",
                "sha256": "8cf09f22176f82682a25be547e44930e95ef270f3d17df5e7460d651a33c8606"
            },
            "downloads": -1,
            "filename": "ethereum_input_decoder-0.2.2.tar.gz",
            "has_sig": false,
            "md5_digest": "335a6824d22a1451eec5ae89c4837775",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 5550,
            "upload_time": "2018-07-04T18:35:07",
            "upload_time_iso_8601": "2018-07-04T18:35:07.209082Z",
            "url": "https://files.pythonhosted.org/packages/88/64/067c42a1d21757ceea7106f5141849f76bcbe2289264a05b700743a7d9e8/ethereum_input_decoder-0.2.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2018-07-04 18:35:07",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "tintinweb",
    "github_project": "ethereum-input-decoder",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "ethereum_input_decoder"
}
        
Elapsed time: 0.27639s