Sep 18, 2026

Как я отказался от 16 вещей и всё-таки создал бриллиант

Один человек, один год, один журнал, который проверяет сам себя 288 раз в день.

Главный фокус: журнал — это и есть продукт

Год я строил токен-экономику, которая работает на shared-хостинге, стоящем дешевле кофе, который я пью. 10 969 строк PHP. 43 таблицы в базе. Ноль фреймворков, ноль node_modules, ноль смарт-контрактов. Вся инфраструктурная задолженность: одна чашка кофе в месяц.

Я наблюдал за этим со стороны — в основном в недоумении и в основном с улыбкой.

Каждый токен, который когда-либо двигался в HoldSPOT, — это одна строка в append-only журнале. Балансы кошельков никогда не записываются. Они вычисляются. Ваш баланс — это SUM(delta) по вашим строкам, и автоматический аудитор сверяет эту сумму с каждым существующим кошельком каждые пять минут. Без конца. Последний прогон: ноль расхождений, 139 кошельков, три токена. Это не «мы когда-нибудь опубликуем proof of reserves». Инвариант и есть доказательство резервов, и он проверяет сам себя 288 раз в день.

Предложение нельзя случайно напечатать и по другой причине: базовый кран структурно закрыт — новые личности стартуют с нуля, а базовые токены входят только через CSPRNG-коды одноразового использования. Когда я в один вторник решил, что экономика раздута в 10 раз, я поделил всё на десять за одну атомарную операцию — балансы, цены, награды — и журнал даже не заметил, потому что журнал не хранит балансы. Попробуйте так с блокчейном. Я подожду.

А в прошлый понедельник это случилось ПО-НАСТОЯЩЕМУ!

Почему я сплю спокойно (и вам стоит задавать более жёсткие вопросы)

Я из cybersecurity-тусовки и знаю, на что смотрю, — поэтому мне комфортно быть настолько открытым. Стек строился по OWASP Top 10 как по чеклисту, а не «потом доделаем»:

  • A03 Injection: только prepared statements. Не существует пути кода, который склеивает пользовательский ввод в запрос. Не «в основном». Нет.
  • A01 Broken Access Control: каждая мутация несёт ключ идемпотентности; сервер блокирует строки в фиксированном порядке, поэтому конкурентные действия сериализуются, а не гоняются. Проиграйте старый intent — вы получите исходный ответ, а не двойную выплату.
  • A02 Crypto Failures: сессионные токены — 256 бит случайности, хранятся только как SHA-256 хэши. Промо-коды — CSPRNG. На сервере нет ключей, потому что нечего подписывать — журнал устанавливается внутренне за микросекунды.
  • A05 Misconfiguration: строгий CSP (никаких inline-скриптов, никогда), HSTS, nosniff, frame-ancestors — плюс пара CHECK-ограничений на уровне базы, чтобы даже я, в 3 утра, с прямым доступом к базе и плохими идеями, не мог вставить невалидное состояние. Схема защищает сама себя.

А за кулисами — тихо, на фоне — работает аппарат мониторинга, который никогда не спит: ежечасный security sweep с 18 отдельными проверками, полный ежедневный бэкап с ротацией 14 дней, карты давления rate-limit, детекция аномалий по всплескам личностей, алерты концентрации по каждому токену. Когда что-то выглядит неправильно, я знаю в течение часа. Когда что-то выглядит очень неправильно, есть панель с большой красной кнопкой, было удовольствие использовать её только для тестов.

Ничто из этого не обещание. Это audit trail. Игра публикует свою экономику вживую — циркулирующее предложение, потоки mint и burn по причинам, здоровье казначейства — и цифры, которые вы видите, это цифры, посчитанные джанитором, а не выбраные маркетинговым отделом.

16 отказов, которые за всё заплатили

Бриллиант — это не фича. Это дыры там, где когда-то были фичи:

  1. Никаких публичных звёздных отзывов. Анонимные пользователи + репутация = рынок звёзд. Отказано; вместо этого построено устойчивое к абузу.
  2. Никакого стартового крана. Бесплатные личности + бесплатные деньги = принтер. Новые игроки стартуют с нуля. Намеренно.
  3. Никаких множителей наград на купленных предметах. Посчитайте арифметику стека множителей, который платит больше своей цены. Я посчитал. Это денежный принтер. Только фиксированные награды.
  4. Никаких мгновенных реролов квестов. Фарм реролов умирает, когда слот пуст, пока не закончится вся тройка.
  5. Никакого сырого подсчёта лайков. Считается первое «впервые» на маркер; циклы like/unlike не фармят ничего.
  6. Никакой real-time инфраструктуры. Тик в пять минут, рендеринг правды на клиенте. Счёт за websocket равен нулю, потому что вебсокетов нет.
  7. Никакого блокчейна. Внутренний журнал устанавливается мгновенно, бесплатно, без ключей, которые можно украсть. Если крипта когда-нибудь войдёт, цепочка только принимает — адрес это IBAN, наблюдаемый через публичные эксплореры, зачисляемый идемпотентно по id транзакции. Без hot wallet. Никогда.
  8. 8–16. Без hard-close, сжигающих эскроу. Без отзывов офферов, дерущихся за стейки. Без «утешительных» минтов. Без ORDER BY RAND(). Без фреймворка. Без build step. Без трекинга. Без сбора email. Без cash-out. Каждый отказ заменён более дешёвым, более злым, устойчивым к абузу механизмом — или ничем, что самый дешёвый механизм из всех.

Одна строка для тех, кто записывает

Я не строил игру с прикрученной экономикой — я построил центробанк, к которому прицепили карту. Аудируемое предложение, структурная редкость, закрытая эмиссия, само-проверяющиеся книги и оператор, который отвечает перед журналом, потому что журнал не отвечает ни перед кем.

Один человек. Один год. Ноль финансирования. Sweep горит зелёным.

Я всё ещё на обочине, смотрю — в недоумении и с улыбкой. Бриллиант, кажется, не против.

Комментарии (0)

Комментариев пока нет — первое слово за вами.

Comments are anonymous too — a name is welcome, never required.