PCL 정책 시행
PCL이 프로토콜 수준에서 코스모스 및 EVM 메시지 모두에 대해 트랜잭션을 검증하는 방법입니다.
PCL 시행은 활성 정책이 들어오는 트랜잭션에 대해 확인되는 프로세스입니다. 이 메커니즘은 마루의 트랜잭션 생명주기에 깊이 통합되어 있으며, 전역 규칙을 위한 Ante Handler와 컨트랙트별 규칙을 위한 EVM 훅을 통해 작동하여 어떤 트랜잭션도 구성된 컴플라이언스 검사를 우회할 수 없도록 보장합니다.
Ante Handler 통합
전역 정책의 주요 시행 지점은
PclAnteDecorator입니다. 이것은 마루 노드에 제출된 모든 트랜잭션에 대해 실행되는 미들웨어입니다. 트랜잭션이 관련 모듈(예: x/bank)로 전달되기 전에 PclAnteDecorator는 pclKeeper.GlobalPolicyValidate를 호출합니다. 이 함수는 GlobalPolicyConfig를 가져와 각 UnitPolicy를 반복하고 유효성 검사 로직을 실행합니다. 정책 검사가 실패하면 데코레이터는 오류를 반환하고 전체 트랜잭션은 즉시 거부됩니다.EVM 훅
EVM을 대상으로 하는 트랜잭션의 경우 PCL 시행은 두 단계로 이루어집니다. 첫째, 트랜잭션은 다른 트랜잭션과 마찬가지로
PclAnteDecorator를 통과하므로 전역 정책이 확인됩니다. 둘째, Ante 검사를 통과하면 마루 EVM 모듈이 사전 실행 훅을 호출합니다. 이 훅은 pclKeeper.GlobalPolicyValidateOnEVM 및 pclKeeper.ContractPolicyValidateOnEVM을 호출합니다. 이 함수들은 동일한 유효성 검사를 수행하지만 EVM 관련 데이터 유형(예: common.Address 및 *big.Int)에 맞게 조정되었습니다. 이는 EVM이 그렇게 구성된 경우 컨트랙트 간의 내부 호출도 이론적으로 PCL 규칙의 적용을 받을 수 있도록 보장하며, 컨트랙트별 정책 시행을 위한 메커니즘을 제공합니다.유효성 검사 프로세스
핵심 유효성 검사 로직은
policy_validator.go 파일에 있습니다. validate 함수는 정책과 트랜잭션 메시지를 받습니다. 그런 다음 switch 문을 사용하여 정책 유형(예: validateDenylistPolicy, validateEasPolicy)에 따라 특정 유효성 검사 함수에 위임합니다. 이 함수들은 발신자 주소를 목록과 비교하거나 증명을 확인하기 위해 EAS 컨트랙트에 읽기 전용 호출을 하는 것과 같은 실제 비즈니스 로직을 포함합니다.오류 처리
정책이 위반되면 PCL은 구체적이고 구조화된 오류를 반환합니다. 예를 들어, 발신자가 거부 목록에 있으면 유효성 검사기는
ErrorInDenylist를 반환합니다. 전송이 거래량 한도를 초과하면 ErrorVolumeAboveMaxLimit를 반환합니다. 이러한 상세한 오류는 개발자와 사용자가 일반적인 "트랜잭션 실패" 메시지를 받는 대신 트랜잭션이 실패한 이유를 이해하는 데 매우 중요합니다.