SettleMint
ArchitectureComponentsToken Features

Fixed Treasury Yield

Fixed-rate yield paid to token holders at periodic intervals from a treasury. Pull-based — holders claim their yield. Requires Historical Balances for snapshot-based yield calculation.

Purpose: Fixed Treasury Yield distributes a fixed-rate yield to DALPAsset token holders at periodic intervals. Yield is calculated from historical balance snapshots at each interval end and paid from a denomination asset treasury. Holders pull (claim) their yield.


Interface (capabilities)

This feature exposes the following capabilities. Yield is pull-based — holders claim their accumulated yield from a denomination asset treasury. Requires Historical Balances for snapshot-based calculation. The yield schedule (rate, start date, intervals, denomination asset) is configured at deployment and emits FixedTreasuryYieldScheduleSet — it is immutable post-activation and not included in the runtime capabilities below.

CapabilityWho can callInputsOn-chain effectEmitsNotes
Claim accrued yieldToken holderNone (claims all completed periods)Transfers denomination asset from treasury to holderYieldClaimedPull-based; unclaimed yield stays in treasury
Set treasury addressGOVERNANCE_ROLETreasury addressRedirects future yield payoutsTreasuryUpdatedFund new treasury before changing
Consume interest on conversionAutomatic (on burn/redeem)Principal amount + contextDeducts accrued interest for conversion calculationInterestConsumedOnly active when paired with Conversion
Close accrual on full exitAutomatic (hook on burn/redeem)Triggered when holder balance reaches zeroStops future yield accrual for holderAccrualClosedPrevents claims after full redemption

Accrued yield, period schedule, current period, and unclaimed totals are available as read-only queries.


Business impact

  • Holders: Periodic yield claimable proportional to balance at each interval snapshot. Holders who transfer tokens between intervals still receive yield for the fraction of the period they held.
  • Issuer: Must maintain sufficient denomination asset in the treasury throughout the yield period. Yield obligations are fixed at configuration time.
  • Economics: Pull-based — no automatic distribution. Unclaimed yield remains in treasury until claimed. Rate is fixed (in basis points) for the configured period.

Risks & abuse cases

  • Underfunded treasury: If the treasury denomination asset balance falls below the total outstanding yield obligation, claimants who redeem late may find the treasury depleted.
  • Large holding concentration: A single holder with a large % of supply can claim a disproportionate fraction of the treasury on first claim, leaving nothing for other holders.
  • Unclaimed yield accumulates: Pull-based yield that is never claimed sits in the treasury indefinitely. Platforms should define an expiry policy for unclaimed yield.
  • Rate configured but not funded: Yield rate can be set without treasury being funded. Off-chain monitoring must ensure treasury is funded before the yield period begins.

Controls & guardrails

RoleActionsRecommended guardrail
GOVERNANCE_ROLEsetTreasury() — set denomination asset treasury addressFund treasury before yield period starts; monitor balance continuously

No on-chain rate freeze mechanism — rate is set at deployment and is part of the feature configuration. Governance should use time-locked multi-sig for any yield schedule changes.


Failure modes & edge cases

  • Historical Balances not active: Fixed Treasury Yield cannot calculate yield without Historical Balances checkpoints. If Historical Balances is removed while yield is active, yield claims will fail.
  • Yield period ended but unclaimed: Yield calculated from past intervals remains claimable until claimed. Platforms must handle long-tailed claim windows in their UX.
  • Treasury address change mid-period: If setTreasury() is called mid-period, future claims draw from the new treasury. Ensure new treasury is funded before changing.
  • Zero-balance holder at snapshot: Holders with zero balance at an interval snapshot receive zero yield for that interval regardless of balance at other times in the period.

Auditability & operational signals

  • FixedTreasuryYieldScheduleSet(startDate, endDate, rate, interval, periodEndTimestamps, denominationAsset, treasury) — emitted once at deployment when yield schedule is configured.
  • YieldClaimed(holder, claimedAmount, fromPeriod, toPeriod, periodAmounts, periodYields, totalYieldPerPeriod) — emitted per claim. Primary signal for treasury drawdown tracking.
  • TreasuryUpdated(sender, oldTreasury, newTreasury) — emitted on treasury address change.
  • InterestConsumed(holder, amountWad, reason, consumedAt) — emitted when accrued interest is consumed for conversion calculation.
  • AccrualClosed(holder, closedAt) — emitted when a holder's yield accrual is permanently closed (full exit).
  • Treasury denomination asset balance: monitor continuously; alert when balance falls below remaining yield obligations (calculated off-chain: rate × total supply × remaining intervals).

Dependencies

  • Historical Balances feature — required. Must be active and ordered before Fixed Treasury Yield in the feature array.
  • Denomination asset (ERC-20) — the asset paid as yield (e.g., USDC). Must be deployed and accessible.
  • Treasury contract — must be funded with denomination asset before yield period starts.

Compatibility & ordering notes

  • supportsRewriting = false — pull-based, no hooks on transfers.
  • No hooks — does not run in the feature hook chain. Order in the feature array is irrelevant for this feature.
  • Compatible with Maturity Redemption: both can be active simultaneously. Yield continues to accrue until maturity; post-maturity transfers are blocked but yield claims remain valid until claimed.
  • Requires Historical Balances to be ordered last in the hook array (see Historical Balances ordering notes).

Change impact

  • Enable after launch: Yield accrual starts from the configured startDate. Past periods are not retroactively covered.
  • Disable mid-period: Existing claimable yield for completed intervals remains claimable; future intervals stop accruing. Treasury funds can be withdrawn.
  • Treasury address change: Effective for all future claims. Ensure new treasury is funded.
  • Rate change: Only possible before period starts (rate is immutable post-activation by design). For rate changes, deploy a new yield configuration.

See also

On this page