Three new modules land in tests/ alongside the v0.1 pure-module
tests:
- test_store_protocol.py: InMemoryStore round-trips + Protocol
conformance. Covers create / get / update / list_by_status /
next_derivation_index / record_tx idempotency + defensive-copy
semantics.
- test_mint_metadata.py: mint_nft_cert end-to-end against a stubbed
ChainContext (no live Ogmios). Exercises the 2-of-2 native-script
policy shape, tx body construction, CIP-25 envelope CBOR
round-trip, and the oversize-asset-name guard.
- test_monitor_with_inmemory_store.py: monitor loop driven against
InMemoryStore with Koios + the oracle monkeypatched. Covers every
status transition the scheduler cares about (confirm, overpay,
underpay, stay-pending, record_tx, expiry skip) and the two
reprice code paths (successful reprice bumps expected_lovelace +
expires_at; max_repricings flips to EXPIRED).
All 42 tests pass on pycardano 0.16 with pytest-asyncio auto mode.
pycardano >=0.11 doesn't ship HDPublicKey — the v0.1 extraction
imported a symbol that never existed in the installed version, which
meant every address-derivation test failed at import time.
Use HDWallet rooted at the account level with public-only fields set,
then soft-derive receive chain (0) and staking chain (2). Hash the
resulting verification keys through PaymentVerificationKey /
StakeVerificationKey to compose the Shelley base address.
Refresh the test-vector xpub with a real, deterministic CIP-1852
account xpub derived from the well-known "test ... junk" mnemonic so
validate_xpub + derive_address actually exercise the BIP32 math.
Drop the "random hex should be rejected" assertion — BIP32-ED25519
soft derivation doesn't enforce that the 32-byte pubkey half is a
point on the curve, so arbitrary well-shaped hex is accepted by the
underlying crypto.