mirror of
https://github.com/blockchain-etl/ethereum-etl.git
synced 2026-01-09 05:48:10 -05:00
Script for exporting balances
This commit is contained in:
13
README.md
13
README.md
@@ -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
1046
addresses.txt
Normal file
File diff suppressed because it is too large
Load Diff
@@ -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:
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user