def show_qr(self): text = self.tx.raw.decode("hex") text = base_encode(text, base=43) try: self.parent.show_qrcode(text, "Transaction") except Exception as e: self.show_message(str(e))
def main(self): add_menu() welcome = "Use the menu to scan a transaction." droid.fullShow(qr_layout(welcome)) while True: event = droid.eventWait().result if not event: continue elif event["name"] == "key": if event["data"]["key"] == "4": if self.qr_data: self.show_qr(None) self.show_title(welcome) else: break elif event["name"] == "seed": password = self.get_password() if password is False: modal_dialog("Error", "incorrect password") continue seed = wallet.get_mnemonic(password) modal_dialog("Your seed is", seed) elif event["name"] == "password": self.change_password_dialog() elif event["name"] == "xpub": mpk = wallet.get_master_public_key() self.show_qr(mpk) self.show_title("master public key") elif event["name"] == "scan": r = droid.scanBarcode() r = r.result if not r: continue data = r["extras"]["SCAN_RESULT"] data = base_decode(data.encode("utf8"), None, base=43) data = "".join(chr(ord(b)) for b in data).encode("hex") tx = Transaction(data) # except: # modal_dialog('Error', 'Cannot parse transaction') # continue if not wallet.can_sign(tx): modal_dialog("Error", "Cannot sign this transaction") continue lines = map(lambda x: x[0] + u"\t\t" + format_satoshis(x[1]) if x[1] else x[0], tx.get_outputs()) if not modal_question("Sign?", "\n".join(lines)): continue password = self.get_password() if password is False: modal_dialog("Error", "incorrect password") continue droid.dialogCreateSpinnerProgress("Signing") droid.dialogShow() wallet.sign_transaction(tx, password) droid.dialogDismiss() data = base_encode(str(tx).decode("hex"), base=43) self.show_qr(data) self.show_title("Signed Transaction") droid.makeToast("Bye!")