proto.eth.contract: ResolvedToken cleanups
This commit is contained in:
parent
38ea93a51f
commit
7ecc376c7b
6 changed files with 29 additions and 30 deletions
|
|
@ -96,17 +96,17 @@ class Contract:
|
|||
|
||||
class Token(Contract):
|
||||
|
||||
def __init__(self, cfg, proto, addr, decimals, *, rpc=None):
|
||||
if type(self).__name__ == 'Token':
|
||||
from ...util2 import get_keccak
|
||||
self.keccak_256 = get_keccak(cfg)
|
||||
def __init__(self, cfg, proto, addr, *, decimals=None, rpc=None):
|
||||
from ...util2 import get_keccak
|
||||
self.keccak_256 = get_keccak(cfg)
|
||||
self.cfg = cfg
|
||||
self.proto = proto
|
||||
self.addr = TokenAddr(proto, addr)
|
||||
assert isinstance(decimals, int), f'decimals param must be int instance, not {type(decimals)}'
|
||||
self.decimals = decimals
|
||||
self.base_unit = Decimal('10') ** -self.decimals
|
||||
self.rpc = rpc
|
||||
if decimals:
|
||||
assert isinstance(decimals, int), f'decimals param must be int instance, not {type(decimals)}'
|
||||
self.decimals = decimals
|
||||
self.base_unit = Decimal('10') ** -self.decimals
|
||||
|
||||
async def get_balance(self, acct_addr):
|
||||
return self.proto.coin_amt(
|
||||
|
|
@ -166,14 +166,9 @@ class Token(Contract):
|
|||
|
||||
class ResolvedToken(Token, metaclass=AsyncInit):
|
||||
|
||||
async def __init__(self, cfg, proto, rpc, addr):
|
||||
from ...util2 import get_keccak
|
||||
self.keccak_256 = get_keccak(cfg)
|
||||
self.cfg = cfg
|
||||
self.proto = proto
|
||||
self.rpc = rpc
|
||||
self.addr = TokenAddr(proto, addr)
|
||||
decimals = await self.get_decimals() # requires self.addr!
|
||||
if not decimals:
|
||||
async def __init__(self, cfg, proto, addr, *, rpc):
|
||||
Token.__init__(self, cfg, proto, addr, rpc=rpc)
|
||||
self.decimals = await self.get_decimals()
|
||||
if not self.decimals:
|
||||
die('TokenNotInBlockchain', f'Token {addr!r} not in blockchain')
|
||||
Token.__init__(self, cfg, proto, addr, decimals, rpc=rpc)
|
||||
self.base_unit = Decimal('10') ** -self.decimals
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ from ....util import msg, ymsg, die
|
|||
from ....tw.ctl import TwCtl, write_mode, label_addr_pair
|
||||
from ....tw.shared import TwLabel
|
||||
from ....addr import is_coin_addr, is_mmgen_id, CoinAddr
|
||||
from ..contract import Token, ResolvedToken
|
||||
from ..contract import Token
|
||||
|
||||
class EthereumTwCtl(TwCtl):
|
||||
|
||||
|
|
@ -214,7 +214,11 @@ class EthereumTokenTwCtl(EthereumTwCtl):
|
|||
|
||||
async def rpc_get_balance(self, addr):
|
||||
return await Token(
|
||||
self.cfg, self.proto, self.token, self.decimals, rpc=self.rpc).get_balance(addr)
|
||||
self.cfg,
|
||||
self.proto,
|
||||
self.token,
|
||||
decimals = self.decimals,
|
||||
rpc = self.rpc).get_balance(addr)
|
||||
|
||||
async def get_eth_balance(self, addr, *, force_rpc=False):
|
||||
cache = self.cur_eth_balances
|
||||
|
|
@ -235,10 +239,10 @@ class EthereumTokenTwCtl(EthereumTwCtl):
|
|||
once, upon token import. Thereafter, token address, symbol and decimals are resolved
|
||||
either from the tracking wallet (online operations) or transaction file (when signing).
|
||||
"""
|
||||
t = await ResolvedToken(self.cfg, self.proto, self.rpc, tokenaddr)
|
||||
t = Token(self.cfg, self.proto, tokenaddr, rpc=self.rpc)
|
||||
self.data['tokens'][tokenaddr] = {
|
||||
'params': {
|
||||
'symbol': await t.get_symbol(),
|
||||
'decimals': t.decimals
|
||||
'decimals': await t.get_decimals()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -211,7 +211,7 @@ class TokenNew(TokenBase, New):
|
|||
|
||||
async def make_txobj(self): # called by create_serialized()
|
||||
await super().make_txobj()
|
||||
t = Token(self.cfg, self.proto, self.twctl.token, self.twctl.decimals)
|
||||
t = Token(self.cfg, self.proto, self.twctl.token, decimals=self.twctl.decimals)
|
||||
o = self.txobj
|
||||
o['token_addr'] = t.addr
|
||||
o['decimals'] = t.decimals
|
||||
|
|
|
|||
|
|
@ -71,7 +71,7 @@ class TokenOnlineSigned(TokenSigned, OnlineSigned):
|
|||
assert self.twctl.token == o['to']
|
||||
o['token_addr'] = TokenAddr(self.proto, o['to'])
|
||||
o['decimals'] = self.twctl.decimals
|
||||
t = Token(self.cfg, self.proto, o['token_addr'], o['decimals'])
|
||||
t = Token(self.cfg, self.proto, o['token_addr'], decimals=o['decimals'])
|
||||
o['amt'] = t.transferdata2amt(o['data'])
|
||||
o['token_to'] = t.transferdata2sendaddr(o['data'])
|
||||
|
||||
|
|
|
|||
|
|
@ -107,12 +107,12 @@ class TokenUnsigned(TokenCompleted, Unsigned):
|
|||
o = self.txobj
|
||||
o['token_addr'] = TokenAddr(self.proto, d['token_addr'])
|
||||
o['decimals'] = Int(d['decimals'])
|
||||
t = Token(self.cfg, self.proto, o['token_addr'], o['decimals'])
|
||||
t = Token(self.cfg, self.proto, o['token_addr'], decimals=o['decimals'])
|
||||
o['data'] = t.create_token_data(o['to'], o['amt'], op='transfer')
|
||||
o['token_to'] = t.transferdata2sendaddr(o['data'])
|
||||
|
||||
async def do_sign(self, o, wif):
|
||||
t = Token(self.cfg, self.proto, o['token_addr'], o['decimals'])
|
||||
t = Token(self.cfg, self.proto, o['token_addr'], decimals=o['decimals'])
|
||||
tx_in = t.make_tx_in(
|
||||
gas = self.gas,
|
||||
gasPrice = o['gasPrice'],
|
||||
|
|
|
|||
|
|
@ -275,7 +275,7 @@ class CmdTestEthdevMethods:
|
|||
|
||||
if get_receipt:
|
||||
if (await self.get_tx_receipt(txid)).status == 0:
|
||||
die(2, f'Contract {num}:{key} failed to execute. Aborting')
|
||||
die(2, f'Contract {num}:{key} failed to deploy. Aborting')
|
||||
|
||||
if key == 'Token':
|
||||
imsg(f'\nToken MM{num} deployed!')
|
||||
|
|
@ -318,8 +318,8 @@ class CmdTestEthdevMethods:
|
|||
tk = await ResolvedToken(
|
||||
self.cfg,
|
||||
self.proto,
|
||||
rpc,
|
||||
self.read_from_tmpfile(f'token_addr{i+1}').strip())
|
||||
self.read_from_tmpfile(f'token_addr{i+1}').strip(),
|
||||
rpc = rpc)
|
||||
imsg_r('\n' + await tk.info())
|
||||
imsg('dev token balance (pre-send): {}'.format(await tk.get_balance(dfl_devaddr)))
|
||||
imsg(f'Sending {amt} {self.proto.dcoin} to address {usr_addrs[i]} ({usr_mmaddrs[i]})')
|
||||
|
|
@ -339,8 +339,8 @@ class CmdTestEthdevMethods:
|
|||
tk = await ResolvedToken(
|
||||
self.cfg,
|
||||
self.proto,
|
||||
rpc,
|
||||
self.read_from_tmpfile(f'token_addr{i+1}').strip())
|
||||
self.read_from_tmpfile(f'token_addr{i+1}').strip(),
|
||||
rpc = rpc)
|
||||
imsg('Token: {}'.format(await tk.get_symbol()))
|
||||
imsg(f'dev token balance: {await tk.get_balance(dfl_devaddr)}')
|
||||
imsg('usr token balance: {} ({} {})'.format(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue