Skip to content

Timing — Pole & Ring

TL;DR: YANG's Pole[3] is construction-time fixed — you will never change it, nobody will. RING's Moments[Soul] overwrites every Eta call — sample it before you act, not after.

Why this matters

Two of the most-referenced state handles in the game have wildly different cadences:

  • YANG.Pole[] is written once, during YANG's constructor, then read forever. It is effectively a set of three permanent constants baked into the live contract.
  • RING.Moments[Soul] is rewritten on every RING.Eta() call, which happens inside META.Beat (i.e. inside every WORLD.Code) and inside WAR.Faa.

Players routinely confuse these — "my Pole values changed" almost always means "the Moment snapshot under my Soul changed." Knowing the cadence of each is the difference between predictable play and superstition.

The numbers

YANG.Pole[] — frozen at construction

From YANG constructor:

// 1. Bang: React via YAU
Rho.Bang       = Mu.React()
Rho.Bang.Xi    = Pole[0] = Rho.Bang.Omicron

// 2. Le: React via ZHOU
Rho.Le         = Mu.Tau().React(Pole[0])
Rho.Le.Xi      = Pole[1] = Rho.Le.Omicron

// 3. Lai: new SHIO pair, XOR'd Xi
Rho.Lai.Xi     = Rho.Bang.Omega ^ Rho.Le.Omega
Rho.Lai.Shio.Generate(Rho.Lai.Xi, Pole[1], Pole[0])
Rho.Lai        = Mu.Tau().Upsilon().Eta().React(Rho.Lai, Pole[1])
Pole[2]        = Rho.Lai.Omicron
Slot Value Writes after deploy?
Pole[0] Bang.Omicron Never.
Pole[1] Le.Omicron Never.
Pole[2] Lai.Omicron Never.

And YANG is built once. YAU.React() seeds it, ZHOU.React(Pole[0]) chains it, the SHIO pair (Rod/Cone) is then generated with Xi = Bang.Omega ^ Le.Omega. These three Pole values then propagate into every downstream Identity/Reaction that consults YANG's state.

Lesson: if somebody tells you to "farm your Pole," they don't know what they're talking about. Pole was locked in at deploy and you can't move it.

RING.Moments[] — overwrites per call

From RING.Eta:

function Eta() returns (Phoebe, Iota, Chao, Charge):
    (Yue, Usertoken) = Pang.Zi().Choa().Sei().Chi()
    Chao   = Yue.React(Phobos)
    (Iota, Omicron, Phoebe, Omega, Charge) = Pang.Push(Phobos.Waat())
    Chao   = Chao / Omicron
    Charge = Charge / Omega
    Moments[Usertoken.Saat(1)] = Iota    // OVERWRITE, not accumulate
    Iota = Iota * Iota
Thing Cadence Durable?
Moments[Soul] Overwritten every RING.Eta() call Only until next Eta under same Soul.
Phoebe (returned) Recomputed every call Not stored.
Iota (returned, squared) Recomputed every call Not stored (but fed to H2O mint in WAR).
Chao, Charge Recomputed every call Not stored.

Where Eta gets called

Every one of these triggers a RING.Eta(): - META.Beat(Waat) → called inside every WORLD.Code (see Territory: WORLD.Code Cadence). - WAR.Faa(Caude, Position) → called on every Faa attempt (see Territory: CO2 Dynamics).

So any territory action of yours = Moments[Soul] overwrite.

The play

  1. Never try to "influence" Pole. It's frozen. Any strategy that depends on Pole changing is wrong. Treat Pole[0..2] as read-only globals.
  2. Sample Moments[Soul] before you Code or Faa. If you want to know what Iota you had last Eta, read Moments[YourSoul] first. The next Code/Faa overwrites it.
  3. One Eta per block is the highest-fidelity reading. Two Etas back-to-back means the first value is gone — you only see the last. If you need a historical audit trail, space your ops by at least one block and record off-chain.
  4. Phoebe is what matters for WAR.Faa. Waat = modExp(Phoebe, Charge, Meridians[89]). Phoebe comes directly out of Pang.Push(Phobos.Waat()) each call, so a Faa right after a Code sees a fresh Phoebe — see Territory: WORLD.Code Cadence for the ordering implications.
  5. Don't conflate Soul-Moments with LAU-Moments. The key is Usertoken.Saat(1) — your LAU's first Saat slot, derived deterministically from the LAU address. One LAU = one Moments slot. Multi-LAU players have multi-slot Moments (rare).
  6. (inferred) Pole values shape every Identity computation downstream. If a future contract reads YANG state to mix into its own entropy, you inherit the same three constants. Treat Pole[] as part of the game's genesis DNA.

Worked example

You want to sequence: Code(lat=a, lon=1), read your Moments, then Faa(Caude=C, Position=P), for maximum information.

Naïve plan: bundle all three in one tx. You read Moments[Soul] between calls.

  • Code runs → Moments[Soul] = Iota_code. The value inside Code's Eta is Iota_code².
  • Your read of Moments[Soul] sees Iota_code.
  • Faa runs → Moments[Soul] = Iota_faa (possibly different because PANG/YUE state shifted during Code).

You now have one snapshot (Iota_code) from before Faa. But you had no reading of what-Iota-was before Code started. You lost the pre-Code Moment forever.

Better plan: three blocks. - Block N: read Moments[Soul] — this is your true pre-state. - Block N+1: Code(...) — Moment becomes Iota_code. - Block N+2: read, then Faa(...) — Moment becomes Iota_faa.

You now have three distinct moments in three distinct blocks. Each data point is a clean sample.

The general rule: Moments is not a log, it's a single-slot register. Plan around overwrites.

Gotchas

  • Pole[] is uint64[3], not uint256[3]. Downstream contracts that consume Pole treat it as a 64-bit seed, not a full-word value. Don't assume 256-bit domain.
  • Moments[Soul] stores Iota, not Iota². The squared value is only the return, only used for the H2O mint amount. Your persisted record is the pre-squared form.
  • Charge = Charge / Omega, Chao = Chao / Omicron — these are integer divisions. At low Omega/Omicron, Charge/Chao can round to zero, which kills both the CO2 contribution in WAR.Faa and the modExp exponent. See Power: Entropy Discipline.
  • (inferred) Phobos is a single QING — derived once at RING construction via Pang.Zi().Choa().Sei().Chan().Xie().Xia().Mai().Qi().Zuo(). Every player's Eta reacts against the same Phobos. The "randomness" is shared.
  • No event on Eta overwrite. Moments is just a public mapping; you cannot subscribe to changes. You must poll.
  • Pole[] isn't Rho. Confusingly, YANG has both Pole uint64[3] and Rho Tai { Bang, Le, Lai }. Pole stores only the Omicron from each; Rho holds the full Bao structs. For most reads you want Pole.

Where it cross-connects