IPcl.globalPeriodicList

globalPeriodicList(
  address user,
  string asset,
  bool resolveAgentOwners,
  PageRequest pageRequest
) external view returns (PeriodicVolume[] statuses, PageResponse pageResponse)

전역 정책 설정에서 user에 적용되는 모든 PERIODIC_VOLUME_POLICY 카운터를 반환합니다. 서로 다른 리셋 주기 버킷마다 항목 하나씩 포함됩니다. 동일 자산에 24시간 상한과 30일 상한이 함께 적용되는 등, 여러 전역 주기 상한을 한 번에 표시하거나 검사할 때 사용합니다.

파라미터

이름 타입 필수 설명
user address ✓ 주기 카운터를 열거할 주소입니다.
asset string ✓ 필터링할 denom 문자열입니다. OKRW의 경우 "atokrw"를 사용합니다.
resolveAgentOwners bool ✓ true이면 user를 에이전트 지갑으로 보고, 각 항목에 그 에이전트 소유자들의 카운터 중 가장 큰 값(소유자가 없으면 user 자신의 카운터)을 담습니다. 에이전트 지갑의 전송이 소유자들의 카운터에 기록되는 것은 상한을 에이전트 소유자를 순회하는 FOR_EACH_POLICY로 감쌌을 때뿐이며, maroo-testnet-1의 전역 일일 한도가 그렇게 감싸여 있습니다.
pageRequest PageRequest ✓ 표준 페이지 요청 { key, offset, limit, countTotal, reverse }입니다. 첫 페이지 요청 시 { key: 0x, offset: 0, limit: 100, countTotal: false, reverse: false }를 전달합니다.

반환값

타입: (PeriodicVolume[] statuses, PageResponse pageResponse)

statuses는 매칭되는 전역 주기 정책마다 { amount, maxAmount, resetPeriodSeconds, resetAt } 항목을 담은 배열입니다. pageResponse는 다음 페이지 커서와 선택적 총 개수를 담습니다.

예제

사용자에 대한 모든 전역 OKRW 주기 카운터 조회

OKRW에 대해 user에 적용되는 모든 전역 주기 카운터를 열거합니다. 설정된 리셋 주기마다 한 행씩 반환됩니다. 여러 상한(예: 일 상한과 월 상한)을 한 화면에 함께 보여주는 대시보드에 유용합니다.

import { createPublicClient, http, parseAbi } from "viem";

const PCL = "0x1000000000000000000000000000000000000005";
const pclAbi = parseAbi([
  "function globalPeriodicList(address user, string asset, bool resolveAgentOwners, (bytes key, uint64 offset, uint64 limit, bool countTotal, bool reverse) pageRequest) view returns ((uint256 amount, uint256 maxAmount, uint64 resetPeriodSeconds, uint64 resetAt)[] statuses, (bytes nextKey, uint64 total) pageResponse)",
]);

const client = createPublicClient({ transport: http("https://rpc-testnet.maroo.io") });
const user = "0x5555555555555555555555555555555555555555"; // replace before production

const [statuses, pageResponse] = await client.readContract({
  address: PCL,
  abi: pclAbi,
  functionName: "globalPeriodicList",
  args: [
    user,
    "atokrw",
    false,
    { key: "0x", offset: 0n, limit: 100n, countTotal: false, reverse: false },
  ],
});

for (const s of statuses) {
  // e.g. daily (86400) and monthly (2592000) caps side by side
  console.log(`period=${s.resetPeriodSeconds}s used=${s.amount}/${s.maxAmount} resetAt=${s.resetAt}`);
}

페이지네이션 커서로 다음 페이지 조회

표준 PageRequest / PageResponse 루프입니다. 반환된 nextKey로 key를 갱신해 빈 응답이 올 때까지 반복 조회합니다.

let key: `0x${string}` = "0x";
do {
  const [statuses, pageResponse] = await client.readContract({
    address: PCL,
    abi: pclAbi,
    functionName: "globalPeriodicList",
    args: [user, "atokrw", false, { key, offset: 0n, limit: 50n, countTotal: false, reverse: false }],
  });
  for (const s of statuses) { /* consume */ }
  key = pageResponse.nextKey as `0x${string}`;
} while (key && key !== "0x");
ESC
검색어를 입력하세요