Представьте: вы продаёте 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 арбитраж
- Развернуть контракт Escrow, наследуя
IArbitrable. - Указать адрес
arbitratorв конструкторе. - В функции
raiseDisputeвызватьarbitrator.createDisputeс доказательствами. - Реализовать
ruleдля обработки решения арбитра. - Провести тесты с fuzzing на Foundry — покрыть граничные случаи таймаутов и fee-on-transfer.
Процесс разработки
- Проектирование (0.5-1 день). Определяем: арбитр, таймауты, токены, partial release.
-
Разработка и тесты (2-4 дня). Foundry с fuzzing — boundary cases для таймаутов, fee-on-transfer, рекурсия. Отдельные тесты на reentrancy через
ReentrancyGuard. - Аудит и деплой. Для TVL > $100K — внешний аудит (1-2 недели). Деплой с верификацией на Etherscan/Polygonscan.
Средняя стоимость разработки варьируется в зависимости от сложности, начните с консультации — мы оценим проект бесплатно. Свяжитесь с нами для детального обсуждения вашего сценария. Закажите разработку эскроу-контракта с аудитом — получите надёжную защиту для ваших сделок.







