From d63cedfbdd464b3831fdbfcec8795a199a27eae5 Mon Sep 17 00:00:00 2001 From: The MMGen Project Date: Mon, 23 May 2022 16:28:56 +0000 Subject: [PATCH] new modules: base_proto.{bitcoin,ethereum}.addrdata --- mmgen/addrdata.py | 2 +- mmgen/base_proto/bitcoin/addrdata.py | 39 +++++++++++++++++++ mmgen/base_proto/bitcoin/tw/common.py | 26 ------------- .../ethereum/{tw/common.py => addrdata.py} | 10 ++--- 4 files changed, 45 insertions(+), 32 deletions(-) create mode 100755 mmgen/base_proto/bitcoin/addrdata.py rename mmgen/base_proto/ethereum/{tw/common.py => addrdata.py} (87%) diff --git a/mmgen/addrdata.py b/mmgen/addrdata.py index 34f74c6e..3e0f7ca0 100755 --- a/mmgen/addrdata.py +++ b/mmgen/addrdata.py @@ -69,7 +69,7 @@ class AddrData(MMGenObject): class TwAddrData(AddrData,metaclass=AsyncInit): def __new__(cls,proto,*args,**kwargs): - return MMGenObject.__new__(base_proto_subclass(cls,proto,'tw','common')) + return MMGenObject.__new__(base_proto_subclass(cls,proto,None,'addrdata')) async def __init__(self,proto,wallet=None): from .rpc import rpc_init diff --git a/mmgen/base_proto/bitcoin/addrdata.py b/mmgen/base_proto/bitcoin/addrdata.py new file mode 100755 index 00000000..4b76f2a6 --- /dev/null +++ b/mmgen/base_proto/bitcoin/addrdata.py @@ -0,0 +1,39 @@ +#!/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 + +""" +base_proto.bitcoin.addrdata: Bitcoin base protocol addrdata classes +""" + +from ...addrdata import TwAddrData +from ...util import vmsg + +class BitcoinTwAddrData(TwAddrData): + + msgs = { + 'multiple_acct_addrs': """ + ERROR: More than one address found for account: {acct!r}. + Your 'wallet.dat' file appears to have been altered by a non-{proj} program. + Please restore your tracking wallet from a backup or create a new one and + re-import your addresses. + """ + } + + async def get_tw_data(self,wallet=None): + vmsg('Getting address data from tracking wallet') + c = self.rpc + if 'label_api' in c.caps: + accts = await c.call('listlabels') + ll = await c.batch_call('getaddressesbylabel',[(k,) for k in accts]) + alists = [list(a.keys()) for a in ll] + else: + accts = await c.call('listaccounts',0,True) + alists = await c.batch_call('getaddressesbyaccount',[(k,) for k in accts]) + return list(zip(accts,alists)) diff --git a/mmgen/base_proto/bitcoin/tw/common.py b/mmgen/base_proto/bitcoin/tw/common.py index 18273e44..b8a05d6b 100755 --- a/mmgen/base_proto/bitcoin/tw/common.py +++ b/mmgen/base_proto/bitcoin/tw/common.py @@ -11,29 +11,3 @@ """ base_proto.bitcoin.tw: Bitcoin base protocol tracking wallet dependency classes """ - -from ....addrdata import TwAddrData -from ....util import vmsg - -class BitcoinTwAddrData(TwAddrData): - - msgs = { - 'multiple_acct_addrs': """ - ERROR: More than one address found for account: {acct!r}. - Your 'wallet.dat' file appears to have been altered by a non-{proj} program. - Please restore your tracking wallet from a backup or create a new one and - re-import your addresses. - """ - } - - async def get_tw_data(self,wallet=None): - vmsg('Getting address data from tracking wallet') - c = self.rpc - if 'label_api' in c.caps: - accts = await c.call('listlabels') - ll = await c.batch_call('getaddressesbylabel',[(k,) for k in accts]) - alists = [list(a.keys()) for a in ll] - else: - accts = await c.call('listaccounts',0,True) - alists = await c.batch_call('getaddressesbyaccount',[(k,) for k in accts]) - return list(zip(accts,alists)) diff --git a/mmgen/base_proto/ethereum/tw/common.py b/mmgen/base_proto/ethereum/addrdata.py similarity index 87% rename from mmgen/base_proto/ethereum/tw/common.py rename to mmgen/base_proto/ethereum/addrdata.py index 7b8565c0..32dfc0cf 100755 --- a/mmgen/base_proto/ethereum/tw/common.py +++ b/mmgen/base_proto/ethereum/addrdata.py @@ -17,11 +17,11 @@ # along with this program. If not, see . """ -base_proto.ethereum.tw: Ethereum tracking wallet dependency classes +base_proto.ethereum.addrdata: Ethereum TwAddrData classes """ -from ....addrdata import TwAddrData -from ....util import vmsg +from ...addrdata import TwAddrData +from ...util import vmsg class EthereumTwAddrData(TwAddrData): @@ -33,8 +33,8 @@ class EthereumTwAddrData(TwAddrData): } async def get_tw_data(self,wallet=None): - from ....tw.ctl import TrackingWallet - from ....util import vmsg + from ...tw.ctl import TrackingWallet + from ...util import vmsg vmsg('Getting address data from tracking wallet') tw = (wallet or await TrackingWallet(self.proto)).mmid_ordered_dict # emulate the output of RPC 'listaccounts' and 'getaddressesbyaccount'