coldcard: do link_wallet in load_wallet hook instead
make_unsigned_transaction might not run in some code paths (e.g. when user uses "Load transaction" UI function)
This commit is contained in:
@@ -251,7 +251,7 @@ class Coldcard_KeyStore(Hardware_KeyStore):
|
|||||||
self.ux_busy = False
|
self.ux_busy = False
|
||||||
|
|
||||||
# for multisig I need to know what wallet this keystore is part of
|
# for multisig I need to know what wallet this keystore is part of
|
||||||
# this is captured by hooling make_unsigned_transaction
|
# will be set by link_wallet
|
||||||
self.my_wallet = None
|
self.my_wallet = None
|
||||||
|
|
||||||
# Seems like only the derivation path and resulting **derived** xpub is stored in
|
# Seems like only the derivation path and resulting **derived** xpub is stored in
|
||||||
@@ -660,14 +660,20 @@ class ColdcardPlugin(HW_PluginBase):
|
|||||||
def link_wallet(cls, wallet):
|
def link_wallet(cls, wallet):
|
||||||
# PROBLEM: wallet.sign_transaction() does not pass in the wallet to the individual
|
# PROBLEM: wallet.sign_transaction() does not pass in the wallet to the individual
|
||||||
# keystores, and we need to know about our co-signers at that time.
|
# keystores, and we need to know about our co-signers at that time.
|
||||||
|
# FIXME the keystore needs a reference to the wallet object because
|
||||||
|
# it constructs a PSBT from an electrum tx object inside keystore.sign_transaction.
|
||||||
|
# instead keystore.sign_transaction's API should be changed such that its input
|
||||||
|
# *is* a PSBT and not an electrum tx object
|
||||||
for ks in wallet.get_keystores():
|
for ks in wallet.get_keystores():
|
||||||
if type(ks) == Coldcard_KeyStore:
|
if type(ks) == Coldcard_KeyStore:
|
||||||
if not ks.my_wallet:
|
if not ks.my_wallet:
|
||||||
ks.my_wallet = wallet
|
ks.my_wallet = wallet
|
||||||
|
|
||||||
@hook
|
@hook
|
||||||
def make_unsigned_transaction(self, wallet, tx):
|
def load_wallet(self, wallet, window):
|
||||||
# - capture wallet containing each keystore early in the process
|
# make sure hook in superclass also runs:
|
||||||
|
if hasattr(super(), 'load_wallet'):
|
||||||
|
super().load_wallet(wallet, window)
|
||||||
self.link_wallet(wallet)
|
self.link_wallet(wallet)
|
||||||
|
|
||||||
# EOF
|
# EOF
|
||||||
|
|||||||
@@ -214,9 +214,6 @@ class Plugin(ColdcardPlugin, QtPluginBase):
|
|||||||
else:
|
else:
|
||||||
desc = _("Combined from %d PSBT files") % len(psbts)
|
desc = _("Combined from %d PSBT files") % len(psbts)
|
||||||
|
|
||||||
# need to associated our pluging to this wallet
|
|
||||||
ColdcardPlugin.link_wallet(wallet)
|
|
||||||
|
|
||||||
window.show_transaction(tx, desc)
|
window.show_transaction(tx, desc)
|
||||||
|
|
||||||
class Coldcard_Handler(QtHandlerBase):
|
class Coldcard_Handler(QtHandlerBase):
|
||||||
|
|||||||
Reference in New Issue
Block a user