Player's Guide

CHO — The Login Gate

Last updated:

Evidence scope: The behavior below is from the pinned Solidity source. A source-file hash does not establish deployed bytecode equivalence. Check the selected deployment and caller before sending a transaction.

CHO stores Delegates[wallet], a User record, and DelegateAddresses[Soul], a wallet address. Enter(lau) checks lau.owner(tx.origin) and selects that LAU for the transaction origin. LAUFactory and VOID session creation do not themselves populate this CHO delegate record.

  • Call Enter(lau) to register or switch to an owned LAU.
  • Read GetUserTokenAddress(wallet) for that wallet’s active LAU and GetUserSoul() for the caller’s active Soul.
  • Read Addresses(alias) for an alias that has actually been registered; an example token name is not proof that the alias exists.
  • GetUser() and GetUserBySoul() are state-changing reactions in this snapshot, not ordinary view getters. Use an eth_call preview when you only want to inspect their results.

Use these calls here. Simulations preview the current state; each confirmed call is a separate transaction.

CHO
0xB6be11F0A788014C1F68C92F8D6CcC1AbF78F2aB
CHO.GetUserTokenAddress(address wallet)Read

Open this function to load its call form.

CHO.Enter(address UserToken)Simulate / call

Open this function to load its call form.

CHO.GetUserSoul()Read

Open this function to load its call form.

CHO.Addresses(string)Read

Open this function to load its call form.

VerifyUserTokenPermissions(lau) checks the transaction origin’s WITHOUT balance and whether the supplied LAU owns the expected SHIO and Rod. It does not check whether the caller owns that LAU. Enter adds the caller-ownership check separately.

Direct QING.Chat uses VerifyUserTokenPermissions without adding a caller-ownership check, while LAU.Chat is restricted by onlyOwners. An MCP policy that requires caller ownership for the first call is an additional client restriction. A QING event’s Username/Soul alone must not be treated as a signer-authentication proof.

The shown check is WITHOUT.balanceOf(tx.origin) == 0. A balance on the LAU is not checked by this function, and the condition is a current balance check rather than a permanent account flag.

Luo() evolves CHO reaction state, computes a nonzero unused value, and records it in Qu. It is owner-gated and stateful. It is not a fixed coordinate derived from a user’s wallet address.

See CHO source and QING caller checks. Keep CHO’s cached User fields separate from the LAU’s current attributes; a username change does not itself rewrite an existing delegate record.