Skip to content

Protocol Parameters

All numeric values reflect the v10.x Foundry deployment. Values marked as default may be adjusted by governance within Rpp constraints; values without that annotation are immutable constants.

Time Constants

ParameterSymbolValueSecondsLocationDescription
CenturyCENTURY36,525 days3,155,760,000Constant.sol:8Reward formula denominator; normalizes annual rates to per-second accrual
YearYEAR365.25 days31,557,600Constant.sol:12Defined as CENTURY / 100; used in APB year accounting
MonthMONTH~30.44 days2,629,800Constant.sol:16Minimum interval between Rpp-governed parameter changes
WeekWEEK7 days604,800Constant.sol:20Emigration window duration for reverse NFT migration
DayDAY24 hours86,400Constant.sol:24Calendar day in seconds
HourHOUR60 minutes3,600Constant.sol:28Block hash validity window for PoW mining
MinuteMIN6060Constant.sol:30Base unit; target APOW minting rate is ~1 token/min
SecondSEC11Constant.sol:36Reference unit for all time calculations

Mining Parameters

ParameterValueLocationDescription
Max block hash age1 hour (3,600 s)XPower.sol:118Block hashes expire 1 hour after init(); solutions must be submitted within the same interval
Mining interval1 hourXPower.sol:112Block hashes are bucketed into 1-hour intervals via block.timestamp / 3600
Treasury split50%XPower.sol:96-98Half of each mint to miner's beneficiary, half to MoeTreasury (contract owner)
Reward formulaR(z)=(2z1)×1018 XPOWXPower.sol:139+Exponential reward curve based on leading zero nibbles z
Hash functionKeccak-256XPower.sol:126EVM-native SHA3 opcode; applied over (address XOR beneficiary) \parallel blockHash \parallel data
Minimum difficultyz1XPower.sol:90At least one leading zero nibble required; empty nonce hash reverts
Pair index dedupNonce-hash XOR block-hashXPower.sol:127One-to-one mapping per (beneficiary, blockHash) tuple; replays revert

NFT Parameters

ParameterValueLocationDescription
Level step3Nft.sol:58Valid levels are multiples of 3:
Max level99Nft.sol:56Levels 100+ revert with InvalidLevel
Number of levels340 through 99 inclusive, step 3
Upgrade ratio1,000:1XPowerNft.sol1,000 NFTs at level burn to mint 1 at level +3
DenominationD()=10 XPOWNft.sol:50Per-NFT XPOW value at a given level
NFT ID encoding100×year+Nft.sol:54Collision-free encoding of year and level into uint256
Maturity offset2/31 yearsNft.sol:62Years from mint year until NFT can be redeemed
Min mint year2021Nft.sol:55Years 2020 and earlier revert with InvalidYear
Royalty0.5% (price / 200)NftRoyalty.sol:27ERC-2981 royalty on secondary NFT sales; beneficiary set by NFT_ROYAL_ROLE

Reward Parameters

ParameterSymbolDefaultLocationDescription
APR addarray[0]0MoeTreasury.solAdditive constant in eval3 polynomial; also carries dynamic scalar
APR divarray[1]3MoeTreasury.solDivisor in eval3; must be non-zero
APR mularray[2]3,375,000MoeTreasury.solMultiplier in eval3; must be non-zero
APR exparray[3]256MoeTreasury.solExponent numerator (root fixed at 256); range 128–512
APB addarray[0]0MoeTreasury.solAdditive constant for age-based bonus polynomial
APB divarray[1]1MoeTreasury.solDivisor for APB polynomial
APB mularray[2]100,000MoeTreasury.solMultiplier yielding 0.1% APB per year at default e=256
APB exparray[3]256MoeTreasury.solExponent numerator for APB polynomial
Exponent root256Power.sol:10Root for all exponentiation; exponent is numerator/256
Reward denominator106×CENTURY3,155,760,000 × 10^6MoeTreasury.sol:212Converts PPM rate to per-second fraction over a century
PPM unit1061,000,000MoeTreasury.solParts per million; 10^6 PPM = 100% annual rate

Anti-Gaming Parameters

ParameterValueLocationDescription
MIN_NET2RIP100Banq.sol:128Minimum ratio of net balance increase to excess (rip) supply; lower ratios revert
APOW supply cap43,830 tokensBanq.sol (constructor)Hard cap on total APOW supply; derived from 1 token/min × 20 years
Cap enforcementAtomic per-claimBanq.sol:37-38totalSupply() > _free_supply reverts entire transaction; no partial minting
Migration cap bypass_free_supply = 0SovMigratable.solMigration mirrors existing supply; original cap was already enforced

Rpp Parameters (Rug Pull Protection)

ParameterValueLocationDescription
Multiplier upper bound2.0×Rpp.sol:30New parameter value cannot exceed 2× the previous value
Multiplier lower bound0.5×Rpp.sol:25New parameter value cannot be less than 0.5× the previous value
Minimum change interval1 month (2,629,800 s)Rpp.sol:41Timestamp of next change must be at least MONTH after last change
Array length4Rpp.sol:14APR and APB parameter arrays must contain exactly 4 elements
Array div validationarray[1] > 0Rpp.sol:15Divisor must be non-zero to prevent division-by-zero
Array mul validationarray[2] > 0Rpp.sol:16Multiplier must be non-zero to prevent zero-rate pathologies
Initial value capnext ≤ unit when last == 0Rpp.sol:34First parameterization bounded by unit (1e6 for rates, APR_MUL for means)

Migration Parameters

ParameterValueLocationDescription
Migration deadline~4 years (126,230,400 s)Migratable.sol:44-45Relative deadline from contract deployment; auto-seals after expiry
Emigration window7 days (604,800 s)NftMigratable.solReverse direction open window (new → old); admin-gated
Token migration ratio1:1MoeMigratable.solOld XPOW burns, new XPOW mints at identical amount
SealingOne-way, irreversibleMigratable.sol:172-173seal() sets flag that cannot be unset; no reverse migration after sealing