Skip to main content

Status values

Status: Provisional

Numeric values below are read independently from each stack. The derivation functions are copied from code, preserving branch order and boundary operators. They describe the checked implementation; unresolved product decisions still apply.

Defined values​

SeriesMode: stage1:evm/src/types/MercesTypes.sol​

MemberNumeric valueSource
SealedBid0stage1:evm/src/types/MercesTypes.sol#L9
Curve1stage1:evm/src/types/MercesTypes.sol#L10

RaiseState: stage1:evm/src/types/MercesTypes.sol​

MemberNumeric valueSource
Draft0stage1:evm/src/types/MercesTypes.sol#L14
Open1stage1:evm/src/types/MercesTypes.sol#L15
Reveal2stage1:evm/src/types/MercesTypes.sol#L16
Settling3stage1:evm/src/types/MercesTypes.sol#L17
Settled4stage1:evm/src/types/MercesTypes.sol#L18
Failed5stage1:evm/src/types/MercesTypes.sol#L19
Cancelled6stage1:evm/src/types/MercesTypes.sol#L20

SeriesStatus: stage1:evm/src/types/MercesTypes.sol​

MemberNumeric valueSource
OnTime0stage1:evm/src/types/MercesTypes.sol#L24
InGrace1stage1:evm/src/types/MercesTypes.sol#L25
Late2stage1:evm/src/types/MercesTypes.sol#L26
Paused3stage1:evm/src/types/MercesTypes.sol#L27
Retired4stage1:evm/src/types/MercesTypes.sol#L28
Redeemed5stage1:evm/src/types/MercesTypes.sol#L29
Extinguished6stage1:evm/src/types/MercesTypes.sol#L30

SeriesStatus: stage1:packages/sdk/src/constants.ts​

MemberNumeric valueSource
OnTime0stage1:packages/sdk/src/constants.ts#L156
InGrace1stage1:packages/sdk/src/constants.ts#L157
Late2stage1:packages/sdk/src/constants.ts#L158
Paused3stage1:packages/sdk/src/constants.ts#L159
Retired4stage1:packages/sdk/src/constants.ts#L160
Redeemed5stage1:packages/sdk/src/constants.ts#L161
Extinguished6stage1:packages/sdk/src/constants.ts#L162

RaiseState: stage1:packages/sdk/src/constants.ts​

MemberNumeric valueSource
Draft0stage1:packages/sdk/src/constants.ts#L166
Open1stage1:packages/sdk/src/constants.ts#L167
Reveal2stage1:packages/sdk/src/constants.ts#L168
Settling3stage1:packages/sdk/src/constants.ts#L169
Settled4stage1:packages/sdk/src/constants.ts#L170
Failed5stage1:packages/sdk/src/constants.ts#L171
Cancelled6stage1:packages/sdk/src/constants.ts#L172

SeriesMode: stage1:packages/sdk/src/constants.ts​

MemberNumeric valueSource
SealedBid0stage1:packages/sdk/src/constants.ts#L176
Curve1stage1:packages/sdk/src/constants.ts#L177

SeriesStatus: stage1:solana/crates/merces-common/src/status.rs​

MemberNumeric valueSource
OnTime0stage1:solana/crates/merces-common/src/status.rs#L17
InGrace1stage1:solana/crates/merces-common/src/status.rs#L18
Late2stage1:solana/crates/merces-common/src/status.rs#L19
Paused3stage1:solana/crates/merces-common/src/status.rs#L20
Retired4stage1:solana/crates/merces-common/src/status.rs#L21
Redeemed5stage1:solana/crates/merces-common/src/status.rs#L22
Extinguished6stage1:solana/crates/merces-common/src/status.rs#L23

Solana stored raise constants​

NameValueSource
RAISE_DRAFT0stage1:solana/programs/merces_protocol/src/state.rs#L46
RAISE_OPEN1stage1:solana/programs/merces_protocol/src/state.rs#L47
RAISE_SETTLING3stage1:solana/programs/merces_protocol/src/state.rs#L48
RAISE_SETTLED4stage1:solana/programs/merces_protocol/src/state.rs#L49
RAISE_FAILED5stage1:solana/programs/merces_protocol/src/state.rs#L50
RAISE_CANCELLED6stage1:solana/programs/merces_protocol/src/state.rs#L51

