Разработка системы условного платежа (conditional payment) на блокчейне

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1Все 1305 услуг
Разработка системы условного платежа (conditional payment) на блокчейне
Средний
~3-5 дней
Часто задаваемые вопросы

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

Этапы блокчейн-разработки

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

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

Разработка системы условного платежа (conditional payment) на блокчейне

Мы разрабатываем escrow-контракты, которые блокируют средства и освобождают их только при выполнении заданных условий. Никаких посредников, полная прозрачность on-chain. За 5 лет работы над 50+ проектами мы знаем: главное — правильно выбрать механизм подтверждения и заложить защиту от типовых атак. Получите консультацию — мы поможем определить оптимальную архитектуру для вашего сценария.

Условный платёж — это escrow на стероидах. Деньги заблокированы в контракте и освобождаются только при выполнении заранее определённых условий. Звучит просто, но дьявол в деталях: кто верифицирует выполнение условия, что происходит при споре, как контракт знает о событиях off-chain. Именно последний вопрос делает эту задачу нетривиальной — блокчейн-контракт изолирован и не может сам проверить «задача выполнена» или «KPI достигнут». Ему нужен оракул.

Почему conditional payment требует оракула?

Контракт не имеет доступа к внешнему миру. Если условие — «товар доставлен» или «результат с сервера», то нужно источник данных, которому доверяют обе стороны. Вариантов три: централизованный арбитр, децентрализованный оракул (Chainlink) или криптографическая подпись от заранее согласованного верификатора. Каждый вариант диктует архитектуру и уровень доверия.

Как выбрать механизм подтверждения?

Механизм Доверие Сложность Пример применения
Арбитр (trusted third party) Централизованное Низкая B2B-контракты, freelance-платежи
Оракул Chainlink (Price Feed / Functions) Децентрализованное Средняя DeFi-опционы, KPI-платежи
Криптографическая подпись Децентрализованное (ключ) Низкая Платежи с off-chain подтверждением
Многосторонняя верификация (2-of-3) Распределённое Высокая Аукционы, хай-риск сценарии

Арбитр (trusted third party)

Классический escrow: покупатель, продавец, арбитр. Arbirator — address с правом вызвать release() или refund(). Простейшая реализация, подходит для большинства B2B случаев. Проблема: арбитр централизован. Если это адрес одного человека — single point of failure и доверия. Решение: арбитр — мультисиг или DAO.

Оракул (Chainlink или кастомный)

Для условий которые можно получить on-chain: цена актива, результат события, on-chain данные из другого протокола. Chainlink AnyAPI позволяет запросить любые HTTP-данные и доставить их в контракт.

// Запрос данных через Chainlink Functions
function requestVerification(bytes32 jobId, string calldata apiUrl) external {
    Chainlink.Request memory req = buildChainlinkRequest(
        jobId, address(this), this.fulfill.selector
    );
    req.add("get", apiUrl);
    req.add("path", "result.completed");
    sendChainlinkRequest(req, fee);
}

function fulfill(bytes32 requestId, bool completed) external recordChainlinkFulfillment(requestId) {
    if (completed) {
        _releaseFunds();
    }
}

Для простых числовых условий (price threshold) — Chainlink Price Feeds без дополнительной интеграции.

Подпись получателя (cryptographic proof)

Условие подтверждается цифровой подписью доверенной стороны. Например, платёжная система подписывает подтверждение транзакции, а контракт верифицирует подпись через ecrecover. Это работает без on-chain оракула — подпись содержит всю необходимую информацию.

function releaseWithSignature(
    uint256 paymentId,
    bytes memory signature
) external {
    bytes32 hash = keccak256(abi.encodePacked(paymentId, address(this)));
    bytes32 ethHash = hash.toEthSignedMessageHash();
    address signer = ethHash.recover(signature);
    require(signer == trustedVerifier, "Invalid signature");
    _release(paymentId);
}

Многосторонняя верификация

Комбинация: 2-of-3 между покупателем, продавцом и арбитром. Любые два из трёх могут освободить средства. Это снижает риск сговора одной стороны с арбитром.

Механизм разрешения споров

Мы внедряем механизм оспаривания с хранением доказательств (IPFS-хэши в контракте). Каждая сторона может загрузить хэш своего утверждения, и арбитр (или DAO) принимает решение на основе этих данных. Время на оспаривание ограничено — например, 7 дней.

Базовая структура контракта

struct Payment {
    address payer;
    address payee;
    uint256 amount;
    address token;          // address(0) для ETH
    uint256 deadline;       // timestamp истечения
    PaymentState state;     // Pending, Released, Refunded, Disputed
    bytes32 conditionHash;  // хэш условия (off-chain документ)
}

enum PaymentState { Pending, Released, Refunded, Disputed }

Deadline критичен. Если условие не выполнено к deadline, плательщик должен иметь возможность вернуть средства. Без deadline средства могут застрять навсегда.

