Bitcoin Inqusition 29.2

Bitcoin Inquisition 29.2 is now available from

This is based on Bitcoin Core 29.3rc2.

This includes support for the following proposed consensus changes:

The first two of these have been active on the default signet since block 106704 (2022-09-06), the third since block 193536 (2024-04-30), and the fourth and fifth have been active since block 272592 (2025-10-06).

Note that transactions making use of these new features will not be relayed by nodes that don’t support these features, so if you’d like your transaction to get to a miner, you’ll need to peer with other inquisition nodes. An easy way to do this is to specify addnode=inquisition.bitcoin-signet.net. By default, Bitcoin Inquisition nodes will advertise themselves via the subversion string, which can be viewed with bitcoin-cli -netinfo 3. See the 23.0 announcement for more details.

BIP 54 activation has not yet been signalled for on the default signet network, pending miner upgrades, but is expected to be soon now been triggered for activation (as of block 290513), so should be active as of block 291168, in about five days.

3 Likes

I’ve been running experiments on the Bitcoin Inquisition signet, starting with OP_CAT. For this first round I built a witness-locked script: data lives in the witness, the script only verifies the hash — only the holder of part_a/part_b can spend.

Commit tx 084d5a9c6a8c176c24edc0a8b7ce54ed65808a326367d8a9299b4460ecaada09 → Spend tx 00072d4aa354b5987eb8f2ffec440db7467b0581c5e845a6a0ef6999b2d05656

Code and full transaction details: GitHub - aaron-recompile/inquisition-experiments: my experiments on Bitcoin Inqusition · GitHub

One observation: commit transactions show up on both standard signet explorers (mempool.space) and Inquisition nodes, but reveal/spend transactions only appear on Inquisition nodes — standard nodes reject the block entirely. The two networks fork at the first block containing a new-opcode spend. Expected, but worth noting for anyone trying to verify via public explorers.

CSFS, CTV, and INTERNALKEY experiments next.

No, not expected! BIP 347 is a soft fork. Fortunately the spend tx does show up on Signet explorers. Presumably you actually checked before the spend was included in a block? It would not show up then because regular Signet nodes consider it non-standard and won’t accept it in their mempool.

1 Like

Thanks for the correction, Antoine — and for prompting a deeper look.

Verified on mempool.space/signet: the spend tx is there with 3600+ confirmations. You were right.

Your correction pushed me to think more carefully about why. Non-upgrade nodes accept the block not because they understand the new rule, but because OP_CAT is an unknown opcode in Tapscript — OP_SUCCESS under old semantics. The “network fork” I thought I observed was just a timing artifact: the tx never entered regular nodes’ mempools (non-standard), so it was invisible before block inclusion.

CSFS, CTV, and INTERNALKEY experiments coming next — this time I’ll reason from first principles before drawing conclusions.

1 Like

Following up on my earlier OP_CAT note, I ran CSFS and CTV experiments on Bitcoin Inquisition and tracked timing end-to-end.

CSFS pair:

  • Commit: 96df453d9e9ce50fdfca063528b03e3310033c3a61818bbe30e7fab5c61133e3
  • Reveal (final, RBF replacement): 32fa307f3a570cfe93ebf7c101dba9ee8f289a5ca926dfed8baca92bb196e36b

CTV pair:

  • Commit: 2378642548c7f86472d3998a0fcb2d364084783e487dd87c1e1020684aed51de
  • Reveal: 9ccbce8ad87f0f94632119245a42537c9fbd2c8f706621f76f513339f220d55c

What I learned:

  1. Visibility is layered (policy vs consensus). Before confirmation, reveal spends may be missing from standard signet mempools due to policy. After mining, they are visible on public explorers. So “not seen yet” != network fork.

  2. Confirmation latency is the real variable. In my runs, commit->reveal was short, but reveal->confirm dominated and reached ~3.9 days.

  3. Acceleration depends on script constraints.

  • CSFS: a higher-fee replacement reveal confirmed quickly (~113s after replacement broadcast).
  • CTV: parent template constraints make direct replacement less flexible; CPFP is the practical accelerator.
  1. Methodologically, recording reveal->confirm is essential. If we only record tx creation times, we miss the most interesting behavior.

Happy to share raw RPC snapshots / watch logs if others want to compare miner policy behavior.

Following up on my earlier CAT/CSFS/CTV runs, I tested an IK + CSFS composition on Bitcoin Inquisition.

This uses OP_INTERNALKEY to source the pubkey from Taproot execution context rather than witness.

Commit: 9930e922…0ea8

Reveal: 8d0b2156…dd8f

Script: OP_INTERNALKEY OP_CHECKSIGFROMSTACK (cbcc)

Witness: [sig, message] — no pubkey in witness

Observation:

  • Pubkey is no longer caller-supplied
  • It is sourced from Taproot execution context (internal key)

This shifts authorization from “who provides a key” to “who created the UTXO”.

However, since the message is fixed, the (sig, message) pair is replayable across UTXOs with the same internal key.

Full breakdown (stack / control block / derivation): details: https://medium.com/@aaron.recompile/op-internalkey-op-checksigfromstack-on-signet-identity-bound-authorization-04f0440557bc

Following up on my earlier CAT/CSFS/CTV runs, I tested a CAT + CSFS composition on Bitcoin Inquisition.

This combines OP_CAT, OP_SHA256 and OP_CHECKSIGFROMSTACK.

Commit: 926c40c1…008f

Reveal: 75db54de…65ca2

Script: OP_CAT OP_SHA256 <oracle_pubkey> OP_CHECKSIGFROMSTACK (7ea820…cc)

Witness: [sig, part1, part2] — message not provided directly

Observation:

  • Message is no longer provided as a single item It is assembled on-chain via OP_CAT (part1 || part2)
  • Signature is over SHA256(part1 || part2) but concatenation happens during execution
  • Signature does not commit to transaction data
  • The (sig, part1, part2) tuple is replayable across UTXOs with the same script (same oracle pubkey)

Full breakdown (stack / witness / tapscript / control block): https://medium.com/@aaron.recompile/op-cat-op-checksigfromstack-on-signet-dynamic-message-oracle-authorization-8c73e1ef5353