Subsidy Filter

NEAR public transactions · 2025-11-01 to 2026-11-11

Investment thesis · burst detector

Most of NEAR’s active accounts are one Telegram game.

After removing HOT and flagging burst days, quiet-month Net Demand is a fraction of the headline. 2026-11 is a partial month (1–11 Nov), equal to max(block_date) in data/raw/daily_activity.csv.

Aug 2026 reported215,609
Net Demand63,134
Net / reported29.3%
Figure 2 · Daily distinct signers. Open circles follow the cuts below.

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%

Figure 1 · Reported active accounts and Net Demand
2026-11-14T11:31:05.846701 image/svg+xml Matplotlib v3.10.9, https://matplotlib.org/ Dec 25 Feb 26 Apr 26 Jun 26 Aug 26 Oct 26 50k 100k 200k 500k 1M 2M 4M Monthly distinct signers, log scale Reported Net Demand 3,791,961 72.0%

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.

Figure 2 · Daily distinct signers. Open circles are burst days.

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;
Figure 3 · Transactions per signer

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;
Figure 4 · Share of daily signers taken by the #1 contract
2026-11-14T11:31:05.894972 image/svg+xml Matplotlib v3.10.9, https://matplotlib.org/ Nov 25 Jan 26 Mar 26 May 26 Jul 26 Sep 26 Nov 26 0% 20% 40% 60% 80% 100% Share of daily signers, #1 contract

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-11556,744197,19135.4%no094.5%
2025-12915,686584,72063.9%no094.7%
2026-01526,590220,18241.8%no095.1%
2026-023,791,9613,521,59392.9%yes259.1%
2026-03381,465133,64035.0%no095.9%
2026-04335,794111,34033.2%no096.3%
2026-05359,151143,20639.9%no096.0%
2026-06302,563105,47434.9%no096.0%
2026-07252,58770,61728.0%no096.3%
2026-08215,60963,13429.3%no096.1%
2026-09302,272160,43153.1%no088.6%
2026-10826,700722,54987.4%yes383.3%
2026-11†259,859138,15453.2%yes194.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-15592,2503.39x0.32game.hot.tg23.6%
2026-02-17541,9832.54x0.41game.hot.tg25.3%
2026-10-03176,7192.87x0.27game.hot.tg25.3%
2026-10-04177,1962.87x0.33game.hot.tg26.4%
2026-10-07175,7742.85x0.39game.hot.tg26.1%
2026-11-10177,5103.32x0.493d9ccff55cef5a3efd1fe14b14509b726123910845243ef1671b45e46f21432455.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.