From f0ba197b08fefb0a2367c6ea71b761082400410e Mon Sep 17 00:00:00 2001 From: nolash Date: Sat, 6 Nov 2021 10:59:49 +0100 Subject: [PATCH] Add balances --- clicada/cli/user.py | 22 ++++++++++++++++++---- clicada/token/__init__.py | 1 + clicada/token/util.py | 10 ++++++++++ 3 files changed, 29 insertions(+), 4 deletions(-) create mode 100644 clicada/token/util.py diff --git a/clicada/cli/user.py b/clicada/cli/user.py index 6796b0f..60b626b 100644 --- a/clicada/cli/user.py +++ b/clicada/cli/user.py @@ -13,7 +13,10 @@ from chainlib.eth.address import to_checksum_address # local imports from clicada.tx import TxGetter from clicada.user import FileUserStore -from clicada.token import FileTokenStore +from clicada.token import ( + FileTokenStore, + token_balance, + ) from clicada.tx import ResolvedTokenTx logg = logging.getLogger(__name__) @@ -81,7 +84,7 @@ Registered: {} Gender: {} Location: {} Products: {} -""".format( +Balances:""".format( ctrl.get('_IDENTIFIER'), user_address, str(r), @@ -92,8 +95,19 @@ Products: {} ) ) - + tx_lines = [] + seen_tokens = {} for tx_src in txs['data']: tx = ResolvedTokenTx.from_dict(tx_src) tx.resolve(token_store, user_address_store, update=ctrl.get('_FORCE')) - print(tx) + tx_lines.append(tx) + seen_tokens[tx.source_token_label] = tx.source_token + seen_tokens[tx.destination_token_label] = tx.destination_token + + for k in seen_tokens.keys(): + balance = token_balance(ctrl.chain(), ctrl.conn(), seen_tokens[k], user_address) + print("\t{} {}".format(k, balance)) + + print() + for l in tx_lines: + print(l) diff --git a/clicada/token/__init__.py b/clicada/token/__init__.py index 4b2f4af..f41c09c 100644 --- a/clicada/token/__init__.py +++ b/clicada/token/__init__.py @@ -1 +1,2 @@ from .token import * +from .util import token_balance diff --git a/clicada/token/util.py b/clicada/token/util.py new file mode 100644 index 0000000..e84b2f3 --- /dev/null +++ b/clicada/token/util.py @@ -0,0 +1,10 @@ +# external imports +from eth_erc20 import ERC20 +from chainlib.eth.constant import ZERO_ADDRESS + + +def token_balance(chain_spec, conn, token_address, wallet_address, caller_address=ZERO_ADDRESS): + c = ERC20(chain_spec) + o = c.balance(token_address, wallet_address, sender_address=caller_address) + r = conn.do(o) + return c.parse_balance(r)