TwCtl: add no_rpc arg; don’t require RPC to instantiate token TXs
This commit is contained in:
parent
286ba79dd6
commit
fbe4961deb
7 changed files with 28 additions and 26 deletions
|
|
@ -149,13 +149,10 @@ async def main():
|
|||
if cfg.token or cfg.token_addr:
|
||||
msg(f'Importing for token {twctl.token.hl()} ({twctl.token.hlc(proto.tokensym)})')
|
||||
|
||||
from .rpc import rpc_init
|
||||
twctl.rpc = await rpc_init(cfg,proto)
|
||||
|
||||
for k,v in addrimport_msgs.items():
|
||||
addrimport_msgs[k] = fmt(v,indent=' ',strip_char='\t').rstrip()
|
||||
|
||||
al,infile = parse_cmd_args(twctl.rpc,cfg._args)
|
||||
al, infile = parse_cmd_args(twctl.rpc, cfg._args)
|
||||
|
||||
cfg._util.qmsg(
|
||||
f'OK. {al.num_addrs} addresses'
|
||||
|
|
|
|||
|
|
@ -124,3 +124,7 @@ class BitcoinTwCtl(TwCtl):
|
|||
msg('Address has no balance' if len(coin_addrs) == 1 else
|
||||
'Addresses have no balances' )
|
||||
return True
|
||||
|
||||
async def get_addr_label_pairs(self, twmmid):
|
||||
from .rpc import TwRPC
|
||||
return await TwRPC(proto=self.proto, rpc=self.rpc, twctl=self).get_addr_label_pairs(twmmid)
|
||||
|
|
|
|||
|
|
@ -22,7 +22,8 @@ proto.eth.tw.ctl: Ethereum tracking wallet control class
|
|||
|
||||
from ....util import msg,ymsg,die
|
||||
from ....tw.ctl import TwCtl,write_mode
|
||||
from ....addr import is_coin_addr,is_mmgen_id
|
||||
from ....tw.shared import TwLabel
|
||||
from ....addr import is_coin_addr,is_mmgen_id,CoinAddr
|
||||
from ..contract import Token,ResolvedToken
|
||||
|
||||
class EthereumTwCtl(TwCtl):
|
||||
|
|
@ -165,6 +166,13 @@ class EthereumTwCtl(TwCtl):
|
|||
def mmid_ordered_dict(self):
|
||||
return dict((x['mmid'],{'addr':x['addr'],'comment':x['comment']}) for x in self.sorted_list)
|
||||
|
||||
async def get_addr_label_pairs(self,twmmid):
|
||||
ret = [(
|
||||
TwLabel(self.proto, mmid + ' ' + d['comment']),
|
||||
CoinAddr(self.proto, d['addr'])
|
||||
) for mmid, d in self.mmid_ordered_dict.items()]
|
||||
return [e for e in ret if e[0].mmid == twmmid] or None
|
||||
|
||||
class EthereumTokenTwCtl(EthereumTwCtl):
|
||||
|
||||
desc = 'Ethereum token tracking wallet'
|
||||
|
|
@ -172,9 +180,9 @@ class EthereumTokenTwCtl(EthereumTwCtl):
|
|||
symbol = None
|
||||
cur_eth_balances = {}
|
||||
|
||||
async def __init__(self,cfg,proto,mode='r',token_addr=None):
|
||||
async def __init__(self, cfg, proto, mode='r', token_addr=None, no_rpc=False):
|
||||
|
||||
await super().__init__(cfg,proto,mode=mode)
|
||||
await super().__init__(cfg, proto, mode=mode, no_rpc=no_rpc)
|
||||
|
||||
for v in self.data['tokens'].values():
|
||||
self.conv_types(v)
|
||||
|
|
|
|||
|
|
@ -18,17 +18,11 @@ from ....tw.rpc import TwRPC
|
|||
|
||||
class EthereumTwRPC(TwRPC):
|
||||
|
||||
async def get_addr_label_pairs(self,twmmid=None):
|
||||
|
||||
ret = [(
|
||||
TwLabel( self.proto, mmid + ' ' + d['comment'] ),
|
||||
CoinAddr( self.proto, d['addr'] )
|
||||
) for mmid,d in self.twctl.mmid_ordered_dict.items() ]
|
||||
|
||||
if twmmid:
|
||||
ret = [e for e in ret if e[0].mmid == twmmid]
|
||||
|
||||
return ret or None
|
||||
async def get_addr_label_pairs(self):
|
||||
return [(
|
||||
TwLabel(self.proto, mmid + ' ' + d['comment']),
|
||||
CoinAddr(self.proto, d['addr'])
|
||||
) for mmid, d in self.twctl.mmid_ordered_dict.items()] or None
|
||||
|
||||
class EthereumTokenTwRPC(EthereumTwRPC):
|
||||
pass
|
||||
|
|
|
|||
|
|
@ -61,6 +61,7 @@ class TwCtl(MMGenObject,metaclass=AsyncInit):
|
|||
proto,
|
||||
mode = 'r',
|
||||
token_addr = None,
|
||||
no_rpc = False,
|
||||
rpc_ignore_wallet = False):
|
||||
|
||||
assert mode in ('r','w','i'), f"{mode!r}: wallet mode must be 'r','w' or 'i'"
|
||||
|
|
@ -68,9 +69,9 @@ class TwCtl(MMGenObject,metaclass=AsyncInit):
|
|||
self.importing = True
|
||||
mode = 'w'
|
||||
|
||||
# TODO: create on demand - only certain ops require RPC
|
||||
self.cfg = cfg
|
||||
self.rpc = await rpc_init( cfg, proto, ignore_wallet=rpc_ignore_wallet )
|
||||
if not no_rpc:
|
||||
self.rpc = await rpc_init(cfg, proto, ignore_wallet=rpc_ignore_wallet)
|
||||
self.proto = proto
|
||||
self.mode = mode
|
||||
self.desc = self.base_desc = f'{self.proto.name} tracking wallet'
|
||||
|
|
@ -226,8 +227,7 @@ class TwCtl(MMGenObject,metaclass=AsyncInit):
|
|||
msg(f'{addrspec!r}: invalid address for this network')
|
||||
return None
|
||||
|
||||
from .rpc import TwRPC
|
||||
pairs = await TwRPC(proto=self.proto,rpc=self.rpc,twctl=self).get_addr_label_pairs(twmmid)
|
||||
pairs = await self.get_addr_label_pairs(twmmid)
|
||||
|
||||
if not pairs:
|
||||
msg(f'MMGen address {twmmid!r} not found in tracking wallet')
|
||||
|
|
@ -277,8 +277,7 @@ class TwCtl(MMGenObject,metaclass=AsyncInit):
|
|||
|
||||
if await self.set_label(res.coinaddr,lbl):
|
||||
# redundant paranoia step:
|
||||
from .rpc import TwRPC
|
||||
pairs = await TwRPC(proto=self.proto,rpc=self.rpc,twctl=self).get_addr_label_pairs(res.twmmid)
|
||||
pairs = await self.get_addr_label_pairs(res.twmmid)
|
||||
assert pairs[0][0].comment == comment, f'{pairs[0][0].comment!r} != {comment!r}'
|
||||
if not silent:
|
||||
desc = '{} address {} in tracking wallet'.format(
|
||||
|
|
|
|||
|
|
@ -82,7 +82,7 @@ async def _get_obj_async(_clsname, _modname, **kwargs):
|
|||
'Sent',
|
||||
'AutomountSent'):
|
||||
from ..tw.ctl import TwCtl
|
||||
kwargs['twctl'] = await TwCtl(kwargs['cfg'], proto)
|
||||
kwargs['twctl'] = await TwCtl(kwargs['cfg'], proto, no_rpc=True)
|
||||
|
||||
return _base_proto_subclass(clsname, modname, proto)(**kwargs)
|
||||
|
||||
|
|
|
|||
|
|
@ -48,8 +48,8 @@ class CmdTestAutosignETH(CmdTestAutosignThreaded, CmdTestEthdev):
|
|||
('send_token_tx', 'sending a token transaction'),
|
||||
('token_bal2', f'the {cfg.coin} balance and token balance'),
|
||||
('autosign_kill_thread', 'stopping autosign wait loop'),
|
||||
('txview', 'viewing transactions'),
|
||||
('stop', 'stopping daemon'),
|
||||
('txview', 'viewing transactions'),
|
||||
)
|
||||
|
||||
def __init__(self, trunner, cfgs, spawn):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue