Прозрачность Ethereum — достоинство для одних, барьер для других. Когда смарт-контракт публикует каждую сумму перевода на Etherscan, это раскрывает конфиденциальные данные клиентов. Для корпоративных расчетов, конфиденциальных голосований или анонимных транзакций такая прозрачность становится блокером. Мы интегрируем Zero-knowledge proof так, чтобы блокчейн видел только факт валидности транзакции, а не её содержимое. Результат — приватность блокчейн-транзакций с сохранением децентрализации. Свяжитесь с нами для оценки вашего проекта — подберем оптимальную схему.
Как ZKP делает транзакции приватными?
ZKP — криптографическая конструкция, где prover убеждает verifier в истинности утверждения без раскрытия исходных данных. Для транзакций это означает скрытие суммы, адресов и деталей перевода. В блокчейне используются zk-SNARKs (Groth16, PLONK) и zk-STARKs. Каждая система влияет на архитектуру приложения.
Почему Groth16 — не всегда лучший выбор?
Groth16 даёт минимальный размер доказательства (~200 байт) и низкий gas (~300K), но требует circuit-specific trusted setup — каждая новая схема нуждается в отдельной ceremony. PLONK с универсальным SRS проще в эксплуатации, а STARKs вообще не требуют trusted setup, но размер доказательства достигает 200 KB, что дороже для on-chain верификации. Groth16 экономит до 40% газа по сравнению с PLONK, а в денежном выражении при среднем объёме транзакций это сотни долларов ежемесячно. Если вам важна скорость развёртывания, PLONK может быть в 2 раза быстрее.
| Система |
Размер доказательства |
Verifier gas |
Trusted setup |
Постквантовая |
| Groth16 |
~200 байт |
~300K gas |
Да (per-circuit) |
Нет |
| PLONK |
~400 байт |
~500K gas |
Универсальный |
Нет |
| STARKs |
40-200 KB |
Высокий |
Нет |
Да |
| Noir (Barretenberg) |
~500 байт |
~400K gas |
Универсальный |
Нет |
Выбор системы зависит от задачи: для DeFi с частыми транзакциями Groth16 экономит до 60% газа, но требует trust setup. PLONK проще в эксплуатации, а STARKs не требуют setup, но доказательство в 200 раз больше.
| Use case |
Рекомендуемая система |
Причина |
| DeFi с частыми транзакциями |
Groth16 |
Минимальный gas |
| Корпоративный payroll |
PLONK |
Проще ротация схем |
| Анонимное голосование |
Semaphore |
Готовый примитив |
| Регулируемая приватность |
Noir |
Selective disclosure |
Когда стоит применять ZKP?
ZKP оправдан, когда нужно скрыть детали транзакции от публичного реестра, но сохранить проверяемость. Типичные сценарии: конфиденциальные транзакции, анонимные голосования, приватные DAO. Экономия на масштабе: использование ZKP снижает нагрузку на блокчейн — одна транзакция с доказательством занимает столько же газа, сколько перевод ETH, но скрывает все детали. Это дает до 80% экономии по сравнению с полным шифрованием состояния. На практике клиенты экономят от $2000 до $5000 ежемесячно после внедрения.
UTXO-based (подход Zcash)
Средства хранятся как notes — зашифрованные UTXO. Каждая транзакция потребляет старые notes и создаёт новые. On-chain хранится только commitment (хэш note) и nullifier.
spend(note) → proof(note exists in tree, note not spent, balance >= amount)
→ reveal nullifier
→ create new note commitments
Tornado Cash показал уязвимость metadata analysis: даже с ZKP timing-атаки и суммы деанонимизируют. ZKP скрывает связь транзакций, но не паттерны. Мы добавляем countermeasures — random delays и фиксированные номиналы.
Шифрование состояния через FHE
Fhenix и Inco шифруют state on-chain — смарт-контракты работают с зашифрованными значениями. Технология незрелая: вычислительный overhead огромен, но активно развивается.
Инструменты для ZKP-интеграции
Circom + SnarkJS
Стандартный стек для custom circuits:
circuit.circom → compile → R1CS → Powers of Tau → proving key + verification key
→ verifier.sol
Пример circuit для range proof:
pragma circom 2.1.0;
include "circomlib/circuits/comparators.circom";
template RangeProof(bits) {
signal input value; // private
signal input maxValue; // public
component lt = LessThan(bits);
lt.in[0] <== value;
lt.in[1] <== maxValue;
lt.out === 1;
}
component main {public [maxValue]} = RangeProof(64);
Noir (Aztec)
Высокоуровневый язык, похожий на Rust. Абстрагирует от R1CS.
fn main(x: Field, y: pub Field) {
assert(x != y);
}
Semaphore
Библиотека для анонимных сигналов: доказывает членство в группе без раскрытия идентичности.
semaphore.verifyProof(
merkleTreeRoot,
nullifierHash,
signal,
proof
);
Compliance и приватность
Виталик Бутерин отмечает, что ZKP позволяет строить selective disclosure — транзакция приватна для наблюдателей, но владелец может раскрыть детали регулятору с криптографическим доказательством. Мы реализуем viewing key для аудитора.
Что входит в интеграцию
Полный состав работ:
- Аудит текущей архитектуры и выбор proving system.
- Разработка и тестирование circuit (включая 50+ тестовых векторов).
- Интеграция смарт-контракта с ZK verifier.
- Prover-сервис (off-chain генерация доказательств с поддержкой до 1000 запросов в минуту).
- Документация и обучение команды.
- Post-launch поддержка 1 месяц.
Мы — команда с 5+ годами опыта в ZK-разработке, выполнили 30+ проектов по приватным транзакциям. Закажите консультацию — поможем выбрать оптимальную ZK-систему.
Процесс работы
- Аналитика — определяем, какие данные скрыть, выбираем схему (UTXO, commitment, selective disclosure).
- Проектирование circuit — формализуем constraints, проверяем soundness.
- Разработка — пишем circuit, генерируем verifier, интегрируем в смарт-контракт.
- Аудит — статический анализ (Circomspect), formal verification, тестирование на edge cases.
- Запуск — деплой, мониторинг gas, настройка prover инфраструктуры.
Ориентиры по срокам
| Объём работы |
Сроки |
| Интеграция готового примитива (Semaphore) |
2–4 недели |
| Custom circuit (range proof, transfer) |
4–8 недель |
| Полный протокол с compliance и prover сервисом |
2–3 месяца |
Конкретная стоимость рассчитывается индивидуально. Свяжитесь с нами — подготовим коммерческое предложение.
Разработка смарт-контрактов
Мы столкнулись с ситуацией: контракт задеплоен, через две недели приходит сообщение — пул дренирован на $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 и передают структурированные данные фронтенду.
Почему аудит смарт-контрактов критичен для безопасности
Аудит — не разовая проверка, а встроенный этап разработки. Используем три уровня:
-
Статический анализ —
Slither (30 секунд в CI) выявляет reentrancy, неинициализированные переменные, опасный delegatecall.
-
Фаззинг и invariant тесты —
Foundry с --fuzz-runs 50000 находит edge cases, которые пропускают сотни unit-тестов. Реальный кейс: AMM контракт с кастомной математикой после 150 тестов в Hardhat — Foundry нашёл integer division truncation, позволявший пылевой атаке копить dust на контракте. Echidna проверяет инварианты («сумма всех балансов ≤ totalSupply»).
-
Ручной 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) меняют картину, но пока не массово.
Процесс разработки
-
Аналитика — спецификация функций, диаграмма вызовов, анализ edge cases. Без этого кодинг начинается впустую.
-
Разработка — Solidity/Rust с тестами параллельно. Тест → код → рефакторинг. Используем Foundry для fuzz и invariant тестов.
-
Внутренний аудит — Slither + Echidna + ручной code review. Foundry invariant tests для протокольных инвариантов.
-
Внешний аудит — для проектов с реальными деньгами. Срок: 2–4 недели.
-
Деплой — Foundry scripts или Hardhat Ignition с verify на Etherscan. Gnosis Safe для ownership transfer сразу после деплоя.
-
Мониторинг — 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-атак. Хотите обсудить детали? Напишите нам — мы подберём оптимальный стек под вашу задачу.