Agent 프리컴파일

component identity

ERC-8004 IdentityRegistry / ReputationRegistry 주소를 반환하고, 인덱싱된 getAgentIds(wallet) 조회를 제공합니다. 그 외 에이전트 작업은 IdentityRegistry를 직접 호출합니다.

0x100000000000000000000000000000000000000A의 Agent 프리컴파일은 얇은 discovery + 인덱싱 surface입니다. 두 개의 view 메서드를 노출합니다. getParams()는 이 체인의 ERC-8004 IdentityRegistry와 ReputationRegistry preinstall 주소를 반환하며, getAgentIds(wallet, pageRequest)는 주어진 지갑이 등록한 에이전트 ID의 페이지네이션 목록을 반환합니다(x/agent 체인 측 인덱스가 백엔드로 저렴한 조회를 제공합니다). 모든 실제 에이전트 상태 작업 — 등록, attestation, 폐기, 메타데이터 조회 — 는 getParams()가 반환하는 주소의 ERC-8004 IdentityRegistry preinstall에서 일어납니다.

IAgent 인터페이스 (전체 surface)

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import {PageRequest, PageResponse} from "cosmos-evm-contracts/precompiles/common/Types.sol";

interface IAgent {
    error InvalidArgsLength(string method, uint256 got, uint256 want);
    error InvalidAddress(string method, uint256 index, string value);
    error InvalidPageRequest(string method, uint256 index, string value);

    struct Params {
        address identityRegistry;
        address reputationRegistry;
    }

    function getParams() external view returns (Params memory);

    function getAgentIds(address wallet, PageRequest calldata pageRequest)
        external
        view
        returns (uint256[] memory agentIds, PageResponse calldata pageResponse);
}
메서드는 두 개뿐이며 이것이 전체 surface입니다. Agent 프리컴파일은 의도적으로 최소화되어 있으며, 풍부한 agent surface(라이프사이클, 메타데이터, 위임)는 ERC-8004 표준 컨트랙트에 있기 때문입니다.

왜 분리했는가 (precompile vs registry)

ERC-8004 IdentityRegistry는 에이전트 라이프사이클을 처리하는 표준 Solidity 컨트랙트로, register, attest, revoke, 메타데이터 조회 등을 담당합니다. 마루 프리컴파일은 표준 컨트랙트가 EVM 레이어에서 저렴하게 처리할 수 없는 두 가지를 보완합니다.

1. 지갑별 열거 — "지갑 X가 소유한 모든 agent ID를 나열하는 것"입니다. 컨트랙트 안에서 IdentityRegistry 스토리지를 순회하면 비용이 크지만, 프리컴파일은 동기화된 체인 측 인덱스에서 읽어 저렴하게 처리하고 페이지네이션을 지원합니다.
2. 네트워크 이식 discoverygetParams()로 컨트랙트가 IdentityRegistry / ReputationRegistry 주소를 하드코딩 없이 조회할 수 있습니다. testnet과 mainnet 모두에서 수정 없이 동작하는 코드에 유용합니다.

쓰기와 대부분의 읽기는 여전히 IdentityRegistry 컨트랙트를 거칩니다. 프리컴파일은 쿼리/discovery 도우미이며 권한자가 아닙니다.

호출 패턴

import {PageRequest, PageResponse} from "cosmos-evm-contracts/precompiles/common/Types.sol";

interface IAgent {
    struct Params { address identityRegistry; address reputationRegistry; }
    function getParams() external view returns (Params memory);
    function getAgentIds(address wallet, PageRequest calldata pageRequest)
        external view
        returns (uint256[] memory agentIds, PageResponse calldata pageResponse);
}

IAgent constant AGENT = IAgent(0x100000000000000000000000000000000000000A);

contract MyAgentDashboard {
    function listAgents(address wallet) external view returns (uint256[] memory) {
        // 첫 페이지 (페이지네이션 키 없음, 기본 limit)
        PageRequest memory pr;
        (uint256[] memory ids, ) = AGENT.getAgentIds(wallet, pr);
        return ids;
    }

    function identityRegistry() external view returns (address) {
        return AGENT.getParams().identityRegistry;
    }
}
에이전트 등록, 메타데이터, attestation은 IdentityRegistry를 직접 호출합니다(주소는 getParams()가 반환하거나 testnet에서는 0x8004000000000000000000000000000000000001로 하드코딩 가능). 자세한 내용은 erc-8004-identity-registry 페이지를 참고합니다.

V1 범위

마루 라이트페이퍼에 따라 V1은 Identity Registry만 적극 사용합니다. ReputationRegistry는 0x8004000000000000000000000000000000000002에 preinstall로 존재하지만 V2+ 활용을 위해 예약되어 있으며, getParams().reputationRegistry는 활성화 여부와 무관하게 주소를 반환합니다. ERC-8004 표준의 ValidationRegistry는 V1에 없습니다.
소스: maroo
ESC
검색어를 입력하세요