Как внедрить условный платеж: 5 шагов

  1. Анализ сценария. Определите участников, условие и механизм подтверждения. Например, для KPI-платежа нужен оракул, для фриланса — арбитр.
  2. Проектирование контракта. Выберите паттерн (арбитр, оракул, подпись) и задайте параметры: deadline, token, сумма.
  3. Реализация. Напишите код на Solidity с использованием Foundry или Hardhat. Включите тесты с покрытием >95%.
  4. Аудит безопасности. Проверьте на reentrancy, oracle manipulation, front-running. Используйте Slither и Echidna.
  5. Деплой и мониторинг. Разверните в тестовой сети, проведите интеграционное тестирование, затем в mainnet.

Типичные кейсы и их специфика

Из нашей практики:

  • Freelance-платёж. Условие: подтверждение заказчика. Арбитр: DAO или мультисиг. Срок: 14-30 дней. Особенность: нужен механизм оспаривания с хранением доказательств.
  • DeFi-опцион. Условие: достижение ценового уровня. Оракул: Chainlink Price Feed. Срок: expiry опциона. Особенность: oracle manipulation risk — flash loan может кратковременно изменить цену. Решение: TWAP вместо spot price. Chainlink с TWAP в 2 раза надёжнее spot price для ценовых условий — это снижает операционные затраты до 30%.
  • Вендор-платёж с KPI. Условие: on-chain данные (TVL, объём транзакций). Оракул: The Graph + кастомный оракул. Срок: квартальный. Особенность: данные с The Graph не push, а pull — контракт запрашивает их через Chainlink.
  • Игровые достижения. Условие: on-chain событие в игровом контракте. Верификация: прямой вызов от игрового контракта.

Как защититься от атак?

Reentrancy при release. _release() переводит ETH или токены. Если recipient — контракт, он может вызвать _release() повторно. Защита: ReentrancyGuard от OpenZeppelin + checks-effects-interactions паттерн (сначала меняем state, потом переводим).

Oracle manipulation. Flash loan атакующий за один блок манипулирует ценой на DEX → оракул читает изменённую цену → условие выполнено → средства освобождены. Для ценовых условий — только Chainlink с TWAP, не DEX spot price.

Front-running на fulfill. MEV-бот видит транзакцию fulfillment в mempool и вставляет свою транзакцию перед ней. Для escrow это обычно не критично (получатель определён заранее), но в аукционных схемах нужна commit-reveal.

Истечение срока при валидном условии. Условие выполнено, но транзакция confirmation застряла, и deadline прошёл. Нужен разумный grace period или off-chain мониторинг с алертами.

Что входит в работу (deliverables)

  • Аудит и доработка требований под ваш бизнес-сценарий.
  • Исходный код смарт-контрактов на Solidity (Foundry/Hardhat) с юнит- и интеграционными тестами (покрытие >95%).
  • Документация API и схемы взаимодействия.
  • Развёртывание в тестовой сети (Sepolia, Goerli), полный тест-раунд.
  • Инструкция по эксплуатации и поддержке.
  • Код-ревью от нашего старшего инженера (10+ лет в блокчейне).

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

Сроки

Этап Длительность
Базовый escrow (ETH/ERC-20, арбитр, deadline) 2 дня
Добавление Chainlink Price Feed +1 день
Добавление Chainlink Functions +2 дня
Мультисторонний спор-механизм с IPFS +2 дня
Полная система с frontend +3-5 рабочих дней

Точный срок определяем после анализа вашего сценария.

Разработка смарт-контрактов

Мы столкнулись с ситуацией: контракт задеплоен, через две недели приходит сообщение — пул дренирован на $800k. Смотрим транзакцию в Tenderly: атакующий вызвал deposit(), внутри callback на ERC-777 повторно вызвал withdraw() — баланс обновился только после второго выхода. Классическая reentrancy, но не через ETH transfer, а через хук ERC-777. ReentrancyGuard стоял только на withdraw().

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

Как мы разрабатываем смарт-контракты под ключ

Начинаем с аудита бизнес-логики и выбора стека. Solidity 0.8.x — стандарт для EVM-совместимых чейнов: Ethereum, Arbitrum, Optimism, Polygon, BSC, Avalanche C-Chain. Для Solana используем Rust и Anchor: модель аккаунтов и программ требует явного объявления всех ресурсов. Для проектов с формальной верификацией подходит Move (Aptos, Sui) — линейные типы языка исключают копирование ресурсов на уровне компилятора. Vyper выбираем для контрактов, где критична простота аудита (Curve Finance).

Язык Модель исполнения Типичная область Риски
Solidity 0.8.x EVM, последовательное исполнение DeFi, NFT, токены Reentrancy, переполнение (unchecked)
Rust (Anchor) Solana, параллельное Высоконагруженные DEX, игры Неправильное объявление аккаунтов
Move Aptos/Sui, ресурсная Крупные протоколы Сложность экосистемы
Vyper EVM, ограниченный синтаксис Критические контракты (Curve) Зависимость от стабильности компилятора

