AEQUITAS
PROOF OF HUMANITY
LIVE
● GHOSTDAG
◆ KNIGHTDAG
🏠 Overview
🔐 Register
🔍 Explorer
⚖️ Equality
🌐 Network
🔄 Exchange
💬 Social

🔐 Register as a Verified Human

Join the Aequitas network and receive your 1,000 AEQ Universal Basic Income grant. Registration is one-time, permanent, and completely gasless. No personal data is ever stored.
DOWNLOAD AEQUITAS APP
Android APK · direct download
For the first time in history — everyone starts equal
If you own an Android smartphone, you qualify. No bank, no crypto background, no investment needed.
0.00 Start Investment
Registration is completely gasless. No ETH, no MATIC, no credit card. The protocol pays all fees on your behalf.
1,000 AEQ for every human
Billionaire or subsistence farmer — everyone gets exactly 1,000 AEQ. Not more, not less. Equal start, guaranteed by math.
Accessible to all
No bank account, no credit card, no government ID, no extra hardware to buy — just the camera already in your Android phone.
Daily UBI forever
Once registered, you receive a daily share of UBI payouts automatically — every day, no action required.
📱
REGISTRATION VIA ANDROID APP
Registration captures your face and a short liveness sequence with the phone camera. Independent matching services check that a living person is present and that this face is not already registered; they must agree by quorum. A Groth16 Zero-Knowledge Proof then carries the result to the chain without revealing anything about you. Your 1,000 AEQ will be credited automatically upon successful verification. Note: the matching threshold has not yet been calibrated against real captures — see the FAQ below.
1
Face capture
The app records your face and a short liveness sequence and sends them to independent matching services. They check that a living person is present and compare the face against everyone already registered. The images are discarded after processing.
2
ZK Proof Generation
A Groth16 ZK proof commits your bio_hash into commitment = keccak256(bioHash‖wallet) without revealing it. The nullifier is derived from that hash, so the same face cannot count twice — see the FAQ below.
3
Connect Wallet
The app opens MetaMask on this page · connect your Ethereum wallet · the proof is cryptographically bound to your wallet address
4
1,000 AEQ Granted
Registration confirmed on Aequitas BlockDAG within 1 second · 1,000 AEQ credited instantly · your identity is permanently recorded as a verified human
🔒 Face check by quorum · Groth16 ZKP · Images discarded after checking · One registration per person
📱 MetaMask Mobile: if AEQ balance shows 0 after registration, go to Settings → Networks → delete Aequitas Chain → re-add via this website
CONNECTED WALLET
⚡ ZK PROOF RECEIVED
Connect wallet to register
// Open Aequitas Android App to generate your proof, then return here...
Registration Details
NetworkAequitas Chain (BlockDAG)
Chain ID1926 (0x786)
UBI Grant1,000 AEQ per human
Gas FeeFREE — completely gasless
RegistrationsOnce per person · permanent · immutable
FaceImages discarded after checking — an encrypted template is kept
Proof SystemGroth16 ZKP (Zero-Knowledge)
ConfirmationWithin 1 second (1 block)
Sybil ProtectionOne identity per person · face-bound, threshold not yet calibrated

Block Explorer

Block Height
BlockDAG · Parallel production
Verified Humans
Face-verified ZK proof · one registration per person
Total Supply
Always = Humans × 1,000 AEQ
Uptime
Multi-validator network
Active Validators
Distinct proposers, recent blocks
GHOSTDAG DAG View · KnightDAG-secured
selected parent chain GHOSTDAG blue — counted GHOSTDAG red — excluded, still merged not yet classified KnightDAG-secured — block infers its own K Fill = GHOSTDAG verdict · thin ring = proposer · one column per height. Hover any block for details.
Latest Blocks
One row per height — the canonical winner GHOSTDAG selected, not every validator that produced at that height. A run of the same proposer here doesn't mean the others are idle: check ⟁N next to a block # (parallel blocks merged at that height) or Active Validators above for the real count.
Block #AgeTxnsProposerType★ Score
Loading blocks...
Latest Transactions
Hash / WalletBlockTypeAmount
Loading transactions...
Block #—
✕ Close
🔒
What is a Verified Human?
A Verified Human is a wallet address proven to belong to someone whose face is not already registered. Independent matching services must agree by quorum before it counts, and only a Groth16 ZK proof reaches the chain — no image and no template. Until 2026-08-23 this verified one device rather than one person; that is no longer the case.
🧮
Zero-Knowledge Proof System
Aequitas uses Groth16 on BN128 — same curve as Ethereum and Zcash. Proof: ~200 bytes. Verification: ~10ms. commitment = Poseidon(bioHash, wallet, deviceSalt), nullifier = Poseidon(bioHash). The nullifier comes from the face, not the phone: a second device does not let the same person register again, and losing your phone does not cost you your registration. Poseidon is used rather than multiplication because the earlier circuit's nullifier was invertible — anyone could have recovered the bioHash from it.
🛡
Sybil Resistance — Current State
The nullifier is derived from the bio_hash of your face, so the same face cannot be registered twice — across devices as well, which a device key never could. What it rests on is a matching threshold that has not yet been calibrated against real captures: the cryptography is exact, the biometrics underneath it is a measurement whose error rate has not been quantified.
🌍
Global Financial Inclusion
No bank account, no credit card, no prior cryptocurrency required. Just an Android smartphone with a camera. Aequitas is designed to be accessible to every human on Earth.
🫁
Identity Verification Roadmap
Today (beta): a face check across independent matching services that must agree by quorum. Its threshold has not yet been calibrated against real captures — that needs about 1000 impostor pairs before any number is quoted. Planned: that calibration, and a duplicate check in which no service holds a whole template.
Registered Humans
0
Every address below belongs to someone whose face was checked against every existing registration by independent services, proven with a ZK proof, and credited exactly 1,000 AEQ. The registry is permanent, immutable and on-chain. See the FAQ for what the matching threshold does and does not guarantee today.
No humans registered yet.\n\nDownload the Aequitas Android App and be the first human on the chain!
Registry Stats
Total Humans0
Total Supply0 AEQ
UBI Grant1,000 AEQ
Gas FeeFREE — completely gasless
ZKP SystemGroth16 / BN128
Hash Systemkeccak256
FaceImages discarded after checking — an encrypted template is kept
Sybil ProtectionPermanent · On-chain
❓ FAQ
Is my biometric data safe?
Your face is captured and sent to independent matching services — that is the only way "one person, one account" can be checked at all. The images are processed and then discarded; they are not stored. What is kept is a mathematical template: encrypted, and split into shares across separately operated validators, so no validator ever holds a whole one. One honest limit, stated rather than hidden: the service that runs the comparison does still hold templates, because comparing needs them.
Does registration prove I am a unique real person?
Better than a device key ever could, and not yet provable as a number. The face is compared against every existing registration by independent services that must agree, so the same person on a second phone is caught — which a device key never could. What is not yet established is the error rate: the matching threshold has not been calibrated against real captures, and that needs about 1000 impostor pairs before anyone quotes a figure.
Can I register with a different wallet later?
No. A registration is permanently bound to one wallet address. That is deliberate: the nullifier derived from your face is spent once, so registering again to a different wallet would be a second identity for the same person.
What happens if I lose my phone?
Your AEQ remains in your wallet — it is tied to your private key, not your phone. You can still access your wallet via MetaMask with your seed phrase. Wallet recovery is independent of the device-key registration.
AEQ / tUSD — Live Price
Real-time price derived from pool reserves (x·y=k). Updates every 8 seconds as new pool data arrives.
— tUSD

🔄 Swap AEQ ↔ tUSD

Exchange AEQ for tUSD (a simulated test-dollar) through the native liquidity pool. A 0.1% fee applies only to swaps — ordinary AEQ transfers between people remain completely free.
🔒 Non-custodial · AMM x·y=k · 0.1% fee · Instant settlement · No slippage protection needed at small sizes
CONNECTED WALLET
Your AEQ
Your tUSD
Sell
Bal:
Receive
Bal:
💵tUSD
// Connect wallet to swap AEQ ↔ tUSD...
No liquidity yet
Claim 1,000 tUSD once to pair with your AEQ — for your first liquidity deposit.

💧 Liquidity

Provide AEQ / tUSD liquidity to earn 30% of all swap fees, distributed daily.
AMM Liquidity Pool
Price
Pool AEQ
Pool tUSD
Pool Depth
AEQ 50% 50% tUSD
Fee0.1% · split 40/30/20/10
How the AMM works
AEQ_reserve × tUSD_reserve = k (constant)
Automated Market Maker using the x·y=k formula. Price is determined by pool ratio. Deeper pools = lower price impact per swap.
Pool Addresses
40% Validators0x78c1...d2bA
LP Shares0xc181...01EB
20% UBI0x4A9b...054A
10% Treasury0x2273...3eb15
Add Liquidity
Deposit AEQ and tUSD to earn 30% of all swap fees proportional to your share.

Aequitas Index — Real-Time Economic Equality Score

