* .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
* 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
* Rename existing wrapper, to match contract name
* base contract: make member var public
* json_schemas.py: stop storing copies of schemas!
* .gitignore generated erc20_token.py wrapper
* json schemas: allow uppercase digits in address
* existing exchange wrapper: re-order methods
to match method order in Solidity contract, to reduce noise in upcoming
diffs of newly generated code vs. old manually-written code.
* existing exchange wrapper: rename method params
To match contract method param names
* existing exchange wrapper: remove redundant member
* existing exchange wrapper: make signatures bytes
Not strings.
* abi-gen/test-cli: show context on diff failure
* abi-gen-templates/Py: fix broken event interface
Previous changes had removed the `token_address` parameter from all
generated methods, but this instance was missed because there weren't
tests/examples using events for the first contract for which wrappers
were generated (ERC20Token).
* abi-gen: remove unused method parameters
* abi-gen: convert Py method params to snake case
* abi-gen: rewrite Python tuple handling
* python-generated-wrappers: include Exchange
* abi-gen-templates/Py: easy linter fixes
* abi-gen-templates/Py: satisfy docstring linters
* abi-gen-templates/Py: normalize bytes before use
* contract_wrappers.py: replace Exchange w/generated
* contract_wrappers.py: rm manually written Exchange
* contract_wrappers.py/doctest: rename variables
* abi-gen: fix misspelling in docstring
Co-Authored-By: Fabio B <me@fabioberger.com>
* Py docs: error on warning, and test build in CI
* abi-gen: doc Py bytes params as requiring UTF-8
* abi-gen: git mv diff.sh test-cli/
* abi-gen: put Py wrapper in module folder, not file
This leaves space for user-defined additions to the same module, such as
for custom types, as shown herein.
* abi-gen: customizable param validation for Python
* contract_wrappers.py: JSON schema Order validation
* CircleCI Build Artifacts
For abi-gen command-line test output, for generated Python contract
wrappers as output by abi-gen, for generated Python contract wrappers as
reformatted and included in the Python package area, and for the "build"
output folder in each Python package, which includes the generated
documentation.
* CHANGELOG updates for all components
* abi-gen: grammar in comments
Co-Authored-By: Fabio B <me@fabioberger.com>
* abi-gen: CHANGELOG spelling correction
Co-Authored-By: Fabio B <me@fabioberger.com>
* order_utils.py: reverse (chronological) CHANGELOG
* abi-gen-templates: reset CHANGELOG patch version
* CHANGELOGs: use multiple entries where appropriate
* abi-gen: enable devdoc solc output in test-cli
* abi-gen-templates/Py: consolidate return type
* abi-gen/test-cli: non-pure fixture contract method
Added a method to the "dummy" test fixture contract that isn't pure.
All of the other prior method cases were pure.
* abi-gen/Py: fix const methods missing return type
* abi-gen/Py: fix wrong return types on some methods
Specifically, wrapper methods wrapping contract methods that modify
contract state and return no return value. There was no test case for
this. Now there is.
* contract_wrappers.py: rm generated code in `clean`
* Parallelize Py monorepo scripts (test, lint, etc)