Browse Source

new class: tw.rpc.TwRPC

The MMGen Project 2 years ago
parent
commit
69b15a4ff9

+ 1 - 2
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': {} }

+ 2 - 1
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):
 		"""

+ 1 - 1
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

+ 1 - 1
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 = """

+ 1 - 2
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'

+ 10 - 8
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

+ 4 - 2
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(

+ 25 - 0
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 <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