{ "info": { "author": "hypothesis-ethereum-contributors", "author_email": "", "bugtrack_url": null, "classifiers": [ "Development Status :: 2 - Pre-Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6" ], "description": "# Hypothesis Integration for Ethereum Smart Conctracts\nTests are executed using pytest\n\nhttps://hypothesis.works/articles/how-not-to-die-hard-with-hypothesis/\nhttps://hypothesis.readthedocs.io/en/latest/stateful.html\n\n## How this fuzzer works\n\nThis fuzzer engine takes a compiled contract, and leverages the ABI to figure out the \"call space\" of the contract.\nThe call space is basically the externally available contract methods that allow modifications to the underlying state.\nEach method's call space is further parameterized by each method's input variables, so the total call space is\nessentially all available state-modifying methods with all possible combinations of input variables.\nWith Ethereum contracts containing very large variables such as 256-bit integers, this can be really large!\n\nA fuzzer usually randomly samples from the call space to reduce the amount of calls being made, which drastically\nreduces the amount of time and resources used to explore the call space. This fuzzer engine in particular tries a\nseries of calls from the call space in an attempt to find exceptional scenarios that is of interest to the user.\n\nThis fuzzer engine checks for the following exceptional scenarios:\n1. Out of Gas exception (using a configurable limit)\n2. Unintended reversions, such as Invalid opcodes, Stack Overflow/Underflow, Invalid Jump Destination, or Insufficient Funds.\n3. Custom invariants, as specified by the user using the contract's public read-only API\n\n## Soundness vs. Completeness\n\nThis fuzzer is \"sound\" but not \"complete\".\nIf you are unfamiliar with these concepts, this basically means that fuzzer tests may not completely\nidentify all bugs (due to randomly exploring the contract's call space), but any bug it *does* find\nis a \"real\" bug that exists in the application (the fact that it is a bug is soundly identified).\n\nFuture work will be done in shrinking the contract's call space through \"grey box\" techniques,\nor in other words introspecting the contract to identify parts of the call space that might reveal a bug,\nand focusing on those portions to identify bugs faster. In this way, we aim to make the fuzzer's techniques\n*more* complete (identify more bugs faster), but without sacrificing soundness (all bugs are still real bugs).", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/fubuloubu/hypothesis-ethereum", "keywords": "ethereum", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "hypothesis-ethereum", "package_url": "https://pypi.org/project/hypothesis-ethereum/", "platform": "", "project_url": "https://pypi.org/project/hypothesis-ethereum/", "project_urls": { "Homepage": "https://github.com/fubuloubu/hypothesis-ethereum" }, "release_url": "https://pypi.org/project/hypothesis-ethereum/0.0.1a4/", "requires_dist": null, "requires_python": ">=3.6, <4", "summary": "hypothesis-ethereum: Hypothesis library for ethereum projects.", "version": "0.0.1a4" }, "last_serial": 5307733, "releases": { "0.0.1a1": [ { "comment_text": "", "digests": { "md5": "81950b198466482e380df53f2dcb3db4", "sha256": "e547f87edd0900d7279313f5e5f012f8bc932fe0d6218d4d3e1f99c81a9e4167" }, "downloads": -1, "filename": "hypothesis-ethereum-0.0.1a1.tar.gz", "has_sig": false, "md5_digest": "81950b198466482e380df53f2dcb3db4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6, <4", "size": 2888, "upload_time": "2019-05-21T14:51:52", "url": "https://files.pythonhosted.org/packages/d2/fe/3bc28f87db7d62ad2c972af4b85b70485d5de7524c3fdd8293d0b665e98d/hypothesis-ethereum-0.0.1a1.tar.gz" } ], "0.0.1a2": [ { "comment_text": "", "digests": { "md5": "d73d76f994afdc5c106a4e935da51ac2", "sha256": "6f51e96c1b1a87e2ba7f53e2c238c6a11d7f688400ac692a2c613522984e27d2" }, "downloads": -1, "filename": "hypothesis-ethereum-0.0.1a2.tar.gz", "has_sig": false, "md5_digest": "d73d76f994afdc5c106a4e935da51ac2", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6, <4", "size": 4657, "upload_time": "2019-05-22T22:32:57", "url": "https://files.pythonhosted.org/packages/72/00/30b3ce2d108f205abf052311259f2f631b3450cf0de1146e5b3c90b6fc8a/hypothesis-ethereum-0.0.1a2.tar.gz" } ], "0.0.1a3": [ { "comment_text": "", "digests": { "md5": "b839d452a207a06cb2b8bc05fa2c90a0", "sha256": "554dcc716d68685237cbb57732b7f6fd5f19670b8c9a3392febfea632a3a392e" }, "downloads": -1, "filename": "hypothesis-ethereum-0.0.1a3.tar.gz", "has_sig": false, "md5_digest": "b839d452a207a06cb2b8bc05fa2c90a0", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6, <4", "size": 4567, "upload_time": "2019-05-23T03:29:19", "url": "https://files.pythonhosted.org/packages/4e/d8/cb88448eecefdd1261326b5fdb1a564e93ff8452029411eaff806b35d992/hypothesis-ethereum-0.0.1a3.tar.gz" } ], "0.0.1a4": [ { "comment_text": "", "digests": { "md5": "c82d6ef1cfb534c7266904ef88b28fdc", "sha256": "783748a838b8497d4e101d4c3e4dd9d27400a0a732ee72760abd55e76220083b" }, "downloads": -1, "filename": "hypothesis-ethereum-0.0.1a4.tar.gz", "has_sig": false, "md5_digest": "c82d6ef1cfb534c7266904ef88b28fdc", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6, <4", "size": 4702, "upload_time": "2019-05-23T14:18:13", "url": "https://files.pythonhosted.org/packages/29/6b/48d93bc01645981b80f38419e2fbfee1173cb36a750347de47cbf51ac6b2/hypothesis-ethereum-0.0.1a4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c82d6ef1cfb534c7266904ef88b28fdc", "sha256": "783748a838b8497d4e101d4c3e4dd9d27400a0a732ee72760abd55e76220083b" }, "downloads": -1, "filename": "hypothesis-ethereum-0.0.1a4.tar.gz", "has_sig": false, "md5_digest": "c82d6ef1cfb534c7266904ef88b28fdc", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6, <4", "size": 4702, "upload_time": "2019-05-23T14:18:13", "url": "https://files.pythonhosted.org/packages/29/6b/48d93bc01645981b80f38419e2fbfee1173cb36a750347de47cbf51ac6b2/hypothesis-ethereum-0.0.1a4.tar.gz" } ] }