Skip to Content
Constants Reference

Constants Reference

Curated snapshot of the most user-visible and integration-relevant constants from src/lib/Constants.sol. This page is a curated mirror for the manuals, not the canonical source of truth. src/lib/Constants.sol is canonical, and some contract-local constants (for example MineCore.GENESIS_ACCRUAL_DURATION) intentionally live outside this appendix.

Takeover (MineCore)

ConstantValue
TAKEOVER_PRICE_FLOOR0.001 ETH
TAKEOVER_DECAY_PERIOD1 hour
KING_ETH_SHARE_PCT75
KING_ETH_SHARE_DENOM100

The canonical takeover split: KING_ETH_SHARE_PCT / KING_ETH_SHARE_DENOM = 75 / 100 sends 75% of the takeover payment to the dethroned King and 25% to the Barons royalty pool. Pinned in Constants.sol; not a governance-configurable rate.

Emissions (MineCore + Furnace)

ConstantValue
EMISSION_DECAY_PERIOD2 years
KING_EMISSION_LAUNCH_RATE50 CLAIM/sec
KING_EMISSION_FLOOR~5.56 CLAIM/sec
FURNACE_EMISSION_LAUNCH_RATE5 CLAIM/sec
FURNACE_EMISSION_FLOOR~0.555 CLAIM/sec

The launch and floor rates are a deliberate 10:1 split (King:Furnace). Both streams decay through the same _rateAt helper in MineCoreHelper, so kingRate(t) = 10 × furnaceRate(t) holds within ~5–15 wei (parts-per-quintillion drift from mulDiv floor-rounding plus the 5-wei truncation of 5/9 in the Furnace floor). AgentLens.currentKingEmissionRate exposes the King rate directly, and the SDK’s mineCore.currentKingEmissionRate field surfaces it via getGameStateSnapshot. Agent strategies should size reign budgets against the King rate, not the Furnace rate. The 10:1 invariant is pinned by testKingFurnaceLaunchRateRatioPinned and testKingFurnaceFloorRatioPinnedWithin5Wei in test/SecurityCriticalConstantsPinned.t.sol.

Baron royalties (ShareholderRoyalties)

ConstantValue
MIN_VE_FLUSH100 veCLAIM
MAX_REWARD_CHECKPOINTS50,000
MAX_OVERFLOW_CHECKPOINTS50,000
SHAREHOLDER_MODE_ETH0
SHAREHOLDER_MODE_LOCK_FURNACE1

MIN_VE_FLUSH gates manual / residual shareholder flushes. Canonical takeover allocations are auto-attempted immediately and index against the current processed shareholder denominator once checkpointTotalVe() has advanced ve.globalLastTs() to the current block.

Shareholder auto-compound pause reason codebook (SetAutoCompoundConfig events; numeric mappings are immutable once deployed and must match docs/analytics/dune-integration-pack-v1.0.0.md):

ConstantValue
SHAREHOLDER_AUTOCOMPOUND_PAUSE_REASON_NOT_OWNER1
SHAREHOLDER_AUTOCOMPOUND_PAUSE_REASON_LISTED2
SHAREHOLDER_AUTOCOMPOUND_PAUSE_REASON_EXPIRED3
SHAREHOLDER_AUTOCOMPOUND_PAUSE_REASON_INVALID_TOKEN_ID4
SHAREHOLDER_AUTOCOMPOUND_PAUSE_REASON_FURNACE_REVERT5
SHAREHOLDER_AUTOCOMPOUND_PAUSE_REASON_QUOTE_FAILED6
SHAREHOLDER_AUTOCOMPOUND_PAUSE_REASON_CHECKPOINT_FAILED7

Furnace lock parameters

ConstantValue
MIN_LOCK_AMOUNT1,000 CLAIM (minimum for createLock / createLockFor)
MIN_TOPUP_AMOUNT1 CLAIM (minimum for addToLock top-ups; bounds slope rounding dust)
MIN_LOCK_DURATION7 days; also enforced as the minimum remaining time for an existing lock to be used as an entry destination
MAX_LOCK_DURATION365 days
MAX_VE_NFTS_PER_USER32
Furnace.EMERGENCY_VAULT_REWIRE_DELAY7 days (executor cooldown for requestEmergencyVaultRewireexecuteEmergencyVaultRewire; contract-local, lives in src/Furnace.sol)

