Проблема: таблица считает средние, а система ломается на крайностях
Табличная модель токеномики оперирует агрегатами: общий supply, средняя цена, суммарный стейкинг. Это полезный инструмент — мы сами начинаем каждый проект с таблицы. Но у таблицы есть фундаментальное ограничение: она не моделирует поведение отдельных участников.
Рассмотрим стейкинг. Таблица говорит: «при APR 5% будет стейкаться 60% токенов». Один сценарий, одно число. Но в реальности стейк распределён неравномерно — 10 кошельков могут контролировать 25% стейка. Если три кита решат выйти одновременно, APR изменится, что спровоцирует реакцию остальных участников. Таблица этого не покажет.
Агентное моделирование (agent-based modeling, ABM) строит систему снизу вверх: каждый участник — отдельный агент со своим балансом, стратегией и порогами принятия решений. Модель запускается на сотни итераций, и на каждом шаге агенты принимают решения исходя из текущего состояния системы.
Результат — не один прогноз, а распределение возможных исходов, включая крайние сценарии.
Когда нужна агентная модель, а когда хватит таблицы
| Задача | Таблица | ABM |
|---|---|---|
| Allocation и вестинг-графики | Подходит | Избыточно |
| Прогноз supply при заданной эмиссии | Подходит | Избыточно |
| Unit-экономика (CAC, LTV) | Подходит | Избыточно |
| Стейкинг с неравномерным распределением | Не видит каскадов | Необходима |
| Governance-голосование | Не видит атак | Необходима |
| AMM-пулы и ликвидность | Не видит проскальзывания | Необходима |
| Экономики с несколькими типами участников | Не видит взаимодействий | Необходима |
Правило простое: если действия одного участника меняют условия для остальных — нужна ABM. Если нет — таблицы достаточно.
Пример: стейкинг и банк-ран
Разберём конкретный случай, где табличная модель даёт ложную уверенность, а агентная симуляция выявляет системный риск.
Постановка задачи
Протокол с фиксированной эмиссией: 800 токенов в день распределяются между стейкерами пропорционально доле. При 60% застейканных токенов это даёт APR ~4.9% годовых.
Вопросы:
- Сколько стейкеров останется, если APR ниже ожиданий части участников?
- Что произойдёт, если 10 крупнейших кошельков выйдут одновременно?
Табличная модель ответит просто: «при выходе 10 стейкеров APR вырастет пропорционально». Но это не учитывает кто выходит (кит или мелкий холдер) и что произойдёт дальше (каскадная реакция).
Модель: 200 агентов с разными стратегиями
Каждый агент имеет три параметра:
| Параметр | Распределение | Смысл |
|---|---|---|
| Баланс | Парето (α=1.5) | Несколько китов + много мелких, как в реальных сетях |
| Порог APR | Равномерное (3–15%) | Минимальный APR, ниже которого агент выходит |
| Задержка реакции | 1–14 дней | Не все реагируют мгновенно |
Распределение балансов выглядит так — степенной закон, топ-10 агентов контролируют ~25% стейка:

Код симуляции
Полный код — можно скопировать в Google Colab и запустить:
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(42)
# === Параметры ===
num_agents = 200
num_steps = 365 # дней
total_supply = 10_000_000
daily_rewards = 800 # токенов/день (~4.9% APR при полном стейке)
# === Генерация агентов ===
# Балансы: степенной закон (Парето) — несколько китов, много мелких
raw = np.random.pareto(a=1.5, size=num_agents) + 1
balances = (raw / raw.sum() * total_supply * 0.6).astype(int)
# Порог APR: ниже этого значения агент выходит из стейкинга
apr_thresholds = np.random.uniform(0.03, 0.15, size=num_agents)
# Задержка реакции: сколько дней APR должен быть ниже порога
reaction_delay = np.random.randint(1, 15, size=num_agents)
# Состояние
is_staking = np.ones(num_agents, dtype=bool)
days_below_threshold = np.zeros(num_agents, dtype=int)
# Запись метрик
h_staked = np.zeros(num_steps)
h_apr = np.zeros(num_steps)
h_num = np.zeros(num_steps)
# === Симуляция ===
for day in range(num_steps):
staked_total = balances[is_staking].sum()
if staked_total == 0:
break
current_apr = (daily_rewards * 365) / staked_total
h_staked[day] = staked_total
h_apr[day] = current_apr
h_num[day] = is_staking.sum()
for i in range(num_agents):
if not is_staking[i]:
continue
if current_apr < apr_thresholds[i]:
days_below_threshold[i] += 1
if days_below_threshold[i] >= reaction_delay[i]:
is_staking[i] = False # выход
else:
days_below_threshold[i] = 0 # сброс счётчика
Ключевая механика: на каждом шаге каждый агент проверяет текущий APR. Если APR ниже его порога дольше, чем его задержка реакции — он выходит. Выход одного агента уменьшает стейк, что меняет APR для всех остальных. Это и есть каскадный эффект, который невозможно увидеть в таблице.
Результаты
Запускаем два сценария на одних и тех же агентах:
- Без шока — система эволюционирует сама
- С шоком — на день 60 принудительно выводим 10 крупнейших стейкеров