Derivation in source order​

isTerminal: stage1:packages/reference/src/math/status.ts​

Source: stage1:packages/reference/src/math/status.ts#L27.

export function isTerminal(status: SeriesStatus): boolean {
return status === SeriesStatus.Retired || status === SeriesStatus.Redeemed || status === SeriesStatus.Extinguished;
}

deriveStatus: stage1:packages/reference/src/math/status.ts​

Source: stage1:packages/reference/src/math/status.ts#L62.

export function deriveStatus(c: LedgerClock, now: bigint, p: StatusParams): SeriesStatus {
if (isTerminal(c.status)) return c.status;
if (isPaused(c, now)) return SeriesStatus.Paused;
if (trueupOverdue(c, now, p)) return SeriesStatus.Late;
const cd = countdown(earliestUnpaid(c), c, now);
if (cd <= deadlineSeconds(p)) return SeriesStatus.OnTime;
if (cd <= graceSeconds(p)) return SeriesStatus.InGrace;
return SeriesStatus.Late;
}

is_terminal: stage1:solana/crates/merces-common/src/status.rs​

Source: stage1:solana/crates/merces-common/src/status.rs#L40.

pub fn is_terminal(self) -> bool {
matches!(self, Self::Retired | Self::Redeemed | Self::Extinguished)
}

derive_status: stage1:solana/crates/merces-common/src/status.rs​

Source: stage1:solana/crates/merces-common/src/status.rs#L115.

pub fn derive_status(inp: &StatusInputs, now: u64) -> MathResult<SeriesStatus> {
if inp.stored.is_terminal() {
return Ok(inp.stored);
}
if is_paused(inp.pauses, now) {
return Ok(SeriesStatus::Paused);
}
if trueup_overdue(inp, now) {
return Ok(SeriesStatus::Late);
}
let c = countdown(inp.pauses, inp.earliest_unpaid_period, now)?;
Ok(if c <= DEADLINE_S {
SeriesStatus::OnTime
} else if c <= GRACE_S {
SeriesStatus::InGrace
} else {
SeriesStatus::Late
})
}

_derive: stage1:evm/src/MercesIncome.sol​

Source: stage1:evm/src/MercesIncome.sol#L608.

function _derive(SeriesCore memory core, Ledger storage l, Pause[] storage ps, uint256 ts)
internal
view
returns (SeriesStatus)
{
if (core.terminalStatus != 0) return SeriesStatus(core.terminalStatus);
if (core.raiseState != RaiseState.Settled) return SeriesStatus.OnTime; // nothing is due before settlement
if (_isPaused(ps, ts)) return SeriesStatus.Paused;
if (_trueupOverdue(l, ps, ts)) return SeriesStatus.Late;
uint256 c = _countdown(ps, _earliestUnpaid(l, core), ts);
if (c <= C.DEADLINE_SECONDS) return SeriesStatus.OnTime;
if (c <= C.GRACE_SECONDS) return SeriesStatus.InGrace;
return SeriesStatus.Late;
}

State transition entry points​

Each row identifies a function containing a stored state assignment or a state-changing call. These are locations to inspect, not unconditional transitions: each function’s guards and called functions determine whether execution reaches the change.

