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
Section titled “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
Section titled “The numbers”YANG.Pole[] — frozen at construction
Section titled “YANG.Pole[] — frozen at construction”From YANG constructor:
// 1. Bang: React via YAURho.Bang = Mu.React()Rho.Bang.Xi = Pole[0] = Rho.Bang.Omicron
// 2. Le: React via ZHOURho.Le = Mu.Tau().React(Pole[0])Rho.Le.Xi = Pole[1] = Rho.Le.Omicron
// 3. Lai: new SHIO pair, XOR'd XiRho.Lai.Xi = Rho.Bang.Omega ^ Rho.Le.OmegaRho.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
Section titled “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
Section titled “Where Eta gets called”Every one of these triggers a RING.Eta():
META.Beat(Waat)→ called inside everyWORLD.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
Section titled “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.
Use these calls here. Simulations preview the current state; each confirmed call is a separate transaction.
0xB702b3ec6d9De1011BE963EFe30A28b6dDFbe011YANG.Pole(uint256)Read
Open this function to load its call form.
0x1574c84Ec7fA78fC6C749e1d242dbde163675e72RING.Moments(uint64 Soul)Read
Open this function to load its call form.
RING.Eta()Simulate / call
Open this function to load its call form.
Worked example
Section titled “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 becomesIota_code. - Block N+2: read, then
Faa(...)— Moment becomesIota_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
Section titled “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
Section titled “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.