Skip to content

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 human
0x262a…4C77
Commons ERC-20 token (OMXUS), one free per verified human, earns 70% of fees
0x6E9f…8216
Verifier Answers "is this a verified human?" for a fee and splits it
0x2202…3D4d
Fee controller Sets the fee from demand
0xE030…0BF8
Operations Receives 30% of fees and pays the people who run the network
0xB853…f0c4
Keeper Chainlink Automation job that nudges the fee and pays operations
0x8Cad…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's VERIFIER_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.