Repository: ethereum/web3.py

Issue:
Remove all beta dependencies (except eth-account)
* Version: 4

### What was wrong?

In order to mark v4 stable, it needs to not depend on any beta packages. `eth-account` is the exception, awaiting security audit. In order to signal that to users, we will probably make them jump through a hoop to acknowledge the lack of audit.

### How can it be fixed?

Stabilize and release versions of all unstable dependencies, starting with the leaves in the dependency graph.

Dependencies:

- [x] eth-hash - v0.1.0
  - [x] eth-utils - v1.0.1
    - [x] eth-abi - v1.0.0
    - [x] hexbytes - v0.1.0
- [x] eth-rlp v0.1.0
  - [x] ~eth-keys~ _(awaiting audit)_
    - [ ] ~eth-account~ _(awaiting audit)_ -- Still need to make some kind of *in-your-face* warnings about the pending audit -- tracked in #678 
- [x] ~eth-tester~ _(only needed for testing, not prod use; depends too heavily on py-evm, which isn't leaving alpha any time soon)_



Dependent nodes are listed in hierarchy. Because eth-abi depends on eth-utils, it is indented beneath it. eth-utils should be worked on before eth-abi. eth-hash before eth-utils, etc.


Discussion:
I just did a quick review of open issues on all the dependencies. Everything looks solid, no critical bugs.

Depending on how quickly https://github.com/ethereum/eth-hash/pull/5 progresses, I might try to get that into the stable release of eth-hash. It doesn't strictly need to go in before bumping to stable, because the change is backwards compatible.

If that PR not in merge-ready shape by EOD tomorrow, I'll go ahead and bump all the versions to stable in preparation for marking web3.py v4 stable.
Since https://github.com/ethereum/eth-hash/pull/5 is backwards compatible I don't see any issue with just moving forward and we can do a minor point release with the new functionality.

Resolving patch:
diff --git a/setup.py b/setup.py
--- a/setup.py
+++ b/setup.py
@@ -18,10 +18,10 @@
     include_package_data=True,
     install_requires=[
         "cytoolz>=0.9.0,<1.0.0",
-        "eth-abi>=1.0.0-beta.1,<2",
-        "eth-account>=0.1.0a2,<1.0.0",
-        "eth-utils>=1.0.0b1,<2.0.0",
-        "hexbytes>=0.1.0b1,<1.0.0",
+        "eth-abi>=1.0.0,<2",
+        "eth-account>=0.1.0-alpha.2,<1.0.0",
+        "eth-utils>=1.0.1,<2.0.0",
+        "hexbytes>=0.1.0,<1.0.0",
         "lru-dict>=1.1.6,<2.0.0",
         "eth-hash[pycryptodome]",
         "requests>=2.16.0,<3.0.0",
@@ -29,7 +29,7 @@
     setup_requires=['setuptools-markdown'],
     extras_require={
         'tester': [
-            "eth-tester[py-evm]==0.1.0b19",
+            "eth-tester[py-evm]==0.1.0-beta.21",
             "py-geth>=2.0.1,<3.0.0",
         ],
         'testrpc': ["eth-testrpc>=1.3.3,<2.0.0"],
diff --git a/web3/providers/eth_tester/middleware.py b/web3/providers/eth_tester/middleware.py
--- a/web3/providers/eth_tester/middleware.py
+++ b/web3/providers/eth_tester/middleware.py
@@ -132,7 +132,7 @@ def is_named_block(value):
 
 
 TRANSACTION_FORMATTERS = {
-    'to': apply_formatter_if(partial(operator.eq, b''), static_return(None)),
+    'to': apply_formatter_if(partial(operator.eq, ''), static_return(None)),
 }
 
 


Test patch:
diff --git a/web3/utils/module_testing/eth_module.py b/web3/utils/module_testing/eth_module.py
--- a/web3/utils/module_testing/eth_module.py
+++ b/web3/utils/module_testing/eth_module.py
@@ -499,7 +499,7 @@ def test_eth_getTransactionByHash_contract_creation(self,
                                                         math_contract_deploy_txn_hash):
         transaction = web3.eth.getTransaction(math_contract_deploy_txn_hash)
         assert is_dict(transaction)
-        assert transaction['to'] is None
+        assert transaction['to'] is None, "to field is %r" % transaction['to']
 
     def test_eth_getTransactionByBlockHashAndIndex(self, web3, block_with_txn, mined_txn_hash):
         transaction = web3.eth.getTransactionFromBlock(block_with_txn['hash'], 0)