f11d8a5bd80342a4c6a33b3f17bb44d277255fe2
4 Commits
Author | SHA1 | Message | Date | |
---|---|---|---|---|
|
e61f23d001 |
Migrate Python libraries to v3 (#2284)
* .gitignore migrations/0x_ganache_snapshot * .gitignore new-ish Python contract wrappers These should have been added back when we started generating these wrappers. * rm superfluous contract artifact in Python package All of the contract artifacts were removed from the Python package recently, because now they're copied from the monorepo/packages area as an automated build step. Somehow this one artifact slipped through the cracks. * Eliminate circular dependency This was preventing the Exchange wrapper from ever importing its validator! * Improve output of monorepo-level parallel script - Capture stderr (and have it included in stdout) so that it doesn't leak onto the console for commands that didn't actually fail. - Include all error output in the Exception object (eliminate print statement). * Silence new versions of linters Newer versions care about this stuff. Old versions didn't, and we don't either. * Support Rich Reverts via Web3.py middleware * Fix bug in generated wrappers' bytes handling `bytes.fromhex(bytes.decode('utf-8')` is just plain wrong. It would work for some cases, but is not working when trying to fill orders with the latest Exchange contract. * Migrate to Exchange v3 * Fix typo in DevUtils documentation * Include new contracts in docs * Re-enable Python checks in CI * Accept strings for bytes * Fix CircleCI build artifacts for gen'd python I swear the previous way was working before, but it wasn't working now, so this fixes it. * Accept a provider OR a Web3 object In various places. This allows the caller to install middleware (which in web3.py is installed on a Web3 object, not on a provider) before executing any RPC calls, which is important for the case where one wants to produce signatures locally before submitting to a remote node. * wrapper base: don't assume there are accounts * Eliminate some inline linter directives * make CHANGELOGs be REVERSE chronological * Update CHANGELOG entries and bump version numbers * @0x/contract-addresses: Put addr's in JSON, not TS This allows easier consumption by other languages. (Specifically, it eliminates the overhead of keeping the Python addresses package in sync with the TypeScript one.) * sra_client.py: incl. docker in `./setup.py clean` * sra_client.py: Migrate to protocol v3 Removed script that existed only to exclude runs of sra_client builds (parallel_without_sra_client). Now `parallel` is used by CI, re-including sra_client in CI checks. * abi-gen/templates/Py: clarify if/else logic In response to https://github.com/0xProject/0x-monorepo/pull/2284#discussion_r342200906 * sra_client.py: Update CHANGELOG and bump version * contract_addresses/setup.py: rm unnecessary rm * json_schemas.py: corrections to dev dependencies * In tests against deployment, also run doctests * contract_wrappers example: rm xtra Order attribute Thanks to @steveklebanoff for catching this. https://github.com/0xProject/0x-monorepo/pull/2284#pullrequestreview-312065368 |
||
|
ec807120c3 |
Migrate to Web3.py v5 (#2038)
* Install Py packages in dep. order, not in parallel Install Python packages in dependency order, not in parallel. * sra_client.py: Add `./setup.py clean` * Fix python package dependency ordering... ...and include a script to produce the proper ordering. * sra_client.py: reformat whitespace in doctest * contract_wrappers.py: don't auto-import wrappers This was discovered while minimizing CircleCI steps to dianose a problem with running the Launch Kit Backend in CircleCI. These classes should be imported via the zero_ex.contract_wrappers.exchange and zero_ex.contract_wrappers.erc20_token modules, respectively. We permitted importing them from just zero_ex.contract_wrappers back when they were the only wrappers we had, but now that we have so many different contracts being wrapped, this is just another list to keep manually updated (which, obviously is error prone, since it slipped through the cracks already), so it's better to just not support this type of import. * abi-gen/Py: doc contract method attributes Without this, generated documentation was not including the class members that represent the contract methods, rendering the usage unclear. * sra_client.py: disable tests in CI * abi-gen/Py: strip repeated spaces from devdoc * contract_wrappers.py: gen docs for all wrappers... ...except for the dummy tokens. * sra_client.py/test: change launch kit docker image Previously these teses were using 0xorg/launch-kit-ci, but that was a one-off thing created just for CI, back before there was a regularly maintained docker image of Launch Kit. Changed to use 0xorg/launch-kit-backend since it's regularly maintained/updated. Because the -backend image is using a different Linux distribution (Alpine), the commands used to wait for ganache startup also had to change. The tag used, 74bcc39, is provisional due to the pending Issue at https://github.com/0xProject/0x-launch-kit-backend/issues/73 . When that issue is resolved, the tag suffix on the imag name should be removed. * Migrate from Web3.py 4.x to 5.x * sra_client.py: checksum address in doctest Due to problem with launch-kit-backend, documented at https://github.com/0xProject/0x-launch-kit-backend/issues/73 , we need to checksum the makerAddress, in the order retrieved from the relayer, before filling it, otherwise Web3.py gives this error: InvalidAddress('Web3.py only accepts checksum addresses. The software that gave you this non-checksum address should be considered unsafe, please file it as a bug on their platform. Try using an ENS name instead. Or, if you must accept lower safety, use Web3.toChecksumAddress(lower_case_address).', '0x5409ed021d9299bf6814279a6a1411a7e866a631') * Update CHANGELOGs * sra_client.py: make CHANGELOG be REVESE chrono. Formerly CHANGELOG was in chronological order. Now it's in reverse chronological order. * abi-gen/Py: fix missing space in sanitized devdoc |
||
|
57318c0041 |
Python nested wrapper methods & estimate_gas (#1996)
* git rm unnecessary .gitkeep file * After all Pytest runs, show short test summary * abi-gen/Py: facilitate inlining of parameter lists Effectively, stopped new-lines from being introduced by calls to the `params` and `typed_params` partials. * abi-gen: simple Py wrapper test for local dev'ment * abi-gen/Py: stop gen'ing ValidatorBase * abi-gen/Py: declare abi() wrapper method in Base * abi-gen/Py: methods as classes to ease call/sendTx Represent methods as classes in order to faciliate access to a method's different operations (call, send_transaction, etc). * contract_wrappers.py: make Base methods public Changed some methods on BaseContractWrapper to be public. * contract_wrappers.py: remove unused method * contract_wrappers.py: extract method * abi-gen/Py: inline method * contract_wrappers.py: fix bug in call() We were passing transaction parameters through to sendTransaction() invocations, but not to call() invocations. * abi-gen/Py: remove `view_only` param to call/tx Formerly, in the BaseContractWrapper, there was just one function used for both eth_call and eth_sendTransaction, and you would distinguish between the two by specifying `view_only=True` when you wanted a call. This commit defines a method dedicated to executing an eth_call, and leaves the old method behind, with the `view_only` param removed, to be used for eth_sendTransaction. * abi-gen/Py: rename method * contract_wrappers/Py: simplify web3 func handling Pass web3 function instance into generated wrapper method class constructor, rather than having that class obtain it upon each method call. Really this is just an elimination of a call to BaseContractWrapper.contract_instance(), which will be removed completely in a shortly-upcoming commit. * contract_wrappers.py: inline method Inline and remove method BaseContractWrapper.contract_instance(). * contract_wrappers.py: pass Validator to *Method Pass a ValidatorBase instance into construction of the contract method classes, *Method, to eliminate another dependency on the containing contract object, which will be eliminated completely in a shortly-upcoming commit. * abi-gen/Py: BaseContractWrapper -> ContractMethod Change the fundamental thing-to-be-wrapped from the contract to the method. Since the named method classes were introduced (in a previous commit), and since the operations contained within the Base are predominantly focused on supporting method calls more than anything else, it makes more intuitive sense to provide a base for the methods than for the contract. With this change, the method classes no longer require a contract object to be passed to their constructors. The contract members that the methods were utilizing are now passed directly to the method constructor. * contract_wrappers.py: rename module to bases... ...from _base_contract_wrapper. The old name hasn't made sense since ValidatorBase was moved into that module, and definitely doesn't make sense now that the fundamental thing-to-be-wrapped has changed from the contract to the method. Also renamed to make it public (removed the leading underscore) since we're generating code that will depend on it. * abi-gen/Py: clarify call/sendTx docstrings * abi-gen/Py: adjust whitespace * contract_wrappers.py: inline method * abi-gen/Py: rename class ValidatorBase... ...to just Validator. It's in the "bases" module, which provides the context needed in order to know it's a base class * python-packages: fix silent failures of ./parallel * contract_wrappers.py: remove private_key support Having this present was overcomplicating interfaces. And it was untested (and not readily working when testing was attempted). And it only provided a thin layer of convenience, which a client could easily code up themselves. * contract_wrappers.py: inline method * contract_wrappers.py: rm unused member variables * contract_wrappers.py: rm unnecessary instance var * abi-gen/Py: add estimate_gas to gen'd methods * update CHANGELOG.json |
||
|
a256494ec8 | Python contract wrappers (#1721) |