new command: mmgen-tool resolve_address
This commit is contained in:
parent
3823e8cdc9
commit
cd2e2240c3
5 changed files with 47 additions and 13 deletions
|
|
@ -161,6 +161,7 @@ mods = {
|
|||
'listaddresses',
|
||||
'remove_address',
|
||||
'remove_label',
|
||||
'resolve_address',
|
||||
'twview',
|
||||
'txhist',
|
||||
),
|
||||
|
|
|
|||
|
|
@ -167,3 +167,14 @@ class tool_cmd(tool_cmd_base):
|
|||
from ..util import msg
|
||||
msg(f'Address {ret!r} deleted from tracking wallet')
|
||||
return ret
|
||||
|
||||
async def resolve_address(self,mmgen_or_coin_addr:str):
|
||||
"resolve an MMGen address in the tracking wallet to a coin address or vice-versa"
|
||||
from ..tw.ctl import TrackingWallet
|
||||
ret = await (await TrackingWallet(self.proto,mode='w')).resolve_address( mmgen_or_coin_addr )
|
||||
if ret:
|
||||
from ..util import Msg
|
||||
from ..addr import is_coin_addr
|
||||
return ret.mmaddr if is_coin_addr(self.proto,mmgen_or_coin_addr) else ret.coinaddr
|
||||
else:
|
||||
return False
|
||||
|
|
|
|||
|
|
@ -219,15 +219,15 @@ class TrackingWallet(MMGenObject,metaclass=AsyncInit):
|
|||
from .addrs import TwAddrList
|
||||
return addr in (await TwAddrList(self.proto,[],0,True,True,True,wallet=self)).coinaddr_list()
|
||||
|
||||
# returns on failure
|
||||
@write_mode
|
||||
async def add_label(self,arg1,label='',addr=None,silent=False,on_fail='return'):
|
||||
assert on_fail in ('return','raise'), 'add_label_chk1'
|
||||
async def resolve_address(self,addrspec,usr_coinaddr=None):
|
||||
|
||||
mmaddr,coinaddr = None,None
|
||||
if is_coin_addr(self.proto,addr or arg1):
|
||||
coinaddr = get_obj(CoinAddr,proto=self.proto,addr=addr or arg1)
|
||||
if is_mmgen_id(self.proto,arg1):
|
||||
mmaddr = TwMMGenID(self.proto,arg1)
|
||||
|
||||
if is_coin_addr(self.proto,usr_coinaddr or addrspec):
|
||||
coinaddr = get_obj(CoinAddr,proto=self.proto,addr=usr_coinaddr or addrspec)
|
||||
|
||||
if is_mmgen_id(self.proto,addrspec):
|
||||
mmaddr = TwMMGenID(self.proto,addrspec)
|
||||
|
||||
if mmaddr and not coinaddr:
|
||||
from ..addrdata import TwAddrData
|
||||
|
|
@ -240,7 +240,7 @@ class TrackingWallet(MMGenObject,metaclass=AsyncInit):
|
|||
assert await self.is_in_wallet(coinaddr), f'Address {coinaddr!r} not found in tracking wallet'
|
||||
except Exception as e:
|
||||
msg(str(e))
|
||||
return False
|
||||
return None
|
||||
|
||||
# Allow for the possibility that BTC addr of MMGen addr was entered.
|
||||
# Do reverse lookup, so that MMGen addr will not be marked as non-MMGen.
|
||||
|
|
@ -251,18 +251,30 @@ class TrackingWallet(MMGenObject,metaclass=AsyncInit):
|
|||
if not mmaddr:
|
||||
mmaddr = f'{self.proto.base_coin.lower()}:{coinaddr}'
|
||||
|
||||
mmaddr = TwMMGenID(self.proto,mmaddr)
|
||||
from collections import namedtuple
|
||||
return namedtuple('addr_info',['mmaddr','coinaddr'])(
|
||||
TwMMGenID(self.proto,mmaddr),
|
||||
coinaddr )
|
||||
|
||||
# returns on failure
|
||||
@write_mode
|
||||
async def add_label(self,addrspec,label='',coinaddr=None,silent=False,on_fail='return'):
|
||||
assert on_fail in ('return','raise'), 'add_label_chk1'
|
||||
|
||||
res = await self.resolve_address(addrspec,coinaddr)
|
||||
if not res:
|
||||
return False
|
||||
|
||||
cmt = TwComment(label) if on_fail=='raise' else get_obj(TwComment,s=label)
|
||||
if cmt in (False,None):
|
||||
return False
|
||||
|
||||
lbl_txt = mmaddr + (' ' + cmt if cmt else '')
|
||||
lbl_txt = res.mmaddr + (' ' + cmt if cmt else '')
|
||||
lbl = (
|
||||
TwLabel(self.proto,lbl_txt) if on_fail == 'raise' else
|
||||
get_obj(TwLabel,proto=self.proto,text=lbl_txt) )
|
||||
|
||||
if await self.set_label(coinaddr,lbl) == False:
|
||||
if await self.set_label(res.coinaddr,lbl) == False:
|
||||
if not silent:
|
||||
msg( 'Label could not be {}'.format('added' if label else 'removed') )
|
||||
return False
|
||||
|
|
|
|||
|
|
@ -281,7 +281,7 @@ class TwUnspentOutputs(MMGenObject,TwCommon,metaclass=AsyncInit):
|
|||
|
||||
async def do_lbl_add(lbl):
|
||||
e = uo.data[idx-1]
|
||||
if await uo.wallet.add_label( e.twmmid, lbl, addr=e.addr ):
|
||||
if await uo.wallet.add_label( e.twmmid, lbl, coinaddr=e.addr ):
|
||||
await uo.get_data()
|
||||
uo.oneshot_msg = yellow('Label {} {} #{}\n\n'.format(
|
||||
('added to' if lbl else 'removed from'),
|
||||
|
|
|
|||
|
|
@ -202,6 +202,7 @@ class TestSuiteRegtest(TestSuiteBase,TestSuiteShared):
|
|||
('bob_bal4', "Bob's balance (after import)"),
|
||||
('bob_import_list', 'importing flat address list'),
|
||||
('bob_import_list_rescan', 'importing flat address list with --rescan'),
|
||||
('bob_resolve_addr', 'resolving an address in the tracking wallet'),
|
||||
('bob_split2', "splitting Bob's funds"),
|
||||
('bob_0conf0_getbalance', "Bob's balance (unconfirmed, minconf=0)"),
|
||||
('bob_0conf1_getbalance', "Bob's balance (unconfirmed, minconf=1)"),
|
||||
|
|
@ -909,6 +910,15 @@ class TestSuiteRegtest(TestSuiteBase,TestSuiteShared):
|
|||
addr = self.read_from_tmpfile('non-mmgen.addrs').split()[0]
|
||||
return self.user_import('bob',['--quiet','--address='+addr],nAddr=1)
|
||||
|
||||
def bob_resolve_addr(self):
|
||||
mmaddr = '{}:C:1'.format(self._user_sid('bob'))
|
||||
t = self.spawn('mmgen-tool',['--bob','resolve_address',mmaddr])
|
||||
coinaddr = t.read().split()[0].strip()
|
||||
t = self.spawn('mmgen-tool',['--bob','resolve_address',coinaddr],no_msg=True)
|
||||
mmaddr_res = t.read().split()[0].strip()
|
||||
assert mmaddr == mmaddr_res, f'{mmaddr} != {mmaddr_res}'
|
||||
return t
|
||||
|
||||
def bob_import_list(self):
|
||||
addrfile = joinpath(self.tmpdir,'non-mmgen.addrs')
|
||||
return self.user_import('bob',['--quiet','--addrlist',addrfile],nAddr=5)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue