IPcl.globalPeriodicList

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

Lists every PERIODIC_VOLUME_POLICY running counter for user under the global policy config, one entry per distinct reset-period bucket. Use this when the user is subject to multiple global periodic caps at different window lengths (for example a 24-hour cap and a 30-day cap on the same asset) and you want to render or check all of them at once.

Parameters

Name Type Required Description
user address The address to enumerate periodic counters for.
asset string The denom string to filter by (for OKRW, "aokrw").
resolveAgentOwners bool If true and user is an agent wallet, counters are aggregated under the agent's owner(s).
pageRequest PageRequest Standard pagination request { key, offset, limit, countTotal, reverse }. Pass { key: 0x, offset: 0, limit: 100, countTotal: false, reverse: false } for the first page.

Returns

Type: (PeriodicVolume[] statuses, PageResponse pageResponse)

statuses is an array of { amount, maxAmount, resetPeriodSeconds, resetAt } — one per matching global periodic policy. pageResponse carries the next-page cursor and optional total count.

Examples

List all global OKRW periodic counters for a user

Enumerates every global periodic counter that applies to user for OKRW — one row per configured reset period. Handy for a dashboard that surfaces every cap at once (daily + monthly, etc.).

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,
    "aokrw",
    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}`);
}

Follow the pagination cursor

Standard PageRequest / PageResponse loop — advance key with the returned nextKey until it is empty.

let key: `0x${string}` = "0x";
do {
  const [statuses, pageResponse] = await client.readContract({
    address: PCL,
    abi: pclAbi,
    functionName: "globalPeriodicList",
    args: [user, "aokrw", 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
Type to search