mirror of
https://github.com/chaintool-py/eth-erc20.git
synced 2024-10-16 18:46:46 +02:00
72 lines
1.8 KiB
Python
72 lines
1.8 KiB
Python
|
# external imports
|
||
|
from chainlib.eth.tx import (
|
||
|
unpack,
|
||
|
Tx,
|
||
|
)
|
||
|
from hexathon import (
|
||
|
strip_0x,
|
||
|
add_0x,
|
||
|
)
|
||
|
from chainlib.eth.constant import ZERO_ADDRESS
|
||
|
from chainlib.eth.runnable.util import decode_out
|
||
|
|
||
|
# local imports
|
||
|
from eth_erc20.erc20 import ERC20
|
||
|
|
||
|
sender_address = ZERO_ADDRESS
|
||
|
|
||
|
|
||
|
class Decoder:
|
||
|
|
||
|
def __init__(self, chain_spec):
|
||
|
self.chain_spec = chain_spec
|
||
|
|
||
|
|
||
|
def decode_transfer(self, tx, writer, rpc=None):
|
||
|
r = ERC20.parse_transfer_request(tx['data'])
|
||
|
token_value = r[1]
|
||
|
token_str = tx['to']
|
||
|
token_recipient = r[0]
|
||
|
if rpc != None:
|
||
|
c = ERC20(self.chain_spec)
|
||
|
o = c.symbol(tx['to'], sender_address=sender_address)
|
||
|
r = rpc.do(o)
|
||
|
symbol = c.parse_symbol(r)
|
||
|
|
||
|
o = c.name(tx['to'], sender_address=sender_address)
|
||
|
r = rpc.do(o)
|
||
|
name = c.parse_symbol(r)
|
||
|
|
||
|
o = c.decimals(tx['to'], sender_address=sender_address)
|
||
|
r = rpc.do(o)
|
||
|
decimals = c.parse_decimals(r)
|
||
|
|
||
|
token_str = '{} ({})'.format(name, symbol)
|
||
|
token_value = token_value / (10 ** decimals)
|
||
|
token_value_str = '{:.6f} ({} decimals)'.format(token_value, decimals)
|
||
|
|
||
|
writer.write("""to: {}
|
||
|
token: {}
|
||
|
value: {}
|
||
|
""".format(
|
||
|
token_recipient,
|
||
|
token_str,
|
||
|
token_value_str,
|
||
|
)
|
||
|
)
|
||
|
|
||
|
#writer.write('{}\n'.format(r))k
|
||
|
|
||
|
|
||
|
def decode_for_puny_humans(self, tx_raw, chain_spec, writer, method, rpc=None):
|
||
|
tx_raw = strip_0x(tx_raw)
|
||
|
tx_raw_bytes = bytes.fromhex(tx_raw)
|
||
|
tx_src = unpack(tx_raw_bytes, chain_spec)
|
||
|
tx = Tx.src_normalize(tx_src)
|
||
|
|
||
|
self.decode_transfer(tx, writer, rpc=rpc)
|
||
|
|
||
|
decode_out(tx_src, writer, skip_keys=['to'])
|
||
|
|
||
|
writer.write('src: {}\n'.format(add_0x(tx_raw)))
|