aboutsummaryrefslogtreecommitdiffstats
path: root/python-packages/contract_demo/test/test_exchange.py
diff options
context:
space:
mode:
authorF. Eugene Aumson <feuGeneA@users.noreply.github.com>2019-01-09 22:58:29 +0800
committerGitHub <noreply@github.com>2019-01-09 22:58:29 +0800
commitaa5af04447dfae24731557c6beead55bd8ff99a9 (patch)
tree1ffcc631ab078c88f85e2ab2b708f5d91b731cea /python-packages/contract_demo/test/test_exchange.py
parent5b7eff217e9c8d09d64ff8721d7a16e1df8a7c58 (diff)
downloaddexon-sol-tools-aa5af04447dfae24731557c6beead55bd8ff99a9.tar
dexon-sol-tools-aa5af04447dfae24731557c6beead55bd8ff99a9.tar.gz
dexon-sol-tools-aa5af04447dfae24731557c6beead55bd8ff99a9.tar.bz2
dexon-sol-tools-aa5af04447dfae24731557c6beead55bd8ff99a9.tar.lz
dexon-sol-tools-aa5af04447dfae24731557c6beead55bd8ff99a9.tar.xz
dexon-sol-tools-aa5af04447dfae24731557c6beead55bd8ff99a9.tar.zst
dexon-sol-tools-aa5af04447dfae24731557c6beead55bd8ff99a9.zip
Python contract demo, with lots of refactoring (#1485)
* Refine Order for Web3 compat. & add conversions Changed some of the fields in the Order class so that it can be passed to our contracts via Web3. Added conversion utilities so that an Order can be easily converted to and from a JSON-compatible dict (specifically by encoding/decoding the `bytes` fields), to facilitate validation against the JSON schema. Also modified JSON order schema to accept integers in addition to stringified integers. * Fixes for json_schemas Has-types indicator file, py.typed, was not being included in package. Schemas were not being properly gathered into package installation. * Add test/demo of Exchange.getOrderInfo() * web3 bug workaround * Fix problem packaging contract artifacts * Move contract addresses to their own package * Move contract artifacts to their own package * Add scripts to install, test & lint all components * prettierignore files in local python dev env * Correct missing coverage analysis for sra_client * CI cache lint: don't save, re-use from test-python * tag hacks as hacks * correct merge mistake * remove local strip_0x() in favor of eth_utils * remove json schemas from old order_utils location * correct merge mistake * doctest json schemas via command-line, not code
Diffstat (limited to 'python-packages/contract_demo/test/test_exchange.py')
-rw-r--r--python-packages/contract_demo/test/test_exchange.py65
1 files changed, 65 insertions, 0 deletions
diff --git a/python-packages/contract_demo/test/test_exchange.py b/python-packages/contract_demo/test/test_exchange.py
new file mode 100644
index 000000000..07492a403
--- /dev/null
+++ b/python-packages/contract_demo/test/test_exchange.py
@@ -0,0 +1,65 @@
+"""Test calling methods on the Exchange contract."""
+
+from eth_utils import to_checksum_address
+from web3 import Web3
+from web3.utils import datatypes
+
+from zero_ex.contract_addresses import NETWORK_TO_ADDRESSES, NetworkId
+import zero_ex.contract_artifacts
+from zero_ex.json_schemas import assert_valid
+from zero_ex.order_utils import (
+ Order,
+ OrderInfo,
+ order_to_jsdict,
+ generate_order_hash_hex,
+)
+
+
+def test_get_order_info():
+ """Demonstrate Exchange.getOrderInfo()."""
+ order: Order = {
+ "makerAddress": "0x0000000000000000000000000000000000000000",
+ "takerAddress": "0x0000000000000000000000000000000000000000",
+ "feeRecipientAddress": "0x0000000000000000000000000000000000000000",
+ "senderAddress": "0x0000000000000000000000000000000000000000",
+ "makerAssetAmount": 1000000000000000000,
+ "takerAssetAmount": 1000000000000000000,
+ "makerFee": 0,
+ "takerFee": 0,
+ "expirationTimeSeconds": 12345,
+ "salt": 12345,
+ "makerAssetData": (b"\x00") * 20,
+ "takerAssetData": (b"\x00") * 20,
+ }
+
+ web3_instance = Web3(Web3.HTTPProvider("http://127.0.0.1:8545"))
+
+ # false positive from pylint: disable=no-member
+ contract_address = NETWORK_TO_ADDRESSES[
+ NetworkId(int(web3_instance.net.version))
+ ].exchange
+
+ assert_valid(
+ order_to_jsdict(order, exchange_address=contract_address),
+ "/orderSchema",
+ )
+
+ # false positive from pylint: disable=no-member
+ exchange: datatypes.Contract = web3_instance.eth.contract(
+ address=to_checksum_address(contract_address),
+ abi=zero_ex.contract_artifacts.abi_by_name("Exchange"),
+ )
+
+ order_info = OrderInfo(*exchange.call().getOrderInfo(order))
+
+ assert isinstance(order_info.order_status, int)
+ assert order_info.order_status == 4
+
+ assert isinstance(order_info.order_hash, bytes)
+ assert order_info.order_hash.hex() == generate_order_hash_hex(
+ order,
+ exchange_address=NETWORK_TO_ADDRESSES[NetworkId.GANACHE].exchange,
+ )
+
+ assert isinstance(order_info.order_taker_asset_filled_amount, int)
+ assert order_info.order_taker_asset_filled_amount == 0