addrs.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #!/usr/bin/env python3
  2. #
  3. # mmgen = Multi-Mode GENerator, a command-line cryptocurrency wallet
  4. # Copyright (C)2013-2022 The MMGen Project <mmgen@tuta.io>
  5. # Licensed under the GNU General Public License, Version 3:
  6. # https://www.gnu.org/licenses
  7. # Public project repositories:
  8. # https://github.com/mmgen/mmgen
  9. # https://gitlab.com/mmgen/mmgen
  10. """
  11. proto.btc.twaddrs: Bitcoin base protocol tracking wallet address list class
  12. """
  13. from ....util import msg,die
  14. from ....obj import MMGenList
  15. from ....addr import CoinAddr
  16. from ....rpc import rpc_init
  17. from ....tw.addrs import TwAddrList
  18. from ....tw.common import get_tw_label
  19. from .common import BitcoinTwCommon
  20. class BitcoinTwAddrList(TwAddrList,BitcoinTwCommon):
  21. has_age = True
  22. async def __init__(self,proto,usr_addr_list,minconf,showempty,showcoinaddrs,all_labels,wallet=None):
  23. self.rpc = await rpc_init(proto)
  24. self.proto = proto
  25. # get balances with 'listunspent'
  26. self.update( await self.get_unspent_by_mmid(minconf,usr_addr_list) )
  27. self.total = sum(v['amt'] for v in self.values()) or proto.coin_amt('0')
  28. # use 'listaccounts' only for empty addresses, as it shows false positive balances
  29. if showempty or all_labels:
  30. for label,addr in await self.get_addr_label_pairs():
  31. if (not label
  32. or (all_labels and not showempty and not label.comment)
  33. or (usr_addr_list and (label.mmid not in usr_addr_list)) ):
  34. continue
  35. if label.mmid not in self:
  36. self[label.mmid] = { 'amt':proto.coin_amt('0'), 'lbl':label, 'addr':'' }
  37. if showcoinaddrs:
  38. self[label.mmid]['addr'] = CoinAddr(proto,addr)