2021-02-12 00:24:10 +01:00
#!python3
""" Token balance query script
. . moduleauthor : : Louis Holbrook < dev @holbrook.no >
. . pgp : : 0826 EDA1702D1E87C6E2875121D2E7BB88C2A746
"""
# SPDX-License-Identifier: GPL-3.0-or-later
# standard imports
2021-04-04 14:55:27 +02:00
import sys
2021-02-12 00:24:10 +01:00
import os
import json
import argparse
import logging
import enum
2021-04-17 13:01:26 +02:00
# external imports
2021-02-12 00:24:10 +01:00
from hexathon import (
add_0x ,
strip_0x ,
)
import sha3
# local imports
from chainlib . eth . address import to_checksum
2021-04-04 14:55:27 +02:00
from chainlib . jsonrpc import (
2021-02-12 00:24:10 +01:00
jsonrpc_template ,
jsonrpc_result ,
)
2021-04-04 14:55:27 +02:00
from chainlib . eth . connection import EthHTTPConnection
2021-02-12 00:24:10 +01:00
from chainlib . eth . tx import Tx
2021-04-17 13:01:26 +02:00
from chainlib . eth . address import to_checksum_address
2021-02-12 00:24:10 +01:00
from chainlib . eth . block import Block
2021-04-08 17:39:32 +02:00
from chainlib . chain import ChainSpec
2021-04-17 13:01:26 +02:00
from chainlib . status import Status
2021-02-12 00:24:10 +01:00
logging . basicConfig ( level = logging . WARNING )
logg = logging . getLogger ( )
default_abi_dir = os . environ . get ( ' ETH_ABI_DIR ' , ' /usr/share/local/cic/solidity/abi ' )
default_eth_provider = os . environ . get ( ' ETH_PROVIDER ' , ' http://localhost:8545 ' )
argparser = argparse . ArgumentParser ( )
argparser . add_argument ( ' -p ' , ' --provider ' , dest = ' p ' , default = default_eth_provider , type = str , help = ' Web3 provider url (http only) ' )
2021-04-04 14:55:27 +02:00
argparser . add_argument ( ' -i ' , ' --chain-spec ' , dest = ' i ' , type = str , default = ' evm:ethereum:1 ' , help = ' Chain specification string ' )
argparser . add_argument ( ' -t ' , ' --token-address ' , dest = ' t ' , type = str , help = ' Token address. If not set, will return gas balance ' )
2021-02-12 00:24:10 +01:00
argparser . add_argument ( ' -u ' , ' --unsafe ' , dest = ' u ' , action = ' store_true ' , help = ' Auto-convert address to checksum adddress ' )
argparser . add_argument ( ' --abi-dir ' , dest = ' abi_dir ' , type = str , default = default_abi_dir , help = ' Directory containing bytecode and abi (default {} ) ' . format ( default_abi_dir ) )
argparser . add_argument ( ' -v ' , action = ' store_true ' , help = ' Be verbose ' )
2021-04-04 14:55:27 +02:00
argparser . add_argument ( ' -vv ' , action = ' store_true ' , help = ' Be more verbose ' )
2021-04-17 13:01:26 +02:00
argparser . add_argument ( ' item ' , type = str , help = ' Item to get information for (address og transaction) ' )
2021-02-12 00:24:10 +01:00
args = argparser . parse_args ( )
2021-04-04 14:55:27 +02:00
if args . vv :
2021-02-12 00:24:10 +01:00
logg . setLevel ( logging . DEBUG )
2021-04-04 14:55:27 +02:00
elif args . v :
logg . setLevel ( logging . INFO )
2021-02-12 00:24:10 +01:00
2021-04-04 14:55:27 +02:00
conn = EthHTTPConnection ( args . p )
2021-02-12 00:24:10 +01:00
2021-04-17 13:01:26 +02:00
#tx_hash = add_0x(args.tx_hash)
item = add_0x ( args . item )
2021-02-12 00:24:10 +01:00
2021-04-17 13:01:26 +02:00
def get_transaction ( conn , tx_hash ) :
2021-02-12 00:24:10 +01:00
o = jsonrpc_template ( )
o [ ' method ' ] = ' eth_getTransactionByHash '
o [ ' params ' ] . append ( tx_hash )
tx_src = conn . do ( o )
2021-04-04 14:55:27 +02:00
if tx_src == None :
logg . error ( ' Transaction {} not found ' . format ( tx_hash ) )
sys . exit ( 1 )
2021-02-12 00:24:10 +01:00
tx = None
status = - 1
2021-02-24 22:38:56 +01:00
rcpt = None
2021-04-04 14:55:27 +02:00
o = jsonrpc_template ( )
o [ ' method ' ] = ' eth_getTransactionReceipt '
o [ ' params ' ] . append ( tx_hash )
rcpt = conn . do ( o )
#status = int(strip_0x(rcpt['status']), 16)
2021-02-12 00:24:10 +01:00
if tx == None :
tx = Tx ( tx_src )
2021-02-24 22:38:56 +01:00
if rcpt != None :
tx . apply_receipt ( rcpt )
2021-04-17 13:01:26 +02:00
return tx
def get_address ( conn , address ) :
o = jsonrpc_template ( )
o [ ' method ' ] = ' eth_getCode '
o [ ' params ' ] . append ( address )
o [ ' params ' ] . append ( ' latest ' )
code = conn . do ( o )
content = strip_0x ( code , allow_empty = True )
if len ( content ) == 0 :
return None
return content
def main ( ) :
r = None
if len ( item ) > 42 :
r = get_transaction ( conn , item )
elif args . u or to_checksum_address ( item ) :
r = get_address ( conn , item )
print ( r )
2021-02-12 00:24:10 +01:00
if __name__ == ' __main__ ' :
main ( )