The Aequitas Index is derived from the Gini coefficient — the international standard for measuring wealth inequality, adopted by the World Bank, OECD, and UN. Unlike a simple richest-vs-poorest ratio, the Gini coefficient captures the entire distribution across every verified human simultaneously, in a single number. 0 = perfect equality (every wallet holds the same AEQ). 100 = maximum concentration (one wallet holds all AEQ in existence). For context: Bitcoin Gini ≈ 0.85 (Index 85) · most unequal country on Earth (South Africa) ≈ 0.63 · Scandinavia ≈ 0.27. Aequitas targets Gini below 0.30 at scale — comparable to the most equal developed economies — enforced automatically by the wealth cap and redistribution pools, no governance vote required.
Current Index
0 — Perfect Equality50100 — Max Inequality
Gini Coefficient
0 = equal · 1 = unequal
Total Supply
Always = Humans × 1,000 AEQ
Protocol Phase
Auto-advances by human count
Verified Humans
Face-verified registrations
What is the Gini Coefficient?
Developed by Italian statistician Corrado Gini (1912). Measures wealth distribution by comparing actual balances against a hypothetical perfectly equal baseline — visualized as the Lorenz curve. Scale: 0 (everyone holds the same) to 1 (one person holds everything). Used by World Bank, OECD, UN to compare countries. Reference values: Bitcoin ≈ 0.85 · South Africa (world record) ≈ 0.63 · USA ≈ 0.41 · Germany ≈ 0.31 · Scandinavia ≈ 0.27 · Aequitas long-term target: Gini below 0.30 — comparable to Scandinavian countries, enforced by wealth cap (bootstrap: 5×→25× per human).
How is the Aequitas Index calculated?
G = Σ|xi − xj| / (2 × n² × x̄)
Aequitas Index = G × 100
All AEQ balances of verified humans are collected. The formula computes the mean absolute difference between every possible pair of balances, normalized by population squared (n²) and the mean balance (x̄). Result 0–1 multiplied by 100 = Aequitas Index. Updated on-chain after every registration, monthly demurrage run, pool payout, and wealth cap event — via keeper calling updateGini().
0 – 35
IDEAL
Healthier than most nations on Earth. Comparable to Scandinavia (0.27) and Germany (0.31). Wealth cap and demurrage successfully maintaining fair distribution.
35 – 50
GOOD
Comparable to the USA (0.41) or France (0.32). Within the range of most developed economies. Redistribution mechanisms actively flattening the curve.
50 – 70
WARNING
Higher than most European nations — comparable to Brazil (0.53) or Russia. Protocol redistribution at elevated intensity.
70 – 100
CRITICAL
Worse than any country on Earth (South Africa record: 0.63). Approaching Bitcoin (0.85). Protocol at maximum intervention — wealth cap and redistribution at full force.
Current Wealth Cap: AEQ · Multiplier: · Fair share: AEQ
Why Gini — and not a simpler metric?
A simple richest-vs-poorest ratio is easy to game: 10,000 wallets could show a low spread but 90% of AEQ concentrated in 100 hands — Gini detects this, a ratio does not. The coefficient captures the complete distribution across all verified humans in one auditable number. Aequitas publishes this on-chain — transparent, tamper-evident, globally verifiable. It is the primary signal for automatic phase transitions, wealth cap calibration, and redistribution intensity. No human can override the index reading or the mechanisms it triggers.
Gini Index History
Recorded after each UBI distribution. Shows how equality evolves as the network grows. Lower is better — target is Gini below 0.30.
Wealth Distribution Analysis
Lorenz Curve — AEQ Distribution Across Humans
The Lorenz Curve visualizes how AEQ wealth is distributed among registered humans. The diagonal line = perfect equality — every human holds the same share. The further the gold curve bows below the diagonal, the more unequal the distribution. Reference curves show inequality in real countries. Aequitas targets a Gini coefficient below 0.30 — comparable to Scandinavia.
Aequitas Now
Gini coefficient (0–1)
Target
< 0.30
Like Scandinavia (~0.27)
Bitcoin Gini
~0.85
Most unequal currency ever
How to read this chart: The X-axis shows the population from poorest (left) to richest (right). The Y-axis shows cumulative AEQ wealth. A point at (50%, 50%) = the poorest half of humans hold exactly half the AEQ. In perfect equality, the curve IS the diagonal. Aequitas enforces equality through automatic wealth cap, demurrage (0.5%/month decay), and daily UBI redistribution — keeping the curve close to the diagonal as the network grows.
Redistribution Pools
Every swap fee, demurrage charge, and wealth cap overflow is automatically split across four pools. No manual intervention — the protocol handles all redistribution through code alone. All pools pay out daily.
UNIVERSAL BASIC INCOME POOL
Accumulating — next payout distributed equally to all verified humans in:
current pool balance
0.0000 AEQ
Split equally among all verified humans · paid every 24h · pool resets to zero after each payout · no minimum balance required
HOW THE UBI POOL FILLS UP
20%
20% Swap Fees
Every AEQ↔tUSD swap contributes 20% of its 0.1% fee here. More trading activity = faster pool fill.
variable
variable Demurrage
Idle AEQ (3+ months inactive) decays at 0.5%/month. The decayed amount enters the 40/30/20/10 split — 20% goes to UBI.
variable
variable Wealth Cap Overflow
Wallets exceeding 25× the fair share (25,000 AEQ) have the excess confiscated instantly. 20% flows to UBI immediately.
ALL FOUR REDISTRIBUTION POOLS
Validators Pool 40% of fees
0.0000 AEQ
⏰ Next:
40% of all fees → node operators who secure the network
Liquidity Pool 30% of fees
0.0000 AEQ
⏰ Next:
30% of all fees → liquidity providers, proportional to LP shares
UBI Pool 20% of fees
see countdown above
⏰ countdown displayed above
20% of all fees → all verified humans equally, every 24 hours
Treasury 10% of fees
0.0000 AEQ
Accumulates — no timer
10% of all fees → protocol development and maintenance
Protocol Phases
The wealth cap uses a bootstrap multiplier during Phase 0: max(5, min(N, 25))× the fair share (1,000 AEQ per human). With 1–4 humans: 5× the fair share. Each new human adds 1×. At 25+ humans: locks permanently at 25×. Phase 1+ maintains 25× fixed. All transitions trigger automatically by human count — no governance, no admin key.
Phase 0Bootstrap · <100 humans · Wealth Cap: max(5,min(N,25))× fair share · Slides 5×→25× until 25th human · Currently active
Phase 1Growth · 100–10,000 humans · Wealth Cap: 25× the fair share = 25,000 AEQ
Phase 2Stability · 10,000–1M humans · Wealth Cap: 25× the fair share = 25,000 AEQ
Phase 3Maturity · 1M+ humans · Wealth Cap: 25× the fair share = 25,000 AEQ
The Wealth Cap during Phase 0 (Bootstrap) uses the formula max(5, min(N, 25))× average AEQ balance, where N = registered humans. With 1–4 humans: cap = 5× average. Each new human adds 1×. At 25+ humans: the multiplier locks permanently at 25×. The cap always scales with the live average balance — automatically adjusting as the network grows.
Demurrage — Incentive to Circulate
Aequitas implements a demurrage mechanism inspired by historical complementary currencies. Idle AEQ balances slowly lose value to discourage hoarding and incentivize economic participation.
Decay Rate0.5% per month (continuous, not stepped)
Grace Period3 months of inactivity before decay begins
Clock ResetAny transfer, swap, or liquidity action resets the timer to zero
Decayed AEQ goes toRedistribution pools (40/30/20/10 split)
Warning System14-day notice (shown once) + 7-day repeated reminder at each login
Wealth Cap Multiplier — Bootstrap Slider
Formula: max(5, min(N, 25))× average AEQ balance. Each new human slides the cap up by 1×, until the 25th human locks it at 25× permanently.
The Story of Aequitas — Why This Exists

The year is 2009. Satoshi Nakamoto releases Bitcoin. For the first time, value can transfer between any two people without a bank. A genuine revolution. But something goes wrong almost immediately.

Early miners accumulate millions of coins at near-zero cost. By 2021, the top 1% of Bitcoin addresses control over 90% of all Bitcoin. Bitcoin’s Gini coefficient exceeds 0.85 — higher than any country on Earth. The technology meant to democratize finance created the most extreme wealth concentration in history.

Aequitas — Latin for fairness and equity — was built to answer one question:
"What would a cryptocurrency look like if designed from first principles to be fair to every human being?"

The answer: Money exists because people exist. Therefore every person should have an equal share of money simply by virtue of being human.

Aequitas implements this mathematically. Every verified human receives exactly 1,000 AEQ — billionaire or subsistence farmer, no exceptions. Four redistribution mechanisms ensure inequality cannot accumulate indefinitely. The Gini coefficient is tracked on-chain in real time.

"Money exists because people exist. Nothing more, nothing less."

