Move the burst cuts. Figures 2–3, the monthly burst column, and the burst-day table recompute from data/processed/daily.csv in the browser. Defaults match classify/config.py.
2.5×
60%
Reported monthly signers ran from 215,609 (2026-08) to 3,791,961 (2026-02); Net Demand was below 40% of the headline in 7 of 13 months. 2026-11 is a partial month (1–11 Nov), equal to max(block_date) in data/raw/daily_activity.csv.
SQL
-- Monthly headline signers vs Net Demand.
-- Net Demand = distinct signers who transacted with at least one receiver
-- whose account id does NOT contain 'hot.tg' (the HOT Telegram game,
-- including game.hot.tg). A signer who used both HOT and something else
-- still counts in net_demand; a HOT-only signer does not.
-- Columns read: block_date, signer_account_id, receiver_account_id.
-- Partition filter: block_date BETWEEN DATE '2025-11-01' AND
-- DATE_SUB(CURRENT_DATE('UTC'), INTERVAL 1 DAY).
-- End bound is the last fully-closed UTC day. Never include today.
SELECT
FORMAT_DATE('%Y-%m', block_date) AS mo,
COUNT(DISTINCT signer_account_id) AS all_signers,
COUNT(DISTINCT IF(receiver_account_id NOT LIKE '%hot.tg',
signer_account_id, NULL)) AS net_demand
FROM `bigquery-public-data.crypto_near_mainnet_us.transactions`
WHERE block_date BETWEEN DATE '2025-11-01'
AND DATE_SUB(CURRENT_DATE('UTC'), INTERVAL 1 DAY)
GROUP BY 1
ORDER BY 1;
NEAR’s reported active accounts are a count of distinct signer_account_id values. This note splits that count into signers who did something other than transact with a hot.tg receiver, and flags days where headcount spikes while transactions-per-signer collapse. Thresholds live in classify/config.py. The argument, including what cuts against it, is in THESIS.md.
Median distinct signers on a non-burst day were 123,953; 6 days cleared the 2.5x-signer and 60%-intensity test, peaking at 592,250 on 15 Feb 2026.
SQL
-- Daily transaction count and distinct signers.
-- tx / signers is the intensity ratio used by classify/ to detect burst
-- days (headcount spikes while tx-per-signer falls).
-- Columns read: block_date, signer_account_id.
-- Partition filter: block_date BETWEEN DATE '2025-10-04' AND
-- DATE_SUB(CURRENT_DATE('UTC'), INTERVAL 1 DAY).
-- Window starts 28 days before the reporting start (2025-11-01) so the
-- trailing-median burst detector has a full baseline in November 2025.
-- End bound is the last fully-closed UTC day. Never include today:
-- a partial day reads as a collapse on the daily chart.
SELECT
block_date,
COUNT(*) AS tx,
COUNT(DISTINCT signer_account_id) AS signers
FROM `bigquery-public-data.crypto_near_mainnet_us.transactions`
WHERE block_date BETWEEN DATE '2025-10-04'
AND DATE_SUB(CURRENT_DATE('UTC'), INTERVAL 1 DAY)
GROUP BY 1
ORDER BY 1;
On those burst days, transactions per signer fell to 0.27–0.49 of the trailing 28-day median, the intensity half of the burst detector.
SQL
-- Daily transaction count and distinct signers.
-- tx / signers is the intensity ratio used by classify/ to detect burst
-- days (headcount spikes while tx-per-signer falls).
-- Columns read: block_date, signer_account_id.
-- Partition filter: block_date BETWEEN DATE '2025-10-04' AND
-- DATE_SUB(CURRENT_DATE('UTC'), INTERVAL 1 DAY).
-- Window starts 28 days before the reporting start (2025-11-01) so the
-- trailing-median burst detector has a full baseline in November 2025.
-- End bound is the last fully-closed UTC day. Never include today:
-- a partial day reads as a collapse on the daily chart.
SELECT
block_date,
COUNT(*) AS tx,
COUNT(DISTINCT signer_account_id) AS signers
FROM `bigquery-public-data.crypto_near_mainnet_us.transactions`
WHERE block_date BETWEEN DATE '2025-10-04'
AND DATE_SUB(CURRENT_DATE('UTC'), INTERVAL 1 DAY)
GROUP BY 1
ORDER BY 1;
game.hot.tg was the #1 receiver on 375 of 376 days, taking a median 95.4% of signers on non-burst days. The one exception is 2026-11-10, when a single implicit account took 55.0% of that day’s signers.
SQL
-- Top 20 receiver contracts per day by distinct signers.
-- Generalizes the verified one-day attribution query across the extract
-- window so burst days can be attributed offline after classification,
-- with no second BigQuery round-trip.
-- top_receiver_share is computed in classify/ as
-- (signers of the day's #1 receiver) / (that day's distinct signers).
-- Columns read: block_date, receiver_account_id, signer_account_id.
-- Partition filter: block_date BETWEEN DATE '2025-10-04' AND
-- DATE_SUB(CURRENT_DATE('UTC'), INTERVAL 1 DAY).
-- Window matches daily_activity.sql. End bound is the last fully-closed
-- UTC day. Never include today.
WITH per_receiver AS (
SELECT
block_date,
receiver_account_id,
COUNT(DISTINCT signer_account_id) AS signers
FROM `bigquery-public-data.crypto_near_mainnet_us.transactions`
WHERE block_date BETWEEN DATE '2025-10-04'
AND DATE_SUB(CURRENT_DATE('UTC'), INTERVAL 1 DAY)
GROUP BY 1, 2
),
ranked AS (
SELECT
block_date,
receiver_account_id,
signers,
ROW_NUMBER() OVER (
PARTITION BY block_date
ORDER BY signers DESC, receiver_account_id
) AS rn
FROM per_receiver
)
SELECT
block_date,
receiver_account_id,
signers
FROM ranked
WHERE rn <= 20
ORDER BY block_date, signers DESC;
Monthly figures
In the ten months without a burst flag, Net Demand was 28.0%–63.9% of reported signers (median 35.2%). The monthly table reports top_receiver_share_median_day (median of daily #1-contract shares). top_receiver_share_peak_day is in data/processed/monthly.csv and is the share on the loudest day; it is not shown here because it understates typical-day HOT dominance in burst months. Burst months are flagged when at least one day meets both detector cuts (signers > 2.5× the trailing 28-day median, and tx/signer < 60% of that median).
| month | reported | net demand | net / reported | burst | burst days | median #1 share |
|---|---|---|---|---|---|---|
| 2025-11 | 556,744 | 197,191 | 35.4% | no | 0 | 94.5% |
| 2025-12 | 915,686 | 584,720 | 63.9% | no | 0 | 94.7% |
| 2026-01 | 526,590 | 220,182 | 41.8% | no | 0 | 95.1% |
| 2026-02 | 3,791,961 | 3,521,593 | 92.9% | yes | 2 | 59.1% |
| 2026-03 | 381,465 | 133,640 | 35.0% | no | 0 | 95.9% |
| 2026-04 | 335,794 | 111,340 | 33.2% | no | 0 | 96.3% |
| 2026-05 | 359,151 | 143,206 | 39.9% | no | 0 | 96.0% |
| 2026-06 | 302,563 | 105,474 | 34.9% | no | 0 | 96.0% |
| 2026-07 | 252,587 | 70,617 | 28.0% | no | 0 | 96.3% |
| 2026-08 | 215,609 | 63,134 | 29.3% | no | 0 | 96.1% |
| 2026-09 | 302,272 | 160,431 | 53.1% | no | 0 | 88.6% |
| 2026-10 | 826,700 | 722,549 | 87.4% | yes | 3 | 83.3% |
| 2026-11† | 259,859 | 138,154 | 53.2% | yes | 1 | 94.1% |
† 2026-11 is a partial month (1–11 Nov), equal to max(block_date) in data/raw/daily_activity.csv.
Burst days
A day is flagged only when both conditions hold (6 days at these cuts). On 2026-11-10 the #1 receiver is a single implicit account (55.0% of that day’s signers). On the February and October burst days the #1 receiver is still game.hot.tg at 23.6%–26.4%; those two episodes remain unattributed.
2026-02-15: top-10 receivers cover 0.5%, top-20 0.6%, top-50 0.7% of 592,250 signers (excluding %hot.tg). 2026-02-17: top-10 receivers cover 0.5%, top-20 0.6%, top-50 0.7% of 541,983 signers (excluding %hot.tg). 2026-10-03: top-10 receivers cover 2.4%, top-20 2.7%, top-50 3.3% of 176,719 signers (excluding %hot.tg). 2026-10-04: top-10 receivers cover 2.1%, top-20 2.5%, top-50 3.1% of 177,196 signers (excluding %hot.tg). 2026-10-07: top-10 receivers cover 2.2%, top-20 2.6%, top-50 3.1% of 175,774 signers (excluding %hot.tg). Control day 2026-11-10: #1 receiver 3d9ccff55cef5a3e… took 55.0% of signers.
| day | signers | vs 28d median | tx/signer vs median | top receiver | #1 share |
|---|---|---|---|---|---|
| 2026-02-15 | 592,250 | 3.39x | 0.32 | game.hot.tg | 23.6% |
| 2026-02-17 | 541,983 | 2.54x | 0.41 | game.hot.tg | 25.3% |
| 2026-10-03 | 176,719 | 2.87x | 0.27 | game.hot.tg | 25.3% |
| 2026-10-04 | 177,196 | 2.87x | 0.33 | game.hot.tg | 26.4% |
| 2026-10-07 | 175,774 | 2.85x | 0.39 | game.hot.tg | 26.1% |
| 2026-11-10 | 177,510 | 3.32x | 0.49 | 3d9ccff55cef5a3efd1fe14b14509b726123910845243ef1671b45e46f214324 | 55.0% |
How to read this
Net Demand does not subtract burst windows. It only subtracts signers whose monthly activity is exclusively with receivers matching %hot.tg. February and October therefore remain large on the Net Demand line. That is a finding, not a bug: those bursts are not HOT-only, and they are not attributed. The last month in the extract (2026-11) has a named receiver on 10 Nov; one attributed burst does not attribute the others. See THESIS.md.
Rebuild this page from the committed CSVs with make all. No BigQuery credentials are required.