Proof of Croatian Personhood — an open-source protocol that turns a Croatian/EU eID login into proof of personhood on a blockchain. One person can hold many wallets, but only one identity. Without that, onchain democracy does not work.
Citizens are getting a first-rate digital identity, yet the onchain world has no way to verify "this is one real person". Two gaps block legitimate voting and the allocation of public funds.
The protocol turns a verified eID login into a soulbound token (SBT) on Gnosis. Uniqueness is bound not to a wallet but to the person — so one person can hold several Safe wallets, but only one identity.
A nullifier = HMAC(ID number, secret pepper) is derived from the national ID number — deterministic and irreversible. A hundred wallets belonging to the same person → the same nullifier → the contract rejects the second mint. That is Sybil resistance.
The raw national ID number never leaves the backend, not even in a plaintext database. Only an irreversible nullifier goes onchain. GDPR-first, aligned with the eIDAS data minimisation principle.
Lost your wallet? Log in with Certilia again → the same nullifier → move the identity to a new Safe. Your eID is your recovery.
Certilia today, EUDI Wallet tomorrow. The same onchain layer works for all 27 EU countries as soon as EUDI goes live (mandatory ~2026/2027).
An SBT on a public chain can be used by any DAO, quadratic funding round or onchain vote — unlike the permissioned EU EBSI.
MACI / Semaphore zk-nullifiers deliver one-human-one-vote without linking a vote to a citizen, with resistance to vote buying. (Phase 4.)
A verified eID session is proven cryptographically, a nullifier is derived from the national ID number, and the contract mints a personal SBT — once per person.
There is more than one way to prove an eID session to the contract. For the MVP we use A/B — with no signer network at all. A decentralised network is Phase 2, not a prerequisite for it to work.
| Verifier | How | Decentralisation | Phase |
|---|---|---|---|
| A · zkTLS over Certilia OIDC | The client zk-proves that Certilia signed its id_token; the contract verifies the proof | No oracle network; relies on the Certilia PKI | MVP |
| B · NFC eID chip | The client passively authenticates the chip issuer's signature and derives the nullifier locally | No oracle network; relies on the state PKI | MVP alt. |
| C · EIP-712 oracle | An off-chain verifier validates the id_token and signs an attestation; the contract checks the signer | A single signer = centralised | Transitional |
| D · M-of-N Android mesh | Like C, but M independent Android nodes (hardware attestation) co-sign | High — nobody mints alone | Phase 2 |
airKUNA (ITalk d.o.o.) builds the protocol as a 100% open-source public good — contracts, verifier node and documentation. Regulated functions (eID issuance, KYC) stay with licensed parties (AKD/Certilia, later EUDI).
Phase 0 (MVP) is built and proven locally. The signer network is Phase 2 — it improves the decentralisation of trust, it is not a prerequisite.
IdentityRegistry + PersonhoodSBT (EIP-5484) + verifier A (zkTLS/Certilia) or B (NFC eID); mock issuer/verifier harness.
Phone-SBT via reverse-OTP (sms.domovina.ai) + credibility score; the first real Croatian-eID mints; nodes on a public map.
M separate EIP-712 signers (not MPC) + DAO onboarding + statuses + slashing. Acurast is under consideration as the substrate.
MACI / Semaphore — one-human-one-vote without linking a vote to a citizen; threshold custody of the pepper.
SD-JWT VC / mDoc over OpenID4VP — pan-EU. The same onchain layer, a new identity source for all 27 countries.
Accuracy over hype: this is genuinely done and proven locally. The rest is honestly marked as "planned".
IdentityRegistry, PersonhoodSBT (EIP-5484), EIP-712 verifier + 55 Foundry tests (green) and a deploy script.claim → SBT mint; a duplicate ID number reverts; recovery (migrateAnchor) works. Proven end-to-end on a local EVM.We are seeking EU grants and community contributions to finish the protocol as a public good. Concrete tracks and amounts — nothing hidden.
Grant, partnership, integration or a technical contribution — get in touch. The code is open, the roadmap is public, and the discussion happens in the open in our Telegram group.
Onchain donations (EURe / xDAI on Gnosis) — coming soon. Until then, to contribute, reach out in the Telegram group or at [email protected].