IAgent.getAgentIds
getAgentIds(address wallet, PageRequest pageRequest) external view returns (uint256[] agentIds, PageResponse pageResponse) 페이지네이션 역방향 조회입니다. wallet에 등록된 agent ID 목록을 반환합니다. 마루 Agent 프리컴파일이 이 메서드를 노출하는 이유는 컨트랙트 내부에서 IdentityRegistry 스토리지를 순회하는 비용이 너무 크기 때문입니다. 프리컴파일은 동기화된 x/agent 체인 측 인덱스에서 직접 읽어옵니다. 그 외의 호출(register, attest, 메타데이터)은 IdentityRegistry를 직접 호출합니다.
파라미터
| 이름 | 타입 | 필수 | 설명 |
|---|---|---|---|
wallet | address | ✓ | agent ID를 열거할 owner 지갑 주소입니다. |
pageRequest | PageRequest | ✓ | 표준 PageRequest 구조체입니다(필드: key, offset, limit, count_total, reverse). 빈 구조체를 전달하면 기본 limit으로 첫 페이지를 가져옵니다. cosmos-evm-contracts/precompiles/common/Types.sol에서 import합니다. |
반환값
타입:
(uint256[] agentIds, PageResponse pageResponse) agentIds는 지갑이 소유한 ERC-8004 IdentityRegistry 토큰 ID의 배열입니다. pageResponse는 다음 페이지의 next_key를 담으며, 요청에서 count_total을 true로 설정한 경우 total이 함께 채워집니다.
에러
| 코드 | 이름 | 설명 |
|---|---|---|
InvalidArgsLength | InvalidArgsLength | 호출 인자가 이 메서드의 예상 개수와 다르면 revert됩니다(내부 검증 — 타입이 있는 클라이언트에서는 발생하지 않아야 합니다). |
InvalidAddress | InvalidAddress | wallet이 0 주소이거나 형식이 잘못된 경우 revert됩니다. |
InvalidPageRequest | InvalidPageRequest | pageRequest 필드가 일관성이 없을 때 revert됩니다(예: key와 offset을 동시에 설정한 경우). |
예제
지갑의 agent ID 목록
const AGENT = "0x100000000000000000000000000000000000000A";
const pageRequest = {
key: "0x",
offset: 0n,
limit: 100n,
countTotal: false,
reverse: false,
};
const [agentIds, pageResponse] = await publicClient.readContract({
address: AGENT,
abi: iAgentAbi,
functionName: "getAgentIds",
args: [wallet, pageRequest],
});
// agentIds is uint256[] of ERC-8004 token IDs