tdo not perform satoshi conversion in the argument parser - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit 679fc69cf1276475f677b167e365d5ce5563a00c DIR parent 1d1d76b1ad8e2e93b0daa52469dcbaef6322e110 HTML Author: ThomasV <thomasv@electrum.org> Date: Wed, 22 Feb 2017 11:23:12 +0100 do not perform satoshi conversion in the argument parser Diffstat: M lib/commands.py | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) --- DIR diff --git a/lib/commands.py b/lib/commands.py t@@ -45,6 +45,12 @@ from paymentrequest import PR_PAID, PR_UNPAID, PR_UNKNOWN, PR_EXPIRED import contacts known_commands = {} + +def satoshis(amount): + # satoshi conversion must not be performed by the parser + return int(COIN*Decimal(amount)) if amount not in ['!', None] else amount + + class Command: def __init__(self, func, s): t@@ -216,7 +222,7 @@ class Commands: else: raise BaseException('No redeem script') - outputs = map(lambda x: (TYPE_ADDRESS, x[0], int(COIN*Decimal(x[1]))), outputs) + outputs = map(lambda x: (TYPE_ADDRESS, x[0], satoshis(x[1])), outputs) tx = Transaction.from_io(inputs, outputs, locktime=locktime) tx.sign(keypairs) return tx.as_dict() t@@ -378,6 +384,7 @@ class Commands: """Sweep private keys. Returns a transaction that spends UTXOs from privkey to a destination address. The transaction is not broadcasted.""" + tx_fee = satoshis(tx_fee) privkeys = privkey if type(privkey) is list else [privkey] self.nocheck = nocheck dest = self._resolver(destination) t@@ -404,8 +411,7 @@ class Commands: final_outputs = [] for address, amount in outputs: address = self._resolver(address) - if amount != '!': - amount = int(COIN*Decimal(amount)) + amount = satoshis(amount) final_outputs.append((TYPE_ADDRESS, address, amount)) coins = self.wallet.get_spendable_coins(domain) t@@ -419,6 +425,7 @@ class Commands: @command('wp') def payto(self, destination, amount, tx_fee=None, from_addr=None, change_addr=None, nocheck=False, unsigned=False, rbf=False): """Create a transaction. """ + tx_fee = satoshis(tx_fee) domain = [from_addr] if from_addr else None tx = self._mktx([(destination, amount)], tx_fee, change_addr, domain, nocheck, unsigned, rbf) return tx.as_dict() t@@ -426,6 +433,7 @@ class Commands: @command('wp') def paytomany(self, outputs, tx_fee=None, from_addr=None, change_addr=None, nocheck=False, unsigned=False, rbf=False): """Create a multi-output transaction. """ + tx_fee = to_satoshis(tx_fee) domain = [from_addr] if from_addr else None tx = self._mktx(outputs, tx_fee, change_addr, domain, nocheck, unsigned, rbf) return tx.as_dict() t@@ -572,7 +580,7 @@ class Commands: addr = self.wallet.create_new_address(False) else: return False - amount = int(COIN*Decimal(amount)) + amount = satoshis(amount) expiration = int(expiration) if expiration else None req = self.wallet.make_payment_request(addr, amount, memo, expiration) self.wallet.add_payment_request(req, self.config) t@@ -688,8 +696,8 @@ arg_types = { 'jsontx': json_loads, 'inputs': json_loads, 'outputs': json_loads, - 'tx_fee': lambda x: int(COIN*Decimal(x)) if x is not None else None, - 'amount': lambda x: str(Decimal(x)) if x!='!' else '!', + 'tx_fee': lambda x: str(Decimal(x)) if x is not None else None, + 'amount': lambda x: str(Decimal(x)) if x != '!' else '!', } config_variables = {