프로그래머블 컴플라이언스 레이어 (PCL)
사용자 정의 트랜잭션 규칙 및 규제 정책을 정의하고 시행하기 위한 온체인 프레임워크입니다.
프로그래머블 컴플라이언스 레이어(PCL)는 마루 네트워크의 핵심 모듈로, 블록체인 상에서 직접 컴플라이언스 정책을 생성하고 시행할 수 있게 합니다. 이 모듈은 트랜잭션이 처리되기 전에 가로채어, 전역 및 컨트랙트별 규칙 집합에 대해 유효성을 검사합니다. 이를 통해 스마트 컨트랙트의 핵심 로직을 변경하지 않고도 KYC/AML 확인, 전송 제한, 거래량 한도와 같은 복잡한 규제 요건을 구현할 수 있습니다.
주요 기능
전역 및 컨트랙트별 정책
네트워크 전체에 규칙을 적용하거나 특정 스마트 컨트랙트를 대상으로 세분화된 제어를 할 수 있습니다.
템플릿 기반 정책 생성
미리 정의된 재사용 가능한 정책 템플릿(예: 거부 목록, 거래량 한도, EAS 증명)을 사용하여 복잡한 규칙을 신속하게 구성합니다.
EVM 네이티브 통합
EVM 호출이든 아니든 모든 트랜잭션은 동일한 PCL 게이트를 통과 — 컴플라이언스는 체인 레이어에서 일관되게 강제됩니다.
EAS를 통한 확장성
EAS(Ethereum Attestation Service)를 활용해 온체인 attestation 기반 규칙을 시행하여 신원·자격 증명 확인을 지원합니다.
아키텍처
graph TD
subgraph Transaction Lifecycle
A[Tx Submitted] --> B{PclAnteDecorator};
B -- Global Policies --> C{Policy Validator};
C -- Valid --> D[Execute Tx];
C -- Invalid --> E[Reject Tx];
D --> F[State Change];
end
subgraph EVM Execution
G[Contract Call] --> H{EVM Pre-execution Hook};
H -- Global/Contract Policies --> I(PCL Keeper);
I --> J{Policy Validator};
J -- Valid --> K[Execute EVM Logic];
J -- Invalid --> L[Revert Tx];
end
subgraph PCL State
M[Policy Admin] -- Manages --> N(Policy Templates);
M -- Manages --> O(Global Policy Config);
P[Contract Admin] -- Manages --> Q(Contract Policy Config);
N --> O;
N --> Q;
end PCL은 전역 검사를 위해 Ante Handler를 통해 트랜잭션 생명주기에 통합되고, 전역 및 컨트랙트별 검사를 위해 사전 실행 훅을 통해 EVM에 통합됩니다. 모든 정책 구성은 온체인에 저장되며 지정된 관리자 계정이 관리합니다.
정책 시행 흐름
PCL은 모든 트랜잭션을 프로토콜 레이어에서 규칙 집합에 대해 검증합니다.
모든 트랜잭션은 먼저 사전 실행 검사 체인 —
EVM 트랜잭션은 추가 레이어가 있습니다. 체인이 EVM 호출 실행 전 PCL을 다시 호출하며, 그 시점에 PCL은 대상 컨트랙트 주소에 등록된 컨트랙트별 정책도 함께 실행합니다. 두 레이어가 합쳐서 — AnteHandler에서 글로벌, EVM 호출에서 컨트랙트 범위 — 네트워크 전체에 일관된 강제를 제공합니다.
모든 트랜잭션은 먼저 사전 실행 검사 체인 —
AnteHandler — 를 통과합니다. PCL은 그 체인에 참여해 활성화된 모든 글로벌 정책을 트랜잭션(발신자, 수신자, 값 등)에 대해 실행합니다. 어떤 글로벌 정책이라도 실패하면 트랜잭션은 가스를 크게 소비하기 전에 거절됩니다.EVM 트랜잭션은 추가 레이어가 있습니다. 체인이 EVM 호출 실행 전 PCL을 다시 호출하며, 그 시점에 PCL은 대상 컨트랙트 주소에 등록된 컨트랙트별 정책도 함께 실행합니다. 두 레이어가 합쳐서 — AnteHandler에서 글로벌, EVM 호출에서 컨트랙트 범위 — 네트워크 전체에 일관된 강제를 제공합니다.
참고: AnteHandler 검사는 유효하지 않은 트랜잭션이 멤풀에 도달하기 전에 거절합니다. 네트워크 리소스를 아끼고 사용자에게 즉각적인 피드백을 줍니다.
정책 템플릿 및 구성
PCL은 규칙을 처음부터 정의하는 대신 템플릿 기반 시스템을 사용합니다.
모듈 파라미터에 설정된 권한 계정
규칙을 활성화하려면 관리자가
PolicyTemplate은 규칙 유형의 청사진이며, IPcl.sol의 정식 Solidity 구조체가 인스턴스의 파라미터 레이아웃을 선언합니다. 마루는 7개 내장 템플릿(DENYLIST_POLICY, VOLUME_POLICY, PERIODIC_VOLUME_POLICY, EAS_POLICY, OKRW_EAS_TRANSFER_LIMIT_POLICY, OKRW_EAS_PERIODIC_VOLUME_LIMIT_POLICY, AGENT_OKRW_TRANSFER_LIMIT_POLICY)을 제공합니다.모듈 파라미터에 설정된 권한 계정
PolicyAdmin(거버넌스로 제어됨)이 이러한 템플릿을 등록·관리합니다.규칙을 활성화하려면 관리자가
PolicySet을 생성합니다 — { templateId, policy, selector } 형태의 튜플이며, policy는 해당 템플릿의 파라미터 구조체를 ABI 인코딩한 값입니다(JSON이 아닙니다). 예를 들어 denylist는 templateId = "DENYLIST_POLICY", policy = abi.encode(DenylistPolicy({ addresses: [...] })), selector = bytes4(0)(모든 호출에 적용)로 구성된 PolicySet입니다. PolicySet 항목들은 GlobalPolicyConfig(체인 전역) 또는 ContractPolicyConfig(컨트랙트별)로 묶여 적용됩니다.