From 4d1ec957c7d828bba17836e0d368e5674220492a Mon Sep 17 00:00:00 2001 From: LC Date: Sun, 4 Jan 2026 20:16:10 +0000 Subject: [PATCH] Update wallet scripts: rename hdwallet_t.py to pyhdwallet.py and modify recovery script --- _toDelete/hdwallet_recovery.py | 56 +++++++++------------------- src/{hdwallet_t.py => pyhdwallet.py} | 31 +++++++++------ 2 files changed, 37 insertions(+), 50 deletions(-) rename src/{hdwallet_t.py => pyhdwallet.py} (96%) diff --git a/_toDelete/hdwallet_recovery.py b/_toDelete/hdwallet_recovery.py index e5b5f2d..e9dbf4b 100644 --- a/_toDelete/hdwallet_recovery.py +++ b/_toDelete/hdwallet_recovery.py @@ -537,53 +537,31 @@ def cmd_recover(args): def cmd_test(args): - require_for_derive(False, ["ethereum"]) # minimal - from bip_utils import Bip39SeedGenerator, Bip39MnemonicValidator + with NetworkGuard("test"): + require_for_offline(["ethereum", "solana"]) - print("๐Ÿงช Running Trezor BIP39/BIP32 test vectors...") + from bip_utils import Bip39SeedGenerator - mnemonic = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about" - passphrase = "crypto" - expected_seed_hex = "92c58d3f4fe52f0111d314f3fa8f10ba498751c37e7c36475c2a5b60145b29708576e11bf6c5c46efac1add0cc26e07c69eb65476742082f9c6460f132181cfe" - expected_fp = "AECCC350" + print("๐Ÿงช Running tests...") - tests = [{ - "mnemonic": mnemonic, - "passphrase": passphrase, - "expected_seed_hex": expected_seed_hex, - "expected_fp": expected_fp, - }] + # --- Existing vector (yours) --- + mnemonic = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about" + passphrase = "" # empty + seed_bytes = Bip39SeedGenerator(mnemonic).Generate(passphrase) - all_passed = True - for i, test in enumerate(tests, 1): - print(f"\nTest {i}: With passphrase '{test['passphrase']}'") + # --- NEW: Solana path->address test --- + expected_addr = "HAgk14JpMQLgt6rVgv7cBQFJWFto5Dqxi472uT3DKpqk" + path = "m/44'/501'/0'/0'" - if not Bip39MnemonicValidator().IsValid(test["mnemonic"]): - print("โŒ Invalid mnemonic") - all_passed = False - continue + seed32 = slip10_ed25519_seed32_from_path(seed_bytes, path) # or slip10_ed25519_seed32_by_path(...) + got_addr = sol_pubkey_b58_from_seed32(seed32) - seed_bytes = Bip39SeedGenerator(test["mnemonic"]).Generate(test["passphrase"]) - seed_hex = seed_bytes.hex() + if got_addr != expected_addr: + raise RuntimeError(f"Solana address mismatch for {path}: got {got_addr}, expected {expected_addr}") - if seed_hex != test["expected_seed_hex"]: - print(f"โŒ Seed mismatch: got {seed_hex}, expected {test['expected_seed_hex']}") - all_passed = False - else: - print("โœ… Seed correct") + print(f"โœ… Solana OK: {path} => {got_addr}") + print("โœ… All tests passed") - fp = get_master_fingerprint(seed_bytes) - if fp != test["expected_fp"]: - print(f"โŒ Fingerprint mismatch: got {fp}, expected {test['expected_fp']}") - all_passed = False - else: - print(f"โœ… Fingerprint correct: {fp}") - - if all_passed: - print("\n๐ŸŽ‰ All tests passed!") - else: - print("\nโŒ Some tests failed!") - sys.exit(1) # ----------------------------------------------------------------------------- diff --git a/src/hdwallet_t.py b/src/pyhdwallet.py similarity index 96% rename from src/hdwallet_t.py rename to src/pyhdwallet.py index 145055d..f31a9c1 100644 --- a/src/hdwallet_t.py +++ b/src/pyhdwallet.py @@ -491,21 +491,30 @@ def cmd_recover(args): def cmd_test(args): with NetworkGuard("test"): - require_for_offline(["ethereum"]) - from bip_utils import Bip39SeedGenerator, Bip39MnemonicValidator + require_for_offline(["ethereum", "solana"]) + from bip_utils import Bip39SeedGenerator + + print("๐Ÿงช Running tests...") + + # --- Existing vector (yours) --- mnemonic = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about" - passphrase = "crypto" - expected_seed_hex = "92c58d3f4fe52f0111d314f3fa8f10ba498751c37e7c36475c2a5b60145b29708576e11bf6c5c46efac1add0cc26e07c69eb65476742082f9c6460f132181cfe" - - if not Bip39MnemonicValidator().IsValid(mnemonic): - raise RuntimeError("Test mnemonic failed validation") - + passphrase = "" # empty seed_bytes = Bip39SeedGenerator(mnemonic).Generate(passphrase) - if seed_bytes.hex() != expected_seed_hex: - raise RuntimeError("Seed mismatch") - print("โœ… Test passed") + # --- NEW: Solana path->address test --- + expected_addr = "HAgk14JpMQLgt6rVgv7cBQFJWFto5Dqxi472uT3DKpqk" + path = "m/44'/501'/0'/0'" + + seed32 = slip10_ed25519_seed32_from_path(seed_bytes, path) # or slip10_ed25519_seed32_by_path(...) + got_addr = sol_pubkey_b58_from_seed32(seed32) + + if got_addr != expected_addr: + raise RuntimeError(f"Solana address mismatch for {path}: got {got_addr}, expected {expected_addr}") + + print(f"โœ… Solana OK: {path} => {got_addr}") + print("โœ… All tests passed") + # -----------------------------------------------------------------------------