async def show_xpub(self, derivation, show_screen): self.show_loader(title="Deriving the key...") derivation = derivation.rstrip("/") net = NETWORKS[self.network] xpub = self.keystore.get_xpub(derivation) ver = bip32.detect_version(derivation, default="xpub", network=net) canonical = xpub.to_base58(net["xpub"]) slip132 = xpub.to_base58(ver) if slip132 == canonical: slip132 = None fingerprint = hexlify(self.keystore.fingerprint).decode() prefix = "[%s%s]" % ( fingerprint, derivation[1:], ) res = await show_screen(XPubScreen(xpub=canonical, slip132=slip132, prefix=prefix)) if res == XPubScreen.CREATE_WALLET: await self.create_wallet(derivation, canonical, prefix, ver, show_screen) elif res: filename = "%s-%s.txt" % (fingerprint, derivation[2:].replace("/", "-")) self.write_file(filename, res) await show_screen( Alert("Saved!", "Extended public key is saved to the file:\n\n%s" % filename, button_text="Close") )
async def show_xpub(self, derivation, show_screen): self.show_loader(title="Deriving the key...") derivation = derivation.rstrip("/") net = NETWORKS[self.network] xpub = self.keystore.get_xpub(derivation) ver = bip32.detect_version(derivation, default="xpub", network=net) canonical = xpub.to_base58(net["xpub"]) slip132 = xpub.to_base58(ver) if slip132 == canonical: slip132 = None fingerprint = hexlify(self.keystore.fingerprint).decode() prefix = "[%s%s]" % ( fingerprint, derivation[1:], ) res = await show_screen( XPubScreen(xpub=canonical, slip132=slip132, prefix=prefix)) if res: fname = "%s-%s.txt" % (fingerprint, derivation[2:].replace( "/", "-")) if not platform.is_sd_present(): raise AppError("SD card is not present") platform.mount_sdcard() with open(platform.fpath("/sd/%s" % fname), "w") as f: f.write(res) platform.unmount_sdcard() await show_screen( Alert("Saved!", "Extended public key is saved to the file:\n\n%s" % fname, button_text="Close"))
async def show_xpub(self, derivation, show_screen): derivation = derivation.rstrip("/") net = NETWORKS[self.network] xpub = self.keystore.get_xpub(derivation) ver = bip32.detect_version(derivation, default="xpub", network=net) canonical = xpub.to_base58(net["xpub"]) slip132 = xpub.to_base58(ver) if slip132 == canonical: slip132 = None prefix = "[%s%s]" % (hexlify( self.keystore.fingerprint).decode(), derivation[1:]) await show_screen( XPubScreen(xpub=canonical, slip132=slip132, prefix=prefix))
def save_all_to_sd(self, file_format): fingerprint = hexlify(self.keystore.fingerprint).decode() extension = "json" coin = NETWORKS[self.network]["bip32"] derivations = [ ('bip84', "p2wpkh", "m/84'/%d'/%d'" % (coin, self.account)), ('bip86', "p2tr", "m/86'/%d'/%d'" % (coin, self.account)), ('bip49', "p2sh-p2wpkh", "m/49'/%d'/%d'" % (coin, self.account)), ('bip44', "p2pkh", "m/44'/%d'/%d'" % (coin, self.account)), ('bip48_1', "p2sh-p2wsh", "m/48'/%d'/%d'/1'" % (coin, self.account)), ('bip48_2', "p2wsh", "m/48'/%d'/%d'/2'" % (coin, self.account)), ] if file_format == self.export_specter_diy: # text file with [fgp/der]xpub lines filedata = "" for der in derivations: xpub = self.keystore.get_xpub(der[2]) filedata += "[%s/%s]%s\n" % (fingerprint, der[2][2:].replace("'","h"), xpub.to_base58(NETWORKS[self.network]["xpub"])) extension = "txt" else: # coldcard generic json format m = self.keystore.get_xpub("m") data = { "xpub": m.to_base58(NETWORKS[self.network]["xpub"]), "xfp": fingerprint, "account": self.account, "chain": "BTC" if self.network == "main" else "XTN" } for der in derivations: xpub = self.keystore.get_xpub(der[2]) data[der[0]] = { "name": der[1], "deriv": der[2], "xpub": xpub.to_base58(NETWORKS[self.network]["xpub"]), "_pub": xpub.to_base58(bip32.detect_version(der[2], default="xpub", network=NETWORKS[self.network])) } filedata = json.dumps(data).encode() filename = "%s-%s-%d-all.%s" % (file_format, fingerprint, self.account, extension) self.write_file(filename, filedata) return filename
def get_xpub(self, derivation): xprv = self.root.derive(derivation) ver = bip32.detect_version(derivation, network=self.network) xprv.version = ver return xprv.to_public()
def get_xpub(self, derivation): xpub = self.root.derive(derivation) ver = bip32.detect_version(derivation) xpub.version = ver return xpub.to_public()