_yes + _indeterminate pair)
one-hot 1 col per value
ordinal single integer index
num raw count / ratio (f64)
hex identifier
conditional_anonymity reports its per-value anonymity set.axis_marginals) — the per-value count distribution of a single axis: how many transactions took each value.conditional_anonymity) — how many transactions share an identical CORE joint vector; a set of size 1 is uniquely identifying. Reported per fingerprint value, not as a chain-wide distribution.Indeterminate), rather than guessing.00 · Identity
Two non-numeric columns lead every row so a downstream result joins back to the transaction.
01 · Booleans & tri-state
Plain 0/1 flags read straight off the transaction, plus the 7 auxiliary heuristics. Tri-state axes (a signal that can be absent) split into a _yes and an _indeterminate column; both zero means “no”.
has_inscription_envelope and has_runestone below narrow down to specific protocols.low_r_indeterminate, so it is not duplicated here.round_fee's, aimed at human-entered payment amounts rather than fees.02 · Nominal
Each categorical fingerprint is encoded as one column per possible value. The value domains below are the exhaustive set the classifier can emit.
_other catches any value outside 1–3 (version 3 signals TRUC/ephemeral-anchor policy).cake_group_c (first input 0x01, every other input final — a known wallet bug), a lone 0x01 elsewhere, uniform opt-in RBF (0xfffffffd), uniform non-RBF-final (0xfffffffe), uniform max (0xffffffff), or a mixed pattern matching none of those.zero, a unix timestamp (≥ 500,000,000), a height above the tip (future, nonstandard), within 100 blocks behind the tip (anti_fee_snipe, Core's default), or further back (backdated).bip69 and value-ordering are checked against sorted order; age_ascending (oldest spent coin first) and the surrounding OrderClass wrapper are survey logic. age_ascending is measurable only on the input side (outputs carry no age), so the output column is structurally always 0, kept only for shape symmetry with the input side.taproot_default (64B, the implicit SIGHASH_ALL) vs taproot_explicit (65B, an explicit sighash byte) is the P2TR default-vs-explicit split. Reads the first signature found per input — the first witness item, or the first scriptSig push for legacy inputs — not every signature the input carries.uniform_{type}, one of 8), differs across inputs (mixed), or has a prevout the source couldn't resolve (unknown). The per-type count columns below carry the same information at finer, non-exclusive granularity.03 · Ordinal
Ordered categories collapse to a single integer index rather than one-hot, since the order carries meaning.
None=0 (e.g. a pure taproot key-path spend), One=1, Few=2 (2–4), Many=3 (5+). Gives low_r its statistical context — a lone non-grinding signature is close to a coin flip on low-R, so agreement across many signatures is far stronger evidence of grinding. The broader, not-ECDSA-scoped signature measure is sigop_count below.total_sigop_cost over the resolved prevouts. Not scoped to ECDSA, unlike ecdsa_sigs_index, so Schnorr (taproot) and multisig sig ops count.SameBlock=0 (spent in the block it was created — the strongest temporal tell, e.g. spending an unconfirmed parent), 1 for 1–5 confirmations, 2 for 6–143, 3 for 144+ (Older), 4 when no age can be resolved (Indeterminate).Single=0, Double=1, Multi=2 (3+), Unknown=3.0..9, then ten-wide bands up to 100+; Unknown (fee not computable) sorts last.nlocktime alone can't answer per transaction. Buckets: block_height − locktime in 0, 1, 2, 3, 4–6, 7–12, 13–25, 26–50, 51–100, with a not-applicable flag set for every other nlocktime class. Offsets ≥ 100 fall outside the anti-fee-snipe window entirely and surface as nlocktime_backdated in the one-hot above instead.04 · Heuristic
Change identification the fingerprints library does not cover yet. Two independent change heuristics run: the script-type match (change_index_by_script_type) and a value-based round-number heuristic. Which one fires, and whether they agree, is itself a fingerprint. Present in the ML matrix, kept out of the joint vector (a heuristic's abstention is not chain diversity).
05 · nSequence bits
The nSequence field decomposed into its actual bit meaning, separating opt-in RBF from relative timelocks — and the interaction that renders a locktime inert.
< 0xFFFFFFFE).0xFFFFFFFF — the condition that disables nLockTime.0x7FBF0000) is set on a BIP-68-eligible (bit-31-clear) input — nonstandard construction that no known wallet sets deliberately.0 yet an input signals RBF (< 0xFFFFFFFE) — opted into RBF but set no locktime.06 · Counts & position
Real per-type counts (a multiset, not a set), plus positional features — both the bounded first/last summary and a per-position type array capped at 10 — that capture the payment-vs-change ordering a count summary can't see, on both sides. The per-input/output type at each position comes from classify_script_pubkey; the counting, positioning, matching and grouping around it is survey — the raw input_count/output_count and the multisig card below are wholly survey.
input_count_op_return is structurally always 0.)p2pkh, p2sh, p2wpkh, p2wsh, p2tr, op_return, nonstandard, p2pk order.*_count_p2pkh + *_count_p2sh + *_count_p2pk (P2SH being wrapped-legacy).-1 if no outputs).-1 if no inputs).last & ¬first = payment-then-change, unshuffled.-1 when the position is absent). Positions ≥ 10 are discarded.-1-absent convention.m-of-n of the spending inputs' multisig (the dominant input by largest n; 0/0 if none). Read from the bare prevout / P2SH redeem / P2WSH witness script (legacy OP_CHECKMULTISIG) and the taproot script-path tapscript (BIP-342 OP_CHECKSIGADD multi_a; thresholds > 16 pushed as data are not decoded). Quantifies the config input_subtype only flags. 2-of-3, 2-of-2, 3-of-5 are characteristic wallet setups.(m, n) configs.07 · Feerate
Raw primitives so a consumer can infer the wallet's working unit and rounding, plus the rate relative to the fee market the wallet saw.
fee / vsize — the feerate unit most wallets target.fee·1000 / weight — the lightning / rust-bitcoin FeeRate convention.fee % weight == 0) — the third precision unit; stricter than the sat/kwu flag, which it implies.-1 if none).-1 if none).08 · Amounts
How “round” the values are, measured over the transaction's outputs — a signal of human-typed vs machine-derived amounts.
1.1 (2) from 1.00000001 (9) though both weigh 2.-1 if none).09 · Taproot
(control_len−33)/32 (annex-aware). 0 if none.taproot_max_merkle_depth is computed over.sighash axis, which does not constrain key-path vs script-path.10 · Standardness
A mined transaction that is non-standard bypassed default relay — a fingerprint of direct-to-miner submission or a permissive node. The reasons decompose which policy it broke.
3·(9+spk+67|148)).11 · Protocol
OP_FALSE OP_IF "ord" (bytes 00 63 03 6f 72 64) appears in a taproot tapscript — high-certainty on a positive match, though a fragmented or non-canonical envelope can escape detection.OP_PUSHNUM_13 (6a 5d).13 · Aggregates
Computed once per scan over all epochs (about 340 KB), derived from the joint-vector counts already gathered per epoch — no re-scan needed. These are what the dashboard reads per fingerprint; the per-tx matrix above is the primary output.
Name (software RANGE) for versioned entries, bare name for unversioned) — a narrower, wallet-shaped question than the per-axis summaries above, useful for tracking one specific wallet's chain share over time.