testnet
GitHub EN

IPcl.registerContractPolicies

registerContractPolicies(ContractPolicyConfig calldata policy)

특정 스마트 컨트랙트에 대한 새로운 규제 준수 정책 세트를 등록합니다. 이 함수는 초기 정책 구성을 설정합니다. 대상 컨트랙트에 이미 정책이 등록된 경우 이 호출은 실패합니다. 기존 구성을 업데이트하려면 changeContractPolicies를 사용하십시오. 호출자는 policy 구조체에 정의된 컨트랙트의 지정된 관리자이거나 컨트랙트 자체여야 합니다.

파라미터

이름 타입 필수 설명
policy ContractPolicyConfig 대상 컨트랙트 주소, 향후 변경을 위한 관리자 주소, 그리고 적용할 UnitPolicy 구조체 배열을 포함하는 구조체입니다.

반환값

타입: void

이 함수는 값을 반환하지 않습니다.

에러

코드 이름 설명
Unauthorized Unauthorized `msg.sender`가 `policy.admin` 필드에 지정된 관리자가 아닐 경우 되돌립니다.
PolicyAlreadyRegistered PolicyAlreadyRegistered 대상 `policy._contract` 주소에 대한 정책 구성이 이미 존재하는 경우 되돌립니다.
UnknownPolicyType UnknownPolicyType `UnitPolicy` 중 하나가 네트워크에 등록되지 않은 `templateId`를 사용하는 경우 되돌립니다.

예제

거부 목록 정책 등록

이 예제는 관리자 컨트랙트가 토큰 컨트랙트에 간단한 거부 목록 정책을 설정하는 것을 보여줍니다. 관리자 컨트랙트 자체가 향후 변경을 위한 정책 관리자로 지정됩니다.

import { IPcl, PCL_CONTRACT, UnitPolicy, ContractPolicyConfig } from "./IPcl.sol";

contract MyTokenAdmin {
    address public myTokenAddress;

    constructor(address token) {
        myTokenAddress = token;
    }

    function setInitialDenylist(address[] calldata denylisted) external {
        // ABI-encode the address array for the 'parameters' field
        bytes memory params = abi.encode(denylisted);

        // Create a reference to the 'DENYLIST' policy template
        UnitPolicy[] memory policies = new UnitPolicy[](1);
        policies[0] = UnitPolicy({
            templateId: "DENYLIST",
            parameters: params,
            paramNames: new string[](1), // Optional for on-chain use
            selector: bytes4(0) // Apply to all functions
        });

        // Create the full configuration
        ContractPolicyConfig memory config = ContractPolicyConfig({
            _contract: myTokenAddress,
            admin: address(this), // This contract is the admin
            policies: policies
        });

        // Call the PCL precompile to register the policy
        PCL_CONTRACT.registerContractPolicies(config);
    }
}
ESC
검색어를 입력하세요