The engine fully verifies legacy, P2SH, segwit v0, and taproot (both key-path and script-path). It returns {ok: null} only for genuinely-unverifiable inputs:
- unknown/future witness versions (v2+),
- unknown tapleaf versions (≠ 0xc0),
- taproot inputs whose prevouts can't all be resolved.
verifyInput already includes a reason on those null results, but validateBlockContext's btc:rule-blockctx-scripts only counts them (unsupported++) and returns null — so we can't see which inputs were skipped or why. The follow-loop just prints "N skip".
Goal: surface the per-input skip reason (a thin engine change to collect reasons in the scripts-rule result, or a node-side pass logging verifyInput null reasons) so we can confirm we only ever skip the genuinely-unverifiable — not something silently missed.
(Note: corrects an earlier mistaken claim that key-path taproot was unimplemented — it is implemented; the interpreter.js line-10 comment is stale.)
The engine fully verifies legacy, P2SH, segwit v0, and taproot (both key-path and script-path). It returns
{ok: null}only for genuinely-unverifiable inputs:verifyInputalready includes areasonon those null results, butvalidateBlockContext'sbtc:rule-blockctx-scriptsonly counts them (unsupported++) and returns null — so we can't see which inputs were skipped or why. The follow-loop just prints "N skip".Goal: surface the per-input skip reason (a thin engine change to collect reasons in the scripts-rule result, or a node-side pass logging
verifyInputnull reasons) so we can confirm we only ever skip the genuinely-unverifiable — not something silently missed.(Note: corrects an earlier mistaken claim that key-path taproot was unimplemented — it is implemented; the
interpreter.jsline-10 comment is stale.)