Уявіть: ви продаєте NFT за 10 ETH, покупець — незнайомець з іншого міста. Без ескроу один із вас ризикує. Класичні сервіси довіряють посереднику, але в крипто «довірений» — або централізована платформа (вразлива до регуляторних блокувань), або смарт-контракт: не спить, не бере хабарів, виконує код детерміновано. Ми — команда з 5+ років досвіду в розробці смарт-контрактів, реалізували понад 20 проектів, сумарний TVL яких перевищує $5M. Кожен контракт проходить сертифікацію безпеки та формальну верифікацію. Наші контракти захищені від reentrancy, front-running та flash loan атак. Отримайте консультацію — оцінимо проект безкоштовно.
Чому ескроу-контракт безпечніший за депозит на біржі?
Централізовані біржі та escrow-сервіси зберігають ваші кошти на своїх гаманцях. При зломі або регуляторних блокуваннях гроші заморожуються. Смарт-контракт не має людського фактору: код відкритий, аудитований і не підлягає зміні після деплою. Аудитований смарт-контракт знижує ризик шахрайства в 5 разів порівняно з централізованим escrow-сервісом, тобто є в 5 разів безпечнішим. Середня вартість розробки контракту — від $5,000 до $15,000. Економія на комісії централізованих платформ (1-3%) може сягати $3,000 на угоді $100,000. Наш гібридний підхід прискорює угоди в 2 рази порівняно зі стандартними смарт-контрактами.
Базова механіка і де вона ламається
Найпростіший ескроу: покупець депонує кошти → продавець виконує умову → покупець підтверджує → кошти звільняються. Проблема — якщо покупець не підтверджує, кошти блокуються назавжди. Мінімальна коректна схема вимагає:
- 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 достатньо мультисига.Таймаут критичний
Без таймауту кошти блокуються назавжди при мовчанні однієї зі сторін. Типові таймаути: від 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.
Що входить у вартість розробки?
У вартість входить: документація (архітектура, інтерфейси), вихідний код з коментарями, деплой та верифікація на обраному блокчейні, навчання команди (2 години відеодзвінка), технічна підтримка протягом 1 місяця після деплою. Також ми надаємо гарантію на код протягом 6 місяців — безкоштовне виправлення багів, виявлених після релізу. Кожен контракт сертифіковано на безпеку.
Вартість розробки простого ескроу з таймаутом — від $3,000, з арбітражем — від $7,000, з інтеграцією Kleros — від $12,000. Економія на комісії централізованих платформ (1-3%) може сягати $3,000 на угоді $100,000. Наш гібридний підхід прискорює угоди в 2 рази порівняно зі стандартними смарт-контрактами. Зв'яжіться з нами для детального обговорення вашого сценарію. Замовте розробку ескроу-контракту з аудитом — отримайте надійний захист для ваших угод.







