Contracts¶
Six contracts on Ethereum mainnet hold the parts of Omxus that no server should own: who is a verified human, and where verification fees go. The sign-in provider works without them. Read them when you want an answer anyone can check without trusting Omxus.
Everything below was read from mainnet on 30 Oct 2026 (block 26,304,724). Each deployed contract carries every function its source declares, except where this page says otherwise.
Addresses¶
| Contract | What it does |
|---|---|
| HER | One non-transferable token per verified human0x262a…4C77 |
| Commons | ERC-20 token (OMXUS), one free per verified human, earns 70% of fees0x6E9f…8216 |
| Verifier | Answers "is this a verified human?" for a fee and splits it0x2202…3D4d |
| Fee controller | Sets the fee from demand0xE030…0BF8 |
| Operations | Receives 30% of fees and pays the people who run the network0xB853…f0c4 |
| Keeper | Chainlink Automation job that nudges the fee and pays operations0x8Cad…0830 |
Full addresses, to copy:
HER 0x262a86d8cdE379BF95B6A73fDe4EbfEC95f34C77
Commons 0x6E9f45F165c0a126c82Bb45b560FB26B77558216
Verifier 0x2202DD578355bB1DDA3503AdeEd439ddb0373D4d
Fee controller 0xE03002533D0b1EbEfAd66f6D0050d0bAAb100BF8
Operations 0xB8539E47418e9b63671219AEE048ea462dAaf0c4
Keeper 0x8CadbC417a8A86842c7531Ec258148951a1c0830
No contract can be upgraded. A fix means a new deployment and a move.
How they connect¶
Read from each contract's own pointers:
- Verifier points at HER, Commons, the fee controller and Operations.
- Commons points at HER: only a HER holder can claim the free share.
- The Keeper points at the fee controller and Operations.
- The Verifier holds Commons'
POOL_ROLE(it reports revenue) and the fee controller'sVERIFIER_ROLE(it records each check).
A paid check flows like this: the Verifier asks the fee controller for the fee and records the check, asks HER whether the address is verified and its trust score, sends 70% to Commons and 30% to Operations, and refunds any overpayment.
Checking a person¶
Free, no transaction: call isHuman(address) on the Verifier, or
isVerified(address) and getTrustScore(address) on HER. These are view
calls; any Ethereum node answers them.
Paid, on chain: verifyHuman(address) with the fee attached returns
(bool isHuman, uint256 trustScore) and emits VerificationRequested.
verifyHumanBatch(address[]) does many at once. Pay it when you need the
answer recorded on chain, or when your own contract needs it mid-transaction.
The read below needs no library. Run as written, in Node 18 or later, against a public node:
const RPC = 'https://ethereum-rpc.publicnode.com';
const VERIFIER = '0x2202DD578355bB1DDA3503AdeEd439ddb0373D4d';
async function ethCall(to, data) {
const res = await fetch(RPC, {
method: 'POST',
headers: { 'content-type': 'application/json' },
body: JSON.stringify({ jsonrpc: '2.0', id: 1, method: 'eth_call', params: [{ to, data }, 'latest'] }),
});
const { result, error } = await res.json();
if (error) throw new Error(error.message);
return result;
}
// isHuman(address) = 0xf72c436f, then the address padded to 32 bytes
async function isHuman(address) {
const arg = address.toLowerCase().replace(/^0x/, '').padStart(64, '0');
return BigInt(await ethCall(VERIFIER, '0xf72c436f' + arg)) === 1n;
}
// getVerificationFee() = 0xb9a7eb51, answer in wei
const fee = BigInt(await ethCall(VERIFIER, '0xb9a7eb51'));
console.log(await isHuman('0x000000000000000000000000000000000000dEaD')); // false
console.log(fee); // 100000000000000n (0.0001 ETH)
The sign-in provider reads the same contract for you: /vouch/chain and the
onchain part of /vouch/graph (see
Vouching and sybil resistance).
HER¶
Name "OMXUS Human Existence Record", symbol HER. An ERC-721 that refuses
approve, setApprovalForAll and every transfer (Soulbound).
| Call | Who, and what it does |
|---|---|
vouch(address human) |
A HER holder: adds a vouch; the third mints the token |
isVerified(address) |
Anyone, free: true once minted |
getTrustScore(address) |
Anyone, free: 0 to 1000 |
getPendingVouchCount(address) |
Anyone, free: vouches so far, before minting |
getHER(address) |
Anyone, free: the full record |
totalVerified() |
Anyone, free: number of holders |
bootstrapVerify(human, herHash, vouchers[3]) |
VERIFIER_ROLE: mints the first holders, who have nobody to vouch for them |
updateTrustScore(tokenId, delta) |
VERIFIER_ROLE: moves a score; a drop also costs each voucher a third of it (at least 1) |
Events: VouchReceived, HumanVerified, TrustScoreUpdated. The vouching
rules and how the provider's score differs from this one are in
Vouching and sybil resistance.
The deployed HER lacks two limits in the current source: MAX_VOUCHES() and
VOUCH_COOLDOWN() revert. Nothing on chain stops one holder vouching often.
Commons¶
Name "OMXUS Commons", symbol OMXUS, 18 decimals, with permit (EIP-2612).
| Call | Who, and what it does |
|---|---|
claimBasicShare() |
A HER holder, once: mints 1 OMXUS; reverts NotVerified or AlreadyClaimed |
pendingRevenue(address) |
Anyone, free: ETH owed to that holder, in wei |
claimRevenue() |
Any holder: sends that ETH; returns the amount |
transfer, approve, permit |
Any holder: an ordinary ERC-20 |
distributeRevenue(amount) |
POOL_ROLE (the Verifier): spreads new revenue over every token |
Revenue is shared by tokens held, not by person: the free token is a floor, not a cap.
Verifier¶
| Call | Who, and what it does |
|---|---|
isHuman(address) |
Anyone, free: HER's answer |
getVerificationFee() |
Anyone, free: current fee in wei |
verifyHuman(address) |
Anyone, pays the fee: answer + score, recorded; refunds extra |
verifyHumanBatch(address[]) |
Anyone, pays fee x count: many at once; refunds extra |
getStats() |
Anyone, free: checks, revenue, to Commons, to Operations (wei) |
registerApiKey(bytes32 keyHash) |
Anyone, with ETH: prepaid balance against a key hash |
topUpApiKey(bytes32) / withdrawApiKeyBalance(bytes32) |
Owner: add to or take back the balance |
useApiKey(bytes32, address) |
OPERATOR_ROLE: a check charged to a prepaid key |
COMMONS_SHARE is 70 and fixed in the bytecode: 70% to Commons, the rest to
Operations. Errors: InsufficientPayment(sent, required), InvalidAddress,
TransferFailed, ApiKeyAlreadyRegistered.
useApiKey is for an off-chain verification API run by an operator. No such
API answers today.
Fee controller¶
The fee lives between a floor of 0.0001 ETH and a ceiling of 0.001 ETH. Every paid check counts towards an hourly window. When an hour closes:
- more than 100 checks: the fee rises, by 0.1% of itself per check over 100;
- fewer than 50: it falls, by 0.1% of itself per check short of 50;
- between: it slides 1% of the way back to the floor.
getFee() and currentFee() read it; previewNextFee() shows the next one;
adjustFeeIfNeeded() closes a finished hour, and anyone may call it.
Operations and Keeper¶
Operations pays registered providers each week (epoch: 604,800 seconds) out of
the 30%. Shares, in thousandths: mesh nodes 400, keepers 200, gateways 200,
emergency network 100, reserve 100. A provider registers with
registerProvider(type) and a stake of 0.01 ETH (type 0 mesh, 1 keeper,
2 gateway, 3 emergency), sends submitServiceProof(hash) once an epoch, and
gets the stake back with deregisterProvider().
The Keeper's checkUpkeep / performUpkeep follow Chainlink Automation: at
most once an hour each, it closes the fee window and pays the epoch.
What is live today¶
- One verified human. One OMXUS token. One paid check (0.0001 ETH: 70% to Commons, 30% to Operations); none of it claimed yet.
- No registered providers, so Operations has nobody to pay.
- The Keeper last ran on 15 Mar 2026. Operations' epoch counter stands at 5; it moves only when someone calls it.
- Source: HER's is published and matches the chain exactly on Sourcify. The other five are not published yet, so Etherscan shows bytecode only.