EAS 프리컴파일
온체인 KYC / KYB attestation 조회를 위한 Ethereum Attestation Service 브리지 — EVM 호출 가능.
EAS 프리컴파일은 마루의 4개 핵심 정적 프리컴파일 중 하나입니다 (OKRW, PCL, Agent와 함께). Solidity 호출자를 Ethereum Attestation Service (EAS) 생태계로 연결하는 브리지로, 특정 스키마로 발행된 attestation에 대한 읽기 view를 노출합니다. PCL의 EAS_POLICY 템플릿이 KYC / KYB 자격증명에 의존하는 컴플라이언스 게이트를 강제할 때 사용하고, dapp이 자격증명 보유에 따라 기능을 게이팅할 때도 직접 사용합니다.
프리컴파일이 필요한 이유 (EAS 컨트랙트 직접 호출 대신)
EAS 자체는 Solidity에서 직접 호출 가능한 표준 ERC 컨트랙트들입니다. 프리컴파일 +
쓰기 (attestation 발행, 폐기)는 여전히 표준 EAS 컨트랙트로 진행됩니다 — 정식 상태는 거기 머물고, 마루 프리컴파일은 순수히 쿼리 도우미입니다.
x/eas Cosmos 모듈은 성능 레이어입니다: (recipient, schema)별로 받은 attestation의 인덱싱된 캐시를 유지해, PCL이 AnteHandler 실행 중 "발신자가 스키마 X attestation을 보유하는가?"를 저렴하게 조회할 수 있게 합니다. 프리컴파일 없이는 EAS 컨트랙트 스토리지 순회가 필요해 가스 비용이 지배적이 됩니다.쓰기 (attestation 발행, 폐기)는 여전히 표준 EAS 컨트랙트로 진행됩니다 — 정식 상태는 거기 머물고, 마루 프리컴파일은 순수히 쿼리 도우미입니다.
Read 메서드 (추상)
개념적으로 노출되는 메서드 (정확한 ABI는 소스):
유효성 검사 (
getAttestation(uid)— UID로 단일 attestation 조회.{recipient, schema, time, expirationTime, revocationTime, data}반환.getReceivedUIDs(recipient, schema, offset, limit)— 지정된 스키마로 recipient가 받은 attestation UID 페이지네이션.getReceivedUIDCount(recipient, schema)— 해당 recipient/schema 조합의 attestation 개수.
유효성 검사 (
isValid)는 일반적으로 호출자가 조합합니다 — revocationTime == 0 및 expirationTime == 0 || expirationTime > block.timestamp 확인.사용 사례 1 — PCL EAS_POLICY 강제
EAS_POLICY가 GlobalPolicyConfig 또는 ContractPolicyConfig의 일부일 때, PCL ante decorator가 트랜잭션 검증 중 이 프리컴파일을 호출합니다:1. 정책의 요구 스키마 UID를
UnitPolicy.parameters에서 읽음.2.
getReceivedUIDCount(sender, schemaUid) 호출. 0이면 ReasonCode: EasAttestationRequired로 거절.3.
getAttestation(uid)로 만료/폐기 확인.이를 통해 dapp이 직접 검사를 구현하지 않아도 "KYC 인증된 계정만 규제 경로 사용"을 마루가 강제합니다.
사용 사례 2 — Dapp 자격증명 게이팅
Solidity 컨트랙트가 프리컴파일을 직접 호출해 기능을 게이팅할 수 있습니다:
``
이로써 attestation 조회를 다시 구현할 필요가 없습니다 — 프리컴파일이 저렴하게 처리합니다.
``
solidity
interface IEAS {
function getReceivedUIDCount(address recipient, bytes32 schema) external view returns (uint256);
}
contract Vault {
IEAS constant EAS = IEAS(0x100000000000000000000000000000000000000A); // 예시 주소
bytes32 constant KYC_SCHEMA = 0x...;
modifier onlyVerified() {
require(EAS.getReceivedUIDCount(msg.sender, KYC_SCHEMA) > 0, "KYC required");
_;
}
}
``이로써 attestation 조회를 다시 구현할 필요가 없습니다 — 프리컴파일이 저렴하게 처리합니다.