@moon-x/bitcoin-adapter
v0.1.3
Published
Chain-aware Bitcoin signing for MoonX ephemeral signers across Taproot, Native SegWit, and Legacy wallets.
Maintainers
Readme
@moon-x/bitcoin-adapter
Chain-aware Bitcoin signing for MoonX ephemeral signers. It supports the three MoonX Bitcoin wallet types:
- Taproot P2TR: BIP86 key-path spends using BIP340 signatures.
- Native SegWit P2WPKH: BIP143 spends using compact ECDSA signatures.
- Legacy P2PKH: legacy sighashes with
nonWitnessUtxosafety checks.
P2WPKH and P2PKH PSBT inputs require the full previous transaction in
nonWitnessUtxo. The adapter verifies its txid, output script, and amount.
If an input also supplies witnessUtxo, both fields must agree.
Taproot inputs require witnessUtxo and use rootless key-path signing.
The adapter also creates BIP322 Simple message proofs for P2TR/P2WPKH and
BIP322 Full proofs for P2PKH. It resolves the wallet's script type, public keys,
address, and derivation path from the provisioned walletId; callers never
handle MPC key IDs or build consensus sighashes themselves.
import { createBitcoinSigner } from "@moon-x/bitcoin-adapter";
const signer = createBitcoinSigner({
apiPubHex: process.env.AGENT_PUBLIC_KEY!,
apiPrivHex: process.env.AGENT_PRIVATE_KEY!,
walletId: process.env.MOONX_WALLET_ID!,
secretKey: process.env.MOONX_SECRET_KEY!,
});
const proof = await signer.signMessage("Hello from MoonX");
const signed = await signer.signTransaction(psbtBase64);
// signed.transactionHex is ready for a sendrawtransaction-compatible RPC.secretKey and the ephemeral signer private key are server-only secrets.
Never put either value in browser code.
