Допустим, вам нужно построить систему верификации KYC для DeFi-платформы. On-chain хранение каждой анкеты — дорого, а IPFS без подтверждения не вызывает доверия. Решение — Ethereum Attestation Service (EAS): off-chain данные с on-chain подписью. Мы разрабатываем системы аттестации на EAS под ключ: от проектирования схемы до deployment resolver-контракта и интеграции фронтенда через EAS SDK. Согласно спецификации, EAS обеспечивает верифицируемость и экономию газа до 90% по сравнению с прямым хранением данных в блокчейне. EAS контракты — открытая кодовая база, которую мы адаптируем под ваш сценарий.
Проблемы, которые решаем
Gas-затраты
Хранение полных данных on-chain при массовом выпуске аттестаций (например, тысячи пользователей) ведёт к неоправданным расходам. EAS позволяет хранить только UID в цепочке, а сами данные — off-chain (IPFS, Arweave). Экономия газа — до 90%.
Доверие к off-chain
Без on-chain привязки данные легко подделать. EAS решает это через неизменяемый UID, верифицируемый в смарт-контракте. Любой может проверить, что аттестация создана конкретным адресом и не отозвана.
Управление отзывом
Часто нужно аннулировать аттестацию (пользователь вышел из DAO, истёк KYC). Resolver-контракт EAS позволяет гибко управлять revocable-флагом и выполнять дополнительную логику при отзыве.
Как мы это делаем
В процессе разработки системы EAS мы регистрируем схему, создаём resolver и интегрируем SDK. Рассмотрим типовую реализацию.
Регистрация схемы
Схема определяет структуру данных аттестации. Регистрируется один раз в SchemaRegistry и может переиспользоваться.
import { ISchemaRegistry, SchemaRecord } from "@ethereum-attestation-service/eas-contracts/contracts/ISchemaRegistry.sol"; ISchemaRegistry schemaRegistry = ISchemaRegistry(EAS_SCHEMA_REGISTRY); // Регистрация схемы bytes32 schemaUID = schemaRegistry.register( "bool isKYCVerified, uint8 verificationLevel, string jurisdiction", ISchemaResolver(resolverAddress), // опциональный resolver контракт true // revocable ); Создание Attestation
import { IEAS, AttestationRequest, AttestationRequestData } from "@ethereum-attestation-service/eas-contracts/contracts/IEAS.sol"; IEAS eas = IEAS(EAS_ADDRESS); bytes32 attestationUID = eas.attest( AttestationRequest({ schema: schemaUID, data: AttestationRequestData({ recipient: recipientAddress, expirationTime: block.timestamp + 365 days, revocable: true, refUID: bytes32(0), data: abi.encode(true, 2, "EU"), // isKYCVerified, level, jurisdiction value: 0 }) }) ); Schema Resolver — безопасность и гибкость
Resolver-контракт вызывается при создании/отзыве аттестации. В нём можно проверять права аттестора, корректность данных, обновлять внешние хранилища. Без resolver контракт принимает любые данные — риск для системы.
import { SchemaResolver } from "@ethereum-attestation-service/eas-contracts/contracts/resolver/SchemaResolver.sol"; contract KYCAttestationResolver is SchemaResolver { mapping(address => bool) public verifiedAddresses; function onAttest(Attestation calldata attestation, uint256) internal override returns (bool) { require(authorizedAttesters[attestation.attester], "Not authorized"); (, uint8 level,) = abi.decode(attestation.data, (bool, uint8, string)); require(level >= 1 && level <= 3, "Invalid level"); verifiedAddresses[attestation.recipient] = true; return true; } function onRevoke(Attestation calldata attestation, uint256) internal override returns (bool) { verifiedAddresses[attestation.recipient] = false; return true; } } Интеграция через EAS SDK (TypeScript)
import { EAS, SchemaEncoder } from "@ethereum-attestation-service/eas-sdk"; const eas = new EAS(EAS_ADDRESS); eas.connect(signer); const schemaEncoder = new SchemaEncoder("bool isKYCVerified,uint8 verificationLevel,string jurisdiction"); const encodedData = schemaEncoder.encodeData([ { name: "isKYCVerified", value: true, type: "bool" }, { name: "verificationLevel", value: 2, type: "uint8" }, { name: "jurisdiction", value: "EU", type: "string" } ]); const tx = await eas.attest({ schema: schemaUID, data: { recipient: recipientAddress, expirationTime: BigInt(Math.floor(Date.now() / 1000) + 365 * 24 * 3600), revocable: true, data: encodedData } }); const uid = await tx.wait(); Как выбрать между on-chain и off-chain аттестациями?
On-chain аттестации хранят все данные в блокчейне — высокая стоимость, но постоянная доступность. Off-chain аттестации хранят данные в IPFS/Arweave, а в блокчейне только UID. Off-chain вариант в 10 раз дешевле при массовом выпуске, что критично для KYC или репутационных порталов. Сравнение:
| Параметр | On-chain | Off-chain |
|---|---|---|
| Стоимость газа | Высокая (запись 200+ байт) | Низкая (только 32 байта UID) |
| Скорость | Зависит от сети | Почти бесплатно |
| Доступность данных | Всегда в цепочке | Через IPFS (возможна задержка) |
| Верификация | Прямая по цепочке | Через UID и подпись |
Для массовых сценариев (KYC, репутация) off-chain оптимальна. Для редких, но ценных аттестаций (дипломы, лицензии) можно выбрать on-chain.
Почему Resolver-контракт критичен для безопасности?
Без resolver любой адрес может зааттестовать произвольные данные по вашей схеме — система теряет смысл. Resolver-контракт выступает шлюзом: проверяет, что аттестор авторизован, данные валидны, не превышен лимит. Также можно реализовать автоматическое создание встречных аттестаций (например, «подтверждение KYC» от проверяющего в ответ на запрос). Мы всегда включаем resolver в архитектуру для ответственных схем.
Процесс работы
- Аналитика — изучаем сценарий, определяем поля схемы, revocability, срок действия.
- Проектирование — создаём схему (JSON/ABI), проектируем resolver с логикой.
- Разработка — пишем смарт-контракты (Solidity), покрываем тестами (Foundry).
- Интеграция — настраиваем EAS SDK фронтенда: создание, просмотр, отзыв аттестаций.
- Тестирование — деплоим на тестовой сети, проводим интеграционное тестирование.
- Деплой — регистрируем схему в мейннете, деплоим resolver, запускаем в production.
Что входит в работу
| Deliverable | Описание |
|---|---|
| Схема EAS | AB-описание и JSON-схема, зарегистрированная в SchemaRegistry |
| Resolver-контракт | Аудированный смарт-контракт с бизнес-логикой |
| SDK-модуль | TypeScript/ethers.js функции для фронтенда |
| Документация | Описание схемы, примеры использования, инструкция по отзыву |
| Обучение | Рабочая сессия для команды по работе с EAS |
| Поддержка | 1 месяц после запуска: консультации и баг-фикс |
Наш опыт и гарантии
Мы — команда блокчейн-инженеров с более чем 5-летним опытом в Ethereum-разработке. Реализовали более 15 проектов на EAS: от KYC-систем для DeFi до репутационных порталов для DAO. Каждый resolver-контракт проходит статический анализ Slither и fuzz-тестирование Echidna. Гарантируем отсутствие reentrancy и переполнения — эти уязвимости встречаются даже в EAS-решениях новичков.
Сроки и стоимость
Разработка системы на EAS занимает от 2 до 4 недель в зависимости от сложности. Стоимость рассчитывается индивидуально под ваш сценарий. Для предварительной оценки — свяжитесь с нами: мы проанализируем проект за 1 рабочий день и подготовим коммерческое предложение. Закажите разработку системы EAS — мы составим смету и сроки под вашу задачу. Получите консультацию уже сегодня.
Примеры использования
EAS применяется в: Gitcoin Passport (аттестации об on-chain активности), Optimism Retro Funding (подтверждение вклада), Safe (доверенные адреса). Мы можем адаптировать любой из этих сценариев под вашу задачу.







