@bitgo/wasm-utxo
v4.0.1
Published
WebAssembly wrapper for rust-bitcoin (beta)
Readme
wasm-utxo
This project is the successor of the Javascript utxo-lib package.
It provides WASM bindings for the rust-bitcoin and rust-miniscript crates
that help verify and co-sign transactions built by the BitGo Wallet Platform API.
Documentation
src/wasm-bindgen.md- Guide for creating WASM bindings using the namespace patternjs/README.md- TypeScript wrapper layer architecture and best practicescli/README.md- Command-line interface for address and PSBT operations
Status
This project is under active development.
| Feature | Bitcoin | BitcoinCash | BitcoinGold | Dash | Doge | Litecoin | Zcash | | --------------------------------------- | ----------- | ----------- | ----------- | ----------- | ----------- | ----------- | ----------- | | Descriptor Wallet: Address Support | ✅ Complete | 🚫 | 🚫 | 🚫 | 🚫 | 🚫 | 🚫 | | Descriptor Wallet: Transaction Support | ✅ Complete | 🚫 | 🚫 | 🚫 | 🚫 | 🚫 | 🚫 | | FixedScript Wallet: Address Generation | ✅ Complete | ✅ Complete | ✅ Complete | ✅ Complete | ✅ Complete | ✅ Complete | ✅ Complete | | FixedScript Wallet: Transaction Support | ✅ Complete | ✅ Complete | ✅ Complete | ✅ Complete | ✅ Complete | ✅ Complete | ✅ Complete |
Zcash Features
Zcash support includes:
- Network Upgrade Awareness: Automatic consensus branch ID determination based on block height
- All Network Upgrades: Support for Overwinter, Sapling, Blossom, Heartwood, Canopy, Nu5, Nu6, and Nu6_1
- Height-Based API: Preferred
createEmpty()method automatically selects correct consensus rules - Parity Testing: Validated against
zebra-chainfor accuracy across all network upgrades
Inspect Feature
The inspect feature adds PSBT and transaction parsing into hierarchical node trees,
useful for building tree-view UIs and CLI formatters.
It is behind a Cargo feature flag because it pulls in extra dependencies (serde, serde_json,
num-bigint, hex) that are not needed for core wallet operations.
Rust
// Cargo.toml
wasm-utxo = { path = ".", features = ["inspect"] }
// Usage
use wasm_utxo::inspect::{parse_psbt_bytes_with_network, parse_tx_bytes_with_network, Node};TypeScript
Available as a separate import path, not included in the main @bitgo/wasm-utxo entry:
import { parsePsbtToNode, parseTxToNode, isInspectEnabled } from "@bitgo/wasm-utxo/inspect";The published npm package includes stub implementations that return isInspectEnabled() === false
and throw runtime errors from the parse functions. To get a working build, compile the WASM with
--features inspect (see packages/webui/scripts/build-wasm.sh).
Building
Mac
Requires Homebrew LLVM (Apple's Clang doesn't support WASM targets):
brew install llvm
npm run buildDocker (optional)
If you prefer a containerized build environment:
make -f Container.mk build-image
make -f Container.mk build-wasm