Experiment reports / Offline fixture

A PSBT can parse while its fee remains unknown

Remove previous-output metadata, inspect the missing information, and compare it with the complete unsigned PSBT.

Published by HabibitcoinFixture generated: 2026-09-11T22:33:24ZMethod: automated byte and node checksNative SegWit / PSBT v0

Recorded fixture result

Observed inspection state: missing-utxo

  • MISSING_UTXO

    Previous output amount and script are absent; fee and signing prerequisites remain unknown.

  • MISSING_SIGNATURES

    No partial signatures or final unlocking fields are present; script requirements were not evaluated.

  • UNSUPPORTED_SIZE_ESTIMATE

    No signed-size estimate for this input script or missing script metadata.

  • FEE_UNKNOWN

    The fee cannot be calculated without every previous output amount.

  • 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

The failure

A transaction input points to a previous transaction ID and output index. Those bytes alone do not contain the previous output's value. Our broken PSBT preserves the unsigned transaction but omits its UTXO metadata. It is still parseable; that does not make it ready to sign.

Why the fee is unknown

Fee is the sum of input values minus the sum of output values. Outputs are present in the unsigned transaction, but the input side is incomplete. Transaction Doctor therefore reports an unknown fee instead of treating absent amounts as zero or inventing a fee rate from the unsigned size.

What an updater supplies

For the native P2WPKH case, a witness UTXO record supplies the previous output's script and satoshi value. A complete previous transaction can also provide this information. When both are supplied, the Doctor checks that they agree and that the previous transaction matches the referenced transaction ID and output index.

The corrected counterpart

Choose the complete unsigned example in Transaction Doctor. Its UTXO metadata allows the fee to be calculated, but signatures are still missing. Adding metadata and adding authorization are separate PSBT roles. Neither operation changes a recipient silently.

Do not confuse supplied data with chain evidence

Input metadata is information from a file, not proof that the output exists or remains unspent. The Doctor does not validate ownership or query a node during local parsing. A signer must independently establish its prerequisites, and a node must check the eventual transaction against its current UTXO set and policy.

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////ARwlAAAAAAAAFgAUKioqKioqKioqKioqKioqKioqKiqQ0AMAAAAA

Specifications and implementation

BIP 174: PSBT roles and format; BIP 141: transaction weight; Bitcoin Core v30.0 dust policy; bitcoinjs-lib implementation.