Contract API
Solidity에서 직접 호출할 수 있는 프리컴파일 인터페이스를 다룹니다. OKRW(스테이블코인), PCL(규제), EAS(attestation), Agent(ERC-8004 인덱싱) 네 가지를 포함합니다.
Agent
페이지네이션 역방향 조회입니다. wallet에 등록된 agent ID 목록을 반환합니다. 마루 Agent 프리컴파일이 이 메서드를 노출하는 이유는 컨트랙트 내부에서 IdentityRegistry 스토리지를 순회하는 비용이 너무 크기 때문입니다. 프리컴파일은 동기화된 x/agent 체인 측 인덱스에서 직접 읽어옵니다. 그 외의 호출(register, attest, 메타데이터)은 IdentityRegistry를 직접 호출합니다.
이 마루 네트워크의 ERC-8004 IdentityRegistry와 ReputationRegistry preinstall 주소를 반환합니다. Discovery 헬퍼 메서드입니다. 앱 시작 시 한 번 호출하면, testnet과 mainnet에서 올바른 레지스트리 주소를 하드코딩 없이 확인할 수 있습니다.
EAS
이 마루 네트워크의 정식 EAS 배포 주소들을 반환합니다. SchemaRegistry, EAS 컨트랙트, Indexer 주소가 포함됩니다. 앱 시작 시 한 번 호출하면 testnet과 mainnet 모두에서 하드코딩 없이 올바른 주소를 해결할 수 있습니다. 반환 struct 이름은 EasParams입니다. 여러 프리컴파일 인터페이스를 함께 import할 때 충돌을 피하기 위해 네임스페이스 없는 Params 이름에서 변경되었습니다.
주어진 UID에 대한 전체 Attestation 구조체를 반환합니다. UID가 알려지지 않은 값이면 uid == 0x00..인 Attestation이 반환됩니다. EAS 컨트랙트 preinstall의 정식 read 메서드이며, 다른 모든 surface(@ethereum-attestation-service/eas-sdk, Indexer, PCL EAS_POLICY 평가자)도 결국 이 함수를 호출합니다. dApp 코드는 attestation을 유효한 것으로 취급하기 전에 revocationTime == 0과 (expirationTime == 0 || expirationTime > now) 조건을 함께 검증해야 합니다.
schemaUid로 recipient에게 발급된 attestation 개수를 반환합니다. 저렴한 존재 확인용입니다. getReceivedAttestationUIDs로 페이지네이션하기 전에 먼저 호출합니다. 카운트는 발급만 추적하며 폐기되거나 만료된 attestation도 카운트에 포함되므로, 이 값은 유효성 게이트가 아닌 검색 범위 산정용으로만 사용해야 합니다.
페이지네이션 역방향 조회입니다. schemaUid로 recipient에게 발급된 attestation UID를 최대 length개 반환합니다. reverseOrder = true를 지정하면 가장 최근 항목부터 조회합니다. 반환된 각 UID를 EAS.getAttestation(uid)에 전달하여 실제 구조체를 가져오고 폐기/만료 여부를 확인합니다.
IPcl
PCL 모듈 파라미터를 반환합니다. 체인 전역 정책 관리자 주소와 승인된 규제 경로 엔트리포인트 컨트랙트 목록이 포함됩니다. 반환 struct 이름은 PclParams입니다. 여러 프리컴파일 인터페이스를 함께 import할 때 struct 이름 충돌을 피하기 위해 네임스페이스 없는 Params 이름에서 변경되었습니다.
내장 정책 템플릿을 templateId로 활성 PCL 템플릿 레지스트리에 등록합니다. 7개의 V1 템플릿(DENYLIST_POLICY, VOLUME_POLICY, PERIODIC_VOLUME_POLICY, EAS_POLICY, OKRW_EAS_TRANSFER_LIMIT_POLICY, OKRW_EAS_PERIODIC_VOLUME_LIMIT_POLICY, AGENT_OKRW_TRANSFER_LIMIT_POLICY)이 체인과 함께 출시되며, 이 호출이 그중 하나를 PolicyConfig에서 사용할 수 있도록 만듭니다. 관리자 전용: 호출자는 컨소시엄 거버넌스로 지정된 PolicyAdmin이어야 합니다. 외부 dApp 빌더가 직접 호출할 일은 없으며, 프로토콜 감사 측면과 PolicySet의 templateId가 등록된 템플릿을 참조하는 방식을 명확히 하기 위해 문서에 포함했습니다.
view 호출입니다. 대상 주소에 현재 적용 중인 컨트랙트 범위 ContractPolicyConfig를 반환합니다. admin과 전체 PolicySet[]이 포함됩니다. 컨트랙트 범위 설정이 등록되어 있지 않으면 빈 구조체(빈 policies 배열, zero admin)가 반환되며, 이때도 체인 전역 GlobalPolicyConfig는 그대로 적용됩니다. 정책 인스펙터 UI나 changeContractPolicies의 읽기-수정-쓰기 흐름에서 사용합니다.
view 호출입니다. 7개의 내장 PCL 템플릿 중 하나의 등록 레코드를 templateId로 조회합니다. 알려지지 않은 templateId이면 revert됩니다. 각 템플릿의 파라미터 구조는 IPcl.sol에 고정되어 있으며(예: DenylistPolicy { address[] addresses; }), policyTemplate은 레지스트리 메타데이터만 반환합니다. 파라미터 레이아웃을 알려면 해당 템플릿의 Solidity 구조체를 직접 참조해야 합니다.
PCL의 규제 컨텍스트 안에서 대상 컨트랙트에 대한 호출을 실행합니다. 이 함수는 '규제 트랙'의 진입점입니다. 먼저 발신자, 대상 컨트랙트, 호출 데이터를 기준으로 적용 대상이 되는 전역 및 컨트랙트별 정책 검사를 모두 실행합니다. 모든 검사가 통과하면 저수준 call을 사용하여 대상 컨트랙트에서 제공된 호출 데이터를 실행합니다. 검사 중 하나라도 실패하면 트랜잭션이 해당 오류로 revert됩니다.
특정 스마트 컨트랙트에 적용할 새로운 컴플라이언스 정책 세트를 등록합니다. 이 함수는 초기 정책 구성을 설정합니다. 대상 컨트랙트에 이미 정책이 등록된 경우 이 호출은 실패합니다. 기존 구성을 업데이트하려면 changeContractPolicies를 사용합니다. 호출자는 policy 구조체에 지정된 컨트랙트의 관리자이거나 해당 컨트랙트 자체여야 합니다.
스마트 컨트랙트의 기존 컴플라이언스 정책 묶음을 업데이트합니다. 이 호출은 이전 정책 구성을 새 구성으로 완전히 대체합니다. 정책을 추가하거나 제거하려면 기존 구성을 읽어와 PolicySet 배열을 수정한 다음 전체 새 구성을 제출합니다. 호출자는 대상 컨트랙트에 현재 등록된 관리자여야 합니다.
OKRW
OKRW 모듈 파라미터를 반환합니다. 지정된 발행자 주소와 발행 denom이 포함됩니다. 반환 struct 이름은 OkrwParams입니다. 여러 프리컴파일 인터페이스를 함께 import할 때 struct 이름 충돌을 피하기 위해 네임스페이스 없는 Params 이름에서 변경되었습니다. 발행자 주소 교체는 컨소시엄 거버넌스 작업이며, 클라이언트는 이 함수를 읽기 전용 조회 엔드포인트로 사용합니다.
amount로 지정된 수량의 OKRW 토큰을 발행하여 recipient 주소로 입금합니다. 이 함수는 x/okrw 모듈 파라미터에서 체인 수준으로 지정된 발행자 주소만 호출할 수 있습니다. 다른 주소에서 호출하면 사용자 정의 오류로 revert됩니다.
mint 함수가 성공적으로 호출되면 OKRW 프리컴파일이 발생시킵니다. 이 이벤트는 EVM에서 일어난 모든 OKRW 발행 활동을 검증 가능하게 온체인 기록으로 남깁니다. 인덱서와 클라이언트 애플리케이션은 이 이벤트를 구독하여 OKRW 공급 및 분배를 추적할 수 있습니다.