Timing — Pole & Ring¶
TL;DR: YANG's
Pole[3]is construction-time fixed — you will never change it, nobody will. RING'sMoments[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 everyRING.Eta()call, which happens insideMETA.Beat(i.e. inside everyWORLD.Code) and insideWAR.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¶
- 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.
- 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. - 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.
- Phoebe is what matters for WAR.Faa.
Waat = modExp(Phoebe, Charge, Meridians[89]). Phoebe comes directly out ofPang.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. - 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). - (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 isIota_code². - Your read of
Moments[Soul]seesIota_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], notuint256[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]storesIota, notIota². 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.
Momentsis just apublic mapping; you cannot subscribe to changes. You must poll. - Pole[] isn't Rho. Confusingly, YANG has both
Pole uint64[3]andRho Tai { Bang, Le, Lai }. Pole stores only theOmicronfrom each; Rho holds the full Bao structs. For most reads you want Pole.
Where it cross-connects¶
- Timing: TTL Calendar — every expiry in one table.
- Timing: First-Mover Tradeoffs — why Pole being frozen favors neither early nor late entrants (but Moments freshness favors whoever acts first in a block).
- Territory: WORLD.Code Cadence — where most of your Eta overwrites originate.
- Territory: CO2 Dynamics — the other path that fires Eta.
- Power: Entropy Discipline — why Omicron/Omega drift matters for Chao and Charge.
- Cheat Sheet: Power Formulas — the chain that feeds Pole and the chain Eta feeds into.