Prerequisites
A synced Bitcoin Core node on default Signet, a loaded dedicated wallet named workshop, Node.js 22.12 or later, and the source bundle below. The bridge requires Core's signet_challenge field and checks its exact default value. Custom signets, other networks, and initial block download are refused.
Download source and tests. Extract it, open its signet-lab directory, then install and run the tests:
npm ci npm test
1. Export confirmed inputs
Use a confirmed, owned native SegWit (P2WPKH) output in your dedicated test wallet. The export contains public transaction metadata, not private keys.
node scripts/signet-workshop.mjs export --wallet workshop --out utxos.json
Export is bounded to a small candidate set; --address can narrow it to one wallet address. The source guide documents custom --cli and --datadir paths. No command requests faucet funds automatically.
2. Build and review
In the Workshop, choose your UTXO metadata and provide recipient and change addresses from your test wallet. For a rehearsal, keep every output in wallets you control. Inspect the input, recipient, change, and fee ledger before downloading unsigned-equal-split.psbt.
The bridge accepts only unsigned version-2 P2WPKH Workshop PSBTs. It independently checks confirmed unspent inputs, wallet ownership, script and value agreement, output dust, and bounded integer fees. Browser metadata is not treated as proof of ownership.
3. Sign and preflight, without sending
node scripts/signet-workshop.mjs sign --wallet workshop --psbt unsigned-equal-split.psbt --out signed.json --max-fee-sats 1000
The terminal displays every output and fee before requesting a transaction-specific SIGN confirmation. Core signs and finalizes; the script preserves the final artifact, then checks testmempoolaccept. Signing does not broadcast. A preflight failure is not a lost transaction: the saved artifact remains available for inspection.
4. Broadcast explicitly
node scripts/signet-workshop.mjs broadcast --wallet workshop --artifact signed.json --max-fee-sats 1000
This separate command reviews the ledger again, requests a transaction-specific BROADCAST confirmation, rechecks the node and inputs, and preflights immediately before submission. A successful submission is not a promise of propagation or confirmation.
5. Observe and recover
node scripts/signet-workshop.mjs status --wallet workshop --txid YOUR_TRANSACTION_ID
Replace YOUR_TRANSACTION_ID with your transaction ID. Keep utxos.json, the unsigned PSBT, and signed.json. Status reports wallet confirmations and conflicts. After a timeout or uncertain submission, check status before retrying. If inputs are spent, export fresh metadata and rebuild; do not assume a stale PSBT can be repaired by changing its fee.
Output files are never overwritten. Cancellation before signing can leave an empty reserved output; inspect it and choose a new output filename on retry. Signing may require you to unlock your wallet directly in your own trusted terminal. The bridge never requests or accepts a wallet passphrase.
What remains outside this bridge
Hardware wallets, custom scripts, multisig, Taproot inputs, unconfirmed inputs, wallet creation, faucet automation, and automatic rebroadcast are not supported. It is a narrow handoff for the Workshop, not a general wallet.