Skip to content

Cheat Sheet — Timing Windows

Every timestamp, TTL, and state-window the game enforces. If a strategy depends on "remember to do X before Y expires", it's on this page.

The three player-visible TTLs

Window Duration What expires Source
Guest-list entry at a QING 1 day (block.timestamp + 1 days) Your admission at a QING. Past the stamp, _list[UserToken] < block.timestamp and you must re-pay cover on next Join. QING.Join()
Encrypted message 10 days (block.timestamp + (10 days)) The crypt slot. Passed-TTL crypts can be swept by Prune. ENCRYPT
Voting round Per-round (round is a counter, not a time) When Round increments, the stored Vote and Submissions for that user are effectively reset on next access. USERVOTE

Pole — the state-machine cadence

YANG ships a Pole[3]:

Index Derives from When it advances
Pole[0] Bang.Omicron — YAU.React() On a YAU-level reaction (e.g. system-wide state change).
Pole[1] Le.Omicron — ZHOU.React(Pole[0]) On a ZHOU-level reaction (market-rate level).
Pole[2] Lai.Omicron — new SHIO install, Xi = Bang.Omega ^ Le.Omega On SHIO re-install.

Bang / Le / Lai are not "phases you wait out" — they're state snapshots updated by system reactions. See Timing: Pole & Ring.

Ring — the moment log

RING.Eta() produces a 4-tuple (Phoebe, Iota, Chao, Charge) and writes Moments[Soul] = Iota on each call. The Iota is then squared: Iota = Iota * Iota for the return value.

Effect Cadence
Moments[Soul] overwrite Every Eta() call
Eta() is called during META.Beat(), which runs inside WORLD.Code(); also directly during WAR.Faa().

So every time you Code or someone Faas your position, your Moment is overwritten with a fresh Iota.

WAR — high-score comparison

Effect Condition Source
H2O mint to your YUE Waat > _taan[Caude][Position] (strict >; ties don't pay) WAR
_taan[Caude][Position] update Same check succeeds WAR
CO2 += Chao (from RING.Eta) Same WAR

No time window — purely a "beat the previous record" mechanic per (Caude, Position).

WORLD.Code() — the territory claim

Happens in one transaction. All of these run inside Code():

  1. Meta.Beat(QingWaat) — recompute Dione, Charge, Deimos, Yeo. Yeo = raw_yeo / Chao.
  2. Range check: |Latitude - qlat| ≤ Yeo and |Longitude - qlon| ≤ Yeo.
  3. _creators[Latitude][Chi][Cause] += Deimos.
  4. Vitus.Mint(Chi, Dione).

Ring.Eta() runs inside Meta.Beat(), so a Code() call also advances your Moments[Soul]. Multiple Code()s per block are possible but each one changes your own Ring state. See Territory: WORLD.Code() Cadence.

Distribute — the payout event

WORLD.Distribute(Caude, Distributive, Amount) sweeps all stored _creators allocations for a given Caude and sends tokens per-creator. This is event-triggered by the token owner, not time-triggered. There's no fixed cadence.

Encrypt — the crypt lifecycle

  1. Encrypt — append a new crypt to _encryptions, set Expiry = block.timestamp + 10 days.
  2. In the next 10 days — the crypt is live.
  3. Prune — sweeps any entries with Expiry < block.timestamp. Doesn't run automatically.
  4. If never pruned, expired crypts still sit in storage; they just can't be decrypted.

See Timing: TTL Calendar.

Guest list — the 1-day cover refresh

Full lifecycle at a QING with a cover charge:

  1. You call Join(UserToken).
  2. If CoverCharge > 0 and _list[UserToken] < block.timestamp:
  3. Transfer CoverCharge of Asset from msg.sender to the QING.
  4. _list[UserToken] = block.timestamp + 1 days.

Implication: if you Join again within 1 day, you don't re-pay. You only re-pay when the stamp has passed. Exactly-at-1-day is borderline — < is strict, so the refresh only fires strictly after the stamp.

Round resets (USERVOTE)

Rounds are counters in USERVOTE, not timestamps. A round "ends" when something — usually the word-game contract wrapping this struct — increments the round. On the next access for that user, their stored Vote/Submissions for prior rounds are stale.

Block-level timing

Everything Dysnomia does runs in a single transaction or sequence of transactions. No cross-block commitments. No delay queues. No vesting. This makes bundling (see Meta: DSS Bundling) extremely attractive.

Summary table

Window Duration Refreshable? Auto-swept?
QING guest-list 1 day Yes, by re-Join No (overwritten by next Join)
ENCRYPT crypt 10 days No Only by manual Prune
USERVOTE round Counter By round increment N/A
Pole state Reactive On reactions N/A
RING Moments[Soul] Overwritten On every Eta() N/A
WAR _taan[…] Monotonic per-position Only by beating it Never