testnet
GitHub EN

PCL 프리컴파일

compliance external-dapp

스마트 컨트랙트에서 직접 온체인 규제 준수 정책을 관리합니다.

프로그래밍 가능한 규제 준수 계층(PCL) 프리컴파일은 EVM과 마루의 네이티브 규제 준수 엔진 사이의 다리 역할을 하는 고정 주소의 특수 목적 스마트 컨트랙트입니다. 개발자는 표준 솔리디티 도구를 사용하여 디앱에 대한 규제 및 비즈니스 규칙을 프로그래밍 방식으로 정의, 업데이트 및 시행할 수 있습니다. 이를 통해 규제 준수 확인을 위한 오프체인 오라클의 필요성을 없애고 규칙 시행을 트랜잭션 생명주기에 직접 내장할 수 있습니다.

주요 기능

온체인 정책 관리

다른 권한 있는 스마트 컨트랙트에서 직접 모든 스마트 컨트랙트에 대한 규제 준수 정책을 등록, 조회, 업데이트 및 제거합니다.

이중 트랙 트랜잭션 모델

`runOnPcl` 함수를 사용하여 규제된 컨텍스트 내에서 트랜잭션을 실행하고, 실행 전에 모든 관련 전역 및 컨트랙트별 정책이 확인되도록 보장합니다.

확장 가능한 정책 템플릿

시스템 관리자는 새로운 유형의 규제 준수 검사(정책 템플릿)를 등록할 수 있으며, 이는 네트워크의 모든 컨트랙트에서 구성하고 사용할 수 있습니다.

EVM 네이티브 인터페이스

견고한 디앱 개발을 위한 커스텀 에러 및 이벤트를 포함하는 표준 솔리디티 인터페이스(`IPcl.sol`)를 사용하여 전체 PCL 시스템과 상호 작용합니다.

아키텍처

graph TD
    subgraph EVM Space
        A[DApp / User] -- EVM Call --> B{Your Smart Contract};
        B -- `runOnPcl(target, data, value)` --> C[PCL Precompile @ 0x10...05];
    end

    subgraph Maroo Native Layer
        D[x/pcl Cosmos SDK Module];
        E[Policy Storage];
        F[Compliance Logic];
    end

    C -- Native Bridge --> D;
    D -- Reads --> E[Policy Storage];
    D -- Executes --> F[Compliance Logic];
    F -- Pass/Fail --> D;
    D -- Result --> C;
    C -- Returns / Reverts --> B;
    B -- `(bool success, bytes memory result) = target.call(data)` --> G{Execute Original Call};
    G -- Returns --> B;
    B -- Returns --> A;

준수 스마트 컨트랙트에 대한 사용자 호출은 가로채어져 PCL 프리컴파일로 전달됩니다. 프리컴파일은 호출을 네이티브 x/pcl 모듈로 연결하고, 관련 정책을 로드하여 규제 준수 로직을 실행합니다. 검사가 통과하면 제어권이 EVM으로 반환되어 원래 의도된 호출을 실행합니다.

작동 방식

PCL 프리컴파일은 마루 네트워크의 다른 모든 컨트랙트가 접근할 수 있는 싱글톤 컨트랙트 역할을 합니다. 이는 기본 x/pcl 코스모스 SDK 모듈의 기능에 직접 매핑되는 함수들을 노출합니다. 개발자가 컨트랙트를 규제 준수하게 만들고 싶을 때, 로직을 컨트랙트 자체에 추가하는 대신 프리컴파일을 사용하여 해당 컨트랙트 주소에 대한 정책을 등록합니다.

시행 메커니즘의 핵심은 runOnPcl 함수입니다. 사용자나 컨트랙트가 규제된 컨트랙트의 함수(예: myToken.transfer(...))를 직접 호출하는 대신, pcl.runOnPcl(myToken, encodedTransfer, ...)을 호출합니다. 이 함수는 먼저 네이티브 PCL 모듈을 트리거하여 myToken에 등록된 정책에 기반한 모든 필요한 검사를 수행합니다. 이러한 검사에는 발신자의 KYC 상태 확인, 거부 목록 대조, 또는 전송량 한도 시행 등이 포함될 수 있습니다. 모든 검사가 통과된 경우에만 PCL 프리컴파일은 저수준 EVM call을 사용하여 원래의 인코딩된 transfer 함수를 실행합니다. 검사 중 하나라도 실패하면 전체 트랜잭션은 설명적인 커스텀 에러와 함께 되돌려집니다.
참고: PCL 프리컴파일 주소는 `0x1000000000000000000000000000000000000005`입니다. 사용하기 쉬운 인터페이스 상수 `PCL_CONTRACT`는 `IPcl.sol`에서 사용할 수 있습니다.

전역 정책 vs. 컨트랙트 정책

PCL은 두 가지 수준의 정책 구성을 지원합니다. 전역 정책은 네트워크의 정책 관리자에 의해 설정되며 네트워크의 모든 트랜잭션에 적용되어 기본적인 수준의 규제 준수를 제공합니다. 컨트랙트 정책은 단일 컨트랙트 주소에 특정되며 해당 컨트랙트의 지정된 관리자에 의해 관리됩니다. runOnPcl을 통해 트랜잭션이 확인될 때, 전역 정책과 컨트랙트별 정책이 모두 평가됩니다. 이러한 계층적 접근 방식은 네트워크 전반의 안전망을 제공하는 동시에 개별 디앱 개발자에게 자신만의 특정 규칙을 정의할 수 있는 유연성을 부여합니다.

다음 단계

소스: maroo
ESC
검색어를 입력하세요