PCL 정책 관리자
글로벌 PCL 상태에 대한 쓰기 권한을 보유하는 단일 권한 주소입니다. 체인 전역 PCL 규칙은 이 주소만 변경할 수 있습니다.
Policy Admin은 호출자가 IPcl.policyAdmin()로 확인할 수 있는 단일 주소 — 내장 PolicyTemplate 등록/제거와 체인 전역 GlobalPolicyConfig 설정/제거 권한을 가집니다. 네트워크의 모든 트랜잭션에 영향을 주는 변경은 이 역할을 거칩니다. admin 슬롯은 체인 파라미터 — 단일 키 보유자가 임의로 가져가거나 다른 주소로 옮길 수 없습니다.
admin이 할 수 있는 일 (IPcl 호출)
다음은 PCL 프리컴파일 (
컨트랙트 범위 정책 (
0x1000…0005)에서 admin만 호출 가능합니다:registerPolicyTemplate(string templateId)— 체인 출시 후 내장 템플릿을 등록합니다.removePolicyTemplate(string templateId)— 사용하지 않는 템플릿을 제거합니다.setGlobalPolicies(GlobalPolicyConfig newConfig)— 체인 전역 PolicySet 배열을 설치하거나 교체합니다.removeGlobalPolicies()— 글로벌 설정을 삭제합니다 (체인 전역 규칙이 없는 상태로 되돌립니다).
컨트랙트 범위 정책 (
registerContractPolicies / changeContractPolicies / removeContractPolicies)은 정책 admin의 역할이 아닙니다 — 그것들은 각 ContractPolicyConfig가 보유한 자체 admin 필드로 게이트됩니다.admin은 회전될 수 있음 — 하드코딩 금지
admin 슬롯은 체인 파라미터입니다. 단일 키가 자신의 역할을 직접 가져가거나 다른 주소로 옮기는 온체인 메시지는 없습니다. dApp 빌더 입장에서 실용적 결론은 단순합니다 — admin 주소를 하드코딩하지 않습니다. 필요할 때마다
IPcl.policyAdmin()로 온체인에서 읽습니다. 하드코딩 값을 캐시한 코드는 admin이 회전될 때 예고 없이 동작하지 않게 됩니다.현재 admin 조회
누구든 트랜잭션 없이 현재 admin을 확인할 수 있습니다:
address admin = IPcl(0x1000000000000000000000000000000000000005).policyAdmin(); 지갑과 대시보드는 하드코딩된 주소를 캐시하는 대신 이를 활용해야 합니다 — 올바르게 작성된 코드는 admin 회전에 영향을 받지 않습니다.
영향 범위
admin 키가 침해되면 모든 트랜잭션을 차단하는 denylist를 설치하거나 KYC 강제를 체인 전역에서 비활성화하는 허용 설정을 설치할 수 있습니다. 영향 범위가 크지만, 체인 파라미터 설계가 이 위험을 제약합니다 — 단일 키가 슬롯을 임의로 점유할 수 없고, 재할당은 모두 온체인에 기록되어 공개됩니다. dApp 측 실용적 완화책은 PCL 프리컴파일 주소의
setGlobalPolicies / removeGlobalPolicies 이벤트를 모니터링하는 것입니다 — 특정 체인 전역 규칙에 dapp 동작이 의존한다면 그 규칙 변경을 감지해야 합니다.PolicyAdmin vs ContractPolicyConfig.admin
이 둘은 서로 다른 역할입니다. PolicyAdmin은 글로벌 규칙을 관리합니다 (체인당 슬롯 하나).
ContractPolicyConfig의 admin 필드는 특정 컨트랙트 주소 하나에 연결된 규칙을 관리하며, 등록 시점에 컨트랙트 소유자가 선택한 주소가 보유합니다. 한 쪽이 회전되어도 다른 쪽에는 영향을 주지 않습니다.