Skip to content

Conversation

@OttoAllmendinger
Copy link
Contributor

Add WebAssembly BIP32 implementation with ECPair functionality for:

  • Hierarchical Deterministic key derivation (BIP32)
  • Compressed public key management
  • Bitcoin message signing and verification (BIP137)
  • ECDSA signing and verification

The implementation provides a minimal, secure foundation for wallet
operations.

BTC-2915

Add WebAssembly BIP32 implementation with ECPair functionality for:
- Hierarchical Deterministic key derivation (BIP32)
- Compressed public key management
- Bitcoin message signing and verification (BIP137)
- ECDSA signing and verification

The implementation provides a minimal, secure foundation for wallet operations.

Issue: BTC-2915

Co-authored-by: llm-git <llm-git@ttll.de>
@OttoAllmendinger OttoAllmendinger force-pushed the BTC-2915.add-wasm-bip32 branch from 93b977c to 7fa4b96 Compare January 9, 2026 13:25
- Split single job into parallel test jobs for each package
- Build job runs first, uploads artifacts
- test-wasm-bip32 and test-wasm-utxo run in parallel after build
- test-integration runs after both test jobs complete
- Add environment variables for tool versions
- Consolidate test jobs using matrix strategy
- Use conditional steps for package-specific behavior
- Reduces workflow from 241 to ~170 lines
- Add #[allow(dead_code)] for internal methods reserved for future use
- Remove unnecessary borrows in Ripemd160::digest calls
The critical-section feature was causing an 'env' import in the wasm
module which is not supported by the Node.js wasm loader.
…bility

The precomputed-tables feature requires critical-section which adds
env imports to the wasm module that Node.js cannot resolve. ECDSA
operations still work without precomputed tables, just slightly slower.
- Add k256 precomputed-tables feature for faster elliptic curve operations
- Provide custom critical-section implementation for WASM (single-threaded no-op)
- Restore benchmark test to 1000 iterations

Performance improvements:
- derivePath from xpub: ~2x faster than utxo-lib
- derive single child: ~2.2x faster than utxo-lib
- fromBase58 (xpub): ~3x faster than utxo-lib
Simpler approach - no custom code needed. Slightly larger WASM (+4K)
but cleaner codebase.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants