Розробка системи атестації (EAS — Ethereum Attestation Service)
EAS (Ethereum Attestation Service) — відкритий протокол для створення on-chain та off-chain атестацій на Ethereum та L2. Attestation — це будь-яке твердження однієї адреси про іншу адресу або факт. "Адреса A підтверджує, що адреса B пройшла KYC", "Адреса A підтверджує, що B є учасником DAO".
Ключові концепції EAS
Schema: структура даних атестації. Зареєстрована on-chain в SchemaRegistry. Визначає поля та їхні типи.
Attestation: конкретне підтвердження за схемою. Містить дані, attester (хто підтвердив), recipient (про кого), expiration, revocable прапорець.
On-chain vs Off-chain: атестації можуть зберігатися on-chain (дорого, але постійно) або off-chain (IPFS/Arweave) з on-chain UID для верифікації.
Реєстрація схеми
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
Опціональний смарт-контракт, який викликається при створенні/відкликанні атестації — для додаткової логіки:
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) {
// Тільки whitelist attesters можуть створювати
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();
Випадки використання
EAS використовується в: Gitcoin Passport (атестації on-chain активності), Optimism Retro Funding (атестації внеску), Safe (атестації довірених адрес).
Розробка системи на основі EAS — 2-4 тижні для власної схеми + resolver + frontend.







