Защита от reorg
Никаких зачислений по одному блоку. Платёж идёт Pending → Safe → Finalized — с авто-перепроверкой до финальности и ручным ReverifyBlock на краевые случаи.
Восемь рук, одна задача: довести деньги до вас и доказать, что они остались. Платёж держится до заданного порога финальности — с перепроверкой при reorg, идемпотентными API, атомарными балансами без ухода в минус, API-ключами со скоупом и 2FA. И так же прямо говорим, чего пока не умеем.
Приём крипты ломается в конкретных, скучных местах. Блок пере-собрался. Ретрай списал дважды. Один утёкший ключ открыл всё. Каждая карточка ниже — часть, которую Suward уже выполняет в коде, а не обещание, и любую можно открыть и разобрать.
Никаких зачислений по одному блоку. Платёж идёт Pending → Safe → Finalized — с авто-перепроверкой до финальности и ручным ReverifyBlock на краевые случаи.
Отправьте тот же create-запрос дважды с его Idempotency-Key — вернётся тот же платёж, а не второе списание.
Внутри Suward outbox переносит статус-события из монитора в cryptopay, чтобы сбой сервиса их не потерял. Статус вы читаете опросом API, а не из вебхука.
У каждой сети свой required_confirmations: 12 на Ethereum, 15 на BSC, 128 на Polygon. Быстрый L2 и склонная к reorg сеть набирают доверие по-разному.
Ключи скоупятся по проектам. Ротируйте legacy-ключ или ведите несколько именованных v2-ключей и отзывайте по одному. Запросы лимитированы по частоте.
Двухфакторка TOTP с backup-кодами, плюс организации, проекты и роли — каждый видит только то, что разрешает его роль.
Каждое зачисление атомарно и хранится как Decimal128, делится на safe и accepted и никогда не уходит ниже нуля.
HD-адреса в сетях EVM, уникальный депозитный адрес на каждый платёж. Вывод сегодня проходит проверку оператором. Авто-вывод on-chain — в roadmap.
Цепочка может тихо переписать недавнюю историю. Наивный листенер зачислит этот откатанный блок и не отыграет назад. Suward — нет. Платёж не принимается по одному блоку. Он идёт Pending → Safe → Finalized и держится до заданного порога финальности этой сети, а reorg обрабатывается автоматически до финальности. На редкий краевой случай оператор может вручную перепроверить любой блок через ReverifyBlock.
Safe и accepted держатся раздельно. Каждый хранится как Decimal128 — никакого дрейфа float, который потом пришлось бы сводить, а каждое зачисление атомарно. Если reorg сдвинул цепочку под ногами, Suward пересчитывает баланс от on-chain-реальности. В минус он не уходит.
Suward работает на HD-кошельках в сетях EVM и выпускает свежий депозитный адрес под каждый отдельный платёж — по этой простой причине два платежа не спутаются в один, а адрес ни разу не переиспользуется. Вывод сегодня идёт через operator-flow. Человек подтверждает txHash. Авто-вывод on-chain — в roadmap, поэтому ручной шаг мы не выдаём за мгновенный.
Legacy-ключи ротируются через RotateAPIKey. Модель v2 добавляет CreateAPIKey и RevokeAPIKey — несколько именованных ключей на проект, каждый со скоупом, чтобы утечка в одном проекте не дошла до других.
Idempotency-Key при создании платежа значит, что повторный запрос вернёт исходный платёж. Стройте агрессивные ретраи и ни разу не задвоите платёж.
Outbox переносит статус-события из монитора в cryptopay, чтобы они пережили сбой сервиса. Это внутренняя механика. Статус платежа вы получаете опросом API, потому что вебхуков для мерчанта пока нет.
Двухфакторка — TOTP плюс backup-коды. Работа делится на организации и проекты, а роли вроде ROLE_OWNER решают, кому что можно.
За сервисом стоят health-checks и метрики Prometheus. Страница статуса показывает покомпонентную картину, а не вылизанную цифру аптайма, за которую мы пока не отвечаем. Юрлицо, контакты и юридические документы — на виду, а не спрятаны.
Ни SOC 2, ни PCI-сертификата — у нас их нет. Не заявляем паритет фич с крупными шлюзами. Не обещаем instant payout: вывод проверяет оператор. Живых вебхуков мерчанту пока нет, поэтому сегодня вы опрашиваете API. А наш ERC-20-детект читает только calldata transfer() — поэтому мы просим плательщика отправлять стандартный transfer на уникальный адрес. И сказать это прямо — как раз и есть суть.
Когда он достигает заданного порога финальности своей сети — момента, на котором статус становится Finalized. Это значение своё для каждой сети: 12 подтверждений на Ethereum, 15 на BSC, 128 на Polygon. До этого он на Pending или Safe, и товар вы придерживаете.
Suward пересчитывает баланс от on-chain-реальности. Значения safe и accepted меняются вместе, атомарно, поэтому в реестре не остаётся денег, которые цепочка забрала. Ровно поэтому одного раннего блока для зачисления никогда не хватает.
Пока нет. Сегодня вы запрашиваете статус платежа через API, и этот ответ — источник истины. Вебхуки и live-события SSE в roadmap, помечены Soon, и мы не покажем их готовыми, пока это не так.
API-ключи скоупятся по проектам. С v2-ключами можно вести несколько именованных ключей и отозвать через RevokeAPIKey только скомпрометированный, а заранее созданный ключ держит интеграцию живой. Сверху — TOTP-2FA и роли на аккаунте.