testnet
GitHub EN

프리컴파일을 통한 컨트랙트 정책 관리

integration intermediate

PCL 프리컴파일 함수를 사용하여 스마트 컨트랙트의 규제 준수 정책 관리 전체 생명주기에 대한 단계별 가이드입니다.

사전 요구사항

  • 마루에 이미 배포된 스마트 컨트랙트.
  • 정책 관리를 승인받은 관리자 계정 또는 컨트랙트.

1. 초기 정책 등록

첫 번째 단계는 초기 정책 구성을 설정하는 것입니다. 이는 컨트랙트당 한 번만 수행할 수 있습니다. registerContractPolicies 함수를 사용합니다. 대상 컨트랙트, 향후 변경을 위한 관리자, 그리고 정책 배열을 정의해야 합니다.
UnitPolicy[] memory policies = new UnitPolicy[](1);
// ... policies 배열 채우기 ...

ContractPolicyConfig memory config = ContractPolicyConfig({
    _contract: myTargetContract,
    admin: msg.sender,
    policies: policies
});

PCL_CONTRACT.registerContractPolicies(config);

2. 현재 정책 읽기

현재 구성을 확인하거나 업데이트하기 전에 contractPolicies를 사용하여 모든 컨트랙트의 활성 정책을 가져올 수 있습니다. 이 함수는 전체 ContractPolicyConfig 구조체를 반환합니다.
ContractPolicyConfig memory currentConfig = PCL_CONTRACT.contractPolicies(myTargetContract);

// 이제 currentConfig.policies, currentConfig.admin 등을 검사할 수 있습니다.
address currentAdmin = currentConfig.admin;

3. 기존 정책 변경

정책을 업데이트하려면 changeContractPolicies를 사용합니다. 이 함수는 기존의 전체 구성을 대체합니다. 일반적인 작업 흐름은 먼저 현재 정책을 읽고, 메모리에서 배열을 수정한 다음(UnitPolicy 추가, 제거 또는 편집), 새로운 ContractPolicyConfig를 제출하는 것입니다.
// 'currentConfig'가 2단계에서처럼 가져왔다고 가정합니다
// 'newPolicy'가 새로 생성된 UnitPolicy라고 가정합니다

UnitPolicy[] memory newPolicies = new UnitPolicy[](currentConfig.policies.length + 1);
for (uint i = 0; i < currentConfig.policies.length; i++) {
    newPolicies[i] = currentConfig.policies[i];
}
newPolicies[currentConfig.policies.length] = newPolicy;

ContractPolicyConfig memory updatedConfig = ContractPolicyConfig({
    _contract: myTargetContract,
    admin: currentConfig.admin, // 또는 새로운 관리자 주소
    policies: newPolicies
});

PCL_CONTRACT.changeContractPolicies(updatedConfig);
주의: 주의: `changeContractPolicies`는 전체 교체입니다. 빈 정책 배열이 있는 구성을 제출하면 사실상 모든 정책이 제거됩니다.

4. 모든 정책 제거

컨트랙트에서 PCL 시행을 완전히 제거하려면 removeContractPolicies를 사용합니다. 이것은 전체 구성을 삭제합니다. 호출자는 컨트랙트 정책의 현재 관리자여야 합니다.
// 호출자는 myTargetContract의 등록된 관리자여야 합니다
PCL_CONTRACT.removeContractPolicies(myTargetContract);
소스: maroo
ESC
검색어를 입력하세요