mirror of
https://github.com/blockchain-etl/ethereum-etl.git
synced 2026-01-09 22:07:54 -05:00
82 lines
3.1 KiB
Python
82 lines
3.1 KiB
Python
# MIT License
|
|
#
|
|
# Copyright (c) 2018 Evgeny Medvedev, evge.medvedev@gmail.com
|
|
#
|
|
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
# of this software and associated documentation files (the "Software"), to deal
|
|
# in the Software without restriction, including without limitation the rights
|
|
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
# copies of the Software, and to permit persons to whom the Software is
|
|
# furnished to do so, subject to the following conditions:
|
|
#
|
|
# The above copyright notice and this permission notice shall be included in all
|
|
# copies or substantial portions of the Software.
|
|
#
|
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
# SOFTWARE.
|
|
|
|
|
|
def generate_get_block_by_number_json_rpc(block_numbers, include_transactions):
|
|
for idx, block_number in enumerate(block_numbers):
|
|
yield generate_json_rpc(
|
|
method='eth_getBlockByNumber',
|
|
params=[hex(block_number), include_transactions],
|
|
request_id=idx
|
|
)
|
|
|
|
|
|
def generate_trace_block_by_number_json_rpc(block_numbers):
|
|
for block_number in block_numbers:
|
|
yield generate_json_rpc(
|
|
method='debug_traceBlockByNumber',
|
|
params=[hex(block_number), {'tracer': 'callTracer'}],
|
|
# save block_number in request ID, so later we can identify block number in response
|
|
request_id=block_number,
|
|
)
|
|
|
|
|
|
def generate_get_receipt_json_rpc(transaction_hashes):
|
|
for idx, transaction_hash in enumerate(transaction_hashes):
|
|
yield generate_json_rpc(
|
|
method='eth_getTransactionReceipt',
|
|
params=[transaction_hash],
|
|
request_id=idx
|
|
)
|
|
|
|
|
|
def generate_get_code_json_rpc(contract_addresses, block='latest'):
|
|
for idx, contract_address in enumerate(contract_addresses):
|
|
yield generate_json_rpc(
|
|
method='eth_getCode',
|
|
params=[contract_address, hex(block) if isinstance(block, int) else block],
|
|
request_id=idx
|
|
)
|
|
|
|
|
|
def generate_get_balance_json_rpc(contract_addresses, block='latest'):
|
|
for idx, contract_address in enumerate(contract_addresses):
|
|
yield generate_json_rpc(
|
|
method='eth_call',
|
|
params=[
|
|
{
|
|
"to": "0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9",
|
|
"data": "0x70a08231000000000000000000000000" + contract_address.replace('0x', '')
|
|
},
|
|
block
|
|
],
|
|
request_id=idx
|
|
)
|
|
|
|
def generate_json_rpc(method, params, request_id=1):
|
|
return {
|
|
'jsonrpc': '2.0',
|
|
'method': method,
|
|
'params': params,
|
|
'id': request_id,
|
|
}
|