Сценарий без шока
| Метрика | День 0 | День 7 | День 14 | Равновесие |
|---|---|---|---|---|
| Стейкеров | 200 | 130 | 80 | 80 |
| Стейк | 6.0M | 3.7M | 2.4M | 2.4M |
| APR | 4.9% | 7.8% | 12.1% | 12.1% |
Начальный APR 4.9% — ниже порога для 120 агентов (у которых порог от ~5% до 15%). Они выходят в течение 1–14 дней (в зависимости от задержки реакции). Стейк падает с 6M до 2.4M, APR вырастает до 12.1% — и система стабилизируется. Оставшиеся 80 агентов довольны.
Табличная модель сказала бы: «60% стейкается при APR 4.9%». Симуляция показала: реально стейкается 24% (2.4M из 10M), а APR в равновесии — 12.1%, не 4.9%.
Сценарий с шоком (10 китов выходят на день 60)
На день 60 система уже в равновесии (80 стейкеров, APR 12.1%). Затем 10 крупнейших кошельков выходят одновременно:
| Метрика | До шока | После шока | Новое равновесие |
|---|---|---|---|
| Стейкеров | 80 | 70 | ~62 |
| Стейк | 2.4M | 1.6M | ~1.4M |
| APR | 12.1% | 18.3% | ~20.9% |
Выход 10 китов убирает ~800K токенов из стейка. APR скачком растёт до 18.3%. В этом конкретном прогоне каскад слабый — оставшиеся агенты имеют низкие пороги (3–5%) и их устраивает любой APR.
В более реалистичной модели (с учётом падения цены токена при массовом выходе) эффект был бы обратным: выход китов → давление на продажу → цена падает → реальная доходность в долларах снижается → каскад усиливается.
Что показала симуляция, чего не показала бы таблица
- Реальное равновесие (80 стейкеров, не 200) — при том же APR и том же supply
- Скорость каскада (14 дней до стабилизации) — конкретная динамика, не «мгновенный пересчёт»
- Роль задержки реакции — агенты с delay=14 выходят позже, растягивая каскад
- Распределение имеет значение — выход 10 китов убрал 800K, а выход 10 мелких убрал бы ~30K
Как масштабировать эту модель
Пример выше — базовый. Для реального проекта можно добавить:
Обратную связь через цену. Сейчас цена токена не меняется при выходе из стейкинга. В реальности выход → продажа → падение цены → снижение реальной доходности → каскад усиливается. Это превращает мягкую стабилизацию в жёсткий банк-ран.
Несколько типов агентов. «Фермеры» перемещаются между протоколами при изменении APR, «ходлеры» игнорируют APR и реагируют только на цену, «атакующие» целенаправленно дестабилизируют стейк.
Многократные прогоны. Один прогон — один исход. 100 прогонов с разными seed дают распределение исходов. Вопрос не «что произойдёт», а «в каком проценте прогонов стейк падает ниже 20% supply».
Инструменты
Для примера в этой статье достаточно NumPy + Matplotlib. Для более сложных моделей:
cadCAD — Python-фреймворк от BlockScience. Формализует модель как цепочку «состояние → политика → механизм обновления». Использовался для моделирования Ethereum 2.0, Filecoin, Ocean Protocol. Хороший выбор, когда модель перерастает один скрипт.
radCAD — упрощённый API поверх cadCAD. Быстрый старт, меньше шаблонного кода.
TokenSPICE — симулятор от Ocean Protocol. Работает с реальными EVM-контрактами через форк блокчейна. Тестирует не абстрактную модель, а конкретный Solidity-код.
Порядок работы
- Спроектируйте экономику в таблице. Allocation, вестинг, эмиссия, unit-экономика. Убедитесь, что модель предложения сходится.
- Определите критический механизм. Что может сломаться? Стейкинг, governance, ликвидность?
- Опишите типы агентов. Кто участники, какие у них цели? Какие параметры варьируются?
- Запустите 100+ прогонов. Один прогон ничего не доказывает.
- Анализируйте хвосты. Не средний исход, а 5-й перцентиль — что в 5% худших сценариев?
- Итерируйте параметры механизма. Цель — устойчивость в 95%+ прогонов.
- - В системе есть участники с конкурирующими интересами
- Действия одного участника влияют на условия для других
- Есть механизмы с обратной связью (стейкинг, AMM, bonding curve)
- Важно понять устойчивость к экстремальным сценариям
- Распределение позиций сильно неравномерное (есть киты)
- Система включает governance с голосованием
3+ пунктов — агентная модель окупит вложения. 0–1 — начните с табличной модели.
Нужна агентная модель для вашего проекта?
Мы проектируем токеномику и проверяем её симуляциями — от табличных моделей до агентного моделирования
Обсудить проектЧитайте также
- Симуляции в токеномике — 4 уровня: sensitivity analysis, сценарии, Monte Carlo, ABM
- 5 моделей предложения токенов — allocation, bonding curve, airdrop, reward, market
- AMM и пулы ликвидности — механизмы с обратной связью, которые часто моделируются агентами
- Bonding Curve — ещё один механизм, где агентное моделирование особенно полезно