From 69b15a4ff9b42f33697e60a397e569830d884e77 Mon Sep 17 00:00:00 2001 From: The MMGen Project Date: Sat, 12 Nov 2022 13:34:41 +0000 Subject: [PATCH] new class: tw.rpc.TwRPC --- mmgen/proto/btc/tw/ctl.py | 3 +-- mmgen/proto/btc/tw/rpc.py | 3 ++- mmgen/proto/btc/tw/txhistory.py | 2 +- mmgen/proto/eth/tw/addresses.py | 2 +- mmgen/proto/eth/tw/ctl.py | 3 +-- mmgen/proto/eth/tw/rpc.py | 18 ++++++++++-------- mmgen/tw/ctl.py | 6 ++++-- mmgen/tw/rpc.py | 25 +++++++++++++++++++++++++ 8 files changed, 45 insertions(+), 17 deletions(-) create mode 100755 mmgen/tw/rpc.py diff --git a/mmgen/proto/btc/tw/ctl.py b/mmgen/proto/btc/tw/ctl.py index dffe7f4d..aaf5a3e0 100755 --- a/mmgen/proto/btc/tw/ctl.py +++ b/mmgen/proto/btc/tw/ctl.py @@ -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': {} } diff --git a/mmgen/proto/btc/tw/rpc.py b/mmgen/proto/btc/tw/rpc.py index c3d7ed33..f46f31bd 100755 --- a/mmgen/proto/btc/tw/rpc.py +++ b/mmgen/proto/btc/tw/rpc.py @@ -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): """ diff --git a/mmgen/proto/btc/tw/txhistory.py b/mmgen/proto/btc/tw/txhistory.py index 4e597c9f..bdb21537 100755 --- a/mmgen/proto/btc/tw/txhistory.py +++ b/mmgen/proto/btc/tw/txhistory.py @@ -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 diff --git a/mmgen/proto/eth/tw/addresses.py b/mmgen/proto/eth/tw/addresses.py index 10092f67..6302d4b9 100755 --- a/mmgen/proto/eth/tw/addresses.py +++ b/mmgen/proto/eth/tw/addresses.py @@ -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 = """ diff --git a/mmgen/proto/eth/tw/ctl.py b/mmgen/proto/eth/tw/ctl.py index 252d3427..c3648628 100755 --- a/mmgen/proto/eth/tw/ctl.py +++ b/mmgen/proto/eth/tw/ctl.py @@ -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' diff --git a/mmgen/proto/eth/tw/rpc.py b/mmgen/proto/eth/tw/rpc.py index c33b29c8..cac5522c 100755 --- a/mmgen/proto/eth/tw/rpc.py +++ b/mmgen/proto/eth/tw/rpc.py @@ -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 diff --git a/mmgen/tw/ctl.py b/mmgen/tw/ctl.py index c4f263bc..f9c25b78 100755 --- a/mmgen/tw/ctl.py +++ b/mmgen/tw/ctl.py @@ -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( diff --git a/mmgen/tw/rpc.py b/mmgen/tw/rpc.py new file mode 100755 index 00000000..d25f7c6b --- /dev/null +++ b/mmgen/tw/rpc.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python3 +# +# mmgen = Multi-Mode GENerator, a command-line cryptocurrency wallet +# Copyright (C)2013-2022 The MMGen Project +# 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