Hecke
Source Revision 0x43eaadc8…4a74de
| Property | Value |
|---|---|
| Source Revision | 0x43eaadc802dbc2559957b17ac5f11129b3490732c0c2e8a44b7e38395f4a74de |
| Source URL | https://raw.githubusercontent.com/busytoby/atropa_pulsechain/4524ff259eb1e76fe377a8abb1b2d246a08118bf/solidity/dysnomia/lib/heckemeridians.sol |
| Source commit | 4524ff259eb1e76fe377a8abb1b2d246a08118bf |
| Source Status | Source snapshot; source hashes do not establish deployed bytecode equivalence. |
| Compiler | solc 0.8.21; optimizer enabled with 200 runs |
| Compiler Configuration | {"evmVersion":"compiler-default","optimizer":{"enabled":true,"runs":200},"version":"0.8.21+commit.d9974bed.Linux.g++"} |
| Compilation Closure Hash | 0x2c77db20345cff4f5c0d94941dc77b2e8bedc0cfea2e5947488991c90d3861c3 |
| Compilation Closure Files | 20 |
| Hash Generated | 2026-04-20T02:38:30Z |
Overview
Section titled “Overview”Hecke implements a geographic coordinate system with 90 meridian bands. It maps large numbers (Waat values) to latitude/longitude coordinates, enabling location-based token mechanics.
- Kind: Contract
- License: Sharia
- Solidity: ^0.8.21
- Source:
lib/heckemeridians.sol
Inheritance Chain (C3 Linearized)
Section titled “Inheritance Chain (C3 Linearized)”- self — Hecke
- DYSNOMIA
- MultiOwnable
Immediate Parents
Section titled “Immediate Parents”What This Means For Players
Section titled “What This Means For Players”Plain English Summary: Hecke is the coordinate system - it turns numbers into map locations. Every QING has a “Waat” (position number) that Hecke converts into latitude and longitude coordinates. This is how the game places venues on the world map.
Real-World Analogy: Think of Hecke like a GPS system that converts numerical addresses into physical locations. Just as your GPS turns an address into “you are here” on a map, Hecke turns a Waat number into a specific latitude/longitude position in the Dysnomia world.
How It Affects Your Gameplay:
- Map positions - Every venue has a unique position calculated by Hecke
- 90 meridian bands - The world is divided into 90 zones from south to north
- Territory proximity - When claiming territory, your distance from venues is calculated using Hecke coordinates
- Geographic lookup - Find which venue is at any given coordinates
State Variables
Section titled “State Variables”| Variable | Type | Visibility | Mutability | Initial Value | NatSpec |
|---|---|---|---|---|---|
Meridians |
uint256[90] |
public | mutable | `[ | |
| 476733977057179, | |||||
| 3256639860692891, | |||||
| …` |
Constructor
Section titled “Constructor”constructor
Section titled “constructor”constructorconstructor
constructor(address ChoAddress) DYSNOMIA("Dysnomia Hecke", "HECKE", address(DYSNOMIA(ChoAddress).Xiao()))- Modifiers:
DYSNOMIA("Dysnomia Hecke", "HECKE", address(DYSNOMIA(ChoAddress).Xiao())) - Parameters: address ChoAddress
Functions
Section titled “Functions”External & Public
Section titled “External & Public”Compliment
Section titled “Compliment”Complimentfunction
function Compliment(uint256 Waat) public view returns (int256 Longitude, int256 Latitude)Open this function to load its call form.
- Visibility: public
- State Mutability: view
- Parameters: uint256 Waat
- Returns: int256 Longitude, int256 Latitude
GetWaat
Section titled “GetWaat”GetWaatfunction
function GetWaat(int256 Latitude) public view returns (uint256 Waat)Open this function to load its call form.
- Visibility: public
- State Mutability: view
- Parameters: int256 Latitude
- Returns: uint256 Waat
GetMeridian
Section titled “GetMeridian”GetMeridianfunction
function GetMeridian(uint256 Waat) public view returns (uint256 Meridian)Open this function to load its call form.
- Visibility: public
- State Mutability: view
- Parameters: uint256 Waat
- Returns: uint256 Meridian
Inherited Members
Section titled “Inherited Members”Public and external functions below are callable through this contract’s address. Parent links identify where each member is defined.
External & Public Functions
Rename
Section titled “Rename”Renamefunction
function Rename(string memory newName, string memory newSymbol) public virtual onlyOwnersOpen this function to load its call form.
- Visibility: public
- Virtual: yes
- Modifiers:
onlyOwners - Parameters: string memory newName, string memory newSymbol
mintToCap
Section titled “mintToCap”mintToCapfunction
function mintToCap() public onlyOwnersOpen this function to load its call form.
- Visibility: public
- Modifiers:
onlyOwners
GetMarketRate
Section titled “GetMarketRate”GetMarketRatefunction
function GetMarketRate(address _a) public view returns (uint256)Open this function to load its call form.
- Visibility: public
- State Mutability: view
- Parameters: address _a
- Returns: uint256
Purchase
Section titled “Purchase”Purchasefunction
function Purchase(address _t, uint256 _a) publicOpen this function to load its call form.
- Visibility: public
- Parameters: address _t, uint256 _a
Redeem
Section titled “Redeem”Redeemfunction
function Redeem(address _t, uint256 _a) publicOpen this function to load its call form.
- Visibility: public
- Parameters: address _t, uint256 _a
namefunction
function name() public view virtual returns (string memory)Open this function to load its call form.
- Visibility: public
- State Mutability: view
- Virtual: yes
- Returns: string memory
symbol
Section titled “symbol”symbolfunction
function symbol() public view virtual returns (string memory)Open this function to load its call form.
- Visibility: public
- State Mutability: view
- Virtual: yes
- Returns: string memory
decimals
Section titled “decimals”decimalsfunction
function decimals() public view virtual returns (uint8)Open this function to load its call form.
- Visibility: public
- State Mutability: view
- Virtual: yes
- Returns: uint8
totalSupply
Section titled “totalSupply”totalSupplyfunction
function totalSupply() public view virtual returns (uint256)Open this function to load its call form.
- Visibility: public
- State Mutability: view
- Virtual: yes
- Returns: uint256
balanceOf
Section titled “balanceOf”balanceOffunction
function balanceOf(address account) public view virtual returns (uint256)Open this function to load its call form.
- Visibility: public
- State Mutability: view
- Virtual: yes
- Parameters: address account
- Returns: uint256
transfer
Section titled “transfer”transferfunction
function transfer(address to, uint256 value) public virtual returns (bool)Open this function to load its call form.
- Visibility: public
- Virtual: yes
- Parameters: address to, uint256 value
- Returns: bool
allowance
Section titled “allowance”allowancefunction
function allowance(address owner, address spender) public view virtual returns (uint256)Open this function to load its call form.
- Visibility: public
- State Mutability: view
- Virtual: yes
- Parameters: address owner, address spender
- Returns: uint256
approve
Section titled “approve”approvefunction
function approve(address spender, uint256 value) public virtual returns (bool)Open this function to load its call form.
- Visibility: public
- Virtual: yes
- Parameters: address spender, uint256 value
- Returns: bool
transferFrom
Section titled “transferFrom”transferFromfunction
function transferFrom(address from, address to, uint256 value) public virtual returns (bool)Open this function to load its call form.
- Visibility: public
- Virtual: yes
- Parameters: address from, address to, uint256 value
- Returns: bool
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 |
_approve |
function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual |
_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 |
External & Public Functions
ownerfunction
function owner() external view virtual returns (address)Open this function to load its call form.
- Visibility: external
- State Mutability: view
- Virtual: yes
- Returns: address
ownerfunction
function owner(address cOwner) public view virtual returns (bool)Open this function to load its call form.
- Visibility: public
- State Mutability: view
- Virtual: yes
- Parameters: address cOwner
- Returns: bool
renounceOwnership
Section titled “renounceOwnership”renounceOwnershipfunction
function renounceOwnership(address toRemove) public virtual onlyOwnersOpen this function to load its call form.
- Visibility: public
- Virtual: yes
- Modifiers:
onlyOwners - Parameters: address toRemove
addOwner
Section titled “addOwner”addOwnerfunction
function addOwner(address newOwner) public virtual onlyOwnersOpen this function to load its call form.
- Visibility: public
- Virtual: yes
- Modifiers:
onlyOwners - Parameters: address newOwner
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) |
Meridians Array
Section titled “Meridians Array”The Meridians array contains exponentially increasing boundary values:
Meridians[0] = 476733977057179 // ~4.7e14Meridians[1] = 3256639860692891 // ~3.2e15...Meridians[88] = 394003890037732925341349197890665503744188106368861304015211794431709973855Meridians[89] = 788007780075465850682698395781331007488376212737722608030423588863419947711The array represents:
- Meridians 0-88: Southern to Northern hemisphere bands
- Meridian 89: Maximum value (wraps to north pole)
Contract Interactions
Section titled “Contract Interactions”Depends On
Section titled “Depends On”- DYSNOMIA V2 - Base functionality
- CHO - Receives market rate
Depended On By
Section titled “Depended On By”Special Mechanisms
Section titled “Special Mechanisms”Coordinate System
Section titled “Coordinate System” North Pole (Meridian 89) ↑ +Lat ←---|---→ -Lat | South Pole (Meridian 0)
West ← Longitude → East (-X) (+X)Compliment Algorithm
Section titled “Compliment Algorithm”1. Assert Waat <= Meridians[89]2. Get Meridian index3. If Meridian == 89: - Flip to northern hemisphere - Recalculate from inverse4. Calculate Latitude from Meridians[88] distance5. Calculate Longitude within meridian band: - First half: positive longitude - Second half: negative longitude6. Scale Latitude by 3337. Apply hemisphere signLatitude Scaling
Section titled “Latitude Scaling”Latitude is divided by 333 to compress the large Waat values into manageable coordinate ranges.
Hemisphere Handling
Section titled “Hemisphere Handling”Values above Meridian 88 represent the northern hemisphere, handled by subtracting from the maximum and recalculating.
Usage Pattern
Section titled “Usage Pattern”// Get coordinates for a Waat value(int256 lon, int256 lat) = hecke.Compliment(someWaat);
// Find meridian for a valueuint256 meridian = hecke.GetMeridian(someWaat);
// Get Waat for latitudeuint256 waat = hecke.GetWaat(lat);Geographic Token Mechanics
Section titled “Geographic Token Mechanics”The Hecke system enables:
- Location-based tokens: Each QING token has a Waat that maps to coordinates
- Proximity checks: Determine if tokens are in the same region
- Territory mechanics: Define areas based on meridian bands
- Distance calculations: Compare Waat values for relative position
Example Mapping
Section titled “Example Mapping”Waat = 476733977057179 (Meridian 0 boundary)→ Near equator, specific longitude
Waat = 394003890037732925... (Meridian 88)→ Near north pole, high latitude
Waat between boundaries→ Proportional position within bandIntegration with MAP
Section titled “Integration with MAP”The MAP contract uses Hecke to:
- Assign geographic position to new QING tokens
- Organize tokens by location
- Enable location-based lookup via
_map[Latitude][Longitude]
Inherited functions and getters (4)
Hecke.Meridians(uint256)Read
Open this function to load its call form.
Hecke.MotzkinPrime()Read
Open this function to load its call form.
Hecke.Xiao()Read
Open this function to load its call form.
Hecke.maxSupply()Read
Open this function to load its call form.
Compiled ABI
Section titled “Compiled ABI”The compiled ABI below is produced by solc 0.8.21 from the exact source bytes recorded in Source details. Consumers can paste it directly into ethers/web3/viem.
Click to expand JSON ABI
[ { "inputs": [ { "internalType": "address", "name": "ChoAddress", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "address", "name": "origin", "type": "address" }, { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "address", "name": "what", "type": "address" }, { "internalType": "uint256", "name": "allowance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "DysnomiaInsufficientAllowance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "origin", "type": "address" }, { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "address", "name": "what", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "DysnomiaInsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "asset", "type": "address" } ], "name": "MarketRateNotFound", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "origin", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "what", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "origin", "type": "address" }, { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "address", "name": "what", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" }, { "indexed": true, "internalType": "bool", "name": "state", "type": "bool" } ], "name": "OwnershipUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [ { "internalType": "uint256", "name": "Waat", "type": "uint256" } ], "name": "Compliment", "outputs": [ { "internalType": "int256", "name": "Longitude", "type": "int256" }, { "internalType": "int256", "name": "Latitude", "type": "int256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_a", "type": "address" } ], "name": "GetMarketRate", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "Waat", "type": "uint256" } ], "name": "GetMeridian", "outputs": [ { "internalType": "uint256", "name": "Meridian", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "int256", "name": "Latitude", "type": "int256" } ], "name": "GetWaat", "outputs": [ { "internalType": "uint256", "name": "Waat", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "Meridians", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MotzkinPrime", "outputs": [ { "internalType": "uint64", "name": "", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_t", "type": "address" }, { "internalType": "uint256", "name": "_a", "type": "uint256" } ], "name": "Purchase", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_t", "type": "address" }, { "internalType": "uint256", "name": "_a", "type": "uint256" } ], "name": "Redeem", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "newName", "type": "string" }, { "internalType": "string", "name": "newSymbol", "type": "string" } ], "name": "Rename", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "Xiao", "outputs": [ { "internalType": "contract atropaMath", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "addOwner", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "mintToCap", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "cOwner", "type": "address" } ], "name": "owner", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "toRemove", "type": "address" } ], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }]