Hacktoberfest 2026: die Issues, die Maintainer für den Oktober markiert haben – offen und einsteigerfreundlich. Hacktoberfest-Issues durchsuchen

test: expand offline descriptor test coverage to include all BIP descriptor constructors

Offen
#51 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Anfängerfreundlichkeit
84/100
Issue-Typ
Feature
Klarheit
Klar beschrieben
Aktivitätsstatus
Aktiv
Tech-Stack
python
Bereich
testing

Rechercherichtung

Beginne mit tests/test_offline_descriptor.py und dem bestehenden test_descriptor_bip86-Test, um seinem fixed-mnemonic- und full-descriptor-string-Muster zu folgen. Füge Abdeckung für die aufgeführten BIP44-, BIP49-, BIP84-, BIP86-, new_wsh_sortedmulti- und new_sh_sortedmulti-Konstruktoren hinzu und führe anschließend die Offline-Descriptor-Tests aus; fertig ist es, wenn alle erwarteten Descriptor-Strings und Prüfsummen ohne Netzwerkzugriff erfolgreich sind.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

What is missing

tests/test_offline_descriptor.py currently contains a single test:

test_descriptor_bip86 — tests Descriptor.new_bip86() for the external keychain only

bdkpython exposes 8 BIP descriptor template constructors (from bdk_wallet::template)
across 4 standards, each with a private key variant (DescriptorSecretKey) and a
watch-only public key variant (DescriptorPublicKey), plus 3 miniscript multisig
constructors. None of the following have test coverage today:

Constructor Standard Script type Tested?
Descriptor.new_bip44() BIP44 pkh(...) No
Descriptor.new_bip44_public() BIP44 pkh(...) No
Descriptor.new_bip49() BIP49 sh(wpkh(...)) No
Descriptor.new_bip49_public() BIP49 sh(wpkh(...)) No
Descriptor.new_bip84() BIP84 wpkh(...) No
Descriptor.new_bip84_public() BIP84 wpkh(...) No
Descriptor.new_bip86() internal BIP86 tr(...) No
Descriptor.new_bip86_public() BIP86 tr(...) No
Descriptor.new_wsh_sortedmulti() miniscript wsh(sortedmulti(...)) No
Descriptor.new_sh_sortedmulti() miniscript sh(sortedmulti(...)) No
Descriptor.new_sh_wsh_sortedmulti() miniscript sh(wsh(sortedmulti(...))) No
What I propose to add

13 new tests in tests/test_offline_descriptor.py covering:

  • BIP44 — external keychain, internal keychain, and watch-only (new_bip44_public) variant
  • BIP49 — external keychain, internal keychain, and watch-only (new_bip49_public) variant
  • BIP84 — external keychain, internal keychain, and watch-only (new_bip84_public) variant
  • BIP86 — internal keychain and watch-only (new_bip86_public) variant (external already exists)
  • Multisig — new_wsh_sortedmulti and new_sh_sortedmulti 2-of-3

I am intentionally leaving new_sh_wsh_sortedmulti out of this PR to keep the scope
focused, and can follow up with a separate issue if the maintainers consider it worthwhile.

All tests will be:

  • Fully offline — no network access required
  • Deterministic — fixed test mnemonic so expected outputs are independently verifiable
    with any compatible BIP32/BIP44/BIP49/BIP84/BIP86 implementation
  • Following the same pattern as the existing test: fixed mnemonic → derive key → assert full descriptor string including checksum
Why this matters

Descriptor construction is the first thing every bdkpython user does — it is required
to create a Wallet. Without test coverage for these constructors, a regression in the
FFI layer (e.g. wrong derivation path, wrong script type, wrong network prefix, wrong
checksum) would go undetected until a user reports it in production.

Each test pins the full descriptor output string to a known-correct value, which means
any future change to the FFI type conversion or the bdk_wallet::template behavior
that silently produces wrong output will immediately fail CI.

This is a pure Python addition — no changes to the Rust layer.

Checklist before I open a PR
  • Maintainer confirms this contribution is welcome
  • I will follow the existing file structure in tests/test_offline_descriptor.py
  • I will verify all expected values against the fixed mnemonic before submitting

Vorherrschende Sprache
Python
Sterne
11
Forks
12
Ø Merge
2 T. 13 Std.
Gemergte PRs (30 T.)
2

Entwicklungsumgebung

  • Kein Dockerfile und keine Docker-Compose-Datei
  • Hat eine Pull-Request-Vorlage
  • Kein Beitragsleitfaden

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus bitcoindevkit/bdk-python

Alle Issues in bitcoindevkit/bdk-python

Ähnliche Issues

Weitere Issues zu Python

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.