Furnace entry mode codebook (FurnaceEnter events; numeric mappings are immutable once deployed and must match docs/analytics/dune-integration-pack-v1.0.0.md):

ConstantValue
FURNACE_MODE_ENTER_WITH_ETH0
FURNACE_MODE_ENTER_WITH_CLAIM1
FURNACE_MODE_LOCK_FURNACE2
FURNACE_MODE_ENTER_WITH_TOKEN3

LP staking vault (LpStakingVault7D)

ConstantValue
UNBONDING_PERIOD7 days
MAX_UNBONDS_PER_USER25
MIN_UNBOND_AMOUNT1e15 wei (0.001 LP token; minimum per unbond(...) request, prevents dust slips)

Genesis LP vault

ConstantValue
INITIAL_LOCK_DURATION730 days (24 months)
MAX_EXTENSION3,650 days (10 years)
MAX_ABSOLUTE_LOCK36,500 days (100 years)
MIN_LP_LOCK1e15 wei
MIN_EXTENSION_DURATION1 day

Bonus mechanics

User + LP bonus clamps:

ConstantValue
BPS_DENOM10,000
WEIGHT_PRECISION1e8
WEIGHT_DENOMBPS_DENOM × WEIGHT_PRECISION = 1e12
MAX_USER_BONUS_BPS10,000
MAX_GROSS_BONUS_BPS12,500

WEIGHT_PRECISION is the internal precision multiplier of the Furnace duration-weight curve; WEIGHT_DENOM is the matching divisor for principalEff = mulDiv(amount, weightDelta, WEIGHT_DENOM). The public bps view durationWeightBps(durationSeconds) returns the integer floor of the sub-bp curve.

Lock-% anchors:

ConstantValue
LOCK_PCT_TARGET_BPS700
LOCK_PCT_MIN_FOR_BOOST_CAP_BPS500
LOCK_PCT_FULL_BOOST_CAP_BPS2,000

Reserve-factor cap + ramp:

ConstantValue
RESERVE_TARGET_FINAL20,000,000 CLAIM
RESERVE_FACTOR_MAX_BPS_LOWLOCK15,000
RESERVE_FACTOR_MAX_BPS20,000
SWING_TIME60 days

Virtual depth / decay windows:

ConstantValue
BONUS_DECAY_WINDOW3 hours
LP_STREAM_WINDOW14 days

LP top-up (when enabled):

ConstantValue
LP_TOPUP_RATE_MIN_BPS750
LP_TOPUP_RATE_MAX_BPS1,500
LP_TOPUP_GAMMA2

Absolute-supply anchor (not the primary v1.0.0 bonus anchor; retained in Constants for reference):

ConstantValue
LOCK_TARGET120,000,000 CLAIM

Furnace sellback (lock → liquid CLAIM)

The sellback quote is a single net payout (claimOut). The implied haircut is lockAmount - claimOut.

ConstantValue
SELL_SPREAD_MIN_BPS500
SELL_SPREAD_MAX_BPS7,000
SELL_SPREAD_FLOOR_7D_BPS120
SELL_SPREAD_GAMMA2
SELL_ROUND_TRIP_LOSS_MAX_BPS2,500
SELL_IMPACT_BPS_PER_STEP100
SELL_IMPACT_MAX_BPS1,500

LP sale (portion of sell haircut routed to LP rewards):

ConstantValue
LP_SALE_MIN_BPS500
LP_SALE_MAX_BPS1,500
LP_SALE_GAMMA2
LP_SALE_REWARD_CAP_INFLOW_SHARE_BPS2,500
LP_SALE_REWARD_CAP_FIXED_CAP_PER_DAY150,000 CLAIM/day

LP overflow drip (Furnace → LP rewards stream)

Separate from the per-entry LP top-up split. Enabled only when lpRewardsVault != address(0).

