Recorded fixture result
Observed inspection state: missing-signatures
- MISSING_SIGNATURES
No partial signatures or final unlocking fields are present; script requirements were not evaluated.
- TIMELOCK_UNCHECKED
Locktime/sequence constraints are present. Chain height, median time, and input ages were not checked.
- NOT_VALIDATED
Parsing and metadata inspection only: no signature/script verification, finalizability decision, UTXO-set check, or mempool test.
Independent Bitcoin Core check
Verified 2026-09-11T23:08:08.502Z with Bitcoin Core daemon version v29.0.0 on a fresh, isolated regtest chain. Core signed and finalized a separate funded Workshop split, then accepted it in testmempoolaccept. The Workshop spend was not broadcast. This is local regtest evidence, not a confirmed Signet transaction.
The checks also compare PSBT and raw decoding with Core, preserve an unknown fee when UTXO metadata is absent, and confirm that an overspend fails with bad-txns-in-belowout. This does not establish acceptance for every fixture or script type.
Verification results and software hashes · Exact PSBTs, funding transaction, and Core responses
Start with the unsigned PSBT
This fixture includes the previous-output information needed for the native SegWit example but no signatures. Its recipient amounts and fee are inspectable. Its unsigned transaction bytes are shorter than the eventual witness-bearing transaction, so the unsigned virtual size is not an honest final fee-rate denominator.
Signatures are data, not a verdict
A partial signature field tells an inspector that signature material is present. It does not by itself prove that the signature authorizes this transaction, that all script conditions are met, or that the input is unspent. The Doctor labels signature presence separately from validation.
Finalization assembles unlocking data
A finalizer constructs final scriptSig and witness fields from the available data. When those fields are present, their serialized weight can be measured. Transaction Doctor can expose that measurement, but intentionally does not call the transaction valid or broadcastable on the strength of field presence alone.
The next checks happen elsewhere
Review recipients and fee in the signing wallet. Use a default-Signet node for testmempoolaccept before broadcasting a real signed transaction. Node policy acceptance, propagation, and confirmation are different events. A passing parse cannot substitute for any of them.
How to reproduce
The Doctor's prepared examples cover missing UTXO data, complete unsigned data, partial signatures, finalized data, and raw transaction bytes. These are deterministic offline artifacts. Select each stage and compare the input rows, findings, and the explicit size label.
Compare the same transaction at each stage
| Fixture | Observed status | Serialized vB |
|---|---|---|
| Previous output supplied | missing-signatures | 82 |
| Signature present | signatures-present | 82 |
| Final witness fields | final-fields-present | 110 |
| Extracted raw transaction | raw-unverified | 110 |
For the first two rows, serialized vB describes only the unsigned transaction. The finalized rows include witness data. Raw transaction bytes alone do not contain input amounts, so their fee is unknown without previous-output metadata.
Reproduction artifact
The full collection includes the options, transactions, and expected inspection output. The public source bundle contains the build script and automated checks used to regenerate it.
Download fixture JSON Open this example
Inspect the PSBT bytes
cHNidP8BAFICAAAAARERERERERERERERERERERERERERERERERERERERERERAAAAAAD9////ARwlAAAAAAAAFgAUKioqKioqKioqKioqKioqKioqKiqQ0AMAAAEBHxAnAAAAAAAAFgAUdR526BmRltRUlBxF0bOjI/FDO9YAAA==
Specifications and implementation
BIP 174: PSBT roles and format; BIP 141: transaction weight; Bitcoin Core v30.0 dust policy; bitcoinjs-lib implementation.