FunctionSource statement (first line)Location
openRaisea.state = RaiseState.Open;stage1:evm/src/MercesAuction.sol#L67
cancelRaisea.state = RaiseState.Cancelled;stage1:evm/src/MercesAuction.sol#L86
cancelRaiseregistry().markRaiseResult(seriesId, RaiseState.Cancelled, 0, 0, 0);stage1:evm/src/MercesAuction.sol#L87
beginSettlementa.state = RaiseState.Settling;stage1:evm/src/MercesAuction.sol#L169
finalizeSettlementa.state = RaiseState.Settled;stage1:evm/src/MercesAuction.sol#L260
finalizeSettlementregistry().markRaiseResult(seriesId, RaiseState.Settled, a.settlementTs, unitsSold, p);stage1:evm/src/MercesAuction.sol#L266
_faila.state = RaiseState.Failed;stage1:evm/src/MercesAuction.sol#L287
_failregistry().markRaiseResult(seriesId, RaiseState.Failed, a.settlementTs, 0, p);stage1:evm/src/MercesAuction.sol#L293
_syncl.storedStatus = next;stage1:evm/src/MercesIncome.sol#L546
_storeCorecore.raiseState = RaiseState.Draft;stage1:evm/src/MercesRegistry.sol#L521
markRaiseOpenedcore.raiseState = RaiseState.Open;stage1:evm/src/MercesRegistry.sol#L677
markRaiseResultcore.raiseState = state;stage1:evm/src/MercesRegistry.sol#L695
markTerminalcore.terminalStatus = uint8(status);stage1:evm/src/MercesRegistry.sol#L726
_retireregistry().markTerminal(seriesId, SeriesStatus.Retired);stage1:evm/src/MercesVault.sol#L191
redeemregistry().markTerminal(seriesId, SeriesStatus.Redeemed);stage1:evm/src/MercesVault.sol#L429
extinguishregistry().markTerminal(seriesId, SeriesStatus.Extinguished);stage1:evm/src/MercesVault.sol#L606
sync_statusself.status = new as u8;stage1:solana/programs/merces_protocol/src/common.rs#L431
init_after_settlementself.status = SeriesStatus::OnTime as u8;stage1:solana/programs/merces_protocol/src/common.rs#L666
retireledger.status = SeriesStatus::Retired as u8;stage1:solana/programs/merces_protocol/src/common.rs#L682
complete_curveregistry.mark_raise_result(RAISE_SETTLED, settlement_ts, units_sold, p0)?;stage1:solana/programs/merces_protocol/src/curve.rs#L888
redeemledger.status = SeriesStatus::Redeemed as u8;stage1:solana/programs/merces_protocol/src/exit.rs#L138
extinguishledger.status = SeriesStatus::Extinguished as u8;stage1:solana/programs/merces_protocol/src/exit.rs#L277
open_raisea.state = RAISE_OPEN;stage1:solana/programs/merces_protocol/src/raise.rs#L409
cancel_raisea.state = RAISE_CANCELLED;stage1:solana/programs/merces_protocol/src/raise.rs#L456
cancel_raise.mark_raise_result(RAISE_CANCELLED, 0, 0, 0)?;stage1:solana/programs/merces_protocol/src/raise.rs#L482
begin_settlementa.state = RAISE_SETTLING;stage1:solana/programs/merces_protocol/src/raise.rs#L657
finalize_settlementa.state = RAISE_FAILED;stage1:solana/programs/merces_protocol/src/raise.rs#L840
finalize_settlementregistry.mark_raise_result(RAISE_FAILED, now, 0, clearing_price)?;stage1:solana/programs/merces_protocol/src/raise.rs#L847
finalize_settlementa.state = RAISE_SETTLED;stage1:solana/programs/merces_protocol/src/raise.rs#L913
finalize_settlementregistry.mark_raise_result(RAISE_SETTLED, now, units_sold, a.clearing_price)?;stage1:solana/programs/merces_protocol/src/raise.rs#L918
create_seriess.raise_state = RAISE_DRAFT;stage1:solana/programs/merces_registry/src/lib.rs#L669
mark_raise_openeds.raise_state = RAISE_OPEN;stage1:solana/programs/merces_registry/src/lib.rs#L873
mark_raise_results.raise_state = RAISE_CANCELLED;stage1:solana/programs/merces_registry/src/lib.rs#L906
mark_raise_results.raise_state = RAISE_FAILED;stage1:solana/programs/merces_registry/src/lib.rs#L913
mark_raise_results.raise_state = RAISE_SETTLED;stage1:solana/programs/merces_registry/src/lib.rs#L927
mark_curve_activateds.raise_state = RAISE_OPEN;stage1:solana/programs/merces_registry/src/lib.rs#L1031

What can go wrong​

These tables describe the checked source. Generated interfaces do not establish that a deployment exists or that a transaction is appropriate. Source discrepancies and unresolved product decisions still require review before using funds.