CHOA¶
Overview¶
CHOA is the game operations contract that handles player gameplay actions. It manages playing, chatting, and coordinates with SEI for player state.
- Kind: Contract
- License: Sharia
- Solidity: ^0.8.21
- Source:
domain/sky/02_choa.sol
Inheritance Chain (C3 Linearized)¶
- self — CHOA
- DYSNOMIA
- MultiOwnable
Immediate Parents¶
What This Means For Players¶
Plain English Summary: CHOA is the gameplay controller - it handles your playing and chatting actions. When you want to start playing or send a chat message in a venue, CHOA is the contract that processes those actions and calculates your rewards.
Real-World Analogy: Think of CHOA like the game's action handler in a multiplayer game. When you press buttons to perform actions (chat, join a venue), CHOA processes those inputs, updates the game state, and dishes out experience points (rewards) based on your activity.
How It Affects Your Gameplay:
- Start playing - Use Play() to register as an active player and get your YUE set up
- Chat and earn - Chatting through CHOA earns you MAI tokens as rewards
- Yuan power - Your "Yuan" score weighs your token holdings (wallet + LAU + YUE)
- First-time bonus - New players get an initial YUE token mint
State Variables¶
| Variable | Type | Visibility | Mutability | Initial Value | NatSpec |
|---|---|---|---|---|---|
Type |
string |
public | constant | CHOA |
|
Sei |
SEI |
public | mutable | `` | |
_players |
mapping(uint64 => YUEINTERFACE) |
private | mutable | `` |
Constructor¶
constructor¶
constructor(address SeiAddress) DYSNOMIA("Dysnomia Chao", "CHOA", address(DYSNOMIA(SeiAddress).Xiao()))
- Modifiers:
DYSNOMIA("Dysnomia Chao", "CHOA", address(DYSNOMIA(SeiAddress).Xiao())) - Parameters: address SeiAddress
Functions¶
External & Public¶
Yuan¶
- Visibility: public
- State Mutability: view
- Parameters: address Currency
- Returns: uint256 Bae
Play¶
- Visibility: public
- Parameters: address UserTokenAddress
- Returns: YUEINTERFACE Chi, LAU UserToken
Chat¶
- Visibility: public
- Parameters: address Qing, string memory MSG
- Returns: uint256 Charge
Inherited Members¶
This contract inherits the members below from its parents. See each parent's dedicated MD for full signatures, NatSpec, and semantics.
From DYSNOMIA¶
External & Public Functions
| Function | Signature | State Mutability |
|---|---|---|
Rename |
function Rename(string memory newName, string memory newSymbol) public virtual onlyOwners |
nonpayable |
mintToCap |
function mintToCap() public onlyOwners |
nonpayable |
GetMarketRate |
function GetMarketRate(address _a) public view returns (uint256) |
view |
Purchase |
function Purchase(address _t, uint256 _a) public |
nonpayable |
Redeem |
function Redeem(address _t, uint256 _a) public |
nonpayable |
name |
function name() public view virtual returns (string memory) |
view |
symbol |
function symbol() public view virtual returns (string memory) |
view |
decimals |
function decimals() public view virtual returns (uint8) |
view |
totalSupply |
function totalSupply() public view virtual returns (uint256) |
view |
balanceOf |
function balanceOf(address account) public view virtual returns (uint256) |
view |
transfer |
function transfer(address to, uint256 value) public virtual returns (bool) |
nonpayable |
allowance |
function allowance(address owner, address spender) public view virtual returns (uint256) |
view |
approve |
function approve(address spender, uint256 value) public virtual returns (bool) |
nonpayable |
transferFrom |
function transferFrom(address from, address to, uint256 value) public virtual returns (bool) |
nonpayable |
Internal Functions
| Function | Signature |
|---|---|
_addLibraryOwner |
function _addLibraryOwner(VOID Void, string memory what) internal |
_mintToCap |
function _mintToCap() internal |
_addMarketRate |
function _addMarketRate(address _a, uint256 _r) internal |
_transfer |
function _transfer(address from, address to, uint256 value) internal |
_update |
function _update(address from, address to, uint256 value) internal virtual |
_mint |
function _mint(address account, uint256 value) internal |
_approve |
function _approve(address owner, address spender, uint256 value) internal |
_spendAllowance |
function _spendAllowance(address owner, address spender, uint256 value) internal virtual |
Events
| Event | Parameters |
|---|---|
Transfer |
address indexed from, address indexed to, uint256 value |
Approval |
address indexed owner, address indexed spender, uint256 value |
Errors
| Error | Parameters |
|---|---|
MarketRateNotFound |
address asset |
DysnomiaInsufficientBalance |
address origin, address sender, address from, address to, address what, uint256 balance, uint256 needed |
DysnomiaInsufficientAllowance |
address origin, address sender, address owner, address spender, address what, uint256 allowance, uint256 needed |
State Variables (private parent storage is not reachable and is omitted)
| Variable | Type | Visibility | Mutability |
|---|---|---|---|
__name |
string |
internal | mutable |
__symbol |
string |
internal | mutable |
MotzkinPrime |
uint64 |
public | constant |
Xiao |
atropaMath |
public | mutable |
maxSupply |
uint256 |
public | mutable |
From MultiOwnable¶
External & Public Functions
| Function | Signature | State Mutability |
|---|---|---|
owner |
function owner() external view virtual returns (address) |
view |
renounceOwnership |
function renounceOwnership(address toRemove) public virtual onlyOwners |
nonpayable |
addOwner |
function addOwner(address newOwner) public virtual onlyOwners |
nonpayable |
Internal Functions
| Function | Signature |
|---|---|
_checkOwner |
function _checkOwner() internal view virtual |
_changeOwnership |
function _changeOwnership(address cOwner, bool cState) internal virtual |
Events
| Event | Parameters |
|---|---|
OwnershipUpdate |
address indexed newOwner, bool indexed state |
Errors
| Error | Parameters |
|---|---|
OwnableUnauthorizedAccount |
address origin, address account, address what |
OwnableInvalidOwner |
address origin, address owner, address what |
Modifiers
| Modifier | Parameters |
|---|---|
onlyOwners |
(none) |
Contract Interactions¶
Depends On¶
- DYSNOMIA V2 - Base functionality
- SEI - Player management
- CHAN - YUE coordination
Depended On By¶
- ZI - Uses CHOA for player state
Special Mechanisms¶
Yuan Calculation¶
function Yuan(address Currency) public view returns (uint256 Bae) {
(YUEINTERFACE Yue, LAU UserToken) = Sei.Chi();
DYSNOMIA Bai = DYSNOMIA(Currency);
// Weighted sum: direct + 10x LAU + 40x YUE
return Bai.balanceOf(tx.origin)
+ (10 * Bai.balanceOf(address(UserToken)))
+ (40 * Bai.balanceOf(address(Yue)));
}
Play Registration¶
function Play(address UserTokenAddress) public returns (YUEINTERFACE Chi, LAU UserToken) {
// Enter via CHO
Sei.Chan().Xie().Xia().Mai().Qi().Zuo().Cho().Enter(UserTokenAddress);
// Get player state
(Chi, UserToken) = Sei.Chi();
// First time player gets YUE mint
if(address(_players[UserToken.Saat(1)]) == address(0x0))
Sei.Chan().YueMintToOrigin(Chi);
_players[UserToken.Saat(1)] = Chi;
}
Chat With Rewards¶
function Chat(address Qing, string memory MSG) public returns (uint256 Charge) {
(YUEINTERFACE Yue, LAU UserToken) = Sei.Chi();
QINGINTERFACE _qing = QINGINTERFACE(Qing);
// Send chat
_qing.Chat(UserToken, MSG);
// React for charge
Charge = Sei.Chan().ReactYue(Yue, Qing);
// Calculate MAI reward
uint256 Mai = Sei.Chan().Xie().Xia().Mai().React(UserToken.Saat(1), _qing.Waat());
// Cap and transfer
if(Mai > 1 * 10 ** decimals()) Mai = 1 * 10 ** decimals();
if(balanceOf(address(this)) >= Mai)
_transfer(address(this), address(Yue), Mai);
}
Contract Verification¶
| Property | Value |
|---|---|
| Keccak256 Hash | 0xe3a49cfe56d7054d4e949fa1c55bd639f366b4a6cc9fcb695ce88ada56ddcfc8 |
| Source URL | https://raw.githubusercontent.com/busytoby/atropa_pulsechain/main/solidity/dysnomia/domain/sky/02_choa.sol |
| Hash Generated | 2026-04-17T20:48:12Z |