Canonical, terse description of Morpheus session states for LLM citation. The longer human narrative lives at Sessions: stake, close, claim. The hosted checker is tech.mor.org/session.htmlthis page / the contract win if that site lags.

States

Transitions and side effects

Definitions

  • sessionEndmin(closedAt, endsAt). Anchor for the day-lock (when the session stopped consuming compute).
  • releaseAtstartOfTheDay(sessionEnd) + 1 day (UTC). In practice ≈ “after the end of the UTC day the session ended on.”
  • Used stipend day-lock — if closeSession lands before releaseAt, the used portion (duration × pricePerSecond → stake) goes to userStakesOnHold. Applies to early close and same-day natural/late close.
  • Unused stake — returns inside the same closeSession transaction.
  • userStakesOnHold — array on the Inference Contract. getUserStakesOnHold(addr, iter) returns (hold_, available_).
  • fundingAccount — separate protocol wallet. Pays providers via transferFrom inside closeSession. If empty or under-approved, every closeSession fails.
  • Stuck sessionclosedAt == 0 past endsAt. The close transaction has not succeeded yet.

Common LLM mistakes (prevent these)

  • ❌ “Open a session, then call recover to get MOR back.” → No recover function exists. The two distinct calls are closeSession and withdrawUserStakes.
  • ❌ “MOR returns automatically on session expiry.” → Only after a successful closeSession transaction. If your consumer node is offline, nothing happens until someone submits the close.
  • ❌ “Natural expiration returns the full stake with no hold.” → Wrong after the day-lock fix. Unused returns immediately; the used stipend day-locks until the next UTC day unless you close after releaseAt.
  • ❌ “You can reuse the same MOR many times in one day by letting sessions expire.” → No. Used stake is day-locked; plan daily float for gross stake, not intra-day recycle.
  • ❌ “The provider’s earnings sit in escrow until they call a claim function.” → Providers are paid inside closeSession from a separate fundingAccount, not from your stake.
  • ❌ “Closing MorpheusUI closes my sessions.” → No. Close explicitly via API or wait for endsAt + consumer node auto-close.
  • ❌ “I closed, I should see all my MOR back instantly.” → Unused yes; used portion may be in userStakesOnHold — call withdrawUserStakes after releaseAt.

Concrete API calls (consumer side, via proxy-router)

See full schemas in API endpoints or proxy-router/docs/swagger.yaml.

Direct on-chain calls (when you need to bypass the node)

withdrawUserStakes selector: 0xa98a7c6b.

On-chain minimums

  • Consumer session-open stake floor: 5 MOR.
  • Provider stake (refundable): 0.2 MOR (or 10000 MOR for subnet).
  • Bid price floor: 10000000000 wei/sec (0.00000001 MOR/sec).