Esempio n. 1
0
 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")
         )
Esempio n. 2
0
 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"))
Esempio n. 3
0
 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))
Esempio n. 4
0
    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
Esempio n. 5
0
 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()