The Core Innovation
ZK Device-Key Proof
Your face and a short liveness sequence are captured by the app and checked against everyone already registered by independent matching services, which must agree by quorum. The images are discarded afterwards. A Groth16 Zero-Knowledge Proof then carries only the resulting bio_hash to the chain — no image, no template, and nothing a face could be rebuilt from. Because the nullifier is derived from the face rather than from the phone, a second device does not let the same person register again. What is not yet established is the error rate: the matching threshold has never been calibrated against real captures.
No-Stake Blockchain
No mining. No staking. No proof-of-work. Block production is open to any node operator. Validators earn from the 40% fee pool — incentivized by fairness, not capital.
One Human = One Wallet = 1,000 AEQ
Supply formula: Total AEQ = Verified Humans x 1,000. No pre-mine. No admin keys. No governance vote can change this.
The 4 Redistribution Mechanisms
UBI Pool (20%)
Every 24 hours, the pool divides equally among all verified humans. Funded by swap fees + demurrage + wealth cap overflows.
Validators Pool (40%)
Node operators earn from all protocol fees. More nodes = more decentralization.
Liquidity Pool (30%)
Liquidity providers earn proportionally from all swap activity.
Treasury (10%)
Protocol development. No VC allocation. No founder bonus.
Phase Roadmap — The Path to Global Scale
ACTIVE NOW
Phase 0
Bootstrap
0 – 100 humans. Sliding wealth cap 5x → 25x. Foundation building.
Phase 1
Growth
100 – 10,000 humans. Fixed cap 25x. Open node joining.
Phase 2
Stability
10,000 – 1M humans. Min 10 nodes. Fully decentralized.
Phase 3
Maturity
1M+ humans. Global UBI at scale. Gini target <0.30.
Phase transitions are automatic — triggered by human count thresholds, enforced by the smart contract. No governance vote, no admin key.
Guardian System — Human Failsafe for Lost Wallets
What happens when someone is hospitalized, incarcerated, or dies? In most crypto systems, lost wallets mean lost coins forever. Aequitas has a three-layer inactivity recovery system.
What is a Guardian?
A Guardian is a trusted verified human you designate. They have exactly one power: confirming you are still alive. They cannot move funds, transfer AEQ, or access your wallet under any circumstances. Maximum 3 wards per Guardian prevents centralization of trust.
Inactivity Timeline
0 – 2 yearsNormal usage, no restrictions
Year 2Warning 1 — Guardian can respond
Year 2 +60dWarning 2 — escalating urgency
Year 2 +180dAEQ moved to escrow (2.5 years total, day 910 — recoverable)
Year 4Escrow released to UBI Pool (day ~1460)
Key protections: 7-day timelock on Guardian assignment. No circular Guardian relationships. Guardian assignment is public and on-chain.
Sybil Resistance — Current State, Honestly
Why a face?
Sybil resistance — preventing one person from registering multiple wallets — is the core unsolved problem of fair money distribution. A device key could only ever prove control of a device: the same person on a second phone was a second identity. Since 2026-08-23 the check is the face itself, compared by independent services that must agree. The matching threshold has not yet been calibrated against real captures — see below.
How It Works
1. The app captures your face and a short liveness sequence
2. Independent matching services check for a living person and compare against everyone already registered; they must agree by quorum
3. The images are discarded; each matching service keeps an encrypted template. A split-share mode exists in which no single service holds a whole one — it is built and tested but NOT active yet, because its threshold has never been calibrated
4. A Groth16 ZK proof carries the resulting bio_hash to the chain, and its nullifier can be spent only once
What is and is not private: Your face IS captured and sent to independent matching services — that is the only way one-person-one-account can be checked. The images are discarded after processing; what each service keeps is an encrypted template, because comparing needs one. The proof server receives only the ZK proof (200 bytes). The chain stores only a nullifier hash, derived from the face rather than from the device, so a second phone does not make a second identity. Honest limitation: the matching threshold has never been calibrated against real captures — that needs roughly a thousand impostor pairs before any false-match rate can honestly be quoted. And a split-share mode, in which no single service holds a whole template, is built and tested but not switched on for the same reason
The Vision — A Global Basic Income Protocol
"Imagine a world where every person on Earth — regardless of where they were born, what language they speak, or how much money their parents had — receives a guaranteed daily income simply for being human. Not as charity. As a mathematical right, enforced by code that no government or corporation can override."
8B
humans could register
<0.30
Gini target (Scandinavian level)
0
admin keys or governance votes

Active Nodes — Current Network Topology

The Aequitas network currently operates on multiple geographically distributed nodes (live count above). All of them participate in block production, state synchronization, and API serving. They communicate peer-to-peer via libp2p and synchronize block state via HTTP. Each node runs its own PostgreSQL database for persistent state. The network is designed to support additional nodes — any operator can join.
Loading…
Connect a New Node
To run your own Aequitas node you configure no entry point at all — the validator addresses are compiled in. Your node registers automatically, syncs the full chain state, and begins participating in block production. Set PRIMARY_NODE_URL only if you deliberately want to pin one specific entry point.
LIBP2P BOOTSTRAP ADDRESSES
/ip4/173.249.37.118/tcp/4001/p2p/12D3KooWHfPy6g3jvyC1mvqzCHvy5QBsDmHHsvfwvwXQGrtQ2pVm
/ip4/194.163.188.71/tcp/4001/p2p/12D3KooWBv34kuVcmNDxZT4kCZFvNVGhy4zgkBZDGMtp7YSx2UUN
Both are compiled in as defaults, so a node with no BOOTSTRAP_P2P_ADDR still finds the network. Two are listed so one validator being down never strands a newcomer.
Technical Specifications
Chain ID1926 (0x786)
ArchitectureBlockDAG (Directed Acyclic Graph)
EVM CompatibleYes — JSON-RPC /rpc · MetaMask compatible
Block Time
ConsensusBlockDAG + Proof of Humanity
P2P Protocollibp2p (Go implementation)
ZKP SystemGroth16 / snarkjs / circom
Elliptic CurveBN128 (alt-bn128)
Bio Hashkeccak256 (post-quantum safe)
StoragePostgreSQL (persistent)
LanguageGo 1.24 (chain) · Node.js (proof server)
SourceGitHub — Open Source
Community@AequitasMoney · Telegram
MetaMask Configuration
Add Aequitas Chain to MetaMask to view your AEQ balance, send transactions, and interact with the V7 contract directly from your browser or mobile wallet.
Chain NameAequitas Chain
RPC URLhttps://aequitas.digital/rpc
Chain ID1926
SymbolAEQ
Decimals18
📱 MetaMask Mobile: if AEQ shows 0 after adding, delete the network and re-add it using the button above.
Core Technology ◆ New in 2026

GHOSTDAG + KnightDAG

This is not a 0815 blockchain with one block at a time. Aequitas runs a real BlockDAG, ordered by GHOSTDAG — and since 2026, secured by KnightDAG, Aequitas's own adaptive evolution of it. This is the mechanism every balance, every UBI payout, and every wealth-cap enforcement ultimately depends on for a single, agreed-upon history.
Why a normal blockchain isn't enough
A classic blockchain is a single chain: one block at a time, one winner per round, everyone else's work thrown away as an "orphan." That caps how fast a network can safely produce blocks — go too fast and honest validators keep accidentally competing with each other, wasting most of their work.

Aequitas runs on a BlockDAG instead of a single chain: validators can produce blocks concurrently, and instead of discarding the "losing" ones, the protocol merges them into a shared structure — every honest block counts toward the network's history. The hard problem this creates: if blocks can arrive in a different order at every node, how does everyone end up agreeing on the exact same final history and account balances? That's what the algorithms below solve.
Traditional blockchain — wasted work
Two validators produce at once → one wins, one is discarded — wasted work, and it caps how fast the network can safely go.
Aequitas BlockDAG — nothing wasted
Both blocks are kept — GHOSTDAG merges the concurrent one in and still counts it toward the canonical order.
GHOSTDAG (2018) — one true order out of a tangled graph
GHOSTDAG (Sompolinsky & Zohar) is the algorithm that turns Aequitas's BlockDAG into one canonical, agreed-upon order. Every node walks the same graph and computes, for every block, a deterministic "blue score": it picks the strongest parent chain (the "selected parent"), then classifies every other concurrently-produced block it merges as "blue" (counted, honest) or "red" (excluded — too many other concurrent blocks around it to trust), bounded by a parameter K, the maximum concurrency the network tolerates as honest.

Because every node runs the exact same deterministic rule over the exact same block graph, they all arrive at the identical final order — height, then blue score, then hash — no matter which order blocks actually arrived over the network. You can see this live in the DAG View in the Explorer tab above: the purple line is the selected-parent chain, the fainter dots are merged (not discarded) concurrent blocks.
◆ KNIGHTDAG (2026) — Aequitas's own upgrade beyond fixed-K GHOSTDAG
Classic GHOSTDAG fixes K to a single worst-case value for an entire validator epoch — big enough to stay safe even during the busiest conceivable burst of concurrent block production, whether the network actually needs that much slack most of the time or not. That's the one piece of the algorithm that was still a fixed, hand-picked assumption rather than something the network figures out for itself.

