Розробка системи атестації (EAS — Ethereum Attestation Service)
Допустимо, вам потрібно побудувати систему верифікації KYC для DeFi-платформи. On-chain зберігання кожної анкети — дорого, а IPFS без підтвердження не викликає довіри. Рішення — Ethereum Attestation Service (EAS): off-chain дані з on-chain підписом. Ми розробляємо системи атестації на EAS під ключ: від проектування схеми до deployment resolver-контракту та інтеграції фронтенду через EAS SDK. Згідно зі специфікацією, EAS забезпечує верифіковуваність та економію газу до 90% порівняно з прямим зберіганням даних у блокчейні — наприклад, замість 200 000 газ витрачається всього 20 000 газ. EAS контракти — відкрита кодова база, яку ми адаптуємо під ваш сценарій.
Проблеми, які вирішуємо
Gas-затрати
Зберігання повних даних on-chain при масовому випуску атестацій (наприклад, тисячі користувачів) веде до невиправданих витрат. EAS дозволяє зберігати лише UID у ланцюжку, а самі дані — off-chain (IPFS, Arweave). Економія газу — до 90%. Наприклад, реєстрація однієї схеми EAS в мережі Polygon коштує менше $0.10, а на Ethereum — до $50. Економія при використанні off-chain атестацій може сягати $500 на 1000 користувачів.
Довіра до 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); // Реєстрація схеми EAS 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 | ABI-опис та 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 (довірені адреси). Ми можемо адаптувати будь-який із цих сценаріїв під ваше завдання.







