new class: tw.rpc.TwRPC

This commit is contained in:
The MMGen Project 2022-11-12 13:34:41 +00:00
commit 69b15a4ff9
Signed by: mmgen
GPG key ID: 3F8B1861E32B7DA2
8 changed files with 45 additions and 17 deletions

View file

@ -15,9 +15,8 @@ proto.btc.tw.ctl: Bitcoin base protocol tracking wallet control class
from ....globalvars import g
from ....tw.ctl import TrackingWallet,write_mode
from ....util import msg,msg_r,rmsg,vmsg,die,suf,fmt_list
from .rpc import BitcoinTwRPC
class BitcoinTrackingWallet(TrackingWallet,BitcoinTwRPC):
class BitcoinTrackingWallet(TrackingWallet):
def init_empty(self):
self.data = { 'coin': self.proto.coin, 'addresses': {} }

View file

@ -16,8 +16,9 @@ from ....addr import CoinAddr
from ....util import die,msg,rmsg
from ....obj import MMGenList
from ....tw.shared import get_tw_label
from ....tw.rpc import TwRPC
class BitcoinTwRPC:
class BitcoinTwRPC(TwRPC):
async def get_addr_label_pairs(self,twmmid=None):
"""

View file

@ -22,7 +22,7 @@ from ....color import nocolor,red,pink,gray
from ....obj import TwComment,CoinTxID,Int
from .rpc import BitcoinTwRPC
class BitcoinTwTransaction(BitcoinTwRPC):
class BitcoinTwTransaction:
def __init__(self,parent,proto,rpc,
idx, # unique numeric identifier of this transaction in listing

View file

@ -18,7 +18,7 @@ from ....addr import CoinAddr
from .view import EthereumTwView
from .rpc import EthereumTwRPC
class EthereumTwAddresses(EthereumTwView,EthereumTwRPC,TwAddresses):
class EthereumTwAddresses(TwAddresses,EthereumTwView,EthereumTwRPC):
has_age = False
prompt = """

View file

@ -25,9 +25,8 @@ from ....tw.ctl import TrackingWallet,write_mode
from ....addr import is_coin_addr,is_mmgen_id
from ....amt import ETHAmt
from ..contract import Token,TokenResolve
from .rpc import EthereumTwRPC
class EthereumTrackingWallet(EthereumTwRPC,TrackingWallet):
class EthereumTrackingWallet(TrackingWallet):
caps = ('batch',)
data_key = 'accounts'

View file

@ -15,24 +15,26 @@ proto.eth.tw.rpc: Ethereum base protocol tracking wallet RPC class
from ....tw.ctl import TrackingWallet
from ....addr import CoinAddr
from ....tw.shared import TwLabel
from ....tw.rpc import TwRPC
class EthereumTwRPC:
class EthereumTwRPC(TwRPC):
async def get_addr_label_pairs(self,twmmid=None):
wallet = (
self if isinstance(self,TrackingWallet) else
(self.wallet or await TrackingWallet(self.proto,mode='w'))
)
wallet = self.wallet or await TrackingWallet(self.proto,mode='w')
ret = [(
TwLabel( self.proto, mmid + ' ' + d['comment'] ),
CoinAddr( self.proto, d['addr'] )
) for mmid,d in wallet.mmid_ordered_dict.items() ]
if wallet is not self:
del wallet
if twmmid:
ret = [e for e in ret if e[0].mmid == twmmid]
if wallet is not self.wallet:
del wallet
return ret or None
class EthereumTokenTwRPC(EthereumTwRPC):
pass

View file

@ -220,7 +220,8 @@ class TrackingWallet(MMGenObject,metaclass=AsyncInit):
msg(f'{addrspec!r}: invalid address for this network')
return None
pairs = await self.get_addr_label_pairs(twmmid)
from .rpc import TwRPC
pairs = await TwRPC(proto=self.proto,rpc=self.rpc,wallet=self).get_addr_label_pairs(twmmid)
if not pairs:
msg(f'MMGen address {twmmid!r} not found in tracking wallet')
@ -270,7 +271,8 @@ class TrackingWallet(MMGenObject,metaclass=AsyncInit):
if await self.set_label(res.coinaddr,lbl):
# redundant paranoia step:
pairs = await self.get_addr_label_pairs(res.twmmid)
from .rpc import TwRPC
pairs = await TwRPC(proto=self.proto,rpc=self.rpc,wallet=self).get_addr_label_pairs(res.twmmid)
assert pairs[0][0].comment == comment, f'{pairs[0][0].comment!r} != {comment!r}'
desc = '{} address {} in tracking wallet'.format(

25
mmgen/tw/rpc.py Executable file
View file

@ -0,0 +1,25 @@
#!/usr/bin/env python3
#
# mmgen = Multi-Mode GENerator, a command-line cryptocurrency wallet
# Copyright (C)2013-2022 The MMGen Project <mmgen@tuta.io>
# Licensed under the GNU General Public License, Version 3:
# https://www.gnu.org/licenses
# Public project repositories:
# https://github.com/mmgen/mmgen
# https://gitlab.com/mmgen/mmgen
"""
tw.rpc: Tracking wallet RPC class for the MMGen suite
"""
from ..objmethods import MMGenObject
class TwRPC:
def __new__(cls,proto,*args,**kwargs):
return MMGenObject.__new__(proto.base_proto_subclass(cls,'tw','rpc'))
def __init__(self,proto,rpc,wallet):
self.proto = proto
self.rpc = rpc
self.wallet = wallet