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