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
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
# Changelog
|
||||
|
||||
## 1.0.0 - 2019-04-30
|
||||
## 1.0.0 - TBD
|
||||
|
||||
- Initial release.
|
||||
|
@@ -2,10 +2,14 @@
|
||||
|
||||
"""setuptools module for middlewares package."""
|
||||
|
||||
# pylint: disable=import-outside-toplevel
|
||||
# we import things outside of top-level because 3rd party libs may not yet be
|
||||
# installed when you invoke this script
|
||||
|
||||
import subprocess # nosec
|
||||
from shutil import rmtree
|
||||
from os import environ, path
|
||||
from sys import argv
|
||||
from sys import argv, exit # pylint: disable=redefined-builtin
|
||||
|
||||
from distutils.command.clean import clean
|
||||
import distutils.command.build_py
|
||||
|
@@ -1,2 +1,2 @@
|
||||
"""0x Python API."""
|
||||
__import__("pkg_resources").declare_namespace(__name__)
|
||||
__import__("pkg_resources").declare_namespace(__name__) # type: ignore
|
||||
|
@@ -3,25 +3,21 @@
|
||||
from eth_utils import to_checksum_address
|
||||
from web3 import Web3, HTTPProvider
|
||||
|
||||
from zero_ex.contract_addresses import NETWORK_TO_ADDRESSES, NetworkId
|
||||
from zero_ex.contract_addresses import network_to_addresses, NetworkId
|
||||
from zero_ex.middlewares.local_message_signer import (
|
||||
construct_local_message_signer,
|
||||
)
|
||||
from zero_ex.order_utils import (
|
||||
generate_order_hash_hex,
|
||||
is_valid_signature,
|
||||
sign_hash,
|
||||
)
|
||||
from zero_ex.order_utils import generate_order_hash_hex, sign_hash
|
||||
|
||||
|
||||
def test_local_message_signer__sign_order():
|
||||
"""Test signing order with the local_message_signer middleware"""
|
||||
expected_signature = (
|
||||
"0x1cd17d75b891accf16030c572a64cf9e7955de63bcafa5b084439cec630ade2d7"
|
||||
"c00f47a2f4d5b6a4508267bf4b8527100bd97cf1af9984c0a58e42d25b13f4f0a03"
|
||||
"0x1c8bdfbb3ce3ed0f38c5a358a7f49ad5f21ea9857224c2fe98c458f2fa25551d4"
|
||||
"d6db0157d9dfe9f9fadb8dedabb7786352843357f4ec8d0fbcbeeb619b1091f5803"
|
||||
)
|
||||
address = "0x5409ED021D9299bf6814279A6A1411A7e866A631"
|
||||
exchange = NETWORK_TO_ADDRESSES[NetworkId.GANACHE].exchange
|
||||
exchange = network_to_addresses(NetworkId.GANACHE).exchange
|
||||
private_key = (
|
||||
"f2f48ee19680706196e2e339e5da3491186e0c4c5030670656b0e0164837257d"
|
||||
)
|
||||
@@ -36,7 +32,9 @@ def test_local_message_signer__sign_order():
|
||||
"senderAddress": "0x0000000000000000000000000000000000000000",
|
||||
"feeRecipientAddress": "0x0000000000000000000000000000000000000000",
|
||||
"makerAssetData": (b"\x00") * 20,
|
||||
"makerFeeAssetData": (b"\x00") * 20,
|
||||
"takerAssetData": (b"\x00") * 20,
|
||||
"takerFeeAssetData": (b"\x00") * 20,
|
||||
"salt": 0,
|
||||
"makerFee": 0,
|
||||
"takerFee": 0,
|
||||
@@ -44,8 +42,11 @@ def test_local_message_signer__sign_order():
|
||||
"takerAssetAmount": 0,
|
||||
"expirationTimeSeconds": 0,
|
||||
}
|
||||
order_hash = generate_order_hash_hex(order, exchange)
|
||||
signature = sign_hash(ganache, to_checksum_address(address), order_hash)
|
||||
assert signature == expected_signature
|
||||
is_valid = is_valid_signature(ganache, order_hash, signature, address)[0]
|
||||
assert is_valid is True
|
||||
assert (
|
||||
sign_hash(
|
||||
web3_instance,
|
||||
to_checksum_address(address),
|
||||
generate_order_hash_hex(order, exchange, chain_id=1337),
|
||||
)
|
||||
== expected_signature
|
||||
)
|
||||
|
Reference in New Issue
Block a user