aboutsummaryrefslogtreecommitdiffstats
path: root/python-packages/contract_addresses/src
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_addresses/src
parent5b7eff217e9c8d09d64ff8721d7a16e1df8a7c58 (diff)
downloaddexon-sol-tools-aa5af04447dfae24731557c6beead55bd8ff99a9.tar.gz
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_addresses/src')
-rw-r--r--python-packages/contract_addresses/src/conf.py54
-rw-r--r--python-packages/contract_addresses/src/doc_static/.gitkeep0
-rw-r--r--python-packages/contract_addresses/src/index.rst25
-rw-r--r--python-packages/contract_addresses/src/zero_ex/__init__.py2
-rw-r--r--python-packages/contract_addresses/src/zero_ex/contract_addresses/__init__.py93
-rw-r--r--python-packages/contract_addresses/src/zero_ex/contract_addresses/py.typed0
6 files changed, 174 insertions, 0 deletions
diff --git a/python-packages/contract_addresses/src/conf.py b/python-packages/contract_addresses/src/conf.py
new file mode 100644
index 000000000..a0f372bc5
--- /dev/null
+++ b/python-packages/contract_addresses/src/conf.py
@@ -0,0 +1,54 @@
+"""Configuration file for the Sphinx documentation builder."""
+
+# Reference: http://www.sphinx-doc.org/en/master/config
+
+from typing import List
+import pkg_resources
+
+
+# pylint: disable=invalid-name
+# because these variables are not named in upper case, as globals should be.
+
+project = "0x-contract-addresses"
+# pylint: disable=redefined-builtin
+copyright = "2018, ZeroEx, Intl."
+author = "F. Eugene Aumson"
+version = pkg_resources.get_distribution("0x-contract-addresses").version
+release = "" # The full version, including alpha/beta/rc tags
+
+extensions = [
+ "sphinx.ext.autodoc",
+ "sphinx.ext.doctest",
+ "sphinx.ext.intersphinx",
+ "sphinx.ext.coverage",
+ "sphinx.ext.viewcode",
+]
+
+templates_path = ["doc_templates"]
+
+source_suffix = ".rst"
+# eg: source_suffix = [".rst", ".md"]
+
+master_doc = "index" # The master toctree document.
+
+language = None
+
+exclude_patterns: List[str] = []
+
+# The name of the Pygments (syntax highlighting) style to use.
+pygments_style = None
+
+html_theme = "alabaster"
+
+html_static_path = ["doc_static"]
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+
+# Output file base name for HTML help builder.
+htmlhelp_basename = "contract_addressespydoc"
+
+# -- Extension configuration:
+
+# Example configuration for intersphinx: refer to the Python standard library.
+intersphinx_mapping = {"https://docs.python.org/": None}
diff --git a/python-packages/contract_addresses/src/doc_static/.gitkeep b/python-packages/contract_addresses/src/doc_static/.gitkeep
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/python-packages/contract_addresses/src/doc_static/.gitkeep
diff --git a/python-packages/contract_addresses/src/index.rst b/python-packages/contract_addresses/src/index.rst
new file mode 100644
index 000000000..7ac329ce2
--- /dev/null
+++ b/python-packages/contract_addresses/src/index.rst
@@ -0,0 +1,25 @@
+.. source for the sphinx-generated build/docs/web/index.html
+
+Python zero_ex.contract_addresses
+=================================
+
+.. toctree::
+ :maxdepth: 2
+ :caption: Contents:
+
+.. autoclass:: zero_ex.contract_addresses.NetworkId
+
+ See source for enum members.
+
+.. autoclass:: zero_ex.contract_addresses.ContractAddresses
+ :members:
+
+.. autodata:: zero_ex.contract_addresses.NETWORK_TO_ADDRESSES
+ :annotation:
+
+Indices and tables
+==================
+
+* :ref:`genindex`
+* :ref:`modindex`
+* :ref:`search`
diff --git a/python-packages/contract_addresses/src/zero_ex/__init__.py b/python-packages/contract_addresses/src/zero_ex/__init__.py
new file mode 100644
index 000000000..e90d833db
--- /dev/null
+++ b/python-packages/contract_addresses/src/zero_ex/__init__.py
@@ -0,0 +1,2 @@
+"""0x Python API."""
+__import__("pkg_resources").declare_namespace(__name__)
diff --git a/python-packages/contract_addresses/src/zero_ex/contract_addresses/__init__.py b/python-packages/contract_addresses/src/zero_ex/contract_addresses/__init__.py
new file mode 100644
index 000000000..a4bfc3f4c
--- /dev/null
+++ b/python-packages/contract_addresses/src/zero_ex/contract_addresses/__init__.py
@@ -0,0 +1,93 @@
+"""Addresses at which the 0x smart contracts have been deployed."""
+
+from enum import Enum
+from typing import Dict, NamedTuple
+
+
+class ContractAddresses(NamedTuple): # noqa
+ """An abstract record listing all the contracts that have addresses."""
+
+ erc20_proxy: str
+ erc721_proxy: str
+ zrx_token: str
+ ether_token: str
+ exchange: str
+ asset_proxy_owner: str
+ forwarder: str
+ order_validator: str
+
+
+class NetworkId(Enum):
+ """Network names correlated to their network identification numbers.
+
+ >>> NetworkId.MAINNET
+ <NetworkId.MAINNET: 1>
+ """
+
+ MAINNET = 1
+ ROPSTEN = 3
+ RINKEBY = 4
+ KOVAN = 42
+ GANACHE = 50
+
+
+NETWORK_TO_ADDRESSES: Dict[NetworkId, ContractAddresses] = {
+ NetworkId.MAINNET: ContractAddresses(
+ erc20_proxy="0x2240dab907db71e64d3e0dba4800c83b5c502d4e",
+ erc721_proxy="0x208e41fb445f1bb1b6780d58356e81405f3e6127",
+ zrx_token="0xe41d2489571d322189246dafa5ebde1f4699f498",
+ ether_token="0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
+ exchange="0x4f833a24e1f95d70f028921e27040ca56e09ab0b",
+ asset_proxy_owner="0x17992e4ffb22730138e4b62aaa6367fa9d3699a6",
+ forwarder="0x5468a1dc173652ee28d249c271fa9933144746b1",
+ order_validator="0x9463e518dea6810309563c81d5266c1b1d149138",
+ ),
+ NetworkId.ROPSTEN: ContractAddresses(
+ erc20_proxy="0xb1408f4c245a23c31b98d2c626777d4c0d766caa",
+ erc721_proxy="0xe654aac058bfbf9f83fcaee7793311dd82f6ddb4",
+ zrx_token="0xff67881f8d12f372d91baae9752eb3631ff0ed00",
+ ether_token="0xc778417e063141139fce010982780140aa0cd5ab",
+ exchange="0x4530c0483a1633c7a1c97d2c53721caff2caaaaf",
+ asset_proxy_owner="0xf5fa5b5fed2727a0e44ac67f6772e97977aa358b",
+ forwarder="0x2240dab907db71e64d3e0dba4800c83b5c502d4e",
+ order_validator="0x90431a90516ab49af23a0530e04e8c7836e7122f",
+ ),
+ NetworkId.RINKEBY: ContractAddresses(
+ exchange="0xbce0b5f6eb618c565c3e5f5cd69652bbc279f44e",
+ erc20_proxy="0x2f5ae4f6106e89b4147651688a92256885c5f410",
+ erc721_proxy="0x7656d773e11ff7383a14dcf09a9c50990481cd10",
+ zrx_token="0x8080c7e4b81ecf23aa6f877cfbfd9b0c228c6ffa",
+ ether_token="0xc778417e063141139fce010982780140aa0cd5ab",
+ asset_proxy_owner="0xe1703da878afcebff5b7624a826902af475b9c03",
+ forwarder="0x2d40589abbdee84961f3a7656b9af7adb0ee5ab4",
+ order_validator="0x0c5173a51e26b29d6126c686756fb9fbef71f762",
+ ),
+ NetworkId.KOVAN: ContractAddresses(
+ erc20_proxy="0xf1ec01d6236d3cd881a0bf0130ea25fe4234003e",
+ erc721_proxy="0x2a9127c745688a165106c11cd4d647d2220af821",
+ zrx_token="0x2002d3812f58e35f0ea1ffbf80a75a38c32175fa",
+ ether_token="0xd0a1e359811322d97991e03f863a0c30c2cf029c",
+ exchange="0x35dd2932454449b14cee11a94d3674a936d5d7b2",
+ asset_proxy_owner="0x2c824d2882baa668e0d5202b1e7f2922278703f8",
+ forwarder="0x17992e4ffb22730138e4b62aaa6367fa9d3699a6",
+ order_validator="0xb389da3d204b412df2f75c6afb3d0a7ce0bc283d",
+ ),
+ NetworkId.GANACHE: ContractAddresses(
+ exchange="0x48bacb9266a570d521063ef5dd96e61686dbe788",
+ erc20_proxy="0x1dc4c1cefef38a777b15aa20260a54e584b16c48",
+ erc721_proxy="0x1d7022f5b17d2f8b695918fb48fa1089c9f85401",
+ zrx_token="0x871dd7c2b4b25e1aa18728e9d5f2af4c4e431f5c",
+ ether_token="0x0b1ba0af832d7c05fd64161e0db78e85978e8082",
+ asset_proxy_owner="0x34d402f14d58e001d8efbe6585051bf9706aa064",
+ forwarder="0xb69e673309512a9d726f87304c6984054f87a93b",
+ order_validator="0xe86bb98fcf9bff3512c74589b78fb168200cc546",
+ ),
+}
+"""A mapping from instances of NetworkId to instances of ContractAddresses.
+
+Addresses under NetworkId.Ganache are from our Ganache snapshot generated from
+migrations.
+
+>>> NETWORK_TO_ADDRESSES[NetworkId.MAINNET].exchange
+0x4f833a24e1f95d70f028921e27040ca56e09ab0b
+"""
diff --git a/python-packages/contract_addresses/src/zero_ex/contract_addresses/py.typed b/python-packages/contract_addresses/src/zero_ex/contract_addresses/py.typed
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/python-packages/contract_addresses/src/zero_ex/contract_addresses/py.typed