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():
Meta.Beat(QingWaat)— recompute Dione, Charge, Deimos, Yeo. Yeo =raw_yeo / Chao.- Range check:
|Latitude - qlat| ≤ Yeoand|Longitude - qlon| ≤ Yeo. _creators[Latitude][Chi][Cause] += Deimos.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¶
Encrypt— append a new crypt to_encryptions, setExpiry = block.timestamp + 10 days.- In the next 10 days — the crypt is live.
Prune— sweeps any entries withExpiry < block.timestamp. Doesn't run automatically.- 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:
- You call
Join(UserToken). - If
CoverCharge > 0and_list[UserToken] < block.timestamp: - Transfer
CoverChargeofAssetfrommsg.senderto the QING. _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 |