Docs>Architecture>Lifecycle>Circle & Vault Lifecycle

Circle & Vault Lifecycle

PENDING → ACTIVE → COMPLETED/DISSOLVED for circles; simpler position-level states for FixVault and FlexVault.

AjoCircle: four stages

PENDING — seats still filling; the creator occupies seat 1 automatically unless they’ve opted out. ACTIVE — set the instant the last seat fills; cycle 1 begins. COMPLETED — set once every seat has been paid out exactly once; reward computation happens in the same transaction. DISSOLVED — set once more than half of filled seats vote to end early; no completion reward is computed, since dissolution is an early end, not a finish.

FixVault: a position, not a shared state

A FixVault vault itself doesn’t move through a shared lifecycle the way a circle does — its state is per-position (per token ID). A position is either before its 50%-of-term lock point (no exit possible at all), between that point and maturity (early exit possible, forfeits reward, 5% fee), or matured (principal and reward independently claimable). exitedEarly, principalClaimed, and rewardClaimed are tracked per position, not per vault, since a public vault can hold many independent positions on different join dates.

FlexVault: per-participant completion

Similarly, a FlexVault tracks completed and closedEarly per participant address, not as one shared vault-level state. A participant reaches completed once their full contribution schedule is met; closedEarly is set if they close before that point instead, which forfeits their reward permanently for that plan.

Circle member status: ACTIVE → GRACE → DEFAULTED

There’s no on-chain cron, so this transitions lazily — anyone can trigger a check on a non-paying member, moving them into a grace window, and again to move them from grace into defaulted once that window elapses without payment.