tadd ability to show a receiving address on ledger screen (#3538) - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit 65eae139af5d827ccafc85c2a9e5d0088411ed01 DIR parent c5dae933ee3707ad738decdfece0b0c63010592a HTML Author: mzhou <mzhou@cse.unsw.edu.au> Date: Thu, 11 Jan 2018 04:37:41 +1100 add ability to show a receiving address on ledger screen (#3538) add ability to show a receiving address on ledger screen Diffstat: M plugins/ledger/ledger.py | 19 +++++++++++++++++++ M plugins/ledger/qt.py | 13 +++++++++++++ 2 files changed, 32 insertions(+), 0 deletions(-) --- DIR diff --git a/plugins/ledger/ledger.py b/plugins/ledger/ledger.py t@@ -436,6 +436,20 @@ class Ledger_KeyStore(Hardware_KeyStore): tx.raw = tx.serialize() self.signing = False + def show_address(self, sequence, txin_type): + self.signing = True + # prompt for the PIN before displaying the dialog if necessary + client = self.get_client() + address_path = self.get_derivation()[2:] + "/%d/%d"%sequence + self.handler.show_message(_("Showing address ...")) + segwit = txin_type in ['p2wpkh', 'p2wsh', 'p2wpkh-p2sh', 'p2wsh-p2sh'] + try: + self.get_client().getWalletPublicKey(address_path, showOnScreen=True, segwit=segwit) + except: + pass + finally: + self.handler.finished() + self.signing = False class LedgerPlugin(HW_PluginBase): libraries_available = BTCHIP t@@ -508,3 +522,8 @@ class LedgerPlugin(HW_PluginBase): if client is not None: client.checkDevice() return client + + def show_address(self, wallet, address): + sequence = wallet.get_address_index(address) + txin_type = wallet.get_txin_type(address) + wallet.get_keystore().show_address(sequence, txin_type) DIR diff --git a/plugins/ledger/qt.py b/plugins/ledger/qt.py t@@ -3,6 +3,8 @@ import threading from PyQt5.Qt import QInputDialog, QLineEdit, QVBoxLayout, QLabel from electrum.i18n import _ +from electrum.plugins import hook +from electrum.wallet import Standard_Wallet from .ledger import LedgerPlugin from ..hw_wallet.qt import QtHandlerBase, QtPluginBase from electrum_gui.qt.util import * t@@ -16,6 +18,17 @@ class Plugin(LedgerPlugin, QtPluginBase): def create_handler(self, window): return Ledger_Handler(window) + @hook + def receive_menu(self, menu, addrs, wallet): + print('receive_menu') + if type(wallet) is not Standard_Wallet: + return + keystore = wallet.get_keystore() + if type(keystore) == self.keystore_class and len(addrs) == 1: + def show_address(): + keystore.thread.add(partial(self.show_address, wallet, addrs[0])) + menu.addAction(_("Show on Ledger"), show_address) + class Ledger_Handler(QtHandlerBase): setup_signal = pyqtSignal() auth_signal = pyqtSignal(object)