Hecke
0x29A924D9B0233026B9844f2aFeB202F1791D75930x43eaadc8…4a74deSource details
| Property | Value |
|---|---|
| Keccak256 Hash | 0x43eaadc802dbc2559957b17ac5f11129b3490732c0c2e8a44b7e38395f4a74de |
| Source URL | https://raw.githubusercontent.com/busytoby/atropa_pulsechain/58607494f7741b80525953e4a85bc99e66fd20fc/solidity/dysnomia/lib/heckemeridians.sol |
| Source Revision | 58607494f7741b80525953e4a85bc99e66fd20fc |
| Source Status | Canonical source snapshot; deployed bytecode equivalence is only established where a deployment record says so. |
| 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-09-14T19:34:21Z |
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”This contract inherits the members below from its parents. See each parent’s dedicated MD for full signatures, NatSpec, and semantics.
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 |
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) |
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 (22)
Hecke.GetMarketRate(address _a)Read
Open this function to load its call form.
Hecke.Meridians(uint256)Read
Open this function to load its call form.
Hecke.MotzkinPrime()Read
Open this function to load its call form.
Hecke.Purchase(address _t, uint256 _a)Simulate / call
Open this function to load its call form.
Hecke.Redeem(address _t, uint256 _a)Simulate / call
Open this function to load its call form.
Hecke.Rename(string newName, string newSymbol)Simulate / call
Open this function to load its call form.
Hecke.Xiao()Read
Open this function to load its call form.
Hecke.addOwner(address newOwner)Simulate / call
Open this function to load its call form.
Hecke.allowance(address owner, address spender)Read
Open this function to load its call form.
Hecke.approve(address spender, uint256 value)Simulate / call
Open this function to load its call form.
Hecke.balanceOf(address account)Read
Open this function to load its call form.
Hecke.decimals()Read
Open this function to load its call form.
Hecke.maxSupply()Read
Open this function to load its call form.
Hecke.mintToCap()Simulate / call
Open this function to load its call form.
Hecke.name()Read
Open this function to load its call form.
Hecke.owner(address cOwner)Read
Open this function to load its call form.
Hecke.owner()Read
Open this function to load its call form.
Hecke.renounceOwnership(address toRemove)Simulate / call
Open this function to load its call form.
Hecke.symbol()Read
Open this function to load its call form.
Hecke.totalSupply()Read
Open this function to load its call form.
Hecke.transfer(address to, uint256 value)Simulate / call
Open this function to load its call form.
Hecke.transferFrom(address from, address to, uint256 value)Simulate / call
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" }]