testnet
GitHub EN

PCL 정책 구조

component compliance

컴플라이언스 규칙의 3계층 구조: PolicyTemplate → UnitPolicy → PolicyConfig.

PCL 정책은 재사용성과 명확성을 위해 3계층 구조를 사용합니다. PolicyTemplate은 규칙 유형의 청사진입니다. UnitPolicy는 템플릿을 구체적인 파라미터와 (선택적으로) 함수 selector와 결합한 인스턴스입니다. PolicyConfig는 UnitPolicy를 묶어 전역 또는 특정 컨트랙트에 적용합니다. (참고: 이전 초안에서는 이 중간 계층이 PolicyRef였으나, 현재 정식 명칭은 UnitPolicy입니다.)

PolicyTemplate

PolicyTemplate은 가장 기본적인 구성 요소입니다. 특정 유형의 컴플라이언스 검사에 대한 로직과 필요한 입력을 정의합니다. 특정 값을 포함하지 않고, 값에 대한 스키마만 정의합니다.
  • template_id: 고유 식별자, 일반적으로 PolicyType enum의 문자열 표현 (예: "DENYLIST_POLICY").
  • name: 사람이 읽을 수 있는 이름 (예: "Denylist").
  • description: 정책이 수행하는 작업에 대한 간략한 설명.
  • param_schema: 정책에 필요한 파라미터의 구조와 유형을 정의하는 JSON 스키마 (바이트 배열). 예를 들어, denylist 스키마는 {"denylist": ["address"]}.


템플릿은 PolicyAdmin이 등록하고 관리합니다.

UnitPolicy

UnitPolicy는 구체적인 파라미터가 결합된 PolicyTemplate의 인스턴스입니다. 엔진이 실제로 평가하는 활성 규칙입니다.
  • template_id: 사용할 PolicyTemplate의 ID.
  • parameters: 참조된 템플릿의 param_schema를 따르는 JSON 객체 (바이트 배열, 종종 클라이언트가 base64 인코딩). denylist의 경우 {"denylist": ["maroo1..."]}.
  • selector: (선택) 4바이트 함수 selector. 지정 시 해당 selector를 호출하는 EVM 트랜잭션에만 UnitPolicy가 적용됩니다. 같은 컨트랙트가 함수별로 다른 규칙을 적용할 수 있게 합니다.


명명 참고: 이전 초안에서는 이를 PolicyRef라고 불렀습니다. 현재 정식 명칭은 UnitPolicy입니다. 전환기 동안 일부 코드 경로와 식별자에 여전히 옛 이름이 노출될 수 있으며, 동일 개념으로 취급하세요.

PolicyConfig

PolicyConfig는 함께 적용되는 UnitPolicy의 모음입니다. 두 가지 유형이 있습니다.
  • GlobalPolicyConfig: PclAnteDecorator를 통해 전체 마루 네트워크의 모든 트랜잭션에 적용되는 UnitPolicy 목록. PolicyAdmin이 관리.
  • ContractPolicyConfig: 특정 스마트 컨트랙트 주소와 연결된 UnitPolicy 목록. 트랜잭션이 해당 컨트랙트와 상호작용할 때만 검사됩니다. 각 ContractPolicyConfig는 후속 변경 권한을 제어하는 자체 admin 주소를 갖습니다.

계층 구조 예시

1. 템플릿 — 마루는 {"<denom>": {"max_limit": "int"}} 스키마의 VOLUME_POLICY 템플릿을 제공합니다.
2. UnitPolicyPolicyAdmintemplate_id: "VOLUME_POLICY", parameters: {"aokrw": {"max_limit": "1000000000000000000000"}}로 UnitPolicy를 생성합니다.
3. Config — 이 UnitPolicy를 GlobalPolicyConfig에 추가합니다. 이제 1,000 OKRW (1000 × 10^18 aokrw) 이상을 보내는 모든 트랜잭션은 ReasonCode: VolumeAboveMaxLimit과 함께 네트워크에서 거부됩니다.
소스: maroo
ESC
검색어를 입력하세요