Пример #1
0
 def get_xkeys(self, seed, t, passphrase, derivation):
     assert is_any_2fa_seed_type(t)
     xtype = 'standard' if t == '2fa' else 'p2wsh'
     bip32_seed = Mnemonic.mnemonic_to_seed(seed, passphrase)
     rootnode = BIP32Node.from_rootseed(bip32_seed, xtype=xtype)
     child_node = rootnode.subkey_at_private_derivation(derivation)
     return child_node.to_xprv(), child_node.to_xpub()
Пример #2
0
 def get_xkeys(self, seed, t, passphrase, derivation):
     assert is_any_2fa_seed_type(t)
     xtype = 'standard' if t == '2fa' else 'p2wsh'
     bip32_seed = Mnemonic.mnemonic_to_seed(seed, passphrase)
     rootnode = BIP32Node.from_rootseed(bip32_seed, xtype=xtype)
     child_node = rootnode.subkey_at_private_derivation(derivation)
     return child_node.to_xprv(), child_node.to_xpub()
Пример #3
0
    def _do_test_bip32(self, seed: str, sequence):
        node = BIP32Node.from_rootseed(bfh(seed), xtype='standard')
        xprv, xpub = node.to_xprv(), node.to_xpub()
        self.assertEqual("m/", sequence[0:2])
        sequence = sequence[2:]
        for n in sequence.split('/'):
            if n[-1] != "'":
                xpub2 = BIP32Node.from_xkey(xpub).subkey_at_public_derivation(n).to_xpub()
            node = BIP32Node.from_xkey(xprv).subkey_at_private_derivation(n)
            xprv, xpub = node.to_xprv(), node.to_xpub()
            if n[-1] != "'":
                self.assertEqual(xpub, xpub2)

        return xpub, xprv
Пример #4
0
    def _do_test_bip32(self, seed: str, sequence):
        node = BIP32Node.from_rootseed(bfh(seed), xtype='standard')
        xprv, xpub = node.to_xprv(), node.to_xpub()
        self.assertEqual("m/", sequence[0:2])
        sequence = sequence[2:]
        for n in sequence.split('/'):
            if n[-1] != "'":
                xpub2 = BIP32Node.from_xkey(xpub).subkey_at_public_derivation(n).to_xpub()
            node = BIP32Node.from_xkey(xprv).subkey_at_private_derivation(n)
            xprv, xpub = node.to_xprv(), node.to_xpub()
            if n[-1] != "'":
                self.assertEqual(xpub, xpub2)

        return xpub, xprv
Пример #5
0
def main():

    seed = globals().get('seed', None)
    if 'wallet' not in globals():
        # Not in electrum console, free to toggle network
        constants.set_testnet()
        if len(argv) > 1:
            seed = argv[1]

    if (constants.net.TESTNET):

        bip = {}
        (mnemo, tprv, gwif) = [None] * 3

        if seed:
            (tmp, seed) = (seed, None)
            if '0x' == tmp[:2].lower():
                tmp = tmp[2:]
            if set(tmp).issubset(hexdigits) and 64 == len(tmp):
                seed = bytes.fromhex(tmp)
                gwif = to_wif(seed, True, 'p2pkh').split(':')[
                    -1]  # to_wif(seed,True,'').split(':')[-1]
            elif 'tprv' == tmp[:4]:
                tprv = tmp
            elif 12 == len(tmp.split()):
                mnemo = tmp
            else:
                gwif = tmp
                _, seed, _ = from_wif(tmp)

        bip39 = BIP39("English")
        if not (seed or mnemo or gwif or tprv):
            mnemo = bip39.generate()
        if mnemo:
            seed = bip39.to_seed(mnemo)
        if tprv:
            bip32 = BIP32Node.from_xkey(tprv)
        if seed:
            bip32 = BIP32Node.from_rootseed(seed, xtype='standard')
            tprv = bip32.to_xprv()

        desc = {
            '44': ['pkh'],
            '49': ['wpkh', 'sh'],
            '84': ['wpkh'],
            '86': ['tr']
        }
        conf = {
            '44': 'legacy',
            '49': 'p2sh-segwit',
            '84': 'bech32',
            '86': 'bech32m'
        }
        for k in desc.keys():
            imp = {'timestamp': 'now', 'range': [0, 1000], 'next_index': 1}
            imp = [dict(imp), dict(imp)]
            acct = f"{k}'/1'/0'"
            if gwif:
                key = seed
                wif = gwif
            else:
                key = bip32.subkey_at_private_derivation(
                    f"m/{acct}/0/0").eckey.get_secret_bytes()
                wif = to_wif(key, True, 'p2pkh').split(':')[-1]
            bip[k] = {}
            bip[k]['key'] = key.hex()
            bip[k]['wif'] = wif
            change = 0
            for j in ['addr', 'change']:
                path = f"{acct}/{change}"
                desc_str = f"{tprv}/{path}/*"
                for i in desc[k]:
                    desc_str = f"{i}({desc_str})"
                desc_str = descsum_create(desc_str)
                imp[change]['desc'] = desc_str
                imp[change]['internal'] = bool(change)
                imp[change]['active'] = not bool(change)
                bip[k][j] = {}
                bip[k][j]['derivation'] = path
                bip[k][j]['desc'] = desc_str
                bip[k][j]['import'] = 'importdescriptors ' + dumps(
                    imp[change]).replace('"', r'\"')
                change += 1
            imp_txt = dumps(imp).replace('"', r'\"')
            if '86' == k:
                cmd = ''
            else:
                cmd = f'createwallet "bip{k}-berkley" false true\n'
                cmd += f'sethdseed true "{wif}"\n'
            cmd += f'createwallet "bip{k}-sqlite"  false true "" false true\n'
            cmd += f'importdescriptors "{imp_txt}"'
            bip[k]['import'] = imp_txt
            bip[k]['commands'] = cmd

        print(f'\n# Your BIP39 Mnemonic:    "{mnemo}"')
        print(f'# Your BIP32 Root Key:    "{tprv}"')
        print(
            f'\n# Your legacy hdseed      wif:"{bip["44"]["wif"]}", priv:"{bip["44"]["key"]}"'
        )
        print(
            f'# Your p2sh-segwit hdseed wif:"{bip["49"]["wif"]}", priv:"{bip["49"]["key"]}"'
        )
        print(
            f'# Your bech32 hdseed      wif:"{bip["84"]["wif"]}", priv:"{bip["84"]["key"]}"\n'
        )

        for k in desc.keys():
            print(f'##################################################')
            print(
                f'# Your BIP{k} config is:\ntest.addresstype={conf[k]}\ntest.changetype={conf[k]}\n'
            )
            print(f'# Your BIP{k} commands are:\n{bip[k]["commands"]}\n')

    else:
        print("You are not on Testnet, Exiting for safety")
Пример #6
0
 def get_account_xpub(account_path):
     root_seed = bip39_to_seed(mnemonic, passphrase)
     root_node = BIP32Node.from_rootseed(root_seed, xtype="standard")
     account_node = root_node.subkey_at_private_derivation(account_path)
     account_xpub = account_node.to_xpub()
     return account_xpub