proto.btc: use match statement where practicable (4 files)
This commit is contained in:
parent
df49bc851c
commit
669edf9bcb
4 changed files with 42 additions and 38 deletions
|
|
@ -80,10 +80,13 @@ class mainnet(CoinProtocol.Secp256k1): # chainparams.cpp
|
|||
vlen = self.wif_ver_bytes_len or self.get_wif_ver_bytes_len(key_data)
|
||||
key = key_data[vlen:]
|
||||
|
||||
if len(key) == self.privkey_len + 1:
|
||||
assert key[-1] == 0x01, f'{key[-1]!r}: invalid compressed key suffix byte'
|
||||
elif len(key) != self.privkey_len:
|
||||
raise ValueError(f'{len(key)}: invalid key length')
|
||||
match len(key):
|
||||
case x if x == self.privkey_len + 1:
|
||||
assert key[-1] == 0x01, f'{key[-1]!r}: invalid compressed key suffix byte'
|
||||
case self.privkey_len:
|
||||
pass
|
||||
case x:
|
||||
raise ValueError(f'{x}: invalid key length')
|
||||
|
||||
return decoded_wif(
|
||||
sec = key[:self.privkey_len],
|
||||
|
|
|
|||
|
|
@ -137,15 +137,16 @@ class BitcoinTwTransaction:
|
|||
if self.confirmations > 0 else None)
|
||||
|
||||
def age_disp(self, age_fmt, *, width, color):
|
||||
if age_fmt == 'confs':
|
||||
ret_str = str(self.confirmations).ljust(width)
|
||||
return gray(ret_str) if self.confirmations < 0 and color else ret_str
|
||||
elif age_fmt == 'block':
|
||||
ret = (self.rpc.blockcount - (abs(self.confirmations) - 1)) * (-1 if self.confirmations < 0 else 1)
|
||||
ret_str = str(ret).ljust(width)
|
||||
return gray(ret_str) if ret < 0 and color else ret_str
|
||||
else:
|
||||
return self.parent.date_formatter[age_fmt](self.rpc, self.tx.get('blocktime', 0))
|
||||
match age_fmt:
|
||||
case 'confs':
|
||||
ret_str = str(self.confirmations).ljust(width)
|
||||
return gray(ret_str) if self.confirmations < 0 and color else ret_str
|
||||
case 'block':
|
||||
ret = (self.rpc.blockcount - (abs(self.confirmations) - 1)) * (-1 if self.confirmations < 0 else 1)
|
||||
ret_str = str(ret).ljust(width)
|
||||
return gray(ret_str) if ret < 0 and color else ret_str
|
||||
case _:
|
||||
return self.parent.date_formatter[age_fmt](self.rpc, self.tx.get('blocktime', 0))
|
||||
|
||||
def txdate_disp(self, age_fmt):
|
||||
return self.parent.date_formatter[age_fmt](self.rpc, self.time)
|
||||
|
|
|
|||
|
|
@ -156,15 +156,15 @@ class TxInfo(TxInfo):
|
|||
# If greater than or equal to 500 million, locktime is parsed using the Unix epoch time
|
||||
# format (the number of seconds elapsed since 1970-01-01T00:00 UTC). The transaction can be
|
||||
# added to any block whose block time is greater than the locktime.
|
||||
num = locktime or self.tx.locktime
|
||||
if num is None:
|
||||
return '(None)'
|
||||
elif num.bit_length() > 32:
|
||||
die(2, f'{num!r}: invalid nLockTime value (integer size greater than 4 bytes)!')
|
||||
elif num >= 500_000_000:
|
||||
import time
|
||||
return ' '.join(time.strftime('%c', time.gmtime(num)).split()[1:])
|
||||
elif num > 0:
|
||||
return '{}{}'.format(('block height ', '')[terse], num)
|
||||
else:
|
||||
die(2, f'{num!r}: invalid nLockTime value!')
|
||||
match locktime or self.tx.locktime:
|
||||
case None:
|
||||
return '(None)'
|
||||
case num if num.bit_length() > 32:
|
||||
die(2, f'{num!r}: invalid nLockTime value (integer size greater than 4 bytes)!')
|
||||
case num if num >= 500_000_000:
|
||||
import time
|
||||
return ' '.join(time.strftime('%c', time.gmtime(num)).split()[1:])
|
||||
case num if num > 0:
|
||||
return '{}{}'.format(('block height ', '')[terse], num)
|
||||
case num:
|
||||
die(2, f'{num!r}: invalid nLockTime value!')
|
||||
|
|
|
|||
|
|
@ -97,19 +97,19 @@ class New(Base, TxNew):
|
|||
return ret
|
||||
|
||||
def convert_and_check_fee(self, fee, desc):
|
||||
abs_fee = self.feespec2abs(fee, self.estimate_size())
|
||||
if abs_fee is None:
|
||||
raise ValueError(f'{fee}: cannot convert {self.rel_fee_desc} to {self.coin}'
|
||||
+ ' because transaction size is unknown')
|
||||
if abs_fee is False:
|
||||
err = f'{fee!r}: invalid TX fee (not a {self.coin} amount or {self.rel_fee_desc} specification)'
|
||||
elif abs_fee > self.proto.max_tx_fee:
|
||||
err = f'{abs_fee} {self.coin}: {desc} fee too large (maximum fee: {self.proto.max_tx_fee} {self.coin})'
|
||||
elif abs_fee < self.relay_fee:
|
||||
err = f'{abs_fee} {self.coin}: {desc} fee too small (less than relay fee of {self.relay_fee} {self.coin})'
|
||||
else:
|
||||
return abs_fee
|
||||
msg(err)
|
||||
match self.feespec2abs(fee, self.estimate_size()): # abs_fee
|
||||
case None:
|
||||
raise ValueError(
|
||||
f'{fee}: cannot convert {self.rel_fee_desc} to {self.coin} '
|
||||
+ 'because transaction size is unknown')
|
||||
case False:
|
||||
msg(f'{fee!r}: invalid TX fee (not a {self.coin} amount or {self.rel_fee_desc} specification)')
|
||||
case x if x > self.proto.max_tx_fee:
|
||||
msg(f'{x} {self.coin}: {desc} fee too large (maximum fee: {self.proto.max_tx_fee} {self.coin})')
|
||||
case x if x < self.relay_fee:
|
||||
msg(f'{x} {self.coin}: {desc} fee too small (less than relay fee of {self.relay_fee} {self.coin})')
|
||||
case x:
|
||||
return x
|
||||
return False
|
||||
|
||||
async def get_input_addrs_from_inputs_opt(self):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue