Browse Source

MMGenTX: new 'fee' property, replacing get_fee()

The MMGen Project 3 years ago
parent
commit
00f978ef7c
4 changed files with 20 additions and 26 deletions
  1. 9 14
      mmgen/altcoins/eth/tx.py
  2. 1 2
      mmgen/main_txbump.py
  3. 9 9
      mmgen/tx.py
  4. 1 1
      mmgen/txfile.py

+ 9 - 14
mmgen/altcoins/eth/tx.py

@@ -49,9 +49,6 @@ class EthereumMMGenTX:
 			dmsg('fee_abs2rel() ==> {} ETH'.format(ret))
 			return ret if to_unit == 'eth' else ret.to_unit(to_unit,show_decimal=True)
 
-		def get_fee(self):
-			return self.fee
-
 		def get_hex_locktime(self):
 			return None # TODO
 
@@ -76,7 +73,6 @@ class EthereumMMGenTX:
 		fee_fail_fs = 'Network fee estimation failed'
 		no_chg_msg = 'Warning: Transaction leaves account with zero balance'
 		usr_fee_prompt = 'Enter transaction fee or gas price: '
-		usr_rel_fee = None # not in MMGenTX
 
 		def __init__(self,*args,**kwargs):
 			MMGenTX.New.__init__(self,*args,**kwargs)
@@ -97,7 +93,7 @@ class EthereumMMGenTX:
 				'from': self.inputs[0].addr,
 				'to':   self.outputs[0].addr if self.outputs else Str(''),
 				'amt':  self.outputs[0].amt if self.outputs else ETHAmt('0'),
-				'gasPrice': self.usr_rel_fee or self.fee_abs2rel(self.fee,to_unit='eth'),
+				'gasPrice': self.fee_abs2rel(self.usr_fee,to_unit='eth'),
 				'startGas': self.start_gas,
 				'nonce': await self.get_nonce(),
 				'chainId': Int(await self.rpc.call(chain_id_method),16),