Gas optimization — не преждевременная оптимизация, а архитектурное решение. На Ethereum mainnet деплой плохо спроектированного контракта может стоить 2–5 ETH только из-за неоптимального storage layout. Переупаковка структуры Proposal с 7 слотов до 4 сэкономила 18k gas на каждом голосовании — около $1.5 при gas price 30 gwei. Экономия на масштабе протокола с тысячами голосований в день даёт ощутимую годовую выгоду.

Типичные ошибки в gas: передача массивов через memory вместо calldata в external функциях (дороже в 2–3 раза); использование require с длинными строками вместо custom error error InsufficientBalance(...). Кастомные ошибки дешевле на 50–200 gas на revert и передают структурированные данные фронтенду.

Почему аудит смарт-контрактов критичен для безопасности

Аудит — не разовая проверка, а встроенный этап разработки. Используем три уровня:

  1. Статический анализSlither (30 секунд в CI) выявляет reentrancy, неинициализированные переменные, опасный delegatecall.
  2. Фаззинг и invariant тестыFoundry с --fuzz-runs 50000 находит edge cases, которые пропускают сотни unit-тестов. Реальный кейс: AMM контракт с кастомной математикой после 150 тестов в Hardhat — Foundry нашёл integer division truncation, позволявший пылевой атаке копить dust на контракте. Echidna проверяет инварианты («сумма всех балансов ≤ totalSupply»).
  3. Ручной code review — наши инженеры с опытом 10+ лет в блокчейне выявляют логические ошибки, которые не ловят инструменты. Для протоколов с TVL > $1M обязателен внешний аудит со стороны Trail of Bits, Consensys Diligence или OpenZeppelin. Срок — 2–4 недели.

Любой апгрейдируемый протокол должен иметь timelock. TimelockController из OpenZeppelin: операция предлагается → ждёт минимальный delay (48–72 часа) → выполняется. Без timelock один скомпрометированный deployer wallet = потеря всего пула.

Какие паттерны апгрейда выбираем

Паттерн Механизм Риск Когда использовать Наш опыт
Transparent Proxy (OZ) admin vs user разделение Storage collision, centralization Стандартные проекты 15+ реализаций
UUPS Логика апгрейда в implementation Забыть _authorizeUpgrade → контракт навсегда сломан Газ-оптимизированные проекты 7 проектов
Diamond (EIP-2535) Множество facets Сложность аудита Крупные протоколы с 10+ контрактами 3 внедрения
Beacon Proxy Один beacon для множества proxies Beacon = single point of failure Фабрики однотипных контрактов 5 фабрик

Storage collision — главная опасность прокси. Implementation v2 не должен добавлять переменные перед существующими. OpenZeppelin Upgrades plugin для Hardhat и Foundry проверяет это автоматически, но только при использовании его API.

Как защитить контракт от MEV и front-running

На Ethereum mainnet транзакции в mempool видны всем. MEV-боты проводят sandwich-атаки на DEX, фронтраннинги минтинга и governance. Решение: commit-reveal scheme для аукционов, приватная отправка через Flashbots PROTECT RPC. EIP-7702 и PBS (proposer-builder separation) меняют картину, но пока не массово.

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

  1. Аналитика — спецификация функций, диаграмма вызовов, анализ edge cases. Без этого кодинг начинается впустую.
  2. Разработка — Solidity/Rust с тестами параллельно. Тест → код → рефакторинг. Используем Foundry для fuzz и invariant тестов.
  3. Внутренний аудит — Slither + Echidna + ручной code review. Foundry invariant tests для протокольных инвариантов.
  4. Внешний аудит — для проектов с реальными деньгами. Срок: 2–4 недели.
  5. Деплой — Foundry scripts или Hardhat Ignition с verify на Etherscan. Gnosis Safe для ownership transfer сразу после деплоя.
  6. Мониторинг — Tenderly alerts, OpenZeppelin Defender, Forta Network.

Что входит в работу

  • Документация на архитектуру и спецификацию контракта (NatSpec).
  • Исходный код с репозиторием и CI (Slither, Foundry, coverage).
  • Развёрнутая версия контракта с verify на блокчейн-эксплорере.
  • Результаты аудита (внутреннего и внешнего по запросу).
  • Доступы к мониторингу и управлению (Gnosis Safe).
  • Гарантия на код: фиксы критических багов в течение месяца после деплоя.
  • Консультация по интеграции с веб-интерфейсом (wagmi, RainbowKit).

Сроки ориентировочно

  • ERC-20 token с базовыми функциями: 1–2 недели
  • Vesting контракт с cliff/linear schedule: 2–3 недели
  • NFT ERC-721/1155 с маркетплейсом: 4–6 недель
  • AMM или lending протокол: 2–4 месяца
  • Мультичейн протокол с bridge: 4–7 месяцев

Аудит добавляет 3–6 недель и идёт параллельно с финальным тестированием где возможно. Стоимость рассчитывается индивидуально — свяжитесь с нами, и мы оценим ваш проект бесплатно.

Закажите разработку смарт-контракта — получите консультацию по архитектуре и защите от reentrancy, MEV и gas-атак. Хотите обсудить детали? Напишите нам — мы подберём оптимальный стек под вашу задачу.