Closed
Description
While adding ethereum addresses as part of the flow, if checksum addresses are not used, a web3 formatting error is shown:
$ zeth mix --out ba210eef0a99e98b7930896ae38c93e21dd5eba1ae298de818fd56dcd09fc8b8:22ea0dcb0c86a74faa4246a5e45689bf10c22725653973d87e0297994d2bd11e,10 --vin 10
vin = 10
vout = 0
-------------- Get the proof --------------
PROOF GEN ROUND TRIP: 20.38115882873535 seconds
Traceback (most recent call last):
File "/home/cc/Repositories/zeth/pyClient/env/bin/zeth", line 6, in <module>
exec(compile(open(__file__).read(), __file__, 'exec'))
File "/home/cc/Repositories/zeth/pyClient/commands/zeth", line 100, in <module>
zeth() # pylint: disable=no-value-for-parameter
File "/home/cc/Repositories/zeth/pyClient/env/lib/python3.7/site-packages/click/core.py", line 764, in __call__
return self.main(*args, **kwargs)
File "/home/cc/Repositories/zeth/pyClient/env/lib/python3.7/site-packages/click/core.py", line 717, in main
rv = self.invoke(ctx)
File "/home/cc/Repositories/zeth/pyClient/env/lib/python3.7/site-packages/click/core.py", line 1137, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/home/cc/Repositories/zeth/pyClient/env/lib/python3.7/site-packages/click/core.py", line 956, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/home/cc/Repositories/zeth/pyClient/env/lib/python3.7/site-packages/click/core.py", line 555, in invoke
return callback(*args, **kwargs)
File "/home/cc/Repositories/zeth/pyClient/env/lib/python3.7/site-packages/click/decorators.py", line 17, in new_func
return f(get_current_context(), *args, **kwargs)
File "/home/cc/Repositories/zeth/pyClient/commands/zeth_mix.py", line 80, in mix
tx_value)
File "/home/cc/Repositories/zeth/pyClient/zeth/joinsplit.py", line 568, in joinsplit
constants.DEFAULT_MIX_GAS_WEI)
File "/home/cc/Repositories/zeth/pyClient/zeth/joinsplit.py", line 592, in mix
self._zksnark)
File "/home/cc/Repositories/zeth/pyClient/zeth/contracts.py", line 195, in mix
).transact({'from': sender_address, 'value': wei_pub_value, 'gas': call_gas})
File "/home/cc/Repositories/zeth/pyClient/env/lib/python3.7/site-packages/web3/contract.py", line 1151, in transact
**self.kwargs
File "/home/cc/Repositories/zeth/pyClient/env/lib/python3.7/site-packages/web3/contract.py", line 1454, in transact_with_contract_function
txn_hash = web3.eth.sendTransaction(transact_transaction)
File "/home/cc/Repositories/zeth/pyClient/env/lib/python3.7/site-packages/web3/eth.py", line 268, in sendTransaction
[transaction],
File "/home/cc/Repositories/zeth/pyClient/env/lib/python3.7/site-packages/web3/manager.py", line 109, in request_blocking
response = self._make_request(method, params)
File "/home/cc/Repositories/zeth/pyClient/env/lib/python3.7/site-packages/web3/manager.py", line 92, in _make_request
return request_func(method, params)
File "cytoolz/functoolz.pyx", line 232, in cytoolz.functoolz.curry.__call__
File "/home/cc/Repositories/zeth/pyClient/env/lib/python3.7/site-packages/web3/middleware/formatting.py", line 50, in apply_formatters
response = make_request(method, params)
File "/home/cc/Repositories/zeth/pyClient/env/lib/python3.7/site-packages/web3/middleware/gas_price_strategy.py", line 18, in middleware
return make_request(method, params)
File "cytoolz/functoolz.pyx", line 232, in cytoolz.functoolz.curry.__call__
File "/home/cc/Repositories/zeth/pyClient/env/lib/python3.7/site-packages/web3/middleware/formatting.py", line 48, in apply_formatters
response = make_request(method, formatted_params)
File "/home/cc/Repositories/zeth/pyClient/env/lib/python3.7/site-packages/web3/middleware/attrdict.py", line 18, in middleware
response = make_request(method, params)
File "cytoolz/functoolz.pyx", line 232, in cytoolz.functoolz.curry.__call__
File "/home/cc/Repositories/zeth/pyClient/env/lib/python3.7/site-packages/web3/middleware/formatting.py", line 48, in apply_formatters
response = make_request(method, formatted_params)
File "/home/cc/Repositories/zeth/pyClient/env/lib/python3.7/site-packages/web3/middleware/normalize_errors.py", line 9, in middleware
result = make_request(method, params)
File "cytoolz/functoolz.pyx", line 232, in cytoolz.functoolz.curry.__call__
File "/home/cc/Repositories/zeth/pyClient/env/lib/python3.7/site-packages/web3/middleware/formatting.py", line 48, in apply_formatters
response = make_request(method, formatted_params)
File "cytoolz/functoolz.pyx", line 232, in cytoolz.functoolz.curry.__call__
File "/home/cc/Repositories/zeth/pyClient/env/lib/python3.7/site-packages/web3/middleware/formatting.py", line 47, in apply_formatters
formatted_params = formatter(params)
File "cytoolz/functoolz.pyx", line 232, in cytoolz.functoolz.curry.__call__
File "/home/cc/Repositories/zeth/pyClient/env/lib/python3.7/site-packages/eth_utils/functional.py", line 46, in inner
return callback(fn(*args, **kwargs))
File "/home/cc/Repositories/zeth/pyClient/env/lib/python3.7/site-packages/web3/utils/formatters.py", line 41, in apply_formatter_at_index
yield formatter(item)
File "cytoolz/functoolz.pyx", line 232, in cytoolz.functoolz.curry.__call__
File "/home/cc/Repositories/zeth/pyClient/env/lib/python3.7/site-packages/web3/utils/rpc_abi.py", line 69, in apply_abi_formatters_to_dict
[data[field] for field in fields],
File "cytoolz/functoolz.pyx", line 232, in cytoolz.functoolz.curry.__call__
File "/home/cc/Repositories/zeth/pyClient/env/lib/python3.7/site-packages/web3/utils/abi.py", line 442, in map_abi_data
return pipe(data, *pipeline)
File "cytoolz/functoolz.pyx", line 589, in cytoolz.functoolz.pipe
File "cytoolz/functoolz.pyx", line 565, in cytoolz.functoolz.c_pipe
File "cytoolz/functoolz.pyx", line 232, in cytoolz.functoolz.curry.__call__
File "/home/cc/Repositories/zeth/pyClient/env/lib/python3.7/site-packages/web3/utils/abi.py", line 474, in data_tree_map
return recursive_map(map_to_typed_data, data_tree)
File "/home/cc/Repositories/zeth/pyClient/env/lib/python3.7/site-packages/web3/utils/decorators.py", line 35, in wrapped
wrapped_val = to_wrap(*args)
File "/home/cc/Repositories/zeth/pyClient/env/lib/python3.7/site-packages/web3/utils/formatters.py", line 115, in recursive_map
items_mapped = map_collection(recurse, data)
File "/home/cc/Repositories/zeth/pyClient/env/lib/python3.7/site-packages/web3/utils/formatters.py", line 102, in map_collection
return datatype(map(func, collection))
File "/home/cc/Repositories/zeth/pyClient/env/lib/python3.7/site-packages/web3/utils/formatters.py", line 114, in recurse
return recursive_map(func, item)
File "/home/cc/Repositories/zeth/pyClient/env/lib/python3.7/site-packages/web3/utils/decorators.py", line 35, in wrapped
wrapped_val = to_wrap(*args)
File "/home/cc/Repositories/zeth/pyClient/env/lib/python3.7/site-packages/web3/utils/formatters.py", line 116, in recursive_map
return func(items_mapped)
File "/home/cc/Repositories/zeth/pyClient/env/lib/python3.7/site-packages/web3/utils/abi.py", line 471, in map_to_typed_data
return ABITypedData(func(*elements))
File "/home/cc/Repositories/zeth/pyClient/env/lib/python3.7/site-packages/web3/utils/normalizers.py", line 50, in wrapper
modified = to_wrap(abi_type, data)
File "/home/cc/Repositories/zeth/pyClient/env/lib/python3.7/site-packages/web3/utils/normalizers.py", line 129, in abi_address_to_hex
validate_address(data)
File "/home/cc/Repositories/zeth/pyClient/env/lib/python3.7/site-packages/web3/utils/validation.py", line 163, in validate_address
value,
web3.exceptions.InvalidAddress: ('Web3.py only accepts checksum addresses. The software that gave you this non-checksum address should be considered unsafe, please file it as a bug on their platform. Try using an ENS name instead. Or, if you must accept lower safety, use Web3.toChecksumAddress(lower_case_address).', '0x3d7ca5d783ce27f660b663bf3e51753ea4065c0b')
Example:
echo 0x3d7ca5d783ce27f660b663bf3e51753ea4065c0b > eth-address
causes mix
to fail.
echo 0x3d7Ca5d783CE27F660B663bF3e51753eA4065c0B > eth-address
causes mix
to succeed.
Suggestion
Add an additional line during address parsing that converts the address to checksum address:
from web3 import Web3
Web3.toChecksumAddress("0x3d7ca5d783ce27f660b663bf3e51753ea4065c0b")
>>> '0x3d7Ca5d783CE27F660B663bF3e51753eA4065c0B'