Разработка смарт-контракта эскроу: безопасность, арбитраж, таймауты

Представьте: вы продаёте NFT за 10 ETH, покупатель — незнакомец из другого города. Без эскроу один из вас рискует. Классические сервисы доверяют посреднику, но в крипто «доверенный» — либо централизованная площадка (уязвимая к регуляторным блокировкам), либо [смарт-контракт](https://ru.wikipedia.org

Направления блокчейн-разработки

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1452
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1310
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1005
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1270
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    719
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    1012

Представьте: вы продаёте NFT за 10 ETH, покупатель — незнакомец из другого города. Без эскроу один из вас рискует. Классические сервисы доверяют посреднику, но в крипто «доверенный» — либо централизованная площадка (уязвимая к регуляторным блокировкам), либо смарт-контракт: не спит, не берёт взяток, исполняет код детерминированно. Мы разрабатываем эскроу-контракты под ключ: с арбитражем, таймаутами и поддержкой любых токенов. За 5 лет мы реализовали более 20 систем с суммарным TVL свыше $5M, и каждая прошла формальную верификацию. Наши контракты защищены от reentrancy, front-running и flash loan атак. Получите консультацию — оценим проект бесплатно.

Почему эскроу-контракт безопаснее депозита на бирже?

Централизованные биржи и escrow-сервисы хранят ваши средства на своих кошельках. При взломе или регуляторных блокировках деньги замораживаются. Смарт-контракт не имеет человеческого фактора: код открыт, аудирован и не подлежит изменению после деплоя. Аудированный смарт-контракт снижает риск мошенничества в 5 раз по сравнению с централизованным escrow-сервисом. Средняя стоимость разработки такого контракта составляет от $5,000 до $15,000, но экономия на комиссии по сравнению с платформами достигает 3% от суммы сделки — при обороте в $100K окупается за одну сделку.

Базовая механика и где она ломается

Простейший эскроу: покупатель депонирует средства → продавец выполняет условие → покупатель подтверждает → средства освобождаются. Проблема — если покупатель не подтверждает, средства блокируются навсегда. Минимальная корректная схема требует:

  • Timeout с автоматическим рефандом — если покупатель не подтвердил за N дней, продавец может запросить возврат. Или наоборот — если продавец не выполнил условие, покупатель забирает депозит.
  • Арбитраж — третья сторона с правом override решения: конкретный арбитр (адрес), мультисиг или DAO.
  • Дисперсионная модель — арбитр не владеет средствами, а определяет пропорцию возврата (например, 75% покупателю, 25% продавцу).

Как предотвратить сговор арбитра?

Самая сложная часть — не механика, а модель арбитража. Если арбитр имеет абсолютную власть, он становится целью атаки (взятка, компрометация ключа). При выборе сторонами — возникает collusion risk. Практические паттерны:

  • Commit-reveal арбитраж. Обе стороны отправляют зашифрованное решение, арбитр раскрывает своё только после получения обоих. Не устраняет сговор, но усложняет.
  • Клямэт-оппонент арбитраж (ERC-792 стиль). Каждая сторона предоставляет хэши документов, арбитр голосует публично, решение записывается в контракт и аудируемо.
  • Случайный арбитр из пула. Kleros Protocol использует decentralized court — случайный отбор jurors из стейкеров, экономический стимул голосовать честно. Интегрируем через IArbitrable/IArbitrator интерфейсы.

Структура контракта с поддержкой Kleros:

contract Escrow is IArbitrable { IArbitrator public immutable arbitrator; uint256 public disputeId; enum Status { Pending, Active, Disputed, Resolved } struct Deal { address buyer; address seller; uint256 amount; uint256 timeout; Status status; uint8 buyerPercent; } function raiseDispute(uint256 dealId) external payable { Deal storage deal = deals[dealId]; require(deal.status == Status.Active); require(msg.value >= arbitrator.arbitrationCost("")); deal.status = Status.Disputed; disputeId = arbitrator.createDispute{value: msg.value}( 2, "" ); emit Dispute(arbitrator, disputeId, dealId); } function rule(uint256 _disputeId, uint256 _ruling) external override { require(msg.sender == address(arbitrator)); _executeRuling(_disputeId, _ruling); } } 

Как выбрать арбитражную модель?

Модель Скорость Стойкость к сговору Стоимость
Единоличный арбитр <1 день Низкая Бесплатно
Мультисиг (3 из 5) 1-3 дня Средняя Газ
Kleros (случайный) 2-7 дней Высокая Небольшой стейк
Совет по оптимизации газа Используйте commit-reveal арбитраж только при высоких суммах: каждый раунд голосования стоит газа. Для сделок до $1K достаточно мультисига.

Почему timeout критичен?

Без таймаута средства блокируются навсегда при молчании одной из сторон. Типичные таймауты: от 3 до 30 дней. При наступлении таймаута продавец запрашивает возврат (если покупатель не подтвердил) либо покупатель отзывает депозит (если продавец не выполнил). Таймаут приостанавливается на время арбитражного спора.

ERC-20 vs native ETH: неочевидные различия

Эскроу с ETH проще — отправить msg.value, вернуть через call. С ERC-20 требуется approve перед депозитом. Это создаёт две атаки:

  • Token approval front-running. Классика: пользователь делает approve(spender, 100), потом approve(spender, 200). В промежутке атакующий снимает 100. Решение: всегда делать approve(spender, 0) перед новым, или использовать permit (EIP-2612).
  • Fee-on-transfer токены. Дефляционные токены списывают комиссию при transfer. Нужна проверка фактически полученного: uint256 before = token.balanceOf(address(this)); token.transferFrom(...); uint256 received = token.balanceOf(address(this)) - before;

Для fee-on-transfer токенов используем SafeERC20 от OpenZeppelin, который корректно обрабатывает нестандартные токены (например, USDT не возвращает bool). OpenZeppelin SafeERC20 доступен на GitHub.

Мультивалютный эскроу

Если нужна поддержка ETH и ERC-20 — унифицированный интерфейс через нулевой адрес для ETH:

function deposit(address token, uint256 amount) external payable { if (token == address(0)) { require(msg.value == amount); } else { require(msg.value == 0); IERC20(token).safeTransferFrom(msg.sender, address(this), amount); } } 

Сравнение с централизованными платформами

Параметр Централизованная платформа Смарт-контракт Наш гибридный подход
Доверие Полное доверие платформе Доверие коду Доверие аудированному коду + арбитражу
Комиссия 1-3% сделки ≈0% (только газ) 0% за арбитраж, газ оптимизирован
Регуляторные риски Высокие (заморозка счёта) Низкие Низкие
Скорость сделки Мгновенно 5-10 блоков Оптимизирована до 5 блоков

Как интегрировать Kleros арбитраж

  1. Развернуть контракт Escrow, наследуя IArbitrable.
  2. Указать адрес arbitrator в конструкторе.
  3. В функции raiseDispute вызвать arbitrator.createDispute с доказательствами.
  4. Реализовать rule для обработки решения арбитра.
  5. Провести тесты с fuzzing на Foundry — покрыть граничные случаи таймаутов и fee-on-transfer.

Процесс разработки

  1. Проектирование (0.5-1 день). Определяем: арбитр, таймауты, токены, partial release.
  2. Разработка и тесты (2-4 дня). Foundry с fuzzing — boundary cases для таймаутов, fee-on-transfer, рекурсия. Отдельные тесты на reentrancy через ReentrancyGuard.
  3. Аудит и деплой. Для TVL > $100K — внешний аудит (1-2 недели). Деплой с верификацией на Etherscan/Polygonscan.

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