OQ — U20 · Protocol adoption
Not wallet counts scraped off a block explorer — the actual instructions your users called, and the events your program emitted when they did.
Instruction tables tell you what was called; event tables tell you what happened as a result.
Unique callers
Distinct signers per day or week, straight from the instruction table.
Feature usage
Which instructions are actually being called, and which shipped features nobody uses.
Retention cohorts
Group first-seen callers and follow them forward with a self-join.
Failure modes
Which instructions correlate with the events you did not want.
What if our program has no events?
You measure from instruction tables instead — the call and the accounts it touched. Sixteen of the bundled programs work exactly this way.
Can we track this over the full history?
Yes, subject to how far back the decode has been backfilled for that program. Every query records the high-watermark slot it read.