Script for exporting balances

This commit is contained in:
medvedev1088
2021-06-24 13:58:33 +07:00
parent ecc4484034
commit 974b2bedd1
5 changed files with 1082 additions and 12 deletions

View File

@@ -112,3 +112,16 @@ For the latest version, check out the repo and call
## Projects using Ethereum ETL
* [Google](https://goo.gl/oY5BCQ) - Public BigQuery Ethereum datasets
* [Nansen by D5](https://nansen.d5.ai/?ref=ethereumetl) - Analytics platform for Ethereum
```
export_contracts
--contract-addresses=addresses.txt
--output=balances.csv
--provider-uri
https://mainnet.infura.io/v3/12dcb369f6fe452b9c303009bdd60fbf
-w
10
-b
1000
```

1046
addresses.txt Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -23,9 +23,10 @@
import json
from ethereumetl.domain.contract import EthContract
from ethereumetl.executors.batch_work_executor import BatchWorkExecutor
from blockchainetl.jobs.base_job import BaseJob
from ethereumetl.json_rpc_requests import generate_get_code_json_rpc
from ethereumetl.json_rpc_requests import generate_get_code_json_rpc, generate_get_balance_json_rpc
from ethereumetl.mappers.contract_mapper import EthContractMapper
from ethereumetl.service.eth_contract_service import EthContractService
@@ -57,7 +58,7 @@ class ExportContractsJob(BaseJob):
self.batch_work_executor.execute(self.contract_addresses_iterable, self._export_contracts)
def _export_contracts(self, contract_addresses):
contracts_code_rpc = list(generate_get_code_json_rpc(contract_addresses))
contracts_code_rpc = list(generate_get_balance_json_rpc(contract_addresses))
response_batch = self.batch_web3_provider.make_batch_request(json.dumps(contracts_code_rpc))
contracts = []
@@ -67,7 +68,9 @@ class ExportContractsJob(BaseJob):
result = rpc_response_to_result(response)
contract_address = contract_addresses[request_id]
contract = self._get_contract(contract_address, result)
contract = EthContract()
contract.address = contract_address
contract.bytecode = result
contracts.append(contract)
for contract in contracts:

View File

@@ -58,6 +58,20 @@ def generate_get_code_json_rpc(contract_addresses, block='latest'):
)
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',

View File

@@ -36,19 +36,13 @@ class EthTokenService(object):
def get_token(self, token_address):
checksum_address = self._web3.toChecksumAddress(token_address)
contract = self._web3.eth.contract(address=checksum_address, abi=ERC20_ABI)
contract = self._web3.eth.contract(address='0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9', abi=ERC20_ABI)
symbol = self._call_contract_function(contract.functions.symbol())
name = self._call_contract_function(contract.functions.name())
decimals = self._call_contract_function(contract.functions.decimals())
total_supply = self._call_contract_function(contract.functions.totalSupply())
balance = self._call_contract_function(contract.functions.balanceOf(checksum_address))
token = EthToken()
token.address = token_address
token.symbol = symbol
token.name = name
token.decimals = decimals
token.total_supply = total_supply
token.decimals = balance
return token