pycoin icon indicating copy to clipboard operation
pycoin copied to clipboard

Issue with Litecoin (LTC) parsing

Open ravi-ojha opened this issue 4 months ago • 0 comments

What I was trying to do?

Generate addresses for Account Extended Public Key (specifically bip84_pub

What's the error?

It returns None when hparse function is called.

What's the resolution?

The reason hparse returns None is due to this check. if data is None or prefix is None or not data.startswith(prefix). The prefix comes out as None. The value for bip84_pub_prefix is not set correctly for LTC. That's why the prefix is None. If you remove this condition check, it will generate the correct LTC addresses nevertheless.

I think the real solution is to update symbol/ltc.py and pass extra kwargs bip84_prv_prefix_hex="04b2430c", bip84_pub_prefix_hex="04B24746", in create_bitcoinish_network function.

Here's my full script if you want to reproduce it.

Dependencies: pycoin==0.92.20230326, tqdm

from pycoin.networks.registry import network_for_netcode
from tqdm import tqdm

# Your BIP32 Account extended public key
ZPUB = "zpub6qXw6cLRkWUQVGgNU1qXhSmGY9fcmvaosAj6NbbMkBZSD1xUhGVyQvyRPEuCizbEn8arDymyAQZzyxRdcjwL9YszG3fZC2cPUg6uiB8ZvuS"  # noqa


network = network_for_netcode("LTC")


def derive_bech32_address(zpub, derivation_path):
    k = network.parse.bip84_pub(zpub)  # k will be None because unless that condition explained above is removed
    a = k.subkey_for_path(derivation_path)
    bech32_add = network.address.for_p2pkh_wit(a.hash160())
    return bech32_add


def generate_ltc_addresses():
    addresses = []
    COUNT = 100

    for i in tqdm(range(COUNT)):
        address = derive_bech32_address(ZPUB, f"0/{i}")
        addresses.append(address)

    with open("ltc_addresses.txt", "w") as f:
        for address in addresses:
            f.write(f"{address}\n")


if __name__ == "__main__":
    generate_ltc_addresses()

ravi-ojha avatar Feb 08 '24 11:02 ravi-ojha