txhist: support OP_RETURN TX outputs

This commit is contained in:
The MMGen Project 2025-02-16 14:42:32 +00:00
commit 6620b4dba0
Signed by: mmgen
GPG key ID: 3F8B1861E32B7DA2

View file

@ -23,6 +23,8 @@ from .rpc import BitcoinTwRPC
class BitcoinTwTransaction:
no_address_str = '[DATA]'
def __init__(self, parent, proto, rpc,
idx, # unique numeric identifier of this transaction in listing
unspent_info, # addrs in wallet with balances: {'mmid': {'addr', 'comment', 'amt'}}
@ -58,7 +60,9 @@ class BitcoinTwTransaction:
_d = namedtuple('vout_info', ['txid', 'coin_addr', 'twlabel', 'data'])
def gen():
for d in data:
addr = d.data['scriptPubKey'].get('address') or d.data['scriptPubKey']['addresses'][0]
addr = (
d.data['scriptPubKey'].get('address') or
d.data['scriptPubKey'].get('addresses',[self.no_address_str])[0])
yield _d(
txid = d.txid,
coin_addr = addr,
@ -161,7 +165,9 @@ class BitcoinTwTransaction:
i = CoinTxID(e.txid).hl(color=color),
n = (nocolor, red)[color](str(e.data['n']).ljust(3)),
a = CoinAddr(self.proto, e.coin_addr).fmt(
addr_view_pref, width=self.max_addrlen[src], color=color),
addr_view_pref, width=self.max_addrlen[src], color=color)
if e.coin_addr != self.no_address_str else
CoinAddr.fmtc(e.coin_addr, width=self.max_addrlen[src], color=color),
A = self.proto.coin_amt(e.data['value']).fmt(color=color)
).rstrip()
else:
@ -193,7 +199,10 @@ class BitcoinTwTransaction:
if not mmid:
if width and space_left < addr_w:
break
yield CoinAddr(self.proto, e.coin_addr).fmt(addr_view_pref, width=addr_w, color=color)
yield (
CoinAddr(self.proto, e.coin_addr).fmt(addr_view_pref, width=addr_w, color=color)
if e.coin_addr != self.no_address_str else
CoinAddr.fmtc(e.coin_addr, width=addr_w, color=color))
space_left -= addr_w
elif mmid.type == 'mmgen':
mmid_disp = mmid + bal_star
@ -312,7 +321,7 @@ class BitcoinTwTxHistory(TwTxHistory, BitcoinTwRPC):
_mmp(TwMMGenID(self.proto, i['twmmid']), TwComment(i['comment']))
if i['twmmid'] else _mmp(None, None)
)
for i in data}
for i in data if 'address' in i}
if self.sinceblock: # mapping data may be incomplete for inputs, so update from 'listlabels'
mm_map.update(