@@ -233,6 +229,10 @@ class EthereumMMGenTX:
 		""")
 		fmt_keys = ('from','to','amt','nonce')
 
+		@property
+		def fee(self):
+			return self.fee_gasPrice2abs(self.txobj['gasPrice'].toWei())
+
 		def check_txfile_hex_data(self):
 			pass
 
@@ -262,8 +262,7 @@ class EthereumMMGenTX:
 				f_mmid = m['inputs'] )
 
 		def format_view_abs_fee(self):
-			fee = self.fee_gasPrice2abs(self.txobj['gasPrice'].toWei())
-			return fee.hl() + (' (max)' if self.txobj['data'] else '')
+			return self.fee.hl() + (' (max)' if self.txobj['data'] else '')
 
 		def format_view_rel_fee(self,terse):
 			return ''
@@ -300,7 +299,6 @@ class EthereumMMGenTX:
 				'chainId':  Int(d['chainId']),
 				'data':     HexStr(d['data']) }
 			self.tx_gas = o['startGas'] # approximate, but better than nothing
-			self.fee = self.fee_gasPrice2abs(o['gasPrice'].toWei())
 			self.txobj = o
 			return d # 'token_addr','decimals' required by Token subclass
 
@@ -379,7 +377,6 @@ class EthereumMMGenTX:
 			txid = CoinTxID(etx.hash.hex())
 			assert txid == self.coin_txid,"txid in tx.hex doesn't match value in MMGen transaction file"
 			self.tx_gas = o['startGas'] # approximate, but better than nothing
-			self.fee = self.fee_gasPrice2abs(o['gasPrice'].toWei())
 			self.txobj = o
 			return d # 'token_addr','decimals' required by Token subclass
 
@@ -421,11 +418,9 @@ class EthereumMMGenTX:
 
 			self.check_correct_chain()
 
-			fee = self.fee_gasPrice2abs(self.txobj['gasPrice'].toWei())
-
-			if not self.disable_fee_check and (fee > self.proto.max_tx_fee):
+			if not self.disable_fee_check and (self.fee > self.proto.max_tx_fee):
 				die(2,'Transaction fee ({}) greater than {} max_tx_fee ({} {})!'.format(
-					fee,
+					self.fee,
 					self.proto.name,
 					self.proto.max_tx_fee,
 					self.proto.coin ))
@@ -472,7 +467,7 @@ class EthereumMMGenTX:
 			return ETHAmt(self.fee * Decimal('1.101'))
 
 		def bump_fee(self,idx,fee):
-			self.fee = fee
+			self.txobj['gasPrice'] = self.fee_abs2rel(fee,to_unit='eth')
 
 		async def get_nonce(self):
 			return self.txobj['nonce']

+ 1 - 2
mmgen/main_txbump.py

@@ -154,8 +154,7 @@ async def main():
 	tx.bump_fee(output_idx,tx.usr_fee)
 	tx.update_send_amt()
 
-	d = tx.get_fee()
-	assert d == tx.usr_fee and d <= tx.proto.max_tx_fee
+	assert tx.fee <= tx.proto.max_tx_fee
 
 	if tx.proto.base_proto == 'Bitcoin':
 		tx.outputs.sort_bip69() # output amts have changed, so re-sort

+ 9 - 9
mmgen/tx.py

@@ -457,9 +457,6 @@ class MMGenTX:
 			unit = getattr(self.proto.coin_amt,to_unit or 'min_coin_unit')
 			return int(abs_fee // unit // self.estimate_size())
 
-		def get_fee(self):
-			return self.sum_inputs() - self.sum_outputs()
-
 		def get_hex_locktime(self):
 			return int(bytes.fromhex(self.hex[-8:])[::-1].hex(),16)
 
@@ -577,7 +574,6 @@ class MMGenTX:
 
 		# given tx size, rel fee and units, return absolute fee
 		def fee_rel2abs(self,tx_size,units,amt,unit):
-			self.usr_rel_fee = None # TODO
 			if tx_size:
 				return self.proto.coin_amt(amt * tx_size * getattr(self.proto.coin_amt,units[unit]))
 			else:
@@ -1083,15 +1079,19 @@ class MMGenTX:
 				+ ''.join(format_io('inputs'))
 				+ ''.join(format_io('outputs')) )
 
+		@property
+		def fee(self):
+			return self.sum_inputs() - self.sum_outputs()
+
 		def format_view_rel_fee(self,terse):
 			return ' ({} {}, {} of spend amount)'.format(
-				pink(str(self.fee_abs2rel(self.get_fee()))),
+				pink(str(self.fee_abs2rel(self.fee))),
 				self.rel_fee_disp,
-				pink('{:0.6f}%'.format( self.get_fee() / self.send_amt * 100 ))
+				pink('{:0.6f}%'.format( self.fee / self.send_amt * 100 ))
 			)
 
 		def format_view_abs_fee(self):
-			return self.proto.coin_amt(self.get_fee()).hl()
+			return self.proto.coin_amt(self.fee).hl()
 
 		def format_view_verbose_footer(self):
 			tsize = len(self.hex)//2 if self.hex else 'unknown'
@@ -1418,9 +1418,9 @@ class MMGenTX:
 					die(2,'Transaction has Segwit outputs, but this blockchain does not support Segwit'
 							+ ' at the current height')
 
-			if self.get_fee() > self.proto.max_tx_fee:
+			if self.fee > self.proto.max_tx_fee:
 				die(2,'Transaction fee ({}) greater than {} max_tx_fee ({} {})!'.format(
-					self.get_fee(),
+					self.fee,
 					self.proto.name,
 					self.proto.max_tx_fee,
 					self.proto.coin ))

+ 1 - 1
mmgen/txfile.py

@@ -141,7 +141,7 @@ class MMGenTxFile:
 				yield '-' + tx.dcoin
 			yield f'[{tx.send_amt!s}'
 			if tx.is_replaceable():
-				yield ',{}'.format(tx.fee_abs2rel(tx.get_fee(),to_unit=tx.fn_fee_unit))
+				yield ',{}'.format(tx.fee_abs2rel(tx.fee,to_unit=tx.fn_fee_unit))
 			if tx.get_hex_locktime():
 				yield ',tl={}'.format(tx.get_hex_locktime())
 			yield ']'