A Aurum
← Все статьи

Что такое криптоэквайринг и как он устроен внутри

Со стороны магазина это кнопка «оплатить криптой». Со стороны системы — четыре независимых механизма, каждый из которых умеет сломаться по-своему. Разберём по порядку, потому что понимание устройства объясняет почти все странности, с которыми потом сталкивается интегратор.

Чем это отличается от карточного эквайринга

В карточном платеже деньги запрашивает продавец: он отправляет в банк требование списать сумму. В криптовалюте наоборот — деньги отправляет покупатель, и остановить или отозвать этот перевод нельзя. Отсюда три следствия, которые определяют всю конструкцию.

Первое: нет отказов «недостаточно средств» — есть переводы на неверную сумму. Второе: нет чарджбэков, но нет и способа исправить ошибку покупателя — вернуть деньги можно только новым переводом. Третье: платёж нужно распознать, а не получить: сеть не знает, за какой заказ пришли деньги.

Адрес как идентификатор заказа

Задача распознавания решается адресами: каждому счёту выдаётся отдельный адрес, и всё, что на него приходит, относится к этому заказу. Никаких «комментариев к платежу» — половина кошельков их не поддерживает, а покупатель их всё равно не заполнит.

Значит, адресов нужно много, и каждый должен быть нашим — то есть таким, с которого мы потом сможем отправить деньги дальше. Они выводятся из одного мастер-ключа по схеме BIP44: ключ хранится в отдельном сервисе, который не имеет выхода в интернет и умеет ровно две вещи — вывести очередной адрес и подписать транзакцию.

Адрес выдаётся из заранее подготовленного запаса. Готовить его заранее приходится потому, что вывод адреса — это обращение к сервису ключей, а страница оплаты должна открыться сразу. Пул пополняется в фоне; когда он пуст, счёт получает статус «ожидает адрес» и адрес появляется через секунду-другую.

Почему платёж принимается не мгновенно

Перевод попадает в сеть сразу, но сначала он лишь предложен. Блок, в который он вошёл, может быть отменён — в блокчейнах это называется реорганизацией. Поэтому платёж проходит два состояния: «увиден» и «подтверждён», и зачисляется он только во втором.

Сколько ждать — свойство сети. В TRON подтверждение занимает секунды, в Ethereum — от десятков секунд до минут, в биткойне — десятки минут. Магазину это важно знать заранее: обещание «оплата за 3 секунды» и выбор сети связаны напрямую.

Что происходит после подтверждения

Дальше начинается то, чего покупатель не видит вовсе. Деньги лежат на адресе заказа — их там десятки, и с каждого отправлять по отдельности дорого. Поэтому есть сбор: фоновая задача переводит средства с адресов заказов на один горячий кошелёк, с которого потом уходят выплаты магазину.

У сбора своя экономика. Каждый перевод стоит комиссии сети, поэтому собирать по одному центу бессмысленно — есть порог. На адресе нужно оставить запас на оплату его же перевода — иначе транзакцию нечем оплатить. А для токенов вроде USDT сначала придётся доложить на адрес монету сети: перевод токена платится не токеном.

Это одна из причин, почему баланс в кабинете и «сколько можно вывести прямо сейчас» — разные числа. Первое говорит, сколько магазину принадлежит; второе — сколько уже физически лежит на кошельке, с которого уходят выплаты.

Двойная запись вместо «баланса»

Внутри платформа не хранит «баланс магазина» одним числом. Каждое движение денег записывается парой проводок: сколько кому прибавилось и откуда это взялось. Сумма всех проводок в системе всегда равна нулю — и это единственный способ заметить, что что-то посчиталось неправильно.

Комиссия сети — тоже проводка, хотя её платит платформа. Без неё книга сходилась бы с ошибкой, растущей пропорционально обороту: деньги ушли из кошелька, а в записях этого не видно.

Что из этого следует магазину