electrum

Electrum Bitcoin wallet
git clone https://git.parazyd.org/electrum
Log | Files | Refs | Submodules

commit b3a84e3137c020db5795cafda9daae95ee1c345f
parent 922a48f2b74bd6c58682f9d5b6163c4fbd45981a
Author: ghost43 <somber.night@protonmail.com>
Date:   Fri,  8 Jan 2021 23:43:20 +0000

Merge pull request #6922 from Coldcard/pr-v321

Export full derivation paths for Coldcard v3.2.1
Diffstat:
Melectrum/plugins/coldcard/README.md | 32++++++--------------------------
Melectrum/plugins/coldcard/coldcard.py | 15++++-----------
2 files changed, 10 insertions(+), 37 deletions(-)

diff --git a/electrum/plugins/coldcard/README.md b/electrum/plugins/coldcard/README.md @@ -1,4 +1,3 @@ - # Coldcard Hardware Wallet Plugin ## Just the glue please @@ -14,22 +13,18 @@ this reason, all PIN code entry is done directly on the device. Coldcard does not appear on the USB bus until unlocked with appropriate PIN. Initial setup, and seed generation must be done offline. -Coldcard uses an emerging standard for unsigned tranasctions: +Coldcard uses the standard for unsigned tranasctions: PSBT = Partially Signed Bitcoin Transaction = BIP174 -However, this spec is still under heavy discussion and in flux. At -this point, the PSBT files generated will only be compatible with -Coldcard. - The Coldcard can be used 100% offline: it can generate a skeleton Electrum wallet and save it to MicroSD card. Transport that file to Electrum and it will fetch history, blockchain details and then operate in "unpaired" mode. -Spending transactions can be saved to MicroSD using the "Export PSBT" -button on the transaction preview dialog (when this plugin is -owner of the wallet). That PSBT can be signed on the Coldcard +Spending transactions can be saved to MicroSD using by exporting them +from transaction preview dialog (when this plugin is +owner of the wallet). That PSBT is then signed on the Coldcard (again using MicroSD both ways). The result is a ready-to-transmit bitcoin transaction, which can be transmitted using Tools > Load Transaction > From File in Electrum or really any tool. @@ -39,12 +34,8 @@ Transaction > From File in Electrum or really any tool. ## TODO Items - No effort yet to support translations or languages other than English, sorry. -- Coldcard PSBT format is not likely to be compatible with other devices, because the BIP174 is still in flux. -- Segwit support not 100% complete: can pay to them, but cannot setup wallet to receive them. -- Limited support for segwit wrapped in P2SH. -- Someday we could support multisig hardware wallets based on PSBT where each participant - is using different devices/systems for signing, however, that belongs in an independant - plugin that is PSBT focused and might not require a Coldcard to be present. +- We support multisig hardware wallets based on PSBT where each participant + is using different devices/systems for signing. ### Ctags @@ -52,14 +43,3 @@ Transaction > From File in Electrum or really any tool. ctags -f .tags electrum `find . -name ENV -prune -o -name \*.py` - -### Working with latest ckcc-protocol - -- at top level, do this: - - pip install -e git+ssh://git@github.com/Coldcard/ckcc-protocol.git#egg=ckcc-protocol - -- but you'll need the https version of that, not ssh like I can. -- also a branch name would be good in there -- do `pip uninstall ckcc` first -- see <https://stackoverflow.com/questions/4830856> diff --git a/electrum/plugins/coldcard/coldcard.py b/electrum/plugins/coldcard/coldcard.py @@ -570,28 +570,21 @@ class ColdcardPlugin(HW_PluginBase): print(f'Format: {wallet.txin_type.upper()}' , file=fp) xpubs = [] - derivs = set() for xpub, ks in zip(wallet.get_master_public_keys(), wallet.get_keystores()): # type: str, KeyStoreWithMPK fp_bytes, der_full = ks.get_fp_and_derivation_to_be_used_in_partial_tx(der_suffix=[], only_der_suffix=False) fp_hex = fp_bytes.hex().upper() der_prefix_str = bip32.convert_bip32_intpath_to_strpath(der_full) xpubs.append( (fp_hex, xpub, der_prefix_str) ) - derivs.add(der_prefix_str) - # Derivation doesn't matter too much to the Coldcard, since it - # uses key path data from PSBT or USB request as needed. However, - # if there is a clear value, provide it. - if len(derivs) == 1: - print("Derivation: " + derivs.pop(), file=fp) + # Before v3.2.1 derivation didn't matter too much to the Coldcard, since it + # could use key path data from PSBT or USB request as needed. However, + # derivation data is now required. print('', file=fp) assert len(xpubs) == wallet.n for xfp, xpub, der_prefix in xpubs: - if derivs: - # show as a comment if unclear - print(f'# derivation: {der_prefix}', file=fp) - + print(f'Derivation: {der_prefix}', file=fp) print(f'{xfp}: {xpub}\n', file=fp) def show_address(self, wallet, address, keystore: 'Coldcard_KeyStore' = None):