Skip to content

Commit

Permalink
Implement eth_submitWork
Browse files Browse the repository at this point in the history
  • Loading branch information
njgheorghita committed Mar 15, 2019
1 parent b5d74a8 commit 75eb226
Show file tree
Hide file tree
Showing 6 changed files with 44 additions and 2 deletions.
14 changes: 14 additions & 0 deletions docs/web3.eth.rst
Original file line number Diff line number Diff line change
Expand Up @@ -825,6 +825,20 @@ with the filtering API.
True
.. py:method:: Eth.submitWork(nonce, pow_hash, mix_digest)
* Delegates to ``eth_submitWork`` RPC Method.

.. code-block:: python
>>> web3.eth.submitWork(
1,
'0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef',
'0xD1FE5700000000000000000000000000D1FE5700000000000000000000000000',
)
True
Contracts
---------

Expand Down
1 change: 1 addition & 0 deletions tests/integration/test_ethereum_tester.py
Original file line number Diff line number Diff line change
Expand Up @@ -217,6 +217,7 @@ def func_wrapper(self, eth_tester, *args, **kwargs):
class TestEthereumTesterEthModule(EthModuleTest):
test_eth_sign = not_implemented(EthModuleTest.test_eth_sign, ValueError)
test_eth_submitHashrate = not_implemented(EthModuleTest.test_eth_submitHashrate, ValueError)
test_eth_submitWork = not_implemented(EthModuleTest.test_eth_submitWork, ValueError)

@disable_auto_mine
def test_eth_getTransactionReceipt_unmined(self, eth_tester, web3, unlocked_account):
Expand Down
7 changes: 7 additions & 0 deletions web3/_utils/module_testing/eth_module.py
Original file line number Diff line number Diff line change
Expand Up @@ -816,3 +816,10 @@ def test_eth_submitHashrate(self, web3):
node_id = '59daa26581d0acd1fce254fb7e85952f4c09d0915afd33d3886cd914bc7d283c'
result = web3.eth.submitHashrate(5000, node_id)
assert result is True

def test_eth_submitWork(self, web3):
nonce = 1
pow_hash = '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef'
mix_digest = '0xD1FE5700000000000000000000000000D1FE5700000000000000000000000000'
result = web3.eth.submitWork(nonce, pow_hash, mix_digest)
assert result is False
3 changes: 2 additions & 1 deletion web3/_utils/rpc_abi.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,8 @@
'eth_sendRawTransaction': ['bytes'],
'eth_sendTransaction': TRANSACTION_PARAMS_ABIS,
'eth_sign': ['address', 'bytes'],
'eth_submitHashrate': ['uint', None],
'eth_submitHashrate': ['uint', 'bytes'],
'eth_submitWork': ['bytes8', 'bytes32', 'bytes32'],
# personal
'personal_sendTransaction': TRANSACTION_PARAMS_ABIS,
'personal_lockAccount': ['address'],
Expand Down
5 changes: 5 additions & 0 deletions web3/eth.py
Original file line number Diff line number Diff line change
Expand Up @@ -395,6 +395,11 @@ def submitHashrate(self, hashrate, node_id):
"eth_submitHashrate", [hashrate, node_id],
)

def submitWork(self, nonce, pow_hash, mix_digest):
return self.web3.manager.request_blocking(
"eth_submitWork", [nonce, pow_hash, mix_digest],
)

def uninstallFilter(self, filter_id):
return self.web3.manager.request_blocking(
"eth_uninstallFilter", [filter_id],
Expand Down
16 changes: 15 additions & 1 deletion web3/middleware/pythonic.py
Original file line number Diff line number Diff line change
Expand Up @@ -254,6 +254,15 @@ def to_hexbytes(num_bytes, val, variable_length=False):
)


def nonce_formatter(nonce):
"""
Convert integer to hex and pad to length 16.
"""
hex_nonce = remove_0x_prefix(integer_to_hex(nonce))
pad_value = 16 - len(hex_nonce)
return "0x" + "0" * pad_value + hex_nonce


pythonic_middleware = construct_formatting_middleware(
request_formatters={
# Eth
Expand Down Expand Up @@ -287,7 +296,12 @@ def to_hexbytes(num_bytes, val, variable_length=False):
(estimate_gas_with_block_id, is_length(2)),
)),
'eth_sendTransaction': apply_formatter_at_index(transaction_param_formatter, 0),
'eth_submitHashrate': apply_formatter_at_index(hexstr_if_str(to_hex), 1),
# 'eth_submitHashrate': apply_formatter_at_index(hexstr_if_str(to_hex), 1),
# 'eth_submitWork': compose(
# apply_formatter_at_index(nonce_formatter, 0),
# apply_formatter_at_index(hexstr_if_str(to_hex), 1),
# apply_formatter_at_index(hexstr_if_str(to_hex), 2),
# ),
# personal
'personal_importRawKey': apply_formatter_at_index(
compose(remove_0x_prefix, hexstr_if_str(to_hex)),
Expand Down

0 comments on commit 75eb226

Please sign in to comment.