К основному содержимому

Введите слово из вопроса или названия статьи.

2 · Практика

Жизненный цикл сделки: от оферты до выплаты шаг за шагом

Полный разбор сделки в Coin-Trust: оферта, принятие, исполнение, завершение, отмена, просрочка и спор. Кто что может сделать на каждом шаге и сколько получит.

4 мин чтенияОбновлено:
В этой статье

Эта статья - «карта местности» для всего сервиса. Мы пройдём всю жизнь сделки от первого клика до последней выплаты и на каждом шаге покажем, кто что может сделать и что произойдёт с деньгами. Если вы новичок, начните со статьи что такое эскроу, а затем возвращайтесь сюда.

Три стороны сделки

  • Покупатель - тот, кто платит и подтверждает получение.
  • Продавец - тот, кто выполняет обязательство (товар, работа, услуга).
  • Гарант (арбитр) - независимая сторона, которая вмешивается только при споре (как он устроен).

Деньги всё время лежат в смарт-контракте, а не у кого-то из участников. Контракт одинаков во всех сетях, подробнее - в статье про выбор сети.

Шаг 1. Создание оферты

Сделку начинает любая из сторон - покупатель или продавец. Создатель задаёт условия: кто контрагент, кто гарант, токен и сумму, срок исполнения и ставки гаранта. По желанию можно приложить текст условий: в контракте фиксируется только его хеш (почему это важно).

Что происходит с деньгами:

  • Если оферту создаёт покупатель, деньги списываются сразу и ложатся в контракт.
  • Если создаёт продавец, деньги пока никто не вносит, а оферта ждёт покупателя.

Состояние сделки - Offered (предложена). У оферты есть срок жизни - 7 дней. Если никто не принял её за это время, оферту можно отозвать, и деньги вернутся полностью.

Шаг 2. Принятие оферты

Вторая сторона открывает оферту и принимает её. Если условия были зафиксированы, в вызов передаётся хеш условий, который она видела: если он не совпадает с записанным в контракте, транзакция отклоняется. Так нельзя подменить условия между просмотром и подтверждением.

  • Если оферту создал продавец, покупатель вносит деньги при принятии.
  • Если создал покупатель, деньги уже внесены, и продавец просто соглашается.

В момент принятия запускается срок исполнения: выбранный пресет (1, 7, 30 или 90 дней) отсчитывается от принятия. Состояние - Active (действует).

Шаг 3. Исполнение

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

В состоянии Active возможны четыре развития событий.

Шаг 4а. Успех: покупатель подтверждает получение

Покупатель нажимает «Подтвердить получение». Контракт выплачивает продавцу сумму за вычетом комиссий.

Пример. Сделка на 1 000 USDC, комиссия сервиса 1%, ставка гаранта 2%:

ПолучательРасчётСумма
Сервис1% от 1 00010 USDC
Гарант2% от 99019,80 USDC
Продавецостаток970,20 USDC

Ставку гаранта считают от суммы после комиссии сервиса. Детали - в статье комиссии на примерах.

Шаг 4б. Тихие исходы: отмена по согласию и просрочка

Отмена по согласию. Каждая сторона может поставить «отметку согласия» на отмену и снять её. Когда обе стороны отметили - сделка закрывается, покупатель получает деньги обратно за вычетом комиссий. Это удобно, если стороны сами договорились, что сделка не состоится.

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

Шаг 4в. Спор

Если стороны не договорились, любая из них может открыть спор, пока сделка в состоянии Active. Состояние меняется на Disputed, а решение принимает гарант.

Гарант выносит решение: какую долю получает покупатель - от 0% до 100%. Остаток идёт продавцу. Возможны:

  • полный возврат покупателю (100%);
  • полная оплата продавцу (0%);
  • частичное решение (например, 30/70 при частичном исполнении).

Ставка гаранта в споре (она не ниже базовой) вычитается из суммы до раздела, так что обе стороны разделяют расходы пропорционально.

Пример. Сумма 1 000 USDC, ставка гаранта в споре 10%, решение - 50/50:

ПолучательРасчётСумма
Сервис1% от 1 00010 USDC
Гарант10% от 99099 USDC
Покупатель50% от 891445,50 USDC
Продавецостаток445,50 USDC

Если гарант молчит. Если за 30 дней после открытия спора решения нет, любая сторона может вызвать аварийный выход: деньги делятся 50/50, а гарант не получает ничего. Почему именно так - в статье про устройство арбитража.

Можно ли договориться во время спора? Да: отметки отмены работают и в споре. Если обе стороны согласились, гарант не нужен, и ему достаётся только базовая ставка.

Если выплата не прошла

Бывает, что получатель не может принять перевод - например, адрес заблокирован эмитентом стейблкоина (об этом). Контракт в таком случае не зависает: сумма записывается получателю как «кредит», а сделка закрывается. Забрать кредит можно отдельным действием позже. Так один проблемный получатель не блокирует выплаты остальным.

Итоговая схема

СостояниеЧто можно сделатьКто
Offeredпринять офертуконтрагент
Offeredотозвать офертулюбая сторона; после 7 дней - любой
Activeподтвердить получениепокупатель
Activeотметить отменулюбая сторона
Activeоткрыть спорлюбая сторона
Activeзакрыть по просрочкелюбая сторона, после срока
Disputedвынести решениегарант
Disputedаварийный выход 50/50любая сторона, через 30 дней
Settledсделка закрыта-

Каждое действие - это транзакция с событием, которое можно увидеть в обозревателе блоков.

Что почитать дальше

Узнайте, как правильно описать условия, чтобы споров было меньше: как писать условия сделки. А тем, кому интересна реализация, - конечный автомат в Solidity.

Упоминается в статьях

Готовы попробовать?

Создайте первую сделку за пару минут. Деньги блокируются в смарт-контракте и выплачиваются по правилам, которые видны заранее.