EAS_POLICY

component compliance

트랜잭션 발신자가 지정된 스키마의 유효한 EAS attestation을 보유하도록 요구하는 템플릿입니다. KYC/KYB 강제 게이트로 사용합니다.

발신자가 특정 EAS 스키마로 발행된 유효한 (만료되지 않고 폐기되지 않은) attestation을 보유했는지를 트랜잭션 게이트의 기준으로 삼습니다. KYC, KYB, 자격 증명, 자격 기반 게이트를 구현하는 표준 프리미티브입니다. EAS 프리컴파일을 통해 attestation을 해결하므로 AnteHandler 평가 중 조회가 저렴합니다.

Solidity struct + ABI

IPcl.sol에서:
struct EasPolicy {
    address easContract;     // 쿼리할 EAS 배포
    address indexContract;   // EAS Indexer (O(1) 역방향 조회 제공)
    bytes32 schemaUid;       // 발신자가 attestation을 가져야 할 스키마
}
ABI 튜플 약칭: (address easContract, address indexContract, bytes32 schemaUid).

PolicySet.policy용 인코딩:
EasPolicy memory ep = EasPolicy({
    easContract:   0x1000000000000000000000000000000000000007, // EAS preinstall
    indexContract: 0x1000000000000000000000000000000000000008, // EAS Indexer preinstall
    schemaUid:     0xabcd...   // KYC 스키마 UID
});
bytes memory policyBytes = abi.encode(ep);
// PolicySet.templateId = "EAS_POLICY"
easContractindexContract는 일반적으로 마루 정식 preinstall 주소 — 하드코딩 대신 배포 시 EAS 프리컴파일의 getParams()로 해결 가능합니다.

정책 평가 방식

각 트랜잭션마다 PCL:

1. EAS Indexer를 통해 schemaUidsender에게 발행된 attestation 조회합니다.
2. attestation을 받은 적이 없으면 거절합니다: EasNoAttestationReceived(sender).
3. 발견된 각 UID에 대해 attestation을 가져와 검증합니다:
- 폐기됨? → EasAttestationRevoked(sender)
- 만료됨 (expirationTime != 0 && expirationTime <= now)? → EasAttestationExpired(sender)
- 조회 실패? → EasAttestationLookupFailed(sender)
4. 유효한 attestation이 하나라도 있으면 통과합니다. 아니면 → EasAttestationRequired(sender).

거절 시 발생하는 ReasonCode

  • EasAttestationRequired(address sender) — 일반 catch-all; 유효한 attestation이 없어 획득 필요합니다.
  • EasNoAttestationReceived(address sender) — 이 스키마로 attestation을 받은 적이 전혀 없습니다.
  • EasAttestationRevoked(address sender) — attestation을 받은 적이 있지만 이후 폐기되었습니다.
  • EasAttestationExpired(address sender) — attestation을 받은 적이 있지만 이미 만료되었습니다.
  • EasAttestationLookupFailed(address sender) — attestation 읽기 내부 오류; 일시적으로 처리합니다.


지갑 UX: 적절한 KYC/KYB 온보딩 파트너로 사용자를 라우팅합니다. 새 attestation이 온체인에 도달하면 동일 트랜잭션이 성공합니다.

주요 활용 사례

  • KYC 게이트: 글로벌 레벨(GlobalPolicyConfig)에서 "KYC 인증 계정만 규제 경로를 사용"하도록 강제합니다.
  • 상위 등급 기능: DeFi 풀 접근에 기관 KYB 스키마를 요구하는 ContractPolicyConfig로 사용합니다.
  • 계층 모델: OKRW_EAS_TRANSFER_LIMIT_POLICY와 결합하여 미인증 사용자는 작은 한도, 인증 사용자는 큰 한도를 적용합니다. 단순 yes/no 게이트보다 일반적으로 더 유용합니다.
소스: maroo
ESC
검색어를 입력하세요