Skip to content

Claiming APOW

Claiming APOW collects the rewards your staked APowerNfts have accumulated — converting time and commitment into spendable APOW tokens that are backed by treasury XPOW.

Prerequisites

  • One or more APowerNfts in your wallet (see Staking NFTs)
  • A small amount of AVAX for gas (~0.005–0.01 per claim)
  • Patience — rewards grow the longer you wait between claims

Step-by-Step

1. Wait for Rewards to Accumulate

Rewards accrue continuously from the moment you stake. The rate depends on:

  • Your NFT's level — higher levels have larger denominations, multiplying your reward base
  • How long you've been staked — the age accumulator grows with every block
  • Current APR and APB parameters — set by governance, subject to Rpp rate-change limits
  • Dynamic scalar — adjusts based on how many stakers share your level

There is no minimum claim interval. You can claim every hour, every day, or once a year. However, each claim costs gas — infrequent claims amortize the gas cost over a larger reward.

2. Check Your Pending Rewards

Before claiming, check what you're owed:

MoeTreasury.rewardOf(nftId, yourAddress)

This returns the raw uint256 accumulated reward in atomic XPOW units (divide by 1018 for XPOW amount). The contract computes this from:

reward = (aprOf(nftId) + apbOf(nftId)) * age * 10^18 * denomination / (10^6 * CENTURY)

You can also check via the XPower app, which shows pending rewards in a readable format.

3. Obtain a Nonce

The claim function requires a nonce — a fresh uint256 value you provide to prevent signature replay. The nonce is stored on-chain after a successful claim; attempting to reuse it reverts. Any wallet or app generates a unique nonce automatically — typically block.timestamp or a random value.

4. Claim Your Rewards

MoeTreasury.claim(yourAddress, nftId, nonce)

Where:

  • yourAddress is the APowerNft holder (must be msg.sender)
  • nftId is the token ID of your staked position (e.g., 202603)
  • nonce is a unique value you haven't used before for this NFT

Gas cost: ~150,000–300,000 depending on whether the banq pool supply path is active.

5. Receive APOW and Verify

After the transaction confirms:

  1. Your APOW balance increases by the claimed amount
  2. The _claimed accumulator updates, reducing future rewardOf() calculations
  3. Check the Claim event in the transaction logs for the exact amount

Claim Frequency

You can claim as often or as rarely as you like. Consider:

StrategyProsCons
Frequent (daily/weekly)Regular income, compound potentialHigher gas costs eating into rewards
Infrequent (monthly/quarterly)Better gas amortizationRewards sit idle, not earning compound
Lazy (annually)Minimal gas overheadLarge gap between claims

Since APOW minting is rate-limited (target ~1 token/minute mean), extremely large delayed claims may be subject to the rate-limiting smoothing on the APower side — though the rewardOf() calculation itself is unaffected.

Dynamic Rates

Your effective reward rate is not fixed. It changes when:

  • APR/APB parameters are updated by governance (subject to ±50% bounds and 1-month minimum between changes, enforced by Rpp)
  • Share distribution shifts — as stakers enter or leave your level, the dynamic scalar adjusts
  • You stake more — adding to a position increases denomination but resets the weighted-average age

The integrator mechanism ensures rate changes are time-weighted: if the rate was 5% for 30 days and then 10% for 15 days, your reward reflects the duration-weighted average, not a sudden jump.

Rate Limiting

APOW minting is rate-limited to prevent treasury drain from large batched claims:

  • Target rate: ~1 APOW per minute (long-term mean)
  • Smoothing: Square-root filtering of the exponential moving average, so large claims don't spike the mean
  • Effect: If the actual minting rate exceeds the target, minting slows proportionally. If below, full amounts are minted immediately.

The rate limiter is built into APower.mint(). When you claim, the treasury calls APower.mint(account, claimAmount), which:

  1. Wraps XPOW from the treasury (via transferFrom)
  2. Applies rate-limiting to the minted amount
  3. Mints the adjusted APOW to your address

In practice, rate-limiting only affects extremely large claims or claims made during periods of very high claim volume.

Gas Costs

ActionApprox. GasNotes
rewardOf (read)FreeView function, no transaction needed
claim (single NFT)~150,000–300,000Lower if no banq pool is configured
claimBatch (multiple NFTs)~200,000+ per NFTAmortizes per-transaction overhead

The dominant gas components:

  • ~60,000 for the XPOW transfer and APOW mint
  • ~40,000 for storage updates (_claimed, _minted, integrator reads)
  • ~100,000 for the optional banq pool supply call

What Happens Internally

When you call MoeTreasury.claim(account, nftId, nonce), the following sequence executes:

1. Reward Calculation

The contract computes claimable = rewardOf(account, nftId) - _claimed[account][nftId]. The rewardOf() function:

  • Retrieves the APowerNft's _age accumulator for your position
  • Looks up aprOf(nftId) — the level-based polynomial rate
  • Looks up apbOf(nftId) — the age-based polynomial bonus (uses _vintageOf(age) to compute years staked)
  • Computes reward = (apr + apb) * age * 10^18 * denomination / (10^6 * CENTURY)
  • Subtracts _claimed to get the unclaimed portion

2. Nonce Verification

The contract checks _nonces[account][nftId] != nonce — if the nonce was already used, the call reverts. After verification, _nonces[account][nftId] is set to the provided nonce.

3. Accountant Update

_claimed[account][nftId] increases by the claim amount. This ensures future rewardOf() calls return only newly accumulated rewards.

4. APOW Minting

The contract calls APower.mint(account, claimAmount), which:

  • Calls XPOW.transferFrom(owner, address(this), amount) to move treasury XPOW into the APower contract
  • Applies rate-limiting: computes the long-term mean minting rate and adjusts if exceeding the ~1/min target
  • Calls _mint(account, adjustedAmount) to create APOW in your wallet

5. Banq Processing (if configured)

The banq modifier runs after minting:

  • Records your APOW balance before the claim
  • After minting, detects the net APOW increase
  • If a lending pool is configured (pool != address(0)), auto-supplies the increase to the pool
  • If no pool, enforces the free supply cap of 43,830 APOW
  • Burns any excess beyond the supply limit

6. Event Emission

The Claim(account, nftId, amount, nonce) event is emitted, recording the claim details for off-chain tracking.