Skip to content Search Apps Documentation Source Content File Folder Download Copy Actions State String Boolean Number Struct Map Slice Pointer Function Closure Reference Nil Package Type Interface Unknown

types.gno

64.21 Kb · 1616 lines
   1package staker
   2
   3import (
   4	u256 "gno.land/p/gnoswap/uint256/v1"
   5	rotree "gno.land/p/nt/bptree/rotree/v0"
   6	bptree "gno.land/p/nt/bptree/v0"
   7)
   8
   9type IStaker interface {
  10	IStakerManager
  11	IStakerGetter
  12	Render(path string) string
  13}
  14
  15type IStakerManager interface {
  16	// StakeToken stakes an LP position NFT, transfers custody to the staker, and
  17	// starts internal GNS and eligible external reward accounting.
  18	//
  19	// Parameters:
  20	//   - _: Leading integer discriminator for implementation forwarding; proxy methods pass 0.
  21	//   - rlm: Current realm context forwarded unchanged by the staker proxy (0, cur, ...).
  22	//   - positionId: LP position NFT identifier whose liquidity will be staked.
  23	//   - referrer: Optional referral address or identifier supplied for referral tracking.
  24	//
  25	// Returns:
  26	//   - poolPath: Canonical token0:token1:fee path of the pool containing the staked position.
  27	//
  28	StakeToken(_ int, rlm realm, positionId uint64, referrer string) string
  29
  30	// UnStakeToken records the position's exit checkpoint, removes it from active
  31	// staking, and returns the NFT to its owner.
  32	//
  33	// Parameters:
  34	//   - _: Leading integer discriminator for implementation forwarding; proxy methods pass 0.
  35	//   - rlm: Current realm context forwarded unchanged by the staker proxy (0, cur, ...).
  36	//   - positionId: LP position NFT identifier to remove from staking.
  37	//
  38	// Returns:
  39	//   - poolPath: Canonical pool path from the position's active deposit.
  40	//
  41	UnStakeToken(_ int, rlm realm, positionId uint64) string
  42
  43	// CollectReward settles both GNS emission and all currently payable external
  44	// incentive rewards for a live deposit or an unstaked exit checkpoint.
  45	//
  46	// Parameters:
  47	//   - _: Leading integer discriminator for implementation forwarding; proxy methods pass 0.
  48	//   - rlm: Current realm context forwarded unchanged by the staker proxy (0, cur, ...).
  49	//   - positionId: LP position NFT identifier, or an identifier with an exit checkpoint.
  50	//
  51	// Returns:
  52	//   - internalRewardToUser: Decimal string for the GNS amount transferred to the position owner.
  53	//   - internalRewardPenalty: Decimal string for the GNS warm-up penalty sent to the community pool.
  54	//   - externalRewards: Map keyed by reward-token path containing gross external reward amounts before the staking fee.
  55	//   - externalPenalties: Map keyed by reward-token path containing warm-up penalties retained by each incentive.
  56	//
  57	CollectReward(_ int, rlm realm, positionId uint64) (string, string, map[string]int64, map[string]int64)
  58
  59	// CollectEmissionReward settles only the internal GNS emission for a live
  60	// deposit or an unstaked exit checkpoint.
  61	//
  62	// Parameters:
  63	//   - _: Leading integer discriminator for implementation forwarding; proxy methods pass 0.
  64	//   - rlm: Current realm context forwarded unchanged by the staker proxy (0, cur, ...).
  65	//   - positionId: LP position NFT identifier, or an identifier with an exit checkpoint.
  66	//
  67	// Returns:
  68	//   - rewardToUser: GNS amount transferred to the position owner.
  69	//   - rewardPenalty: GNS warm-up penalty transferred to the community pool.
  70	//
  71	CollectEmissionReward(_ int, rlm realm, positionId uint64) (int64, int64)
  72
  73	// CollectExternalIncentiveReward settles one external incentive for a live
  74	// deposit or an unstaked exit checkpoint.
  75	//
  76	// Parameters:
  77	//   - _: Leading integer discriminator for implementation forwarding; proxy methods pass 0.
  78	//   - rlm: Current realm context forwarded unchanged by the staker proxy (0, cur, ...).
  79	//   - positionId: LP position NFT identifier, or an identifier with an exit checkpoint.
  80	//   - incentiveId: External incentive identifier to settle for the position.
  81	//
  82	// Returns:
  83	//   - rewardAmount: Gross reward-token amount calculated for the incentive before the staking fee.
  84	//   - penaltyAmount: Warm-up penalty amount retained by the incentive rather than sent to the owner.
  85	//
  86	CollectExternalIncentiveReward(_ int, rlm realm, positionId uint64, incentiveId string) (int64, int64)
  87
  88	// SetPoolTier assigns an internal GNS-emission tier to an existing pool.
  89	//
  90	// Parameters:
  91	//   - _: Leading integer discriminator for implementation forwarding; proxy methods pass 0.
  92	//   - rlm: Current realm context forwarded unchanged by the staker proxy (0, cur, ...).
  93	//   - poolPath: Canonical pool path whose emission tier is being assigned.
  94	//   - tier: Pool tier index in [0, AllTierCount); zero removes the pool from the internal emission target.
  95	//
  96	SetPoolTier(_ int, rlm realm, poolPath string, tier uint64)
  97
  98	// ChangePoolTier changes the internal GNS-emission tier of an existing pool.
  99	//
 100	// Parameters:
 101	//   - _: Leading integer discriminator for implementation forwarding; proxy methods pass 0.
 102	//   - rlm: Current realm context forwarded unchanged by the staker proxy (0, cur, ...).
 103	//   - poolPath: Canonical pool path whose emission tier is being changed.
 104	//   - tier: Replacement pool tier index in [0, AllTierCount); zero removes the pool from the internal emission target.
 105	//
 106	ChangePoolTier(_ int, rlm realm, poolPath string, tier uint64)
 107
 108	// RemovePoolTier removes a pool from the internal GNS-emission tier system.
 109	//
 110	// Parameters:
 111	//   - _: Leading integer discriminator for implementation forwarding; proxy methods pass 0.
 112	//   - rlm: Current realm context forwarded unchanged by the staker proxy (0, cur, ...).
 113	//   - poolPath: Canonical pool path to remove from tier membership.
 114	//
 115	RemovePoolTier(_ int, rlm realm, poolPath string)
 116
 117	// CreateExternalIncentive funds and registers an external reward program for a
 118	// target pool over the requested Unix-time interval.
 119	//
 120	// Parameters:
 121	//   - _: Leading integer discriminator for implementation forwarding; proxy methods pass 0.
 122	//   - rlm: Current realm context forwarded unchanged by the staker proxy (0, cur, ...).
 123	//   - targetPoolPath: Canonical pool path whose positions may earn the incentive.
 124	//   - rewardToken: Registered token path used to pay the external reward.
 125	//   - rewardAmount: Total reward-token amount deposited for the incentive.
 126	//   - startTimestamp: Inclusive Unix-second timestamp at which rewards begin accruing.
 127	//   - endTimestamp: Unix-second timestamp at which the reward interval ends.
 128	//
 129	CreateExternalIncentive(
 130		_ int,
 131		rlm realm,
 132		targetPoolPath string,
 133		rewardToken string,
 134		rewardAmount int64,
 135		startTimestamp int64,
 136		endTimestamp int64,
 137	)
 138
 139	// EndExternalIncentive finalizes an ended external incentive and refunds its
 140	// remaining reward tokens and deposited GNS to the requested address.
 141	//
 142	// Parameters:
 143	//   - _: Leading integer discriminator for implementation forwarding; proxy methods pass 0.
 144	//   - rlm: Current realm context forwarded unchanged by the staker proxy (0, cur, ...).
 145	//   - targetPoolPath: Canonical pool path containing the incentive.
 146	//   - incentiveId: Unique external incentive identifier to finalize.
 147	//   - refundAddress: Address receiving refundable reward tokens and the GNS deposit.
 148	//
 149	EndExternalIncentive(_ int, rlm realm, targetPoolPath, incentiveId string, refundAddress address)
 150
 151	// CancelExternalIncentive removes an external incentive before it starts and
 152	// refunds the available funded amounts to its creator.
 153	//
 154	// Parameters:
 155	//   - _: Leading integer discriminator for implementation forwarding; proxy methods pass 0.
 156	//   - rlm: Current realm context forwarded unchanged by the staker proxy (0, cur, ...).
 157	//   - targetPoolPath: Canonical pool path containing the incentive.
 158	//   - incentiveId: Unique external incentive identifier to cancel.
 159	//
 160	CancelExternalIncentive(_ int, rlm realm, targetPoolPath, incentiveId string)
 161
 162	// CollectExternalIncentivePenalty transfers accumulated warm-up penalties
 163	// from an ended external incentive to the requested address.
 164	//
 165	// Parameters:
 166	//   - _: Leading integer discriminator for implementation forwarding; proxy methods pass 0.
 167	//   - rlm: Current realm context forwarded unchanged by the staker proxy (0, cur, ...).
 168	//   - targetPoolPath: Canonical pool path containing the incentive.
 169	//   - incentiveId: Ended external incentive identifier whose penalties are collected.
 170	//   - refundAddress: Address receiving the collected reward-token penalty.
 171	//
 172	// Returns:
 173	//   - penaltyAmount: Amount actually transferred, capped by the staker's available balance and zero when no penalty is accrued.
 174	//
 175	CollectExternalIncentivePenalty(_ int, rlm realm, targetPoolPath, incentiveId string, refundAddress address) int64
 176
 177	// AddToken adds a registered non-default token path to the external-incentive allowlist.
 178	//
 179	// Parameters:
 180	//   - _: Leading integer discriminator for implementation forwarding; proxy methods pass 0.
 181	//   - rlm: Current realm context forwarded unchanged by the staker proxy (0, cur, ...).
 182	//   - tokenPath: Registered token contract path to allow for new external incentives.
 183	//
 184	AddToken(_ int, rlm realm, tokenPath string)
 185
 186	// RemoveToken removes a non-default token path from the external-incentive allowlist.
 187	//
 188	// Parameters:
 189	//   - _: Leading integer discriminator for implementation forwarding; proxy methods pass 0.
 190	//   - rlm: Current realm context forwarded unchanged by the staker proxy (0, cur, ...).
 191	//   - tokenPath: Allowed token contract path to remove from future incentive creation.
 192	//
 193	RemoveToken(_ int, rlm realm, tokenPath string)
 194
 195	// SetDeniedRewardToken sets or clears the operational deny flag for a reward token.
 196	// The flag prevents new incentives while leaving already-created incentives collectible.
 197	//
 198	// Parameters:
 199	//   - _: Leading integer discriminator for implementation forwarding; proxy methods pass 0.
 200	//   - rlm: Current realm context forwarded unchanged by the staker proxy (0, cur, ...).
 201	//   - tokenPath: Reward-token contract path whose deny flag is being changed.
 202	//   - denied: true to deny new incentives for the token, or false to remove the denial.
 203	//
 204	SetDeniedRewardToken(_ int, rlm realm, tokenPath string, denied bool)
 205
 206	// SetWarmUp changes the duration associated with one of the fixed warm-up ratios.
 207	//
 208	// Parameters:
 209	//   - _: Leading integer discriminator for implementation forwarding; proxy methods pass 0.
 210	//   - rlm: Current realm context forwarded unchanged by the staker proxy (0, cur, ...).
 211	//   - pct: Warm-up completion ratio selector; supported values are 30, 50, 70, and 100.
 212	//   - timeDuration: Warm-up duration in seconds for the selected ratio; finite tiers are bounded by 365 days.
 213	//
 214	SetWarmUp(_ int, rlm realm, pct, timeDuration int64)
 215
 216	// SetDepositGnsAmount updates the GNS deposit required when creating an external incentive.
 217	//
 218	// Parameters:
 219	//   - _: Leading integer discriminator for implementation forwarding; proxy methods pass 0.
 220	//   - rlm: Current realm context forwarded unchanged by the staker proxy (0, cur, ...).
 221	//   - amount: Nonnegative GNS amount required as each external-incentive deposit.
 222	//
 223	SetDepositGnsAmount(_ int, rlm realm, amount int64)
 224
 225	// SetMinimumRewardAmount updates the default minimum reward amount for external incentives.
 226	//
 227	// Parameters:
 228	//   - _: Leading integer discriminator for implementation forwarding; proxy methods pass 0.
 229	//   - rlm: Current realm context forwarded unchanged by the staker proxy (0, cur, ...).
 230	//   - amount: Nonnegative reward-token amount used when no token-specific minimum exists.
 231	//
 232	SetMinimumRewardAmount(_ int, rlm realm, amount int64)
 233
 234	// SetTokenMinimumRewardAmount sets or removes a token-specific external-incentive minimum.
 235	//
 236	// Parameters:
 237	//   - _: Leading integer discriminator for implementation forwarding; proxy methods pass 0.
 238	//   - rlm: Current realm context forwarded unchanged by the staker proxy (0, cur, ...).
 239	//   - paramsStr: Colon-delimited tokenPath:amount string; amount 0 removes that token's override.
 240	//
 241	SetTokenMinimumRewardAmount(_ int, rlm realm, paramsStr string)
 242
 243	// SetUnStakingFee updates the fee charged against collected staking rewards.
 244	//
 245	// Parameters:
 246	//   - _: Leading integer discriminator for implementation forwarding; proxy methods pass 0.
 247	//   - rlm: Current realm context forwarded unchanged by the staker proxy (0, cur, ...).
 248	//   - fee: Unstaking fee rate in basis points, where 10,000 basis points represents 100%.
 249	//
 250	SetUnStakingFee(_ int, rlm realm, fee uint64)
 251}
 252
 253type IStakerGetter interface {
 254	// GetPool returns the registered pool for a canonical pool path.
 255	//
 256	// Parameters:
 257	//   - poolPath: Canonical token0:token1:fee path identifying the pool.
 258	//
 259	// Returns:
 260	//   - pool: Pointer to the registered pool; nil when lookup fails.
 261	//   - err: Nil on success, or an error when the pool is absent or cannot be decoded.
 262	//
 263	GetPool(poolPath string) (*Pool, error)
 264
 265	// GetPoolRewardCaches exposes a read-only tree of a pool's reward-cache snapshots,
 266	// keyed by encoded block timestamps.
 267	//
 268	// Parameters:
 269	//   - poolPath: Canonical pool path whose reward cache is requested.
 270	//
 271	// Returns:
 272	//   - rewardCaches: Read-only reward-cache tree, or nil when the pool does not exist.
 273	//
 274	GetPoolRewardCaches(poolPath string) *rotree.ReadOnlyTree
 275
 276	// GetPoolIncentives exposes a read-only tree of a pool's external incentives,
 277	// keyed by incentive identifier.
 278	//
 279	// Parameters:
 280	//   - poolPath: Canonical pool path whose incentives are requested.
 281	//
 282	// Returns:
 283	//   - incentives: Read-only external-incentive tree, or nil when the pool does not exist.
 284	//
 285	GetPoolIncentives(poolPath string) *rotree.ReadOnlyTree
 286
 287	// GetPoolGlobalRewardRatioAccumulations exposes a read-only tree of global
 288	// reward-ratio snapshots keyed by encoded block timestamps.
 289	//
 290	// Parameters:
 291	//   - poolPath: Canonical pool path whose global accumulations are requested.
 292	//
 293	// Returns:
 294	//   - accumulations: Read-only global reward-ratio tree, or nil when the pool does not exist.
 295	//
 296	GetPoolGlobalRewardRatioAccumulations(poolPath string) *rotree.ReadOnlyTree
 297
 298	// GetPoolHistoricalTicks exposes a read-only tree of historical pool ticks
 299	// keyed by encoded block timestamps.
 300	//
 301	// Parameters:
 302	//   - poolPath: Canonical pool path whose historical ticks are requested.
 303	//
 304	// Returns:
 305	//   - historicalTicks: Read-only historical-tick tree, or nil when the pool does not exist.
 306	//
 307	GetPoolHistoricalTicks(poolPath string) *rotree.ReadOnlyTree
 308
 309	// GetDeposit returns the staker deposit associated with an LP position NFT.
 310	//
 311	// Parameters:
 312	//   - lpTokenId: LP position NFT identifier used as the deposit key.
 313	//
 314	// Returns:
 315	//   - deposit: Stored deposit for the position; nil when lookup fails.
 316	//   - err: Nil on success, or an error when no deposit exists for the identifier.
 317	//
 318	GetDeposit(lpTokenId uint64) (*Deposit, error)
 319
 320	// CollectableEmissionReward calculates the currently claimable internal GNS
 321	// emission without mutating the position.
 322	//
 323	// Parameters:
 324	//   - positionId: LP position identifier for a live deposit or exit checkpoint.
 325	//
 326	// Returns:
 327	//   - reward: Claimable internal GNS amount at the current chain time and height.
 328	//   - err: Nil on success, or an error when the position is neither staked nor checkpointed or calculation fails.
 329	//
 330	CollectableEmissionReward(positionId uint64) (int64, error)
 331
 332	// CollectableExternalIncentiveReward calculates the currently claimable amount
 333	// for one external incentive without mutating the position.
 334	//
 335	// Parameters:
 336	//   - positionId: LP position identifier for a live deposit or exit checkpoint.
 337	//   - incentiveId: External incentive identifier whose reward is queried.
 338	//
 339	// Returns:
 340	//   - reward: Claimable gross reward-token amount, or zero when that incentive contributes no reward.
 341	//   - err: Nil on success, or an error when the position or reward calculation is invalid.
 342	//
 343	CollectableExternalIncentiveReward(positionId uint64, incentiveId string) (int64, error)
 344
 345	// GetCreatedHeightOfIncentive returns the chain height recorded when an incentive was created.
 346	//
 347	// Parameters:
 348	//   - poolPath: Pool path containing the incentive.
 349	//   - incentiveId: External incentive identifier to inspect.
 350	//
 351	// Returns:
 352	//   - createdHeight: Chain height persisted at incentive creation.
 353	//   - err: Nil on success, or an error when the pool or incentive does not exist.
 354	//
 355	GetCreatedHeightOfIncentive(poolPath string, incentiveId string) (int64, error)
 356
 357	// GetIncentiveCreatedTimestamp returns the Unix-second creation time of an incentive.
 358	//
 359	// Parameters:
 360	//   - poolPath: Pool path containing the incentive.
 361	//   - incentiveId: External incentive identifier to inspect.
 362	//
 363	// Returns:
 364	//   - createdTimestamp: Unix-second timestamp recorded at creation.
 365	//   - err: Nil on success, or an error when the pool or incentive does not exist.
 366	//
 367	GetIncentiveCreatedTimestamp(poolPath string, incentiveId string) (int64, error)
 368
 369	// GetIncentiveTotalRewardAmount returns the amount originally funded for an incentive.
 370	//
 371	// Parameters:
 372	//   - poolPath: Pool path containing the incentive.
 373	//   - incentiveId: External incentive identifier to inspect.
 374	//
 375	// Returns:
 376	//   - totalRewardAmount: Original reward-token amount funded at creation.
 377	//   - err: Nil on success, or an error when the pool or incentive does not exist.
 378	//
 379	GetIncentiveTotalRewardAmount(poolPath string, incentiveId string) (int64, error)
 380
 381	// GetIncentiveDistributedRewardAmount returns the reward amount already
 382	// distributed to positions or refunded when the incentive ended.
 383	//
 384	// Parameters:
 385	//   - poolPath: Pool path containing the incentive.
 386	//   - incentiveId: External incentive identifier to inspect.
 387	//
 388	// Returns:
 389	//   - distributedRewardAmount: Cumulative distributed or refunded reward-token amount.
 390	//   - err: Nil on success, or an error when the pool or incentive does not exist.
 391	//
 392	GetIncentiveDistributedRewardAmount(poolPath string, incentiveId string) (int64, error)
 393
 394	// GetIncentiveRemainingRewardAmount returns the current undistributed reward balance.
 395	//
 396	// Parameters:
 397	//   - poolPath: Pool path containing the incentive.
 398	//   - incentiveId: External incentive identifier to inspect.
 399	//
 400	// Returns:
 401	//   - remainingRewardAmount: Reward-token amount still held for future distribution or refund.
 402	//   - err: Nil on success, or an error when the pool or incentive does not exist.
 403	//
 404	GetIncentiveRemainingRewardAmount(poolPath string, incentiveId string) (int64, error)
 405
 406	// GetIncentiveAccumulatedPenaltyAmount returns warm-up penalties accumulated
 407	// from collections for an incentive.
 408	//
 409	// Parameters:
 410	//   - poolPath: Pool path containing the incentive.
 411	//   - incentiveId: External incentive identifier to inspect.
 412	//
 413	// Returns:
 414	//   - penaltyAmount: Reward-token penalty amount accumulated for later collection.
 415	//   - err: Nil on success, or an error when the pool or incentive does not exist.
 416	//
 417	GetIncentiveAccumulatedPenaltyAmount(poolPath string, incentiveId string) (int64, error)
 418
 419	// GetIncentiveDepositGnsAmount returns the GNS deposit locked by an incentive.
 420	//
 421	// Parameters:
 422	//   - poolPath: Pool path containing the incentive.
 423	//   - incentiveId: External incentive identifier to inspect.
 424	//
 425	// Returns:
 426	//   - depositGnsAmount: GNS amount deposited as the incentive's collateral.
 427	//   - err: Nil on success, or an error when the pool or incentive does not exist.
 428	//
 429	GetIncentiveDepositGnsAmount(poolPath string, incentiveId string) (int64, error)
 430
 431	// GetIncentiveRefunded reports whether the incentive has been finalized and refunded.
 432	//
 433	// Parameters:
 434	//   - poolPath: Pool path containing the incentive.
 435	//   - incentiveId: External incentive identifier to inspect.
 436	//
 437	// Returns:
 438	//   - refunded: True after EndExternalIncentive has marked the incentive refunded; false otherwise.
 439	//   - err: Nil on success, or an error when the pool or incentive does not exist.
 440	//
 441	GetIncentiveRefunded(poolPath string, incentiveId string) (bool, error)
 442
 443	// IsIncentiveActive reports whether an unrefunded incentive is within its
 444	// inclusive start/end Unix-second interval at the current time.
 445	//
 446	// Parameters:
 447	//   - poolPath: Pool path containing the incentive.
 448	//   - incentiveId: External incentive identifier to inspect.
 449	//
 450	// Returns:
 451	//   - active: True only when the current time is between the incentive bounds and it is not refunded.
 452	//   - err: Nil on success, or an error when the pool or incentive does not exist.
 453	//
 454	IsIncentiveActive(poolPath string, incentiveId string) (bool, error)
 455
 456	// GetDepositExternalRewardLastCollectTimestamp returns the last collection
 457	// timestamp for one deposit/incentive pair.
 458	//
 459	// Parameters:
 460	//   - lpTokenId: LP position NFT identifier owning the external reward cursor.
 461	//   - incentiveId: External incentive identifier whose cursor is requested.
 462	//
 463	// Returns:
 464	//   - timestamp: Unix-second cursor, falling back to stake time when the incentive has never been collected.
 465	//   - err: Nil on success, or an error when the deposit does not exist.
 466	//
 467	GetDepositExternalRewardLastCollectTimestamp(lpTokenId uint64, incentiveId string) (int64, error)
 468
 469	// GetDepositGnsAmount returns the configured GNS deposit required per external incentive.
 470	//
 471	// Returns:
 472	//   - amount: Current required GNS deposit in token units.
 473	//
 474	GetDepositGnsAmount() int64
 475
 476	// GetDepositInternalRewardLastCollectTimestamp returns the stored internal
 477	// reward collection cursor for a deposit.
 478	//
 479	// Parameters:
 480	//   - lpTokenId: LP position NFT identifier owning the internal reward cursor.
 481	//
 482	// Returns:
 483	//   - timestamp: Unix-second cursor, which is zero before the first internal collection.
 484	//   - err: Nil on success, or an error when the deposit does not exist.
 485	//
 486	GetDepositInternalRewardLastCollectTimestamp(lpTokenId uint64) (int64, error)
 487
 488	// GetDepositCollectedInternalReward returns cumulative internal reward recorded for a deposit.
 489	//
 490	// Parameters:
 491	//   - lpTokenId: LP position NFT identifier whose collection total is requested.
 492	//
 493	// Returns:
 494	//   - amount: Cumulative GNS amount recorded as collected for the deposit.
 495	//   - err: Nil on success, or an error when the deposit does not exist.
 496	//
 497	GetDepositCollectedInternalReward(lpTokenId uint64) (int64, error)
 498
 499	// GetDepositCollectedExternalReward returns the cumulative amount recorded
 500	// for one deposit/incentive pair.
 501	//
 502	// Parameters:
 503	//   - lpTokenId: LP position NFT identifier whose collection total is requested.
 504	//   - incentiveId: External incentive identifier for the collection total.
 505	//
 506	// Returns:
 507	//   - amount: Cumulative gross reward-token amount recorded for that incentive.
 508	//   - err: Nil on success, or an error when the deposit does not exist.
 509	//
 510	GetDepositCollectedExternalReward(lpTokenId uint64, incentiveId string) (int64, error)
 511
 512	// GetDepositLiquidity returns the full-precision liquidity assigned to a deposit.
 513	//
 514	// Parameters:
 515	//   - lpTokenId: LP position NFT identifier whose liquidity is requested.
 516	//
 517	// Returns:
 518	//   - liquidity: 256-bit liquidity value stored in the deposit.
 519	//   - err: Nil on success, or an error when the deposit does not exist.
 520	//
 521	GetDepositLiquidity(lpTokenId uint64) (*u256.Uint, error)
 522
 523	// GetDepositLiquidityAsString returns the decimal string form of a deposit's liquidity.
 524	//
 525	// Parameters:
 526	//   - lpTokenId: LP position NFT identifier whose liquidity is requested.
 527	//
 528	// Returns:
 529	//   - liquidity: Decimal representation of the stored 256-bit liquidity.
 530	//   - err: Nil on success, or an error when the deposit does not exist.
 531	//
 532	GetDepositLiquidityAsString(lpTokenId uint64) (string, error)
 533
 534	// GetDepositOwner returns the address recorded as owner of a deposit.
 535	//
 536	// Parameters:
 537	//   - lpTokenId: LP position NFT identifier whose owner is requested.
 538	//
 539	// Returns:
 540	//   - owner: Address recorded when the position was staked.
 541	//   - err: Nil on success, or an error when the deposit does not exist.
 542	//
 543	GetDepositOwner(lpTokenId uint64) (address, error)
 544
 545	// GetDepositStakeTime returns the Unix-second timestamp when a position was staked.
 546	//
 547	// Parameters:
 548	//   - lpTokenId: LP position NFT identifier whose stake time is requested.
 549	//
 550	// Returns:
 551	//   - stakeTime: Unix-second timestamp stored in the deposit.
 552	//   - err: Nil on success, or an error when the deposit does not exist.
 553	//
 554	GetDepositStakeTime(lpTokenId uint64) (int64, error)
 555
 556	// GetDepositTargetPoolPath returns the pool path recorded for a deposit.
 557	//
 558	// Parameters:
 559	//   - lpTokenId: LP position NFT identifier whose target pool is requested.
 560	//
 561	// Returns:
 562	//   - poolPath: Canonical target pool path recorded in the deposit.
 563	//   - err: Nil on success, or an error when the deposit does not exist.
 564	//
 565	GetDepositTargetPoolPath(lpTokenId uint64) (string, error)
 566
 567	// GetDepositTickLower returns the lower concentrated-liquidity tick of a deposit.
 568	//
 569	// Parameters:
 570	//   - lpTokenId: LP position NFT identifier whose lower tick is requested.
 571	//
 572	// Returns:
 573	//   - tickLower: Signed lower tick stored in the deposit.
 574	//   - err: Nil on success, or an error when the deposit does not exist.
 575	//
 576	GetDepositTickLower(lpTokenId uint64) (int32, error)
 577
 578	// GetDepositTickUpper returns the upper concentrated-liquidity tick of a deposit.
 579	//
 580	// Parameters:
 581	//   - lpTokenId: LP position NFT identifier whose upper tick is requested.
 582	//
 583	// Returns:
 584	//   - tickUpper: Signed upper tick stored in the deposit.
 585	//   - err: Nil on success, or an error when the deposit does not exist.
 586	//
 587	GetDepositTickUpper(lpTokenId uint64) (int32, error)
 588
 589	// GetDepositWarmUp returns the warm-up records currently attached to a deposit.
 590	//
 591	// Parameters:
 592	//   - lpTokenId: LP position NFT identifier whose warm-up records are requested.
 593	//
 594	// Returns:
 595	//   - warmups: Warm-up schedule entries stored for the deposit.
 596	//   - err: Nil on success, or an error when the deposit does not exist.
 597	//
 598	GetDepositWarmUp(lpTokenId uint64) ([]Warmup, error)
 599
 600	// GetDepositExternalIncentiveIdList returns external incentive identifiers
 601	// currently tracked by a deposit.
 602	//
 603	// Parameters:
 604	//   - lpTokenId: LP position NFT identifier whose incentive index is requested.
 605	//
 606	// Returns:
 607	//   - incentiveIds: External incentive IDs attached to the deposit.
 608	//   - err: Nil on success, or an error when the deposit does not exist.
 609	//
 610	GetDepositExternalIncentiveIdList(lpTokenId uint64) ([]string, error)
 611
 612	// GetExternalIncentiveByPoolPath returns all stored external incentives targeting a pool.
 613	//
 614	// Parameters:
 615	//   - poolPath: Canonical pool path used to filter incentive records.
 616	//
 617	// Returns:
 618	//   - incentives: Matching external incentive records, possibly an empty slice.
 619	//   - err: Nil on success, or an error when a stored record has an invalid type.
 620	//
 621	GetExternalIncentiveByPoolPath(poolPath string) ([]ExternalIncentive, error)
 622
 623	// GetIncentiveEndTimestamp returns the Unix-second end time of an incentive.
 624	//
 625	// Parameters:
 626	//   - poolPath: Pool path containing the incentive.
 627	//   - incentiveId: External incentive identifier to inspect.
 628	//
 629	// Returns:
 630	//   - endTimestamp: Inclusive Unix-second end bound recorded for the incentive.
 631	//   - err: Nil on success, or an error when the pool or incentive does not exist.
 632	//
 633	GetIncentiveEndTimestamp(poolPath string, incentiveId string) (int64, error)
 634
 635	// GetIncentiveCreator returns the address that created and funded an incentive.
 636	//
 637	// Parameters:
 638	//   - poolPath: Pool path containing the incentive.
 639	//   - incentiveId: External incentive identifier to inspect.
 640	//
 641	// Returns:
 642	//   - creator: Address recorded as the incentive creator.
 643	//   - err: Nil on success, or an error when the pool or incentive does not exist.
 644	//
 645	GetIncentiveCreator(poolPath string, incentiveId string) (address, error)
 646
 647	// GetIncentiveRewardAmount returns the remaining reward amount as a 256-bit unsigned value.
 648	//
 649	// Parameters:
 650	//   - poolPath: Pool path containing the incentive.
 651	//   - incentiveId: External incentive identifier to inspect.
 652	//
 653	// Returns:
 654	//   - rewardAmount: Remaining reward-token amount represented as a uint256 value.
 655	//   - err: Nil on success, or an error when the pool or incentive does not exist.
 656	//
 657	GetIncentiveRewardAmount(poolPath string, incentiveId string) (*u256.Uint, error)
 658
 659	// GetIncentiveRewardAmountAsString returns the decimal string form of the remaining reward.
 660	//
 661	// Parameters:
 662	//   - poolPath: Pool path containing the incentive.
 663	//   - incentiveId: External incentive identifier to inspect.
 664	//
 665	// Returns:
 666	//   - rewardAmount: Decimal representation of the remaining reward-token amount.
 667	//   - err: Nil on success, or an error when the pool or incentive does not exist.
 668	//
 669	GetIncentiveRewardAmountAsString(poolPath string, incentiveId string) (string, error)
 670
 671	// GetIncentiveRewardPerSecondX128 returns the Q128-scaled reward rate of an incentive.
 672	//
 673	// Parameters:
 674	//   - poolPath: Pool path containing the incentive.
 675	//   - incentiveId: External incentive identifier to inspect.
 676	//
 677	// Returns:
 678	//   - rewardPerSecondX128: Reward-per-second rate scaled by 2^128 to preserve precision.
 679	//   - err: Nil on success, or an error when the pool or incentive does not exist.
 680	//
 681	GetIncentiveRewardPerSecondX128(poolPath string, incentiveId string) (*u256.Uint, error)
 682
 683	// GetIncentiveRewardToken returns the token path used to pay an incentive.
 684	//
 685	// Parameters:
 686	//   - poolPath: Pool path containing the incentive.
 687	//   - incentiveId: External incentive identifier to inspect.
 688	//
 689	// Returns:
 690	//   - rewardToken: Registered reward-token contract path.
 691	//   - err: Nil on success, or an error when the pool or incentive does not exist.
 692	//
 693	GetIncentiveRewardToken(poolPath string, incentiveId string) (string, error)
 694
 695	// GetIncentiveStartTimestamp returns the Unix-second start time of an incentive.
 696	//
 697	// Parameters:
 698	//   - poolPath: Pool path containing the incentive.
 699	//   - incentiveId: External incentive identifier to inspect.
 700	//
 701	// Returns:
 702	//   - startTimestamp: Inclusive Unix-second start bound recorded for the incentive.
 703	//   - err: Nil on success, or an error when the pool or incentive does not exist.
 704	//
 705	GetIncentiveStartTimestamp(poolPath string, incentiveId string) (int64, error)
 706
 707	// GetMinimumRewardAmount returns the default minimum reward amount for external incentives.
 708	//
 709	// Returns:
 710	//   - amount: Default minimum reward-token amount used when no token-specific override exists.
 711	//
 712	GetMinimumRewardAmount() int64
 713
 714	// GetMinimumRewardAmountForToken returns a token-specific minimum, falling
 715	// back to the default minimum when no override is configured.
 716	//
 717	// Parameters:
 718	//   - tokenPath: Reward-token contract path whose minimum is requested.
 719	//
 720	// Returns:
 721	//   - amount: Token-specific minimum when configured, otherwise the default minimum.
 722	//
 723	GetMinimumRewardAmountForToken(tokenPath string) int64
 724
 725	// GetPoolStakedLiquidity returns the current total staked liquidity as a decimal string.
 726	//
 727	// Parameters:
 728	//   - poolPath: Canonical pool path whose active staked liquidity is requested.
 729	//
 730	// Returns:
 731	//   - liquidity: Decimal string for current staked liquidity, or zero when the pool has no value.
 732	//   - err: Nil on success, or an error when the pool does not exist.
 733	//
 734	GetPoolStakedLiquidity(poolPath string) (string, error)
 735
 736	// GetPoolsByTier lists pool paths currently assigned to an internal emission tier.
 737	//
 738	// Parameters:
 739	//   - tier: Tier number used to filter pool membership; tier zero returns an empty list.
 740	//
 741	// Returns:
 742	//   - poolPaths: Pool paths assigned to the requested tier.
 743	//   - err: Nil on success, or an error when stored tier membership cannot be decoded.
 744	//
 745	GetPoolsByTier(tier uint64) ([]string, error)
 746
 747	// GetPoolReward returns the current per-second GNS reward for a tier.
 748	//
 749	// Parameters:
 750	//   - tier: Supported nonzero tier whose reward rate is requested.
 751	//
 752	// Returns:
 753	//   - reward: Current tier reward amount per second.
 754	//   - err: Nil on success, or an invalid-tier error for zero or unsupported tiers.
 755	//
 756	GetPoolReward(tier uint64) (int64, error)
 757
 758	// GetPoolTier returns the internal emission tier currently assigned to a pool.
 759	//
 760	// Parameters:
 761	//   - poolPath: Canonical pool path whose tier is requested.
 762	//
 763	// Returns:
 764	//   - tier: Assigned tier number; zero denotes no internal emission tier.
 765	//
 766	GetPoolTier(poolPath string) uint64
 767
 768	// GetPoolTierCount returns the number of pools assigned to a tier.
 769	//
 770	// Parameters:
 771	//   - tier: Tier number whose membership count is requested; tier zero has count zero.
 772	//
 773	// Returns:
 774	//   - count: Current number of pools in the requested tier.
 775	//
 776	GetPoolTierCount(tier uint64) uint64
 777
 778	// GetPoolTierRatio returns the reward ratio configured for a pool's current tier.
 779	//
 780	// Parameters:
 781	//   - poolPath: Canonical pool path whose current tier ratio is requested.
 782	//
 783	// Returns:
 784	//   - ratio: Current reward ratio for the pool's assigned tier.
 785	//   - err: Nil on success, or an invalid-tier error when the tier has no ratio.
 786	//
 787	GetPoolTierRatio(poolPath string) (uint64, error)
 788
 789	// GetSpecificTokenMinimumRewardAmount looks up only an explicitly configured
 790	// token-specific minimum and does not apply the default fallback.
 791	//
 792	// Parameters:
 793	//   - tokenPath: Reward-token contract path whose override is requested.
 794	//
 795	// Returns:
 796	//   - amount: Configured token-specific minimum, or zero when absent.
 797	//   - found: True when an explicit override exists; false when the default should be used.
 798	//
 799	GetSpecificTokenMinimumRewardAmount(tokenPath string) (int64, bool)
 800
 801	// GetTargetPoolPathByIncentiveId returns the pool path targeted by an incentive.
 802	//
 803	// Parameters:
 804	//   - poolPath: Pool path containing the incentive record.
 805	//   - incentiveId: External incentive identifier to inspect.
 806	//
 807	// Returns:
 808	//   - targetPoolPath: Pool path recorded as the incentive target.
 809	//   - err: Nil on success, or an error when the pool or incentive does not exist.
 810	//
 811	GetTargetPoolPathByIncentiveId(poolPath string, incentiveId string) (string, error)
 812
 813	// GetUnstakingFee returns the current reward fee rate in basis points.
 814	//
 815	// Returns:
 816	//   - fee: Current unstaking fee, where 10,000 basis points represents 100%.
 817	//
 818	GetUnstakingFee() uint64
 819
 820	// GetPendingProtocolFees returns pending protocol-fee amounts keyed by token path.
 821	//
 822	// Returns:
 823	//   - fees: Map from reward-token path to amount awaiting protocol-fee settlement.
 824	//
 825	GetPendingProtocolFees() map[string]int64
 826
 827	// HasUnstakedPosition reports whether an exit checkpoint with uncollected
 828	// rewards exists for a position.
 829	//
 830	// Parameters:
 831	//   - positionId: LP position identifier whose exit checkpoint is queried.
 832	//
 833	// Returns:
 834	//   - exists: True when an uncollected exit checkpoint is present.
 835	//
 836	HasUnstakedPosition(positionId uint64) bool
 837
 838	// GetUnstakedPositionExitTime returns when an exit checkpoint stopped accruing rewards.
 839	//
 840	// Parameters:
 841	//   - positionId: LP position identifier whose checkpoint is requested.
 842	//
 843	// Returns:
 844	//   - exitTime: Unix-second timestamp at which the position was unstaked.
 845	//   - err: Nil on success, or an error when no uncollected checkpoint exists.
 846	//
 847	GetUnstakedPositionExitTime(positionId uint64) (int64, error)
 848
 849	// GetUnstakedPositionPendingIncentives returns external incentive IDs still
 850	// owed by an exit checkpoint.
 851	//
 852	// Parameters:
 853	//   - positionId: LP position identifier whose checkpoint is requested.
 854	//
 855	// Returns:
 856	//   - incentiveIds: External incentive IDs pending collection for the checkpoint.
 857	//   - err: Nil on success, or an error when no uncollected checkpoint exists.
 858	//
 859	GetUnstakedPositionPendingIncentives(positionId uint64) ([]string, error)
 860
 861	// GetUncollectedIncentiveCount returns the number of exit checkpoints still
 862	// carrying an uncollected claim for an incentive.
 863	//
 864	// Parameters:
 865	//   - incentiveId: External incentive identifier whose checkpoint count is requested.
 866	//
 867	// Returns:
 868	//   - count: Number of uncollected exit-position claims for the incentive.
 869	//
 870	GetUncollectedIncentiveCount(incentiveId string) int64
 871
 872	// IsStaked reports whether a live deposit exists for a position.
 873	//
 874	// Parameters:
 875	//   - positionId: LP position identifier to query.
 876	//
 877	// Returns:
 878	//   - staked: True when the position is present in active deposits.
 879	//
 880	IsStaked(positionId uint64) bool
 881
 882	// GetTotalEmissionSent returns cumulative GNS emission sent or accounted for.
 883	//
 884	// Returns:
 885	//   - amount: Cumulative internal GNS emission amount recorded by the staker.
 886	//
 887	GetTotalEmissionSent() int64
 888
 889	// GetAllowedTokens returns token paths approved for new external incentives.
 890	//
 891	// Returns:
 892	//   - tokenPaths: Registered external-incentive token paths currently allowed.
 893	//
 894	GetAllowedTokens() []string
 895
 896	// GetDeniedRewardTokens returns token paths denied for new external incentives.
 897	//
 898	// Returns:
 899	//   - tokenPaths: Reward-token paths on the operational deny list.
 900	//
 901	GetDeniedRewardTokens() []string
 902
 903	// GetWarmupTemplate returns the current warm-up schedule used for new deposits.
 904	//
 905	// Returns:
 906	//   - warmups: Ordered warm-up entries defining reward-release ratios and durations.
 907	//
 908	GetWarmupTemplate() []Warmup
 909}
 910
 911type IStakerStore interface {
 912	// HasDepositGnsAmountStoreKey reports whether the configured GNS-deposit key exists.
 913	//
 914	// Returns:
 915	//   - exists: True when the depositGnsAmount key is present in persistent storage.
 916	//
 917	HasDepositGnsAmountStoreKey() bool
 918
 919	// GetDepositGnsAmount returns the stored GNS deposit required per external incentive.
 920	//
 921	// Returns:
 922	//   - amount: Persisted GNS amount in token units; storage read or type failures panic.
 923	//
 924	GetDepositGnsAmount() int64
 925
 926	// SetDepositGnsAmount persists the GNS deposit required per external incentive.
 927	//
 928	// Parameters:
 929	//   - _: Leading integer discriminator for internal store forwarding; callers pass 0.
 930	//   - rlm: Propagated current realm context; a non-current realm is rejected before writing.
 931	//   - amount: GNS amount in token units to persist.
 932	//
 933	// Returns:
 934	//   - err: Nil when stored, ErrSpoofedRealm for a non-current realm, or the underlying KV-store write error.
 935	//
 936	SetDepositGnsAmount(_ int, rlm realm, amount int64) error
 937
 938	// HasMinimumRewardAmountStoreKey reports whether the default minimum-reward key exists.
 939	//
 940	// Returns:
 941	//   - exists: True when the minimumRewardAmount key is present in persistent storage.
 942	//
 943	HasMinimumRewardAmountStoreKey() bool
 944
 945	// GetMinimumRewardAmount returns the default minimum external-incentive reward.
 946	//
 947	// Returns:
 948	//   - amount: Persisted default reward-token minimum; storage read or type failures panic.
 949	//
 950	GetMinimumRewardAmount() int64
 951
 952	// SetMinimumRewardAmount persists the default minimum external-incentive reward.
 953	//
 954	// Parameters:
 955	//   - _: Leading integer discriminator for internal store forwarding; callers pass 0.
 956	//   - rlm: Propagated current realm context; a non-current realm is rejected before writing.
 957	//   - amount: Default minimum reward-token amount in token units.
 958	//
 959	// Returns:
 960	//   - err: Nil when stored, ErrSpoofedRealm for a non-current realm, or the underlying KV-store write error.
 961	//
 962	SetMinimumRewardAmount(_ int, rlm realm, amount int64) error
 963
 964	// HasDepositsStoreKey reports whether the active-deposits tree key exists.
 965	//
 966	// Returns:
 967	//   - exists: True when the deposits key is present in persistent storage.
 968	//
 969	HasDepositsStoreKey() bool
 970
 971	// GetDeposits returns the persisted active position-deposit tree.
 972	//
 973	// Returns:
 974	//   - deposits: B+tree mapping LP position IDs to deposits; storage read or type failures panic.
 975	//
 976	GetDeposits() *bptree.BPTree
 977
 978	// SetDeposits persists the active position-deposit tree.
 979	//
 980	// Parameters:
 981	//   - _: Leading integer discriminator for internal store forwarding; callers pass 0.
 982	//   - rlm: Propagated current realm context; a non-current realm is rejected before writing.
 983	//   - deposits: B+tree containing active position deposits to persist.
 984	//
 985	// Returns:
 986	//   - err: Nil when stored, ErrSpoofedRealm for a non-current realm, or the underlying KV-store write error.
 987	//
 988	SetDeposits(_ int, rlm realm, deposits *bptree.BPTree) error
 989
 990	// HasExternalIncentivesStoreKey reports whether the external-incentives tree key exists.
 991	//
 992	// Returns:
 993	//   - exists: True when the externalIncentives key is present in persistent storage.
 994	//
 995	HasExternalIncentivesStoreKey() bool
 996
 997	// GetExternalIncentives returns the persisted external-incentive tree.
 998	//
 999	// Returns:
1000	//   - incentives: B+tree mapping incentive IDs to incentive records; storage read or type failures panic.
1001	//
1002	GetExternalIncentives() *bptree.BPTree
1003
1004	// SetExternalIncentives persists the external-incentive tree.
1005	//
1006	// Parameters:
1007	//   - _: Leading integer discriminator for internal store forwarding; callers pass 0.
1008	//   - rlm: Propagated current realm context; a non-current realm is rejected before writing.
1009	//   - incentives: B+tree containing external-incentive records to persist.
1010	//
1011	// Returns:
1012	//   - err: Nil when stored, ErrSpoofedRealm for a non-current realm, or the underlying KV-store write error.
1013	//
1014	SetExternalIncentives(_ int, rlm realm, incentives *bptree.BPTree) error
1015
1016	// HasTotalEmissionSentStoreKey reports whether the cumulative-emission key exists.
1017	//
1018	// Returns:
1019	//   - exists: True when the totalEmissionSent key is present in persistent storage.
1020	//
1021	HasTotalEmissionSentStoreKey() bool
1022
1023	// GetTotalEmissionSent returns the persisted cumulative GNS emission amount.
1024	//
1025	// Returns:
1026	//   - amount: Cumulative internal emission in GNS token units; storage read or type failures panic.
1027	//
1028	GetTotalEmissionSent() int64
1029
1030	// SetTotalEmissionSent persists the cumulative GNS emission amount.
1031	//
1032	// Parameters:
1033	//   - _: Leading integer discriminator for internal store forwarding; callers pass 0.
1034	//   - rlm: Propagated current realm context; a non-current realm is rejected before writing.
1035	//   - amount: Cumulative GNS amount to persist.
1036	//
1037	// Returns:
1038	//   - err: Nil when stored, ErrSpoofedRealm for a non-current realm, or the underlying KV-store write error.
1039	//
1040	SetTotalEmissionSent(_ int, rlm realm, amount int64) error
1041
1042	// HasAllowedTokensStoreKey reports whether the external-incentive allowlist key exists.
1043	//
1044	// Returns:
1045	//   - exists: True when the allowedTokens key is present in persistent storage.
1046	//
1047	HasAllowedTokensStoreKey() bool
1048
1049	// GetAllowedTokens returns a copy of token paths allowed for new incentives.
1050	//
1051	// Returns:
1052	//   - tokenPaths: Store-owned allowlist copied into a caller-safe slice.
1053	//
1054	GetAllowedTokens() []string
1055
1056	// SetAllowedTokens replaces the external-incentive allowlist.
1057	//
1058	// Parameters:
1059	//   - _: Leading integer discriminator for internal store forwarding; callers pass 0.
1060	//   - rlm: Propagated current realm context; a non-current realm is rejected before writing.
1061	//   - tokens: Token contract paths to persist as the new allowlist.
1062	//
1063	// Returns:
1064	//   - err: Nil when stored, ErrSpoofedRealm for a non-current realm, or the underlying KV-store write error.
1065	//
1066	SetAllowedTokens(_ int, rlm realm, tokens []string) error
1067
1068	// AddAllowedToken adds a token path to the allowlist when it is not already present.
1069	//
1070	// Parameters:
1071	//   - _: Leading integer discriminator for internal store forwarding; callers pass 0.
1072	//   - rlm: Propagated current realm context; a non-current realm is rejected before writing.
1073	//   - tokenPath: Token contract path to add to the allowlist.
1074	//
1075	// Returns:
1076	//   - err: Nil when added or already present, ErrSpoofedRealm for a non-current realm, or the KV-store write error.
1077	//
1078	AddAllowedToken(_ int, rlm realm, tokenPath string) error
1079
1080	// RemoveAllowedToken removes a token path from the allowlist when present.
1081	//
1082	// Parameters:
1083	//   - _: Leading integer discriminator for internal store forwarding; callers pass 0.
1084	//   - rlm: Propagated current realm context; a non-current realm is rejected before writing.
1085	//   - tokenPath: Token contract path to remove from the allowlist.
1086	//
1087	// Returns:
1088	//   - err: Nil when removed or absent, ErrSpoofedRealm for a non-current realm, or the KV-store write error.
1089	//
1090	RemoveAllowedToken(_ int, rlm realm, tokenPath string) error
1091
1092	// HasDeniedRewardTokensStoreKey reports whether the external reward deny-list key exists.
1093	//
1094	// Returns:
1095	//   - exists: True when the deniedRewardTokens key is present in persistent storage.
1096	//
1097	HasDeniedRewardTokensStoreKey() bool
1098
1099	// GetDeniedRewardTokens returns a copy of token paths denied for new incentives.
1100	//
1101	// Returns:
1102	//   - tokenPaths: Store-owned deny list copied for callers; an uninitialized key yields an empty slice.
1103	//
1104	GetDeniedRewardTokens() []string
1105
1106	// AddDeniedRewardToken adds a token path to the deny list when absent.
1107	//
1108	// Parameters:
1109	//   - _: Leading integer discriminator for internal store forwarding; callers pass 0.
1110	//   - rlm: Propagated current realm context; a non-current realm is rejected before writing.
1111	//   - tokenPath: Reward-token contract path to deny for new incentives.
1112	//
1113	// Returns:
1114	//   - err: Nil when added or already present, ErrSpoofedRealm for a non-current realm, or the KV-store write error.
1115	//
1116	AddDeniedRewardToken(_ int, rlm realm, tokenPath string) error
1117
1118	// RemoveDeniedRewardToken removes a token path from the deny list when present.
1119	//
1120	// Parameters:
1121	//   - _: Leading integer discriminator for internal store forwarding; callers pass 0.
1122	//   - rlm: Propagated current realm context; a non-current realm is rejected before writing.
1123	//   - tokenPath: Reward-token contract path to allow again for new incentives.
1124	//
1125	// Returns:
1126	//   - err: Nil when removed or absent, ErrSpoofedRealm for a non-current realm, or the KV-store write error.
1127	//
1128	RemoveDeniedRewardToken(_ int, rlm realm, tokenPath string) error
1129
1130	// HasIncentiveCounterStoreKey reports whether the incentive-counter key exists.
1131	//
1132	// Returns:
1133	//   - exists: True when the incentiveCounter key is present in persistent storage.
1134	//
1135	HasIncentiveCounterStoreKey() bool
1136
1137	// GetIncentiveCounter returns the persisted counter used to allocate incentive IDs.
1138	//
1139	// Returns:
1140	//   - counter: Incentive-ID counter object; storage read or type failures panic.
1141	//
1142	GetIncentiveCounter() *Counter
1143
1144	// SetIncentiveCounter persists the incentive-ID counter.
1145	//
1146	// Parameters:
1147	//   - _: Leading integer discriminator for internal store forwarding; callers pass 0.
1148	//   - rlm: Propagated current realm context; a non-current realm is rejected before writing.
1149	//   - counter: Counter object whose next value will be used for incentive IDs.
1150	//
1151	// Returns:
1152	//   - err: Nil when stored, ErrSpoofedRealm for a non-current realm, or the underlying KV-store write error.
1153	//
1154	SetIncentiveCounter(_ int, rlm realm, counter *Counter) error
1155
1156	// NextIncentiveID consumes the next counter value and formats a unique incentive ID.
1157	//
1158	// Parameters:
1159	//   - creator: Address that is creating and funding the incentive.
1160	//   - timestamp: Unix-second creation timestamp embedded in the identifier.
1161	//
1162	// Returns:
1163	//   - incentiveId: Identifier combining creator, timestamp, and the incremented counter index.
1164	//
1165	NextIncentiveID(creator address, timestamp int64) string
1166
1167	// HasTokenSpecificMinimumRewardsStoreKey reports whether token-specific minimums exist.
1168	//
1169	// Returns:
1170	//   - exists: True when the tokenSpecificMinimumRewards key is present in persistent storage.
1171	//
1172	HasTokenSpecificMinimumRewardsStoreKey() bool
1173
1174	// GetTokenSpecificMinimumRewards returns configured token-specific reward minimums.
1175	//
1176	// Returns:
1177	//   - rewards: Map from token contract path to minimum reward amount; storage read or type failures panic.
1178	//
1179	GetTokenSpecificMinimumRewards() map[string]int64
1180
1181	// SetTokenSpecificMinimumRewards replaces all token-specific minimums.
1182	//
1183	// Parameters:
1184	//   - _: Leading integer discriminator for internal store forwarding; callers pass 0.
1185	//   - rlm: Propagated current realm context; a non-current realm is rejected before writing.
1186	//   - rewards: Token-path-to-minimum-amount mapping to persist.
1187	//
1188	// Returns:
1189	//   - err: Nil when stored, ErrSpoofedRealm for a non-current realm, or the underlying KV-store write error.
1190	//
1191	SetTokenSpecificMinimumRewards(_ int, rlm realm, rewards map[string]int64) error
1192
1193	// SetTokenSpecificMinimumRewardItem sets one token's minimum reward entry.
1194	//
1195	// Parameters:
1196	//   - _: Leading integer discriminator for internal store forwarding; callers pass 0.
1197	//   - rlm: Propagated current realm context; a non-current realm is rejected before writing.
1198	//   - tokenPath: Token contract path whose override is being set.
1199	//   - amount: Token-specific minimum reward amount in token units.
1200	//
1201	// Returns:
1202	//   - err: Nil when the item is stored, ErrSpoofedRealm for a non-current realm, or the KV-store write error.
1203	//
1204	SetTokenSpecificMinimumRewardItem(_ int, rlm realm, tokenPath string, amount int64) error
1205
1206	// RemoveTokenSpecificMinimumRewardItem removes one token's minimum reward entry.
1207	//
1208	// Parameters:
1209	//   - _: Leading integer discriminator for internal store forwarding; callers pass 0.
1210	//   - rlm: Propagated current realm context; a non-current realm is rejected before writing.
1211	//   - tokenPath: Token contract path whose override is being removed.
1212	//
1213	// Returns:
1214	//   - err: Nil after rebuilding the mapping without the item, ErrSpoofedRealm for a non-current realm, or the KV-store write error.
1215	//
1216	RemoveTokenSpecificMinimumRewardItem(_ int, rlm realm, tokenPath string) error
1217
1218	// HasUnstakingFeeStoreKey reports whether the unstaking-fee key exists.
1219	//
1220	// Returns:
1221	//   - exists: True when the unstakingFee key is present in persistent storage.
1222	//
1223	HasUnstakingFeeStoreKey() bool
1224
1225	// GetUnstakingFee returns the stored reward fee rate in basis points.
1226	//
1227	// Returns:
1228	//   - fee: Persisted fee rate, where 10,000 basis points represents 100%.
1229	//
1230	GetUnstakingFee() uint64
1231
1232	// SetUnstakingFee persists the reward fee rate.
1233	//
1234	// Parameters:
1235	//   - _: Leading integer discriminator for internal store forwarding; callers pass 0.
1236	//   - rlm: Propagated current realm context; a non-current realm is rejected before writing.
1237	//   - fee: Fee rate in basis points.
1238	//
1239	// Returns:
1240	//   - err: Nil when stored, ErrSpoofedRealm for a non-current realm, or the underlying KV-store write error.
1241	//
1242	SetUnstakingFee(_ int, rlm realm, fee uint64) error
1243
1244	// HasPendingProtocolFeesStoreKey reports whether pending protocol fees exist.
1245	//
1246	// Returns:
1247	//   - exists: True when the pendingProtocolFees key is present in persistent storage.
1248	//
1249	HasPendingProtocolFeesStoreKey() bool
1250
1251	// GetPendingProtocolFees returns pending protocol-fee amounts by token path.
1252	//
1253	// Returns:
1254	//   - fees: Token-path-to-amount map awaiting settlement; storage read or type failures panic.
1255	//
1256	GetPendingProtocolFees() map[string]int64
1257
1258	// SetPendingProtocolFees replaces all pending protocol-fee amounts.
1259	//
1260	// Parameters:
1261	//   - _: Leading integer discriminator for internal store forwarding; callers pass 0.
1262	//   - rlm: Propagated current realm context; a non-current realm is rejected before writing.
1263	//   - fees: Token-path-to-amount map copied into realm-owned persistent storage.
1264	//
1265	// Returns:
1266	//   - err: Nil when stored, ErrSpoofedRealm or write-permission error when unauthorized, or the KV-store write error.
1267	//
1268	SetPendingProtocolFees(_ int, rlm realm, fees map[string]int64) error
1269
1270	// GetPendingProtocolFee returns the pending amount for one token path.
1271	//
1272	// Parameters:
1273	//   - tokenPath: Token contract path whose pending amount is requested.
1274	//
1275	// Returns:
1276	//   - amount: Pending amount for the token, or zero when no entry exists.
1277	//
1278	GetPendingProtocolFee(tokenPath string) int64
1279
1280	// SetPendingProtocolFee updates one token's pending protocol-fee amount.
1281	//
1282	// Parameters:
1283	//   - _: Leading integer discriminator for internal store forwarding; callers pass 0.
1284	//   - rlm: Propagated current realm context; it must also be authorized for code-realm writes.
1285	//   - tokenPath: Token contract path whose pending amount is updated.
1286	//   - amount: Pending protocol-fee amount to record for the token.
1287	//
1288	// Returns:
1289	//   - err: Nil when updated, ErrSpoofedRealm or write-permission error when unauthorized, or the KV-store write error.
1290	//
1291	SetPendingProtocolFee(_ int, rlm realm, tokenPath string, amount int64) error
1292
1293	// RemovePendingProtocolFee deletes one token's pending protocol-fee entry.
1294	//
1295	// Parameters:
1296	//   - _: Leading integer discriminator for internal store forwarding; callers pass 0.
1297	//   - rlm: Propagated current realm context; it must also be authorized for code-realm writes.
1298	//   - tokenPath: Token contract path whose pending entry is deleted.
1299	//
1300	// Returns:
1301	//   - err: Nil when removed, ErrSpoofedRealm or write-permission error when unauthorized, or the KV-store write error.
1302	//
1303	RemovePendingProtocolFee(_ int, rlm realm, tokenPath string) error
1304
1305	// HasUnstakedPositionsStoreKey reports whether the exit-checkpoint tree key exists.
1306	//
1307	// Returns:
1308	//   - exists: True when the unstakedPositions key is present in persistent storage.
1309	//
1310	HasUnstakedPositionsStoreKey() bool
1311
1312	// GetUnstakedPositions returns the persisted exit-checkpoint tree.
1313	//
1314	// Returns:
1315	//   - positions: B+tree mapping position IDs to unstaked checkpoints; storage read or type failures panic.
1316	//
1317	GetUnstakedPositions() *bptree.BPTree
1318
1319	// SetUnstakedPositions persists the exit-checkpoint tree.
1320	//
1321	// Parameters:
1322	//   - _: Leading integer discriminator for internal store forwarding; callers pass 0.
1323	//   - rlm: Propagated current realm context; a non-current realm is rejected before writing.
1324	//   - positions: B+tree containing unstaked position checkpoints to persist.
1325	//
1326	// Returns:
1327	//   - err: Nil when stored, ErrSpoofedRealm for a non-current realm, or the underlying KV-store write error.
1328	//
1329	SetUnstakedPositions(_ int, rlm realm, positions *bptree.BPTree) error
1330
1331	// HasUncollectedIncentiveCountsStoreKey reports whether the incentive-count tree key exists.
1332	//
1333	// Returns:
1334	//   - exists: True when the uncollectedIncentiveCounts key is present in persistent storage.
1335	//
1336	HasUncollectedIncentiveCountsStoreKey() bool
1337
1338	// GetUncollectedIncentiveCounts returns the persisted count tree for exit claims.
1339	//
1340	// Returns:
1341	//   - counts: B+tree mapping incentive IDs to uncollected checkpoint counts; storage read or type failures panic.
1342	//
1343	GetUncollectedIncentiveCounts() *bptree.BPTree
1344
1345	// SetUncollectedIncentiveCounts persists the exit-claim count tree.
1346	//
1347	// Parameters:
1348	//   - _: Leading integer discriminator for internal store forwarding; callers pass 0.
1349	//   - rlm: Propagated current realm context; a non-current realm is rejected before writing.
1350	//   - counts: B+tree containing uncollected incentive counts to persist.
1351	//
1352	// Returns:
1353	//   - err: Nil when stored, ErrSpoofedRealm for a non-current realm, or the underlying KV-store write error.
1354	//
1355	SetUncollectedIncentiveCounts(_ int, rlm realm, counts *bptree.BPTree) error
1356	// HasPoolsStoreKey reports whether the pool registry tree key exists.
1357	//
1358	// Returns:
1359	//   - exists: True when the pools key is present in persistent storage.
1360	//
1361	HasPoolsStoreKey() bool
1362
1363	// GetPools returns the persisted pool registry tree.
1364	//
1365	// Returns:
1366	//   - pools: B+tree mapping canonical pool paths to pool records; storage read or type failures panic.
1367	//
1368	GetPools() *bptree.BPTree
1369
1370	// SetPools persists the pool registry tree.
1371	//
1372	// Parameters:
1373	//   - _: Leading integer discriminator for internal store forwarding; callers pass 0.
1374	//   - rlm: Propagated current realm context; a non-current realm is rejected before writing.
1375	//   - pools: B+tree containing pool records to persist.
1376	//
1377	// Returns:
1378	//   - err: Nil when stored, ErrSpoofedRealm for a non-current realm, or the underlying KV-store write error.
1379	//
1380	SetPools(_ int, rlm realm, pools *bptree.BPTree) error
1381
1382	// HasPoolTierMembershipsStoreKey reports whether pool-to-tier membership data exists.
1383	//
1384	// Returns:
1385	//   - exists: True when the poolTierMemberships key is present in persistent storage.
1386	//
1387	HasPoolTierMembershipsStoreKey() bool
1388
1389	// GetPoolTierMemberships returns the persisted pool-to-tier membership tree.
1390	//
1391	// Returns:
1392	//   - memberships: B+tree mapping pool paths to tier numbers; storage read or type failures panic.
1393	//
1394	GetPoolTierMemberships() *bptree.BPTree
1395
1396	// SetPoolTierMemberships persists pool-to-tier membership data.
1397	//
1398	// Parameters:
1399	//   - _: Leading integer discriminator for internal store forwarding; callers pass 0.
1400	//   - rlm: Propagated current realm context; a non-current realm is rejected before writing.
1401	//   - memberships: B+tree mapping pool paths to tier numbers.
1402	//
1403	// Returns:
1404	//   - err: Nil when stored, ErrSpoofedRealm for a non-current realm, or the underlying KV-store write error.
1405	//
1406	SetPoolTierMemberships(_ int, rlm realm, memberships *bptree.BPTree) error
1407
1408	// HasPoolTierRatioStoreKey reports whether tier reward-ratio data exists.
1409	//
1410	// Returns:
1411	//   - exists: True when the poolTierRatio key is present in persistent storage.
1412	//
1413	HasPoolTierRatioStoreKey() bool
1414
1415	// GetPoolTierRatio returns the persisted tier-to-ratio configuration.
1416	//
1417	// Returns:
1418	//   - ratio: TierRatio configuration used to calculate pool emission shares; storage read or type failures panic.
1419	//
1420	GetPoolTierRatio() TierRatio
1421
1422	// SetPoolTierRatio persists tier reward-ratio configuration.
1423	//
1424	// Parameters:
1425	//   - _: Leading integer discriminator for internal store forwarding; callers pass 0.
1426	//   - rlm: Propagated current realm context; a non-current realm is rejected before writing.
1427	//   - ratio: TierRatio configuration to persist.
1428	//
1429	// Returns:
1430	//   - err: Nil when stored, ErrSpoofedRealm for a non-current realm, or the underlying KV-store write error.
1431	//
1432	SetPoolTierRatio(_ int, rlm realm, ratio TierRatio) error
1433
1434	// HasPoolTierCountsStoreKey reports whether tier membership counts exist.
1435	//
1436	// Returns:
1437	//   - exists: True when the poolTierCounts key is present in persistent storage.
1438	//
1439	HasPoolTierCountsStoreKey() bool
1440
1441	// GetPoolTierCounts returns the fixed-size array of pool counts by tier.
1442	//
1443	// Returns:
1444	//   - counts: Per-tier pool membership counts indexed by AllTierCount; storage read or type failures panic.
1445	//
1446	GetPoolTierCounts() [AllTierCount]uint64
1447
1448	// SetPoolTierCounts persists per-tier pool membership counts.
1449	//
1450	// Parameters:
1451	//   - _: Leading integer discriminator for internal store forwarding; callers pass 0.
1452	//   - rlm: Propagated current realm context; a non-current realm is rejected before writing.
1453	//   - counts: Fixed-size per-tier pool membership counts to persist.
1454	//
1455	// Returns:
1456	//   - err: Nil when stored, ErrSpoofedRealm for a non-current realm, or the underlying KV-store write error.
1457	//
1458	SetPoolTierCounts(_ int, rlm realm, counts [AllTierCount]uint64) error
1459
1460	// HasPoolTierLastRewardCacheTimestampStoreKey reports whether the reward-cache timestamp exists.
1461	//
1462	// Returns:
1463	//   - exists: True when the poolTierLastRewardCacheTimestamp key is present in persistent storage.
1464	//
1465	HasPoolTierLastRewardCacheTimestampStoreKey() bool
1466
1467	// GetPoolTierLastRewardCacheTimestamp returns the last tier reward-cache timestamp.
1468	//
1469	// Returns:
1470	//   - timestamp: Unix-second timestamp persisted after tier reward caching; read/type failures panic.
1471	//
1472	GetPoolTierLastRewardCacheTimestamp() int64
1473
1474	// SetPoolTierLastRewardCacheTimestamp persists the tier reward-cache timestamp.
1475	//
1476	// Parameters:
1477	//   - _: Leading integer discriminator for internal store forwarding; callers pass 0.
1478	//   - rlm: Propagated current realm context; a non-current realm is rejected before writing.
1479	//   - timestamp: Unix-second timestamp to persist as the last cache boundary.
1480	//
1481	// Returns:
1482	//   - err: Nil when stored, ErrSpoofedRealm for a non-current realm, or the underlying KV-store write error.
1483	//
1484	SetPoolTierLastRewardCacheTimestamp(_ int, rlm realm, timestamp int64) error
1485
1486	// HasPoolTierCurrentEmissionStoreKey reports whether the current tier-emission key exists.
1487	//
1488	// Returns:
1489	//   - exists: True when the poolTierCurrentEmission key is present in persistent storage.
1490	//
1491	HasPoolTierCurrentEmissionStoreKey() bool
1492
1493	// GetPoolTierCurrentEmission returns the current GNS emission rate cached for tiers.
1494	//
1495	// Returns:
1496	//   - emission: Current per-second emission amount; storage read or type failures panic.
1497	//
1498	GetPoolTierCurrentEmission() int64
1499
1500	// SetPoolTierCurrentEmission persists the current tier-emission rate.
1501	//
1502	// Parameters:
1503	//   - _: Leading integer discriminator for internal store forwarding; callers pass 0.
1504	//   - rlm: Propagated current realm context; a non-current realm is rejected before writing.
1505	//   - emission: Current per-second GNS emission amount to persist.
1506	//
1507	// Returns:
1508	//   - err: Nil when stored, ErrSpoofedRealm for a non-current realm, or the underlying KV-store write error.
1509	//
1510	SetPoolTierCurrentEmission(_ int, rlm realm, emission int64) error
1511
1512	// HasPoolTierGetEmissionStoreKey reports whether the emission-rate callback exists.
1513	//
1514	// Returns:
1515	//   - exists: True when the poolTierGetEmission key is present in persistent storage.
1516	//
1517	HasPoolTierGetEmissionStoreKey() bool
1518
1519	// GetPoolTierGetEmission returns the callback used to query current emission.
1520	//
1521	// Returns:
1522	//   - getEmission: Callback returning the current emission amount and an error; storage read or type failures panic.
1523	//
1524	GetPoolTierGetEmission() func() (int64, error)
1525
1526	// SetPoolTierGetEmission persists the callback used to query current emission.
1527	//
1528	// Parameters:
1529	//   - _: Leading integer discriminator for internal store forwarding; callers pass 0.
1530	//   - rlm: Propagated current realm context; a non-current realm is rejected before writing.
1531	//   - fn: Callback that returns the current per-second emission amount, or an error when unavailable.
1532	//
1533	// Returns:
1534	//   - err: Nil when stored, ErrSpoofedRealm for a non-current realm, or the underlying KV-store write error.
1535	//
1536	SetPoolTierGetEmission(_ int, rlm realm, fn func() (int64, error)) error
1537
1538	// HasPoolTierGetHalvingBlocksInRangeStoreKey reports whether the halving-range callback exists.
1539	//
1540	// Returns:
1541	//   - exists: True when the poolTierGetHalvingBlocksInRange key is present in persistent storage.
1542	//
1543	HasPoolTierGetHalvingBlocksInRangeStoreKey() bool
1544
1545	// GetPoolTierGetHalvingBlocksInRange returns the callback used to query
1546	// halving timestamps and matching emission amounts for a time range.
1547	//
1548	// Returns:
1549	//   - getHalvingBlocksInRange: Callback taking [start,end) timestamps and returning ascending halving timestamps, corresponding emissions, and an error; storage read or type failures panic.
1550	//
1551	GetPoolTierGetHalvingBlocksInRange() func(start, end int64) ([]int64, []int64, error)
1552
1553	// SetPoolTierGetHalvingBlocksInRange persists the halving-range callback.
1554	//
1555	// Parameters:
1556	//   - _: Leading integer discriminator for internal store forwarding; callers pass 0.
1557	//   - rlm: Propagated current realm context; a non-current realm is rejected before writing.
1558	//   - fn: Callback taking a [start,end) timestamp interval and returning matching halving timestamps, emission amounts, and an error.
1559	//
1560	// Returns:
1561	//   - err: Nil when stored, ErrSpoofedRealm for a non-current realm, or the underlying KV-store write error.
1562	//
1563	SetPoolTierGetHalvingBlocksInRange(_ int, rlm realm, fn func(start, end int64) ([]int64, []int64, error)) error
1564
1565	// HasWarmupTemplateStoreKey reports whether the warm-up template key exists.
1566	//
1567	// Returns:
1568	//   - exists: True when the warmupTemplate key is present in persistent storage.
1569	//
1570	HasWarmupTemplateStoreKey() bool
1571
1572	// GetWarmupTemplate returns a copy of the warm-up schedule for new deposits.
1573	//
1574	// Returns:
1575	//   - warmups: Caller-safe copy of ordered warm-up ratio and duration entries.
1576	//
1577	GetWarmupTemplate() []Warmup
1578
1579	// SetWarmupTemplate replaces the warm-up schedule for new deposits.
1580	//
1581	// Parameters:
1582	//   - _: Leading integer discriminator for internal store forwarding; callers pass 0.
1583	//   - rlm: Propagated current realm context; a non-current realm is rejected before writing.
1584	//   - warmups: Ordered warm-up ratio and duration entries to persist.
1585	//
1586	// Returns:
1587	//   - err: Nil when stored, ErrSpoofedRealm for a non-current realm, or the underlying KV-store write error.
1588	//
1589	SetWarmupTemplate(_ int, rlm realm, warmups []Warmup) error
1590
1591	// HasCurrentSwapBatchStoreKey reports whether the current swap-batch key exists.
1592	//
1593	// Returns:
1594	//   - exists: True when the currentSwapBatch key is present in persistent storage.
1595	//
1596	HasCurrentSwapBatchStoreKey() bool
1597
1598	// GetCurrentSwapBatch returns the persisted swap-batch processor state.
1599	//
1600	// Returns:
1601	//   - batch: Current SwapBatchProcessor pointer; storage read or type failures panic.
1602	//
1603	GetCurrentSwapBatch() *SwapBatchProcessor
1604
1605	// SetCurrentSwapBatch persists the current swap-batch processor state.
1606	//
1607	// Parameters:
1608	//   - _: Leading integer discriminator for internal store forwarding; callers pass 0.
1609	//   - rlm: Propagated current realm context; a non-current realm is rejected before writing.
1610	//   - batch: SwapBatchProcessor state to persist for the current batch.
1611	//
1612	// Returns:
1613	//   - err: Nil when stored, ErrSpoofedRealm for a non-current realm, or the underlying KV-store write error.
1614	//
1615	SetCurrentSwapBatch(_ int, rlm realm, batch *SwapBatchProcessor) error
1616}