KnightDAG closes that gap, inspired by DAGKNIGHT (Sompolinsky & Sutton, 2022) — Kaspa's own parameterless successor to GHOSTDAG. Instead of trusting one fixed epoch-wide K, every node deterministically searches, for every single new block, for the smallest K whose blue set still covers a strict majority of that block's own merge set — the actual concurrency happening right around it, not a hypothetical worst case. When the network is converging cleanly, K drops automatically and confirmation gets tighter and faster; under a genuine burst, classification gracefully falls back to exactly the classic fixed-K result — never less safe than before, only ever more precise. Every honest node runs the identical inference over the identical graph, so the network-wide agreement GHOSTDAG guarantees is fully preserved — KnightDAG is a strict upgrade, not a different set of rules.
GHOSTDAG (2018): one fixed K per validator epoch — a single worst-case value for the whole network
KnightDAG (2026): K inferred fresh for every block, from the DAG structure actually around it
Active from block 1,520,000 onward · falls back to classic GHOSTDAG whenever no smaller K reaches a majority
Fully backward-compatible: blocks below the activation height replay exactly as every node already agreed — nothing about the settled past changes
Choose Your Path
👤
I am a Human
I want to register, receive 1,000 AEQ, and join the basic income network.
1. Download the Aequitas Android App
2. Unlock with your device's screen-lock (fingerprint/face/PIN)
3. Connect MetaMask
4. Receive 1,000 AEQ instantly
🖥️
I am a Node Operator
I want to run a full node, participate in block production, and earn from the 40% validator pool.
1. Register as a human (required)
2. No entry point to configure — the validator addresses are built in
3. Deploy on Contabo/Hetzner/any VPS
4. Earn daily from validator pool
💻
I am a Developer
I want to build on Aequitas, integrate the API, or contribute to the protocol.
1. EVM-compatible JSON-RPC
2. Chain ID: 1926 · RPC: /rpc
3. OpenAPI: /api/* endpoints
4. Metrics: /metrics (Prometheus)
AEQ Token Flow Diagram
HUMAN registers +1,000 AEQ minted AEQ ACTIVITY Swap fees (0.1%) Demurrage (0.5%/mo) Wealth cap overflow Inactive escrow REDISTRIBUTION ● UBI Pool 20% ● Validators 40% ● Liquidity LP 30% ● Treasury 10% paid out daily automatic on-chain daily UBI returns to all verified humans
Network Topology — Current State
Loading topology…
Run Your Own Node — Help Secure the Network
Registered humans can run an Aequitas validator node — no stake, no application required, but NODE_OPERATOR_WALLET must be a registered Aequitas human (this is a protocol security requirement). Nodes participate in block production, validate the human registry, and synchronize the BlockDAG. Node operators earn a share of protocol fees via the Validators Pool (40% of all protocol fees, distributed daily). The more nodes that run, the more decentralized and resilient the network becomes.
AEQUITAS NODE OPERATOR GUIDE v1.0 · June 2026
Complete step-by-step guide · No prior blockchain experience required · Estimated time: 20–30 min
What is an Aequitas Node?
An Aequitas node is a program that runs in the cloud and participates in the Aequitas network. It keeps a copy of the entire blockchain, validates who is a registered human, and produces new blocks (like new pages in the global ledger). The more nodes exist, the more decentralized and resilient the network becomes. As a reward for running a node, you receive a daily share of all protocol fees — automatically, with no further action required on your part.
Before You Start — What You Need
1.An Aequitas account: You must first be registered as a human on Aequitas. Install the Android app, complete biometric registration, and note your wallet address. Without this, you cannot receive validator rewards.
2.A GitHub account (free): Go to github.com and create a free account. Optional — only needed if you want to build from your own fork rather than the published image.
3.A Linux server (VPS): Any provider works — Contabo, Hetzner, DigitalOcean. You need SSH access and about 2 GB RAM. A small instance is enough to validate.
4.Node signing key (RELAYER_PRIVATE_KEY): Your node needs a dedicated Ethereum wallet to sign on-chain registrations. This can be any MetaMask wallet. Export its private key: MetaMask → Account Details → Show Private Key → enter password → copy. Keep strictly private. IMPORTANT: To receive validator rewards you also need NODE_OPERATOR_WALLET set to your registered Aequitas human wallet (the one verified with the Aequitas app). Only verified humans can earn validator rewards.
5.20–40 minutes of your time. Most of it is waiting for the initial chain sync.
Step 1 — Fork the Aequitas Repository on GitHub
What is a fork? A fork is your own personal copy of the Aequitas code on GitHub. You only need one if you intend to modify the node or build the image yourself.
a) Open github.com/hanoi96international-gif/Aequitas in your browser
b) Click the Fork button in the top-right corner of the page
c) Click Create fork — GitHub creates a copy under your own account (e.g. github.com/YOUR-NAME/Aequitas)
d) Done — you now have your own copy of the Aequitas node code
Step 2 — Create a PostgreSQL Database
What is a database? Your node needs permanent storage for all block data and human registrations. Without it, your node loses all data on every restart. PostgreSQL is the storage system Aequitas uses. Each node must have its own dedicated database — never share one database between two nodes.
On your VPS (Contabo, Hetzner, DigitalOcean, or any Linux server)
One database per node. Install PostgreSQL on the same machine as your node and keep it there. Two nodes sharing one database will overwrite each other's state — this is the single most damaging mistake you can make when setting up.
# 1. Install PostgreSQL (Ubuntu / Debian)
sudo apt update && sudo apt install -y postgresql postgresql-contrib
sudo systemctl enable --now postgresql

# 2. Create database and user (run as root or with sudo)
sudo -u postgres psql -c "CREATE USER aequitas WITH PASSWORD 'CHOOSE_A_STRONG_PASSWORD';"
sudo -u postgres psql -c "CREATE DATABASE aequitas OWNER aequitas;"

# 3. Allow connections from Docker containers (Docker bridge: 172.17.0.0/16)
PG_CONF=$(sudo -u postgres psql -t -c "SHOW hba_file;" | tr -d ' ')
echo "host aequitas aequitas 172.17.0.0/16 md5" | sudo tee -a $PG_CONF
sudo -u postgres psql -c "ALTER SYSTEM SET listen_addresses = '*';"
sudo systemctl restart postgresql

# 4. Test (should print one row)
psql "postgres://aequitas:CHOOSE_A_STRONG_PASSWORD@localhost:5432/aequitas" -c "SELECT 1;"

# Your DATABASE_URL for the docker run command below:
# postgres://aequitas:CHOOSE_A_STRONG_PASSWORD@172.17.0.1:5432/aequitas
# (172.17.0.1 = Docker bridge gateway, how containers reach the VPS host)
Firewall: PostgreSQL only needs to be reachable from within the VPS itself. Do not open port 5432 to the internet. ufw deny 5432 (or leave it closed — most VPS firewalls block it by default).
Step 3 — Understand the Environment Variables
Environment variables are configuration settings you pass to your node before it starts. Think of them like a settings file. Collect these values before deploying — you will enter them in Step 4.
Security Warning: Your RELAYER_PRIVATE_KEY is like a master password. Anyone who has it controls your node wallet. Never share it publicly, never paste it in chat or email. Use a separate MetaMask wallet for RELAYER_PRIVATE_KEY (signing). NODE_OPERATOR_WALLET (for rewards) must be your registered Aequitas human wallet.
Variable Required? What to enter and where to find it
DATABASE_URL YES Your PostgreSQL connection string. Point it at the PostgreSQL you installed on this same machine. Format: postgres://user:pass@host:5432/dbname
RELAYER_PRIVATE_KEY YES The private key (starts with 0x, 66 characters total) of your dedicated node wallet. In MetaMask: click account icon → Account Details → Show Private Key → enter your MetaMask password → copy the key
RELAYER_ADDRESS Recommended The wallet address (starts with 0x, 42 characters) matching RELAYER_PRIVATE_KEY. This is the public address — safe to share. Copy it from MetaMask. A fallback exists in the node code, but setting this explicitly prevents startup errors.
NODE_OPERATOR_WALLET For rewards Your Aequitas human wallet address — the one you registered with via the Android app. This wallet receives your daily validator rewards (40% of all protocol fees). Must be a registered human on Aequitas. Find it in the app under your profile.
PEER_SECRET No No longer required. Validator authorization is now identity-based: a verified NODE_OPERATOR_WALLET plus the binding signature below is enough — there is nothing to obtain from the network operator for this step.
NODE_OPERATOR_BINDING_SIGNATURE For multi-node Proves you own NODE_OPERATOR_WALLET — without it, anyone could claim your wallet as their own node's operator and permanently lock you out of it. Generate it at /node-binding: connect the SAME wallet you registered with, it signs a short message naming your node's signing address, and shows you this value to copy here. To move your validator to a new machine later, just generate a new signature there for the new signing address — no need to contact anyone.
SELF_URL YES Your node's own public URL (e.g. http://YOUR-IP:8080, or an https:// hostname if you put a reverse proxy in front). Without it the node starts in isolated mode — it cannot register with peers, cannot propagate blocks, and other nodes cannot reach it.
PRIMARY_NODE_URL For multi-node Set to: https://aequitas.digital — the primary node your node registers with for automatic peer discovery. On startup your node posts its URL + signing address to the primary, gets the full peer list back, and joins the network automatically. No manual PEER_NODES list needed.
PORT No Leave unset unless your host requires a specific port. Default is 8080.
NODE_KEY No Base64-encoded libp2p private key for stable P2P identity. If not set: auto-generated on first start and printed to stderr. Copy the base64 string from SAVE THIS AS NODE_KEY ENVIRONMENT VAR: <base64> and paste it here to keep a stable peer ID across restarts.
IS_PRIMARY_NODE No Removed — does nothing. Leave unset.
DISTRIBUTION_ENABLED No Leave unset for normal operation — all nodes are eligible to trigger the daily pool distribution by default. Three-layer dedup (cross-node last_ubi_at check + intra-node CAS lock + replay pre-pass) prevents double-credit even when multiple nodes fire at the same time. Set to false only if you explicitly want to opt this node out of running distributions (e.g. a resource-constrained replica).
BOOTSTRAP_SNAPSHOT_URL Multi-node Set to https://aequitas.digital/api/snapshot on a fresh node. If the local DB has 0 humans at startup, the node automatically downloads and imports the full state from this URL — fixing StateRoot mismatches immediately. Also set BOOTSTRAP_SIGNER. SNAPSHOT_TOKEN is optional — only needed if you want the full export instead of the public bootstrap tier.
BOOTSTRAP_SIGNER Multi-node Signing address of the node behind BOOTSTRAP_SNAPSHOT_URL — the snapshot is verified against it, so the two belong together and must be changed together. For https://aequitas.digital that is 0x0be8b961cbf6564bd1931b0803d35c0659e0d016, the value already filled in above. It is deliberately NOT published in /api/status — validator addresses are not exposed there. Point the URL at a different node and you have to ask that node’s operator for its address. Prevents importing a tampered snapshot.
SNAPSHOT_TOKEN No Optional — no longer required to bootstrap a new node. Without a token, BOOTSTRAP_SNAPSHOT_URL still downloads everything a node needs to run correctly (accounts, balances, pool, config). A token only unlocks the FULL export (nullifier→wallet linkage + bio_registrations), used for authoritative resync/recovery of an already-diverged node — get it from the network operator only if you actually need that.
RESYNC_FROM_SNAPSHOT No Recovery tool for a node KNOWN to have diverged — unlike BOOTSTRAP_SNAPSHOT_URL (which only merges into an empty DB), this REPLACES local accounts, pool, nullifiers, and chain_config with exactly what the snapshot contains, discarding anything local that doesn't match. Set to true together with BOOTSTRAP_SNAPSHOT_URL and BOOTSTRAP_SIGNER (mandatory here, no unsigned fallback), restart once, then remove it. Combine with RESET_DB_STATE=true for the cleanest result.
AUTO_HEAL_ON_DIVERGENCE Strongly recommended Important for network security and speed: if your node's chain ever diverges from the network (e.g. after downtime or a bad restart), set this to true together with PRIMARY_NODE_URL, BOOTSTRAP_SNAPSHOT_URL, and BOOTSTRAP_SIGNER — your node then compares itself against PRIMARY_NODE_URL every few minutes and resyncs itself automatically, no manual RESYNC_FROM_SNAPSHOT needed. A node that stays diverged and keeps broadcasting its own blocks can slow down or destabilize the network for every other operator (confirmed live: this is what caused a network-wide slowdown on 2026-07-02).
SNAPSHOT_RESTRICT_TO_PRIVATE_NETWORK No Opt-in: when set to true, /api/snapshot only answers requests from private/loopback addresses instead of any caller with the right token. Off by default because this project's bootstrap/resync mechanism relies on cross-provider access between servers; only enable this if every node you run shares a private network.
RESET_STATE No DANGEROUS: Setting this to true wipes your entire database on every restart. Development use only. Never in production.
RESET_DB_STATE No DANGEROUS, one-time use: truncates bootstrap-related tables (including evm_upgrade_relationship_slots) so a node can re-sync clean from genesis. Only takes effect within the first few minutes after process start to avoid repeated wipes on a crash-restart loop, and also requires ALLOW_DESTRUCTIVE_MAINTENANCE (see below). On success the process exits immediately instead of continuing to start — remove this variable (and ALLOW_DESTRUCTIVE_MAINTENANCE) and redeploy to bring the node back up.
CLEAR_REGISTRATIONS No DANGEROUS, one-time use: wipes all human registration data (chain_accounts' human flags, nullifiers, bio_hashes, liquidity_pool, evm_upgrade_relationship_slots) so everyone can re-register. Same 5–minute-from-startup guard as RESET_DB_STATE, plus also requires CLEAR_REGISTRATIONS_CONFIRM (see below) and ALLOW_DESTRUCTIVE_MAINTENANCE. On success the process exits immediately instead of continuing to start — remove all three variables and redeploy to bring the node back up.
CLEAR_REGISTRATIONS_CONFIRM No Required alongside CLEAR_REGISTRATIONS=true on both this service and the proof-server — must be set to the exact literal string I_UNDERSTAND_THIS_DELETES_ALL_REGISTRATIONS. Without it, CLEAR_REGISTRATIONS=true alone is refused. Exists so a single boolean set by accident (copy-pasted env file, typo elsewhere) can't wipe every human's registration on the next restart.
ALLOW_DESTRUCTIVE_MAINTENANCE No Required alongside RESET_DB_STATE=true or CLEAR_REGISTRATIONS=true — must be set to true. Without it, both are refused even with their other confirmation values correct. One more explicit gate so a wrong server selection or a stray copy-pasted env file can't trigger either destructive path alone. Visible at /api/health/combined (destructive_flags_set) whenever any destructive flag is currently set, even if it was refused.
BOOTSTRAP_P2P_ADDR No Overrides the built-in libp2p bootstrap multiaddress (see Step 7 below). Only needed if you want to pin a specific entry point — both validator addresses are compiled in as defaults, so a node with no value here still finds the network. If those addresses ever change, set this instead of waiting for a code deploy.
Optional — help check for duplicate registrations (prepared, not yet in service)
Prepared, but not yet in service. Later your node will be able to help verify that nobody registers twice without ever seeing anyone's biometric data: each participating party holds only a mathematical share of every enrolled template — noise on its own — and they compare a new capture together, so no single machine can reconstruct anything. Today this path decides nothing. The duplicate check does not run over it, and the committee is a fixed list rather than drawn automatically, so setting the three variables below changes nothing about registrations for now.
-e MPC_ENABLED="true" \
-e MPC_COMMITTEE_SIZE="2" \
-e MPC_TRIPLE_FILE="/data/triples-party-N.bin" \
The share file contains one-time randomness that only your node may hold — never copy it to another machine and never commit it anywhere. It currently has to come from the operator, which is the remaining central dependency. You do not need a new key: your node identifies itself to the other members with the same signing key it already uses for blocks.
Step 4 — Alternative: Deploy on a VPS with Docker
For your own server (Contabo, Hetzner, DigitalOcean). Requires Docker installed on the VPS and a local PostgreSQL database set up via Step 2 Option B above. Do not point two nodes at one PostgreSQL — each node must have its own separate database. NODE_OPERATOR_WALLET must be a registered Aequitas human wallet.
# 1. Install Docker (if not already installed)
curl -fsSL https://get.docker.com | sh

# 2. Clone and build the node (~3 min Go compile)
git clone https://github.com/hanoi96international-gif/Aequitas && cd Aequitas
docker build -t aequitas-node .

# 3. First start (NODE_KEY will be printed in logs — see step 4)
# DATABASE_URL uses 172.17.0.1 = Docker bridge gateway → host PostgreSQL
# (set up PostgreSQL first via Step 2 Option B above)
docker run -d --name aequitas-node --restart unless-stopped \
  -e DATABASE_URL="postgres://aequitas:YOUR_DB_PASSWORD@172.17.0.1:5432/aequitas" \
  -e RELAYER_PRIVATE_KEY="0xYOUR_PRIVATE_KEY" \
  -e RELAYER_ADDRESS="0xYOUR_NODE_SIGNING_ADDRESS" \
  -e NODE_OPERATOR_WALLET="0xYOUR_REGISTERED_HUMAN_WALLET" \
  -e NODE_OPERATOR_BINDING_SIGNATURE="generate-at-/node-binding" \
  -e SELF_URL="http://YOUR-SERVER-IP:8080" \
  -e PRIMARY_NODE_URL="https://aequitas.digital" \
  -e BOOTSTRAP_SNAPSHOT_URL="https://aequitas.digital/api/snapshot" \
# must be the signing address of the node serving BOOTSTRAP_SNAPSHOT_URL above.
# Point the URL somewhere else and this value has to change with it, or the
# snapshot fails signature verification and the node never bootstraps.
  -e BOOTSTRAP_SIGNER="0x0be8b961cbf6564bd1931b0803d35c0659e0d016" \
  -e AUTO_HEAL_ON_DIVERGENCE="true" # strongly recommended \
  -p 8080:8080 -p 4001:4001 aequitas-node

# 4. Copy NODE_KEY from logs (do this once — gives your node a stable P2P identity)
docker logs aequitas-node 2>&1 | grep "SAVE THIS AS NODE_KEY"

# 5. Stop, add NODE_KEY, restart permanently:
docker stop aequitas-node && docker rm aequitas-node
docker run -d --name aequitas-node --restart unless-stopped \
  -e DATABASE_URL="postgres://aequitas:YOUR_DB_PASSWORD@172.17.0.1:5432/aequitas" \
  -e RELAYER_PRIVATE_KEY="0xYOUR_PRIVATE_KEY" \
  -e RELAYER_ADDRESS="0xYOUR_NODE_SIGNING_ADDRESS" \
  -e NODE_OPERATOR_WALLET="0xYOUR_REGISTERED_HUMAN_WALLET" \
  -e NODE_OPERATOR_BINDING_SIGNATURE="generate-at-/node-binding" \
  -e NODE_KEY="base64-from-step-4" \
  -e SELF_URL="http://YOUR-SERVER-IP:8080" \
  -e PRIMARY_NODE_URL="https://aequitas.digital" \
  -e BOOTSTRAP_SNAPSHOT_URL="https://aequitas.digital/api/snapshot" \
# must be the signing address of the node serving BOOTSTRAP_SNAPSHOT_URL above.
# Point the URL somewhere else and this value has to change with it, or the
# snapshot fails signature verification and the node never bootstraps.
  -e BOOTSTRAP_SIGNER="0x0be8b961cbf6564bd1931b0803d35c0659e0d016" \
  -e AUTO_HEAL_ON_DIVERGENCE="true" # strongly recommended \
  -p 8080:8080 -p 4001:4001 aequitas-node
Tip: Save all vars in /root/.aequitas.env (chmod 600) and use --env-file /root/.aequitas.env instead of listing each -e — keeps secrets out of shell history and simplifies updates.
Port requirements: TCP 8080 must be open inbound (API + RPC). TCP 4001 is optional (P2P — enables direct node-to-node connections). If P2P is firewalled, HTTP sync still works. On Linux: ufw allow 8080/tcp
Step 5 — Verify Your Node is Running
Open these URLs in your browser. Replace YOUR-NODE-URL with your server's address.
https://YOUR-NODE-URL/api/status
 → Expected: {"height": 1234, "total_humans": N, "aequitas_index": N}

https://YOUR-NODE-URL/rpc
 → Expected: {"jsonrpc":"2.0","error":"method not specified"} — this confirms RPC is alive
The block height should match the primary node within 1–2 blocks within seconds of startup. If it stays at 0, check that PRIMARY_NODE_URL=https://aequitas.digital is set and reachable.
Step 5b — Link Wallet for Rewards
✓ Usually automatic — most users skip this step
When your node starts, it automatically connects to the network and registers for block production. If you set NODE_OPERATOR_WALLET in your environment variables (Step 4), your wallet is already linked and you will receive validator rewards automatically.

You only need Step 5b if:
  • Your node logs show [NODE] validator key not authorized
  • You want to change your reward wallet without restarting the node
  • You are running a Docker/VPS node and auto-registration failed
Check if already registered: Look in your node logs for [PEERS] Registered with primary node. If you see it — you're done, no manual step needed.
Manual Registration (if auto-registration failed)
Enter your node's RELAYER_ADDRESS (the signing address — shown in your node logs as [NODE] Signing address: 0x... on startup) and click Register. MetaMask will ask you to sign once to prove you own your human wallet.
ℹ The signature is fetched automatically from your node — you only need to provide your RELAYER_ADDRESS above and sign with MetaMask below.
Step 6 — Connect MetaMask to Your Node (Optional)
You can use your own node as a custom RPC in MetaMask so your wallet connects through your node instead of the shared public node. In MetaMask: click the network dropdown at the top → Add networkAdd a network manually, then enter:
Network NameAequitas Chain
RPC URLhttps://YOUR-NODE-URL/rpc
Chain ID1926
Currency SymbolAEQ
Decimals18
Block Explorerhttps://aequitas.digital
Step 7 — Earning Validator Rewards
The Validators Pool collects 40% of all protocol fees (swap fees, demurrage, wealth cap overflow). Every day at 20:00 Berlin time (CEST/CET, handles DST automatically) the primary node distributes the pool balance to all registered node operator wallets proportionally. The more consistently your node runs, the larger your share.
1.Make sure you are registered as a human on Aequitas. If not: install the Android app and complete biometric registration first. You will receive a wallet address and 1,000 AEQ.
2.Set NODE_OPERATOR_WALLET = your Aequitas human wallet address in your node's environment
3.Restart the node so it picks the value up: docker restart aequitas-node
4.In your node logs, confirm: [NODE] Registered node operator wallet: 0x...
5.Rewards are distributed automatically every day at 20:00 Berlin time (CEST/CET). Just keep your node running — no further action needed.
Troubleshooting
Symptom Likely cause Solution
Block height stays at 0 PRIMARY_NODE_URL not set or wrong Set PRIMARY_NODE_URL=https://aequitas.digital and redeploy. Also set SELF_URL to your own node's public URL.
DATABASE_URL error on startup Wrong connection string or PostgreSQL unreachable Check format: postgres://user:pass@host:5432/dbname — make sure PostgreSQL is running and accessible
"no code at address" in logs V7 contract not yet deployed in this EVM Normal on first start when RELAYER_ADDRESS is set — node auto-deploys V7. Wait a few seconds and check again.
"NODE_OPERATOR_WALLET not set" in logs Missing environment variable Add NODE_OPERATOR_WALLET=0xYOUR_HUMAN_WALLET to your variables. Node runs fine without it but you won't receive rewards.
Node container exits immediately Build or startup failure Run docker logs aequitas-node for the error message. Most common cause: DATABASE_URL missing or RELAYER_PRIVATE_KEY in wrong format (must start with 0x).
Port 8080 not reachable (Docker) Firewall or cloud provider config Open TCP port 8080 inbound in your firewall or cloud security group settings.
Docker build fails with module error No internet access during build The Docker build needs outbound internet to download Go modules. Check the VPS firewall allows outbound HTTPS.
⚠ P2P bootstrap unreachable (HTTP sync still works) libp2p port 4001 firewalled (very common) Not critical — HTTP block sync is the primary mechanism and runs automatically. Add -p 4001:4001 and ufw allow 4001/tcp to enable P2P as well.
Bootstrap snapshot failed / StateRoot mismatch SNAPSHOT_TOKEN not set on primary, or BOOTSTRAP_SIGNER wrong Set BOOTSTRAP_SNAPSHOT_URL=https://aequitas.digital/api/snapshot, BOOTSTRAP_SIGNER=0x0be8b961cbf6564bd1931b0803d35c0659e0d016, and restart. No token is needed: /api/snapshot serves a public tier that carries everything a node needs to run. A SNAPSHOT_TOKEN only unlocks the full export, which you do not need in order to join. Restart — node imports state automatically if DB is empty.
Node not in block explorer / no MERGE blocks Port 8080 not reachable from outside OR Step 5b not done 1) Open port 8080 inbound (ufw allow 8080/tcp). 2) Set SELF_URL=http://YOUR-IP:8080. 3) Complete Step 5b to register your signing key. Then the primary node syncs your blocks and MERGE events appear.
MetaMask shows 0 AEQ or wrong balance after registration Stale network config in MetaMask (cached old RPC data) MetaMask → Settings → Networks → delete all "Aequitas Chain" entries → re-add via the "+ ADD AEQUITAS NETWORK" button on this website. Balance will update immediately.
NODE_KEY generating new key on every restart NODE_KEY env var not set On first start, look for SAVE THIS AS NODE_KEY ENVIRONMENT VAR: <base64> in logs. Copy that value and add it as NODE_KEY environment variable. Restart once — P2P identity is now stable across all future restarts.
Questions / Feedback
Open an issue on GitHub, ask in the Telegram group, or reach the team on X (@AequitasMoney). Feedback on node setup, performance, and documentation gaps is especially welcome. Download this guide as a PDF in your selected language using the button above.
Running a Validator Is Not Enough — and Here Is Why
A validator secures that the numbers add up. It does not secure the one thing everything else rests on: that nobody registers twice. Without that, “one human, one income” is only a slogan — the ledger would be perfectly correct and completely worthless. Today that promise rests on very few machines, and every one you add makes it harder to break. The two roles that carry it — the verifier that decides whether a face is already enrolled, and the coordinator that collects those decisions — run on the same server. This guide sets up both.
Status: closed beta — read this before you start
The verifier source is not public yet, so the steps below cannot be completed by everyone today. They are published now because the design should be checkable before it is deployed, not after. If you want to run one, ask in the Telegram group linked on the front page. Opening this repository is what turns the guide below from a plan into an invitation, and it is the next thing we owe you.
What you would hold — and what you would never see
A face is never sent to you as a picture: the image is discarded after checking, and your machine stores an encrypted template of it. A split-share mode exists in which your machine would hold only one additive share of a 64-byte sketch — indistinguishable from noise on its own, compared jointly with your committee so that none of you learns more than the answer. It is built and tested but not active yet, because its threshold has never been calibrated. Until it is, each verifier holds a whole encrypted template, and we would rather say so than imply a protection you are not yet giving.
Why every additional verifier makes the network harder to corrupt
A registration is accepted only once several different verifiers have attested it. One stolen key is not enough — an attacker needs a whole committee. And because one human may hold exactly one validator key, buying a committee means being that many people. With 100 verifiers, an attacker controlling 10 of them has under a 1-in-1,000 chance of owning a full committee of three. Every person who joins makes that number smaller. This is the one place where the count of participants is the security. This arithmetic assumes one human per verifier key. For block production the chain enforces that; for verifier keys it does not yet (Step 5). Until it does, the number above is an upper bound on the security, not a measurement of it.
What a coordinator can do — and what it cannot
It cannot invent a human. No bio_hash exists until several different verifiers have attested it, and a coordinator holds none of their keys. What it can do is bind an existing bio_hash to a wallet — so a dishonest one could redirect an allocation to an address of its choosing. That is a real power, it grows with every coordinator added, and anyone weighing whether to trust one should know the difference.
Aequitas Bio Verifier Guide v2.0 · August 2026
Step by step · No cryptography knowledge required · About 45 minutes, most of it waiting
The steps below are in English. The sections above — what this is, what it protects, and what you take on — are in your language.
What is a bio verifier? When somebody registers as a human, their face has to be checked against everyone already registered — otherwise one person could register twice and draw two incomes. A bio verifier is a machine that performs that check. It never sees the picture: the image is discarded after checking, and what the service keeps is an encrypted template. A split-share mode exists in which no single service holds a whole one and the comparison happens jointly — it is built and tested but not active yet, because its threshold has never been calibrated. Until it is, each service holds a whole encrypted template.
What is a coordinator? The verifier answers questions; the coordinator asks them. It is the door a person arrives at: it hands out the challenge, passes the capture to the verifiers, counts their answers, and issues the certificate the chain pays out on. You will run both on one server — two programs, not two machines.
What is a committee? The group of verifiers asked about one registration. It only counts once several of them agree. That is the entire point: one broken or dishonest machine cannot wave anybody through.
Before You Start — What You Need
1. A registered Aequitas human account. Same rule as for block production, and for the same reason: one human, one key. Without it, one person could quietly become a whole committee.
2. A small Linux server. 2 GB of RAM is enough. Any provider works — Contabo, Hetzner, DigitalOcean — for roughly 5–10 € a month. A machine at home is a poor choice: it has to stay reachable.
3. A domain name you control. Something like verifier.example.org. A subdomain of one you already own is fine. Browsers hand out no camera to a page without HTTPS, and HTTPS needs a name.
4. About 45 minutes. Most of it waiting for downloads. Nothing here needs any knowledge of cryptography — every command is given in full.
5. The intention to stay online. Every member of a committee must answer for a registration to finish. A verifier that is often away slows people down instead of protecting them.
Step 1 — Rent a Server
What is a VPS? A computer in a data centre that you rent and control remotely, as if it stood under your desk. It stays on when your laptop does not.
a) Open any provider — contabo.com, hetzner.com and digitalocean.com all work
b) Choose the smallest plan with at least 2 GB RAM
c) Choose Ubuntu 24.04 (or 22.04) as the operating system
d) Note the IP address and root password they send you
Step 2 — Log In and Install Docker
What is Docker? A way to run a program together with everything it needs, in one sealed package. You never install databases or libraries by hand, and what runs on your machine is exactly what runs on everyone else’s.
On Windows open PowerShell; on macOS or Linux open Terminal. Then:
# Use the IP address from Step 1
ssh root@YOUR-SERVER-IP

# Installs Docker. Takes a couple of minutes.
curl -fsSL https://get.docker.com | sh

# Should print a version number
docker --version
Step 3 — Point Your Domain at the Server
What is an A record? The entry in your domain’s settings that says which IP address a name points to. Without it nobody can reach your server by name, however well it is running.
a) Open the DNS settings wherever your domain is managed
b) Add an A record: name verifier, value = your server’s IP address
c) Save, wait a few minutes, then check with ping verifier.example.org
Step 4 — Generate Your Own Keys
What is a key pair? Two matching halves. The private half signs; the public half lets anyone check a signature without being able to forge one. You publish the public half and show the private one to nobody.
Generate them yourself. Never accept keys from anybody, including us. Two verifiers holding the same secret count as one, and the quorum that is meant to protect people would look satisfied without being so.
# 1 — encrypts what little is stored on disk
openssl rand -base64 32

# 2 — defines your own projection, see the note below
openssl rand -hex 32

# 3 — your Ed25519 attestation key pair
docker run --rm python:3.12-slim sh -c "pip -q install cryptography && python -c '
  from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PrivateKey
  from cryptography.hazmat.primitives import serialization as s
  k = Ed25519PrivateKey.generate()
  print(\"PRIVATE\", k.private_bytes(s.Encoding.Raw, s.PrivateFormat.Raw, s.NoEncryption()).hex())
  print(\"PUBLIC \", k.public_key().public_bytes(s.Encoding.Raw, s.PublicFormat.Raw).hex())'"
Copy all four values into a text file for the next step, and keep the private half on your server and nowhere else. Your own projection seed matters: every verifier must project faces the same way to compare them, but a public projection would let a stolen fragment be reversed. Yours being yours is what prevents that.
Step 5 — Write the Configuration File
Put the values from Step 4 into a file only you can read.
nano /root/.aequitas-verifier.env

# --- paste, with your own values ---
TEMPLATE_ENCRYPTION_KEY=<the base64 value>
FACE_SKETCH_SEED=<the hex value>
VALIDATOR_SIGNING_KEY=<the PRIVATE hex from Step 4>
ALLOW_REAL_BIOMETRIC_DATA=false
POH_DB_PATH=/data/poh.db
PORT=8098

# Ctrl+O, Enter, Ctrl+X leaves nano
chmod 600 /root/.aequitas-verifier.env
Leave ALLOW_REAL_BIOMETRIC_DATA on false until you have read the data-protection sections above and know what you are taking on. With it false your verifier works fully — on test data.
This is where the guide stops today. The image below is real and its name is final, but the package is still private — the pull will be refused with denied unless you were given access. Everything before this step works right now, and everything after it will work the day the package is opened, with no change to these instructions. We would rather show you the wall than hide it.
Step 6 — Start the Verifier
docker network create aequitas-net 2>/dev/null || true
mkdir -p /root/aequitas-verifier-data

docker run -d --name aequitas-verifier
  --network aequitas-net --restart unless-stopped
  --env-file /root/.aequitas-verifier.env
  -v /root/aequitas-verifier-data:/data
  --log-opt max-size=20m --log-opt max-file=3
  ghcr.io/hanoi96international-gif/aequitas-biometric-beta/matching:latest

# If this says "denied" or "unauthorized", the image
  # is not published publicly yet. That is on us, not on you —
  # tell us and it gets released.


# Did it come up?
curl -s localhost:8098/health
A healthy answer reports plaintext_templates: 0 and sketch_seed_configured: true. The first is the plaintext-template counter and must stay at zero; the second confirms your own projection from Step 4 is in use rather than the built-in default.
Step 7 — Put HTTPS in Front
What is a reverse proxy? A small program that receives requests from the internet and passes them to your verifier, handling the encryption certificate for you. Caddy obtains and renews that certificate automatically and free of charge.
# nano /root/Caddyfile — use your own domain
verifier.example.org {
  reverse_proxy aequitas-verifier:8098
}

docker run -d --name caddy --network aequitas-net --restart unless-stopped
  -p 80:80 -p 443:443
  -v /root/Caddyfile:/etc/caddy/Caddyfile
  -v /root/caddy-data:/data
  caddy:latest

# From your own computer, not the server:
curl -s https://verifier.example.org/health
Step 8 — Bind Your Verifier Key to Your Wallet
Why does this exist? This is what makes one human one verifier. Your wallet signs a sentence naming your key. Without it, anybody could enter a key that is not theirs, or one person could quietly be several verifiers — and a committee of one person pretending to be five protects nobody.
Signing costs nothing and moves nothing: it signs a sentence, not a transaction. Open the button below, paste the PUBLIC half from Step 4, and sign with the wallet of your registered account.
Step 9 — Register It on the Chain
Your public key and your HTTPS address go into the validator registry on the chain, together with the signature from Step 8. From then on your attestations count toward the quorum.
# On your server. Every value here is public.
curl -s -X POST https://aequitas.digital/api/register-validator-key
  -H "Content-Type: application/json"
  -d '{"signing_address":"0xYOUR-WALLET",
      "human_wallet":"0xYOUR-WALLET",
      "signature":"0xSIGNATURE-FROM-STEP-8",
      "personhood_key":"YOUR-PUBLIC-HEX",
      "matching_url":"https://verifier.example.org"}'
Nobody approves this. Until August 2026 you had to send your key to us and wait for somebody to add it to a file on every machine — which made that person a gatekeeper. Nothing secret leaves your server here: the private half stays where it was made.
Step 10 — Start Your Coordinator
The second program, on the same server. It generates its own two keys with permissions only root can read, starts the container, and prints its public key. Nothing to copy in beforehand, nothing to send anywhere.
./eigenen-coordinator-starten.sh verifier.example.org

# It ends by printing your coordinator public key.
# Write it down — Step 11 needs it.
That key is not in your wallet. MetaMask only ever shows addresses; this one belongs to the coordinator, not to you. Never paste its private half into any page, including ours.
Step 11 — Authorize It, and You Are Done
What happens here? The page asks your coordinator for its own key, your wallet signs one sentence naming it, and the page registers that on every node. Three parties, one click, no terminal.
Open the button below and enter your coordinator’s address — the same https:// address from Step 7. There is no key to look up and nothing to copy back: your coordinator proves possession of its key where that key lies, and it never leaves that machine.
Until August 2026 this step printed a command for you to run over SSH — and it was missed three times in a row, silently: signed but never registered, with nothing on screen saying so. A step that needs a terminal is, for most people, not a step at all.
Checking That It Works
# Reachable from outside, with a valid certificate?
curl -s https://verifier.example.org/health

# Does the network see you and agree with the others?
curl -s https://aequitas.digital/inventory
The second call lists every verifier and compares them: whether all hold the same number of enrollments, whether anyone is missing a seed, and whether the keys agree. If your entry shows a divergence, it is better to find out here than during someone’s registration.
If Something Goes Wrong
a) connection refused — the container is not running. docker logs aequitas-verifier says why; a missing value in the env file is the usual cause.
b) No certificate appears — your A record from Step 3 has not propagated yet, or port 80 is blocked. Caddy needs port 80 reachable to obtain one.
c) sketch_seed_configured: false — FACE_SKETCH_SEED did not reach the container. Check the env file for stray quotes, then docker restart aequitas-verifier.
d) Your coordinator is reported as an unknown key — Step 11 did not finish. Open it again: the page lists each node it reached, and a node that was unreachable at the time is named there rather than passed over in silence.
e) Still stuck — ask in the Telegram group linked on the front page. Include the output of the two checks above, and never paste any private key.
Where this stands today — plainly
This part is in beta and the limits are real. The joint comparison consumes one-time cryptographic material, and one delivery currently covers a few dozen registrations before more is needed — so the confidential path proves itself at small scale first, not at millions. The work also grows with the number of people enrolled. We publish these numbers rather than round them off: a system that asks for your face has no business being vague about what it can and cannot do yet.
The registry is per-node, and that is deliberate
An authorization written to one node does not travel to the others — there is no transaction for it and no gossip. A replicated trust list would be exactly the central authority this system is built without: every operator decides for themselves whose attestations their node accepts. The cost is that your authorization has to be sent to each node that should honour it. The signature itself is portable, so you sign once and send it everywhere; a node you skip will simply keep refusing you.
What you learn about other people — and what follows from it
The capture passes through you; you hand it on and keep nothing. But you alone hold the mapping between wallet address and marker for the people who register through you — which is why your marker key must stay yours: shared, any operator could compute the marker for any public address and look up whose face belongs to it. It also means you become the data controller for those people under GDPR. Not us. Access, erasure and objection requests reach you, and that is not a formality.
The one limitation this creates
Erasure by wallet address only works at the coordinator where the enrolment was made: your marker hangs on your key, and another coordinator derives a different one for the same address. A "not found" from elsewhere therefore means "not registered here", not "not registered" — and the answer says so. The route through a person's own bio_hash, the one that belongs to them and needs no operator at all, works at every coordinator, because that identifier stays the same.
What is AequitasV7?
AequitasV7 is the central smart contract of the Aequitas protocol. It defines the economic rules — the registration grant, the wealth cap, demurrage, the UBI accounting — and holds the nullifier registry that makes "one human, one registration" enforceable. It is deployed immutably on Aequitas Chain (ID 1926). Live transfers are settled by the chain layer against that rulebook, which is what makes them sub-second and gasless.
6
Protocol Mechanisms
0
Admin Keys
immutable
Contract Code
Contract Addresses
AequitasV7 defines the rules of the Aequitas economy and holds the registry that makes them enforceable: every nullifier ever claimed, every registration, the wealth cap and the demurrage formula. It is immutable — no admin key, no upgrade proxy, no governance vote can change a line of it. What settles a live transfer, though, is the chain layer: the node intercepts the ERC-20 call before it reaches the EVM and applies it to its own ledger, which is what makes transfers sub-second and gasless. The contract is the rulebook and the registry; the chain is the engine that runs them, and its source is public.

The BioVerifier contract receives Groth16 zero-knowledge proofs generated entirely on the user's Android device. It verifies mathematically on-chain in ~10 ms that the submitted nullifier was correctly derived from a secret the registrant holds, and the chain refuses any nullifier it has already seen — without ever learning their name, identity, or biometric data. That is what rules out a second registration from the same identity source; whether that source is a person or a device depends on whether biometric mode is active. This is what makes gasless, investment-free registration possible: the proof is the only thing that ever leaves the device.

That combination is what is actually new: the rules and the one-human-one-registration registry sit in a contract nobody — not the operator, not a company, not a government — can rewrite, and the code that carries them out is open source and reproducible from this repository. All of it can be checked by anyone. What still requires trust is the operation of the nodes themselves, and the honest way to reduce that is more independent validators, not a stronger sentence here.
Chain: Aequitas Chain (Chain ID: 1926 · 0x786)
RPC: __RPC__

BioVerifier: 0xc369D27b49DE017d113Bbcb9A1884a9e745B6BE2
AequitasV7 (Main): 0x20D271028f32577FCd07b4583A8e0E4eBBdB4F78
1. PROOF OF ALIVE

What happens to AEQ when people die or become permanently incapacitated? In Bitcoin and most cryptocurrencies, lost wallets mean permanently lost supply — millions of BTC are estimated to be inaccessible forever. Aequitas solves this through a multi-stage inactivity recovery system: if a wallet shows no activity for an extended period, its balance is gradually returned to the community through the UBI pool, ensuring the total effective supply remains meaningful.

Year 0-2: Normal usage
Year 2: Warning 1 — Guardian can respond
Year 2 + 60 days: Warning 2
Year 2 + 120 days: Warning 3
Year 2 + 180 days (2.5 years total, day 910): AEQ goes to PERSONAL ESCROW
Year 4 (day ~1460): If still inactive — returns to UBI Pool
2. GUARDIAN SYSTEM

What if someone is hospitalized, incarcerated, or otherwise unable to access their device for months? The Guardian system allows a trusted person — another verified human — to confirm that the wallet owner is still alive, preventing their AEQ from being moved to escrow. The Guardian has strictly zero financial access: they can only call a single function that resets the inactivity clock. They cannot move, spend, or access any funds under any circumstances.

1 Guardian per human (must be another verified human)
Guardian can ONLY call confirmAlive() — zero transaction rights
Guardian CANNOT move funds or transfer AEQ
Max 3 wards · 7-day timelock · No circular relationships allowed
3. DEMURRAGE — Anti-Hoarding Mechanism

Demurrage is a holding cost on money — a negative interest rate that makes hoarding expensive and circulation attractive. It has historical precedent: the Wörgl experiment (Austria, 1932) used a demurrage currency and reduced local unemployment by 25% within one year. The Central Bank of Austria shut it down precisely because it worked too well and threatened the banking monopoly. The Chiemgauer (Germany, 2003) operates on the same principle and has circulated successfully for over 20 years. Aequitas implements continuous demurrage at 0.5% per month, applied only after a 3-month grace period of inactivity.

Charged only on the portion above your fair share — a balance at or below it never decays
Rate: 0.5%/month after 3 months grace period
Clock resets on any transfer, swap, or liquidity action
Decayed AEQ redistributed to pools (not burned)
4. WEALTH CAP — Mathematical Fairness
Bootstrap cap: max(5,min(N,25))× current average AEQ balance
1–4 humans: 5× · +1× per human · 25+: 25× permanently
Excess AEQ instantly redistributed · No manual intervention
5. UNIVERSAL BASIC INCOME
Sources: Swap fees (20%) · Wealth cap overflow · Demurrage · Inactive escrow

Daily: UBI Pool divided equally among all registered humans. Pool resets to zero after each distribution and refills continuously.
6. NO ALGORITHMIC INFLATION
The ONLY event that creates new AEQ: a new verified human registers

Total Supply = Verified Humans × 1,000 AEQ — always, exactly.
Open Source Chain Logic
The Aequitas chain core — consensus engine, state machine, redistribution logic, wealth cap formula, and ZK proof verification — is written in Go. The redistribution algorithms (CalcGini, enforceWealthCap, DistributeUBIPool, settleDemurrage) are open for review.

Smart contract source code for AequitasV7 and BioVerifier is embedded in the chain binary and verifiable via the contract addresses above. Chain ID 1926, RPC: https://aequitas.digital/rpc
/metrics — Prometheus endpoint (gini, humans, pools, block height)
/api/gini/history — Gini snapshots after each UBI distribution
/api/humans — All verified human balances (Lorenz curve source)
/api/wealth-cap — Live cap, multiplier, average balance
◆ Consensus: GHOSTDAG + KNIGHTDAG
How every node agrees on one shared order for concurrently-produced blocks — including the 2026 KnightDAG upgrade that lets each block infer its own optimal security margin instead of trusting one fixed network-wide worst case — now has its own dedicated tab: → Network / Consensus.
Node Decentralization Roadmap
Currently the network runs on 2 active validators, each on its own server with its own database, with MERGE events from both. Only registered humans can run validator nodes — this is a security requirement. Decentralization is a staged process:

Phase 0 (now): 2-node bootstrapping — two independent Contabo servers, each with its own database and its own proof server. Trust established through code transparency. Any registered human can join as a validator — no application, no stake.
Phase 1 (100+ humans): Open node join — any registered human can run a full node and earn validator rewards from the 40% pool.
Phase 2 (1,000+ humans): Minimum 10 independent node operators required. Node diversity enforced by smart contract.
Phase 3 (10,000+ humans): Fully decentralized BlockDAG. No single operator can censor or halt the chain.

The node operator guide (PDF) is available on the Network tab. Each new node operator earns from the 40% validator pool — the more nodes, the more resilient the network.