Browse Source

commands: small fix and clean-up for "serialize" cmd

Docstring was outdated, and
`txout.get('value', txout['value_sats'])`
was a logic bug.

fixes https://github.com/spesmilo/electrum/issues/8265
master
SomberNight 3 years ago
parent
commit
68bba47052
No known key found for this signature in database
GPG Key ID: B33B5F232C6271E9
  1. 34
      electrum/commands.py

34
electrum/commands.py

@ -371,9 +371,17 @@ class Commands:
@command('')
async def serialize(self, jsontx):
"""Create a transaction from json inputs.
Inputs must have a redeemPubkey.
Outputs must be a list of {'address':address, 'value':satoshi_amount}.
"""Create a signed raw transaction from a json tx template.
Example value for "jsontx" arg: {
"inputs": [
{"prevout_hash": "9d221a69ca3997cbeaf5624d723e7dc5f829b1023078c177d37bdae95f37c539", "prevout_n": 1,
"value_sats": 1000000, "privkey": "p2wpkh:cVDXzzQg6RoCTfiKpe8MBvmm5d5cJc6JLuFApsFDKwWa6F5TVHpD"}
],
"outputs": [
{"address": "tb1q4s8z6g5jqzllkgt8a4har94wl8tg0k9m8kv5zd", "value_sats": 990000}
]
}
"""
keypairs = {}
inputs = [] # type: List[PartialTxInput]
@ -386,7 +394,10 @@ class Commands:
else:
raise Exception("missing prevout for txin")
txin = PartialTxInput(prevout=prevout)
txin._trusted_value_sats = int(txin_dict.get('value', txin_dict['value_sats']))
try:
txin._trusted_value_sats = int(txin_dict.get('value') or txin_dict['value_sats'])
except KeyError:
raise Exception("missing 'value_sats' field for txin")
nsequence = txin_dict.get('nsequence', None)
if nsequence is not None:
txin.nsequence = nsequence
@ -399,8 +410,19 @@ class Commands:
txin.script_descriptor = desc
inputs.append(txin)
outputs = [PartialTxOutput.from_address_and_value(txout['address'], int(txout.get('value', txout['value_sats'])))
for txout in jsontx.get('outputs')]
outputs = [] # type: List[PartialTxOutput]
for txout_dict in jsontx.get('outputs'):
try:
txout_addr = txout_dict['address']
except KeyError:
raise Exception("missing 'address' field for txout")
try:
txout_val = int(txout_dict.get('value') or txout_dict['value_sats'])
except KeyError:
raise Exception("missing 'value_sats' field for txout")
txout = PartialTxOutput.from_address_and_value(txout_addr, txout_val)
outputs.append(txout)
tx = PartialTransaction.from_io(inputs, outputs, locktime=locktime)
tx.sign(keypairs)
return tx.serialize()

Loading…
Cancel
Save