minor fixes and cleanups

This commit is contained in:
The MMGen Project 2025-03-22 08:50:10 +03:00
commit f6aa4bad33
Signed by: mmgen
GPG key ID: 3F8B1861E32B7DA2
10 changed files with 36 additions and 24 deletions

View file

@ -24,7 +24,7 @@ class Completed(Base, TxBase.Completed):
if o := self.data_output:
try:
return o.data.decode()
except:
except UnicodeDecodeError:
pass
# check signature and witness data

View file

@ -13,7 +13,7 @@ proto.eth.tx.status: Ethereum transaction status class
"""
from ....tx import status as TxBase
from ....util import msg, die, suf, capfirst
from ....util import msg, die, suf, capfirst, pp_fmt
class Status(TxBase.Status):
@ -42,11 +42,11 @@ class Status(TxBase.Status):
d = await tx.rpc.call('eth_getTransactionReceipt', '0x'+tx.coin_txid)
if d and 'blockNumber' in d and d['blockNumber'] is not None:
from collections import namedtuple
receipt_info = namedtuple('receipt_info', ['confs', 'exec_status'])
receipt_info = namedtuple('receipt_info', ['confs', 'exec_status', 'rx'])
return receipt_info(
confs = 1 + int(await tx.rpc.call('eth_blockNumber'), 16) - int(d['blockNumber'], 16),
exec_status = int(d['status'], 16)
)
confs = 1 + int(await tx.rpc.call('eth_blockNumber'), 16) - int(d['blockNumber'], 16),
exec_status = int(d['status'], 16),
rx = d)
if await is_in_mempool():
msg(
@ -56,6 +56,9 @@ class Status(TxBase.Status):
if usr_req:
ret = await is_in_wallet()
if tx.cfg.verbose:
from ....color import cyan
msg('{}\n{}'.format(cyan('TRANSACTION RECEIPT'), pp_fmt(ret.rx)))
if ret:
if tx.txobj['data']:
cd = capfirst(tx.contract_desc)

View file

@ -56,7 +56,7 @@ class Thornode:
def __init__(self, tx, amt):
self.tx = tx
self.in_amt = UniAmt(str(amt))
self.in_amt = UniAmt(f'{amt:.8f}')
self.rpc = ThornodeRPCClient(tx)
def get_quote(self):
@ -80,7 +80,7 @@ class Thornode:
tx = self.tx
in_coin = tx.proto.coin
out_coin = tx.recv_proto.coin
in_amt = UniAmt(str(self.in_amt))
in_amt = self.in_amt
out_amt = UniAmt(int(d['expected_amount_out']), from_unit='satoshi')
gas_unit = d['gas_rate_units']
@ -110,7 +110,7 @@ class Thornode:
_amount_in_label = 'Amount in:'
if deduct_est_fee:
if gas_unit in gas_unit_data:
in_amt -= UniAmt(str(get_estimated_fee()))
in_amt -= UniAmt(f'{get_estimated_fee():.8f}')
out_amt *= (in_amt / self.in_amt)
_amount_in_label = 'Amount in (estimated):'
else:

View file

@ -398,7 +398,7 @@ class TwView(MMGenObject, metaclass=AsyncInit):
def make_display():
def gen_hdr():
def gen_hdr(spc):
Blue, Green = (blue, green) if color else (nocolor, nocolor)
Yes, No, All = (green('yes'), red('no'), yellow('all')) if color else ('yes', 'no', 'all')
@ -410,12 +410,12 @@ class TwView(MMGenObject, metaclass=AsyncInit):
yield '{} (sort order: {}){}'.format(
self.hdr_lbl.upper(),
Blue(sort_info),
' ' * (self.cols - len(f'{self.hdr_lbl} (sort order: {sort_info})')))
spc * (self.cols - len(f'{self.hdr_lbl} (sort order: {sort_info})')))
if self.filters:
yield 'Filters: {}{}'.format(
' '.join(map(fmt_filter, self.filters)),
' ' * len(self.filters))
spc * len(self.filters))
yield 'Network: {}'.format(Green(
self.proto.coin + ' ' + self.proto.chain_name.upper()))
@ -429,7 +429,7 @@ class TwView(MMGenObject, metaclass=AsyncInit):
yield from getattr(self, dt.subhdr_fmt_method)(cw, color)
yield ' ' * self.term_width
yield spc * self.term_width
if data and dt.colhdr_fmt_method:
col_hdr = getattr(self, dt.colhdr_fmt_method)(cw, hdr_fs, color)
@ -456,7 +456,7 @@ class TwView(MMGenObject, metaclass=AsyncInit):
cw = hdr_fs = fs = None
return (
tuple(gen_hdr()),
tuple(gen_hdr(spc='' if line_processing == 'print' else ' ')),
tuple(
get_body(getattr(self, dt.fmt_method)) if data else
[(nocolor, yellow)[color](self.nodata_msg.ljust(self.term_width))])

View file

@ -74,8 +74,9 @@ class TxInfo:
if tx.is_swap:
from ..swap.proto.thorchain.memo import Memo, proto_name
if Memo.is_partial_memo(tx.data_output.data):
p = Memo.parse(tx.data_output.data)
text = tx.data_output.data.decode()
if Memo.is_partial_memo(text):
p = Memo.parse(text)
yield ' {} {}\n'.format(magenta('DEX Protocol:'), blue(proto_name))
yield ' Swap: {}\n'.format(orange(f'{tx.proto.coin} => {p.asset}'))
yield ' Dest: {}{}\n'.format(

View file

@ -55,12 +55,12 @@ class NewSwap(New):
proto,
arg,
self.get_addrdata_from_files(proto, addrfiles),
await TwAddrData(self.cfg, proto, twctl=None)) # TODO: twctl required for Ethereum
await TwAddrData(self.cfg, proto))
if pa.addr:
await self.warn_addr_used(proto, pa, desc)
return ret(proto.coin, proto.network, pa.addr, pa.mmid)
full_desc = '{} on the {} {} network'.format(desc, proto.coin, proto.network)
full_desc = f'{desc} on the {proto.coin} {proto.network} network'
res = await self.get_autochg_addr(proto, arg, exclude=[], desc=full_desc, all_addrtypes=not arg)
self.confirm_autoselected_addr(res.twmmid, full_desc)
return ret(proto.coin, proto.network, res.addr, res.twmmid)
@ -92,6 +92,7 @@ class NewSwap(New):
# arg 2: amt
if is_coin_amt(self.proto, arg):
UniAmt(arg) # throw exception on decimal overflow
args.send_amt = self.proto.coin_amt(arg)
arg = get_arg()

View file

@ -97,7 +97,8 @@ mixin-class-rgx = """.*[Mm]ixin|\
^(Hilite|InitErrors|DummyWIF|\
cfg_file|cfg_file_sample|\
MoneroMMGenFile|keygen_base|xmr_signable|\
CmdTestShared)$"""
CmdTestShared|CmdTestSwapMethods|HTTPD|\
RPC|TxProxyClient|Contract)$"""
ignored-classes = [ # ignored for no-member, otherwise checked
"optparse.Values",
@ -133,5 +134,5 @@ ignored-classes = [ # ignored for no-member, otherwise checked
"Opts",
"Help",
"FFI_override",
"RPC",
"CmdGroupMgr",
]

View file

@ -64,7 +64,7 @@ pat_date_time = r'\b\d\d\d\d-\d\d-\d\d\s+\d\d:\d\d\b'
dfl_wcls = get_wallet_cls('mmgen')
tx_fee = rtFundAmt = rtFee = rtBals = rtBals_gb = rtBobOp3 = rtAmts = None # ruff
tx_fee = rtFundAmt = rtFee = rtBals = rtBals_gb = rtBobOp3 = rtAmts = {} # ruff, pylint
rt_data = {
'tx_fee': {'btc':'0.0001', 'bch':'0.001', 'ltc':'0.01'},

View file

@ -24,7 +24,9 @@ cfg = Config()
# https://thornode.ninerealms.com/thorchain/quote/swap?from_asset=BCH.BCH&to_asset=LTC.LTC&amount=1000000
sample_request = 'GET /thorchain/quote/swap?from_asset=BCH.BCH&to_asset=LTC.LTC&amount=1000000000'
request_pat = r'/thorchain/quote/swap\?from_asset=(\S+)\.(\S+)&to_asset=(\S+)\.(\S+)&amount=(\d+)'
prices = { 'BTC': 97000, 'LTC': 115, 'BCH': 330 }
prices = {'BTC': 97000, 'LTC': 115, 'BCH': 330}
gas_rate_units = {'BTC': 'satsperbyte'}
recommended_gas_rate = {'BTC': '6'}
data_template = {
'inbound_address': None,
@ -84,5 +86,7 @@ class ThornodeServer(HTTPD):
'expected_amount_out': str(out_amt.to_unit('satoshi')),
'expiry': int(time.time()) + (10 * 60),
'inbound_address': addr,
'gas_rate_units': gas_rate_units[send_proto.base_proto_coin],
'recommended_gas_rate': recommended_gas_rate[send_proto.base_proto_coin],
}
return json.dumps(data).encode()

View file

@ -148,7 +148,8 @@ class CmdTestRunner:
passthru_opts = (
self.passthru_opts if not no_passthru_opts else
[] if no_passthru_opts is True else
[o for o in self.passthru_opts if o[2:].split('=')[0] not in no_passthru_opts])
[o for o in self.passthru_opts
if o[2:].split('=')[0].replace('-','_') not in no_passthru_opts])
args = (
self.pre_args +
@ -289,7 +290,8 @@ class CmdTestRunner:
self.passthru_opts = ['--{}{}'.format(
k.replace('_', '-'),
'' if self.cfg._uopts[k] is True else '=' + self.cfg._uopts[k]
) for k in self.cfg._uopts if k in self.tg.base_passthru_opts + self.tg.passthru_opts]
) for k in self.cfg._uopts
if self.cfg._uopts[k] and k in self.tg.base_passthru_opts + self.tg.passthru_opts]
if self.cfg.resuming:
rc = self.cfg.resume or self.cfg.resume_after