The export of the private key failed and this prompt appears
“Only legacy wallets are supported by this command (code -4)”
It's because it's a descriptor wallet which you should extract the master private key(xpriv) using "listdescriptors true" and from there derive the addresses. I'll give you a script that does it, but it's missing the taproot addresses which this script doesn't derive.
import hashlib
import base58
import bip32utils
import ecdsa
def sha256(data):
return hashlib.sha256(data).digest()
def ripemd160(data):
h = hashlib.new('ripemd160')
h.update(data)
return h.digest()
def bch32_plmd(vals):
gen = [0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3]
chk = 1
for v in vals:
b = (chk >> 25)
chk = (chk & 0x1ffffff) << 5 ^ v
for i in range(5):
chk ^= gen[i] if ((b >> i) & 1) else 0
return chk
def bch32_expd(hrp):
return [ord(x) >> 5 for x in hrp] + [0] + [ord(x) & 31 for x in hrp]
def bch32_chksm(hrp, data):
vals = bch32_expd(hrp) + data
plmd = bch32_plmd(vals + [0, 0, 0, 0, 0, 0]) ^ 1
return [(plmd >> 5 * (5 - i)) & 31 for i in range(6)]
def bch32_enc(hrp, data):
comb = data + bch32_chksm(hrp, data)
BECH_CHRS = 'qpzry9x8gf2tvdw0s3jn54khce6mua7l'
return hrp + '1' + ''.join([BECH_CHRS[d] for d in comb])
def cnvrt_bits(data, fbits, tbits, pad=True):
acc = 0
bits = 0
ret = []
maxv = (1 << tbits) - 1
for val in data:
if val < 0 or val >> fbits:
raise ValueError("Invalid value")
acc = (acc << fbits) | val
bits += fbits
while bits >= tbits:
bits -= tbits
ret.append((acc >> bits) & maxv)
if pad:
if bits:
ret.append((acc << (tbits - bits)) & maxv)
elif bits >= fbits or ((acc << (tbits - bits)) & maxv):
raise ValueError("Invalid bits")
return ret
def bch_addr(pubk):
sha256_r = sha256(pubk)
rmd = ripemd160(sha256_r)
data = cnvrt_bits(rmd, 8, 5)
data = [0] + data
hrp = 'bc'
addr = bch32_enc(hrp, data)
return addr
def p2sh_p2wpkh_addr(pubk):
sha256_r = sha256(pubk)
rmd = ripemd160(sha256_r)
scr_sig = b'\x00\x14' + rmd
scr_hash = ripemd160(sha256(scr_sig))
return base58.b58encode_check(b'\x05' + scr_hash).decode()
def derive_addresses(xprv, drv):
bip32_root_key_obj = bip32utils.BIP32Key.fromExtendedKey(xprv)
result_text = ""
result_text += "Bech32 Addresses (BIP84):\n"
for i in range(int(drv)):
# Receiving Address (index 0)
drv_key_b84_recv = bip32_root_key_obj.ChildKey(84 + 0x80000000).ChildKey(0 + 0x80000000).ChildKey(0 + 0x80000000).ChildKey(0).ChildKey(i)
priv_key_b84_recv = drv_key_b84_recv.WalletImportFormat()
pubkey_b84_recv = drv_key_b84_recv.PublicKey().hex()
pubk_bytes_b84_recv = bytes.fromhex(pubkey_b84_recv)
bch32_addr_recv = bch_addr(pubk_bytes_b84_recv)
result_text += f"Receiving Address {i}:\nPrivate Key: {priv_key_b84_recv}\nPublic Key: {pubkey_b84_recv}\nSegWit Address (Bech32): {bch32_addr_recv}\n\n"
# Change Address (index 1)
drv_key_b84_change = bip32_root_key_obj.ChildKey(84 + 0x80000000).ChildKey(0 + 0x80000000).ChildKey(0 + 0x80000000).ChildKey(1).ChildKey(i)
priv_key_b84_change = drv_key_b84_change.WalletImportFormat()
pubkey_b84_change = drv_key_b84_change.PublicKey().hex()
pubk_bytes_b84_change = bytes.fromhex(pubkey_b84_change)
bch32_addr_change = bch_addr(pubk_bytes_b84_change)
result_text += f"Change Address {i}:\nPrivate Key: {priv_key_b84_change}\nPublic Key: {pubkey_b84_change}\nSegWit Address (Bech32): {bch32_addr_change}\n\n"
result_text += "Legacy Addresses (BIP44):\n"
for i in range(int(drv)):
# Receiving Address (index 0)
drv_key_b44_recv = bip32_root_key_obj.ChildKey(44 + 0x80000000).ChildKey(0 + 0x80000000).ChildKey(0 + 0x80000000).ChildKey(0).ChildKey(i)
priv_key_b44_recv = drv_key_b44_recv.WalletImportFormat()
pubkey_b44_recv = drv_key_b44_recv.PublicKey().hex()
result_text += f"Receiving Address {i}:\nPrivate Key: {priv_key_b44_recv}\nPublic Key: {pubkey_b44_recv}\nLegacy Address (BIP44): {drv_key_b44_recv.Address()}\n\n"
# Change Address (index 1)
drv_key_b44_change = bip32_root_key_obj.ChildKey(44 + 0x80000000).ChildKey(0 + 0x80000000).ChildKey(0 + 0x80000000).ChildKey(1).ChildKey(i)
priv_key_b44_change = drv_key_b44_change.WalletImportFormat()
pubkey_b44_change = drv_key_b44_change.PublicKey().hex()
result_text += f"Change Address {i}:\nPrivate Key: {priv_key_b44_change}\nPublic Key: {pubkey_b44_change}\nLegacy Address (BIP44): {drv_key_b44_change.Address()}\n\n"
result_text += "P2SH Addresses (BIP49):\n"
for i in range(int(drv)):
# Receiving Address (index 0)
drv_key_b49_recv = bip32_root_key_obj.ChildKey(49 + 0x80000000).ChildKey(0 + 0x80000000).ChildKey(0 + 0x80000000).ChildKey(0).ChildKey(i)
priv_key_b49_recv = drv_key_b49_recv.WalletImportFormat()
pubkey_b49_recv = drv_key_b49_recv.PublicKey().hex()
pubk_bytes_b49_recv = bytes.fromhex(pubkey_b49_recv)
p2sh_addr_recv = p2sh_p2wpkh_addr(pubk_bytes_b49_recv)
result_text += f"Receiving Address {i}:\nPrivate Key: {priv_key_b49_recv}\nPublic Key: {pubkey_b49_recv}\nP2SH Address (BIP49): {p2sh_addr_recv}\n\n"
# Change Address (index 1)
drv_key_b49_change = bip32_root_key_obj.ChildKey(49 + 0x80000000).ChildKey(0 + 0x80000000).ChildKey(0 + 0x80000000).ChildKey(1).ChildKey(i)
priv_key_b49_change = drv_key_b49_change.WalletImportFormat()
pubkey_b49_change = drv_key_b49_change.PublicKey().hex()
pubk_bytes_b49_change = bytes.fromhex(pubkey_b49_change)
p2sh_addr_change = p2sh_p2wpkh_addr(pubk_bytes_b49_change)
result_text += f"Change Address {i}:\nPrivate Key: {priv_key_b49_change}\nPublic Key: {pubkey_b49_change}\nP2SH Address (BIP49): {p2sh_addr_change}\n\n"
return result_text
xprv = "Your-Xpriv"
drv =10
result = derive_addresses(xprv, drv)
print(result)
xprv = "Your-Xpriv"
drv =Number of addresses to generate