DENYLIST_POLICY

component compliance

송신자 또는 수신자가 설정된 주소 목록에 포함된 트랜잭션을 차단합니다.

가장 단순한 PCL 템플릿입니다. 호출자(그리고 글로벌 설정에서는 종종 수신자도 함께)를 차단된 주소의 정적 목록과 대조합니다. 제재 강제와 동결 계정 라우팅에 사용합니다.

Solidity struct와 ABI 튜플

정책 파라미터는 IPcl.sol에 다음과 같이 정의된 Solidity struct입니다.
struct DenylistPolicy {
    address[] addresses;
}
ABI 튜플 약칭은 (address[])이며, 다음과 같이 PolicySet.policy에 인코딩하여 전달합니다.
DenylistPolicy memory dl = DenylistPolicy({
    addresses: new address[](2)
});
dl.addresses[0] = 0xAaaA...;
dl.addresses[1] = 0xBbBb...;

bytes memory policyBytes = abi.encode(dl);
// templateId = "DENYLIST_POLICY"인 PolicySet으로 래핑합니다

정책 평가 방식

PCL은 트랜잭션 송신자의 주소가 addresses 목록에 포함되어 있는지를 확인합니다. 포함되어 있으면 해당 트랜잭션은 거절됩니다. 일부 설정에서는 수신자도 함께 검사하는데, 이는 글로벌 설정을 등록할 때 정책 관리자가 선택하거나 컨트랙트 범위 설정에서는 컨트랙트 admin이 선택할 수 있습니다.

거절 시 발생하는 ReasonCode

이 정책이 트랜잭션을 거절할 때 PCL은 InDenylist(address sender)를 발행합니다. 지갑 UX에서는 이를 최종 실패로 처리해야 합니다. 주소 자체가 차단되어 있으므로 재시도 경로가 존재하지 않습니다.

주요 활용 사례

이 템플릿은 주로 다음 세 가지 흐름에서 사용됩니다.

  • 글로벌 레벨의 제재 강제 — 전체 체인에 적용하여 모든 트랜잭션이 제재 목록과 대조되도록 합니다.
  • 컨트랙트별 admin 동결 — 침해된 거래 상대방에 대해 ContractPolicyConfig로 등록해 해당 컨트랙트에만 deny 범위를 한정합니다.
  • 다른 정책과의 결합 규칙DENYLIST_POLICY는 다른 규칙이 허용하더라도 특정 주소를 반드시 차단하도록 보장합니다.
소스: maroo
ESC
검색어를 입력하세요