python3 updates
This commit is contained in:
parent
d8e37644d3
commit
e02687bcf2
|
@ -255,7 +255,7 @@ class CoinChooserRandom(CoinChooserBase):
|
||||||
|
|
||||||
# And now some random ones
|
# And now some random ones
|
||||||
attempts = min(100, (len(buckets) - 1) * 10 + 1)
|
attempts = min(100, (len(buckets) - 1) * 10 + 1)
|
||||||
permutation = range(len(buckets))
|
permutation = list(range(len(buckets)))
|
||||||
for i in range(attempts):
|
for i in range(attempts):
|
||||||
# Get a random permutation of the buckets, and
|
# Get a random permutation of the buckets, and
|
||||||
# incrementally combine buckets until sufficient
|
# incrementally combine buckets until sufficient
|
||||||
|
|
|
@ -937,7 +937,7 @@ class Network(util.DaemonThread):
|
||||||
self.notify('interfaces')
|
self.notify('interfaces')
|
||||||
|
|
||||||
def maintain_requests(self):
|
def maintain_requests(self):
|
||||||
for interface in self.interfaces.values():
|
for interface in list(self.interfaces.values()):
|
||||||
if interface.request and time.time() - interface.request_time > 20:
|
if interface.request and time.time() - interface.request_time > 20:
|
||||||
interface.print_error("blockchain request timed out")
|
interface.print_error("blockchain request timed out")
|
||||||
self.connection_down(interface.server)
|
self.connection_down(interface.server)
|
||||||
|
|
|
@ -267,20 +267,16 @@ class PaymentRequest:
|
||||||
return self.outputs[:]
|
return self.outputs[:]
|
||||||
|
|
||||||
def send_ack(self, raw_tx, refund_addr):
|
def send_ack(self, raw_tx, refund_addr):
|
||||||
|
|
||||||
pay_det = self.details
|
pay_det = self.details
|
||||||
if not self.details.payment_url:
|
if not self.details.payment_url:
|
||||||
return False, "no url"
|
return False, "no url"
|
||||||
|
|
||||||
paymnt = pb2.Payment()
|
paymnt = pb2.Payment()
|
||||||
paymnt.merchant_data = pay_det.merchant_data
|
paymnt.merchant_data = pay_det.merchant_data
|
||||||
paymnt.transactions.append(raw_tx)
|
paymnt.transactions.append(bfh(raw_tx))
|
||||||
|
|
||||||
ref_out = paymnt.refund_to.add()
|
ref_out = paymnt.refund_to.add()
|
||||||
ref_out.script = transaction.Transaction.pay_script(TYPE_ADDRESS, refund_addr)
|
ref_out.script = transaction.Transaction.pay_script(TYPE_ADDRESS, refund_addr)
|
||||||
paymnt.memo = "Paid using Electrum"
|
paymnt.memo = "Paid using Electrum"
|
||||||
pm = paymnt.SerializeToString()
|
pm = paymnt.SerializeToString()
|
||||||
|
|
||||||
payurl = urllib_parse.urlparse(pay_det.payment_url)
|
payurl = urllib_parse.urlparse(pay_det.payment_url)
|
||||||
try:
|
try:
|
||||||
r = requests.post(payurl.geturl(), data=pm, headers=ACK_HEADERS, verify=ca_path)
|
r = requests.post(payurl.geturl(), data=pm, headers=ACK_HEADERS, verify=ca_path)
|
||||||
|
@ -291,16 +287,13 @@ class PaymentRequest:
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(e)
|
print(e)
|
||||||
return False, "Payment Message/PaymentACK Failed"
|
return False, "Payment Message/PaymentACK Failed"
|
||||||
|
|
||||||
if r.status_code >= 500:
|
if r.status_code >= 500:
|
||||||
return False, r.reason
|
return False, r.reason
|
||||||
|
|
||||||
try:
|
try:
|
||||||
paymntack = pb2.PaymentACK()
|
paymntack = pb2.PaymentACK()
|
||||||
paymntack.ParseFromString(r.content)
|
paymntack.ParseFromString(r.content)
|
||||||
except Exception:
|
except Exception:
|
||||||
return False, "PaymentACK could not be processed. Payment was sent; please manually verify that payment was received."
|
return False, "PaymentACK could not be processed. Payment was sent; please manually verify that payment was received."
|
||||||
|
|
||||||
print("PaymentACK message received: %s" % paymntack.memo)
|
print("PaymentACK message received: %s" % paymntack.memo)
|
||||||
return True, paymntack.memo
|
return True, paymntack.memo
|
||||||
|
|
||||||
|
@ -495,7 +488,7 @@ class InvoiceStore(object):
|
||||||
l = {}
|
l = {}
|
||||||
for k, pr in self.invoices.items():
|
for k, pr in self.invoices.items():
|
||||||
l[k] = {
|
l[k] = {
|
||||||
'hex': bh2u(pr),
|
'hex': bh2u(pr.raw),
|
||||||
'requestor': pr.requestor,
|
'requestor': pr.requestor,
|
||||||
'txid': pr.tx
|
'txid': pr.tx
|
||||||
}
|
}
|
||||||
|
|
|
@ -508,7 +508,7 @@ class DeviceMgr(ThreadJob, PrintError):
|
||||||
usage_page = d['usage_page']
|
usage_page = d['usage_page']
|
||||||
id_ = d['serial_number']
|
id_ = d['serial_number']
|
||||||
if len(id_) == 0:
|
if len(id_) == 0:
|
||||||
id_ = d['path']
|
id_ = str(d['path'])
|
||||||
id_ += str(interface_number) + str(usage_page)
|
id_ += str(interface_number) + str(usage_page)
|
||||||
devices.append(Device(d['path'], interface_number,
|
devices.append(Device(d['path'], interface_number,
|
||||||
id_, product_key, usage_page))
|
id_, product_key, usage_page))
|
||||||
|
|
|
@ -13,7 +13,7 @@ from electrum.plugins import BasePlugin, hook
|
||||||
from electrum.keystore import Hardware_KeyStore, parse_xpubkey
|
from electrum.keystore import Hardware_KeyStore, parse_xpubkey
|
||||||
from electrum.transaction import push_script, Transaction
|
from electrum.transaction import push_script, Transaction
|
||||||
from ..hw_wallet import HW_PluginBase
|
from ..hw_wallet import HW_PluginBase
|
||||||
from electrum.util import format_satoshis_plain, print_error, is_verbose
|
from electrum.util import format_satoshis_plain, print_error, is_verbose, bfh, bh2u
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import hid
|
import hid
|
||||||
|
@ -80,10 +80,11 @@ class Ledger_Client():
|
||||||
childnum = int(lastChild[0])
|
childnum = int(lastChild[0])
|
||||||
else:
|
else:
|
||||||
childnum = 0x80000000 | int(lastChild[0])
|
childnum = 0x80000000 | int(lastChild[0])
|
||||||
xpub = bitcoin.serialize_xpub(0, str(nodeData['chainCode']), str(publicKey), depth, self.i4b(fingerprint), self.i4b(childnum))
|
xpub = bitcoin.serialize_xpub(0, nodeData['chainCode'], publicKey, depth, self.i4b(fingerprint), self.i4b(childnum))
|
||||||
return xpub
|
return xpub
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print_error(e)
|
traceback.print_exc(file=sys.stdout)
|
||||||
|
#print_error(e)
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def has_detached_pin_support(self, client):
|
def has_detached_pin_support(self, client):
|
||||||
|
@ -314,9 +315,9 @@ class Ledger_KeyStore(Hardware_KeyStore):
|
||||||
output_type, addr, amount = txout
|
output_type, addr, amount = txout
|
||||||
txOutput += int_to_hex(amount, 8)
|
txOutput += int_to_hex(amount, 8)
|
||||||
script = tx.pay_script(output_type, addr)
|
script = tx.pay_script(output_type, addr)
|
||||||
txOutput += var_int(len(script)/2)
|
txOutput += var_int(len(script)//2)
|
||||||
txOutput += script
|
txOutput += script
|
||||||
txOutput = txOutput.decode('hex')
|
txOutput = bfh(txOutput)
|
||||||
|
|
||||||
# Recognize outputs - only one output and one change is authorized
|
# Recognize outputs - only one output and one change is authorized
|
||||||
if not p2shTransaction:
|
if not p2shTransaction:
|
||||||
|
@ -340,23 +341,23 @@ class Ledger_KeyStore(Hardware_KeyStore):
|
||||||
for utxo in inputs:
|
for utxo in inputs:
|
||||||
sequence = int_to_hex(utxo[5], 4)
|
sequence = int_to_hex(utxo[5], 4)
|
||||||
if segwitTransaction:
|
if segwitTransaction:
|
||||||
txtmp = bitcoinTransaction(bytearray(utxo[0].decode('hex')))
|
txtmp = bitcoinTransaction(bfh(utxo[0]))
|
||||||
tmp = utxo[3].decode('hex')[::-1].encode('hex')
|
tmp = bfh(utxo[3])[::-1]
|
||||||
tmp += int_to_hex(utxo[1], 4)
|
tmp += bfh(int_to_hex(utxo[1], 4))
|
||||||
tmp += str(txtmp.outputs[utxo[1]].amount).encode('hex')
|
tmp += str(txtmp.outputs[utxo[1]].amount)
|
||||||
chipInputs.append({'value' : tmp.decode('hex'), 'witness' : True, 'sequence' : sequence})
|
chipInputs.append({'value' : tmp, 'witness' : True, 'sequence' : sequence})
|
||||||
redeemScripts.append(bytearray(utxo[2].decode('hex')))
|
redeemScripts.append(bfh(utxo[2]))
|
||||||
elif not p2shTransaction:
|
elif not p2shTransaction:
|
||||||
txtmp = bitcoinTransaction(bytearray(utxo[0].decode('hex')))
|
txtmp = bitcoinTransaction(bfh(utxo[0]))
|
||||||
trustedInput = self.get_client().getTrustedInput(txtmp, utxo[1])
|
trustedInput = self.get_client().getTrustedInput(txtmp, utxo[1])
|
||||||
trustedInput['sequence'] = sequence
|
trustedInput['sequence'] = sequence
|
||||||
chipInputs.append(trustedInput)
|
chipInputs.append(trustedInput)
|
||||||
redeemScripts.append(txtmp.outputs[utxo[1]].script)
|
redeemScripts.append(txtmp.outputs[utxo[1]].script)
|
||||||
else:
|
else:
|
||||||
tmp = utxo[3].decode('hex')[::-1].encode('hex')
|
tmp = bfh(utxo[3])[::-1]
|
||||||
tmp += int_to_hex(utxo[1], 4)
|
tmp += bfh(int_to_hex(utxo[1], 4))
|
||||||
chipInputs.append({'value' : tmp.decode('hex'), 'sequence' : sequence})
|
chipInputs.append({'value' : tmp, 'sequence' : sequence})
|
||||||
redeemScripts.append(bytearray(utxo[2].decode('hex')))
|
redeemScripts.append(bfh(utxo[2]))
|
||||||
|
|
||||||
# Sign all inputs
|
# Sign all inputs
|
||||||
firstTransaction = True
|
firstTransaction = True
|
||||||
|
@ -391,7 +392,7 @@ class Ledger_KeyStore(Hardware_KeyStore):
|
||||||
chipInputs, redeemScripts[inputIndex])
|
chipInputs, redeemScripts[inputIndex])
|
||||||
if not p2shTransaction:
|
if not p2shTransaction:
|
||||||
outputData = self.get_client().finalizeInput(output, format_satoshis_plain(outputAmount),
|
outputData = self.get_client().finalizeInput(output, format_satoshis_plain(outputAmount),
|
||||||
format_satoshis_plain(tx.get_fee()), changePath, bytearray(rawTx.decode('hex')))
|
format_satoshis_plain(tx.get_fee()), changePath, bfh(rawTx))
|
||||||
else:
|
else:
|
||||||
outputData = self.get_client().finalizeInputFull(txOutput)
|
outputData = self.get_client().finalizeInputFull(txOutput)
|
||||||
outputData['outputData'] = txOutput
|
outputData['outputData'] = txOutput
|
||||||
|
@ -425,7 +426,7 @@ class Ledger_KeyStore(Hardware_KeyStore):
|
||||||
|
|
||||||
for i, txin in enumerate(tx.inputs()):
|
for i, txin in enumerate(tx.inputs()):
|
||||||
signingPos = inputs[i][4]
|
signingPos = inputs[i][4]
|
||||||
txin['signatures'][signingPos] = str(signatures[i]).encode('hex')
|
txin['signatures'][signingPos] = bh2u(signatures[i])
|
||||||
tx.raw = tx.serialize()
|
tx.raw = tx.serialize()
|
||||||
self.signing = False
|
self.signing = False
|
||||||
|
|
||||||
|
|
|
@ -285,7 +285,7 @@ class TrezorCompatiblePlugin(HW_PluginBase):
|
||||||
pubkeys = map(f, x_pubkeys)
|
pubkeys = map(f, x_pubkeys)
|
||||||
multisig = self.types.MultisigRedeemScriptType(
|
multisig = self.types.MultisigRedeemScriptType(
|
||||||
pubkeys=pubkeys,
|
pubkeys=pubkeys,
|
||||||
signatures=map(lambda x: bfh(x)[:-1] if x else '', txin.get('signatures')),
|
signatures=map(lambda x: bfh(x)[:-1] if x else b'', txin.get('signatures')),
|
||||||
m=txin.get('num_sig'),
|
m=txin.get('num_sig'),
|
||||||
)
|
)
|
||||||
txinputtype = self.types.TxInputType(
|
txinputtype = self.types.TxInputType(
|
||||||
|
|
Loading…
Reference in New Issue