Browse Source

proto.btc: use match statement where practicable (4 files)

The MMGen Project 2 months ago
parent
commit
669edf9bcb
4 changed files with 42 additions and 38 deletions
  1. 7 4
      mmgen/proto/btc/params.py
  2. 10 9
      mmgen/proto/btc/tw/txhistory.py
  3. 12 12
      mmgen/proto/btc/tx/info.py
  4. 13 13
      mmgen/proto/btc/tx/new.py

+ 7 - 4
mmgen/proto/btc/params.py

@@ -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)
 		vlen = self.wif_ver_bytes_len or self.get_wif_ver_bytes_len(key_data)
 		key = key_data[vlen:]
 		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(
 		return decoded_wif(
 			sec         = key[:self.privkey_len],
 			sec         = key[:self.privkey_len],

+ 10 - 9
mmgen/proto/btc/tw/txhistory.py

@@ -137,15 +137,16 @@ class BitcoinTwTransaction:
 			if self.confirmations > 0 else None)
 			if self.confirmations > 0 else None)
 
 
 	def age_disp(self, age_fmt, *, width, color):
 	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):
 	def txdate_disp(self, age_fmt):
 		return self.parent.date_formatter[age_fmt](self.rpc, self.time)
 		return self.parent.date_formatter[age_fmt](self.rpc, self.time)

+ 12 - 12
mmgen/proto/btc/tx/info.py

@@ -156,15 +156,15 @@ class TxInfo(TxInfo):
 		# If greater than or equal to 500 million, locktime is parsed using the Unix epoch time
 		# 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
 		# 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.
 		# 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!')

+ 13 - 13
mmgen/proto/btc/tx/new.py

@@ -97,19 +97,19 @@ class New(Base, TxNew):
 		return ret
 		return ret
 
 
 	def convert_and_check_fee(self, fee, desc):
 	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
 		return False
 
 
 	async def get_input_addrs_from_inputs_opt(self):
 	async def get_input_addrs_from_inputs_opt(self):