ConstantValue
LP_OVERFLOW_DRIP_START18 months (18 × 30 days)
LP_OVERFLOW_DRIP_RAMP180 days
LP_OVERFLOW_DRIP_INFLOW_SHARE_CAP_BPS1,000 (10%)
LP_OVERFLOW_DRIP_FIXED_CAP_PER_DAY30,000 CLAIM/day
LP_OVERFLOW_DRIP_GATE_K2,000,000 CLAIM

View helpers on Furnace: getLpOverflowDripPerDay(), getLpStreamRemaining(), getLpStreamState().

MarketRouter (listings + buy intents)

ConstantValue
SETTLEMENT_KEEPER_GRACE_SECONDS1800
EMERGENCY_DELIST_MIN_AGE7 days

Buy intent (bonus target escrow) defaults and bounds:

ConstantValue
DEFAULT_MIN_BONUS_TARGET_ESCROW_BUDGET10,000 CLAIM
DEFAULT_MAX_BONUS_TARGET_ESCROW_DISCOUNT_BPS8,000
DEFAULT_BONUS_TARGET_ESCROW_TTL_SECONDS30 days
MIN_BONUS_TARGET_ESCROW_TTL_SECONDS300 (5 minutes; hard floor on caller-supplied ttl, anti–flash-collateral)
MAX_BONUS_TARGET_ESCROW_TTL_SECONDS90 days (hard ceiling on caller-supplied ttl)

Delist reason codebook:

ConstantValue
LOCK_DELIST_REASON_NORMAL0
LOCK_DELIST_REASON_EMERGENCY1
LOCK_DELIST_REASON_SOLD_INTO_OFFER2
LOCK_DELIST_REASON_SOLD_TO_FURNACE3
LOCK_DELIST_REASON_EXPIRED4
LOCK_DELIST_REASON_APPROVAL_REVOKED5

In the strict-mode MarketRouter, delist codes 2 and 5 are reserved analytics values and are not emitted.

Maintenance / keepers

ConstantValue
MAX_MAINTENANCE_OFFERS_PER_CALL50
MAX_LP_COMPOUND_USERS_PER_CALL50
MAX_SHAREHOLDER_COMPOUND_USERS_PER_CALL50
MAX_AUTOMAX_BONUS_BATCH200

ve checkpointing

ConstantValue
MAX_SLOPE_CHANGES_PER_CALL250

Pagination (MineCore)

ConstantValue
MAX_KING_REIGNS_PER_CALL100

Default slippage / safety bounds used by onchain automation:

ConstantValue
DEFAULT_AUTOCOMPOUND_MAX_SLIPPAGE_BPS500 (ShareholderRoyalties default when user config has 0)
DEFAULT_LP_AUTOCOMPOUND_MAX_SLIPPAGE_BPS300 (LpStakingVault7D default when user config has 0)
ShareholderRoyalties.MAX_AUTOCOMPOUND_SLIPPAGE_BPS2000 (hard cap on user-supplied maxSlippageBps in ShareholderRoyalties.setAutoCompoundConfig / setAutoCompoundConfigForUser; contract-local — lives in src/ShareholderRoyalties.sol, not Constants.sol)
LpStakingVault7D.setAutoCompoundConfig user cap1000 (hard-coded 10% cap on user-supplied maxSlippageBps; contract-local — src/vault/LpStakingVault7D.sol, not Constants.sol)
LpStakingVault7D.MIN_COMPOUND_INTERVAL1 day (per-address compound cooldown; gates both claimRewardsAndLock against lastUserLockTs[user] and compoundFor against lastCompoundTs[user]; contract-local — src/vault/LpStakingVault7D.sol, not Constants.sol. claimRewardsAndLock reverts LockCooldown(); compoundFor silently skips.)
HARVEST_MAX_SLIPPAGE_BPS100 (LP harvest WETH→CLAIM swap on-chain sanity floor)
CALLER_QUOTE_MIN_FLOOR_PCT90 (caller-supplied quote must be ≥ 90% of the on-chain floor; powers the CallerQuoteDivergence keeper validation)
FURNACE_LOCK_GAS_BUFFER200,000 gas
SWAP_DEADLINE_SECONDS300

See also