Open protocol · eID → onchain · Phase 0: MVP

One person.
One onchain identity.

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.

eID source: Certilia (eIDAS High) National ID number never onchain (GDPR) Open-source (Apache-2.0 / MIT) Gnosis Chain
airKUNA coin
1 person = 1 identity
uniqueness bound to the person (a nullifier derived from the national ID number), not to a wallet — Sybil-resistant
27 EU countries
source-agnostic: Certilia today → EUDI Wallet tomorrow (the same onchain layer for the whole EU)
0 ID numbers onchain
the raw ID number never leaves the backend; only an irreversible nullifier goes onchain
The problem we solve

Onchain democracy does not work without proof of personhood

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.

flowchart TB A(["One person
(attacker)"]):::person --> W1["Wallet 1"]:::bad A --> W2["Wallet 2"]:::bad A --> W3["Wallet …1000"]:::bad W1 --> V{{"Voting · QF · DAO"}}:::warn W2 --> V W3 --> V H(["Honest person
1 vote"]):::good --> V V --> R["Result distorted
attacker outvotes the honest"]:::bad classDef person fill:#fff,stroke:#002F6C,color:#002F6C,font-weight:600; classDef entity fill:#002F6C,stroke:#001631,color:#fff,font-weight:600; classDef bad fill:#C0181C,stroke:#7a1418,color:#fff,font-weight:600; classDef warn fill:#E3AF35,stroke:#9a6f1f,color:#3a2900,font-weight:600; classDef good fill:#1A7A3C,stroke:#0c3f23,color:#fff,font-weight:600;
Sybil attack. Without proof of personhood, 1 human = 1000 votes → onchain voting, QF and DAOs become unreliable.
flowchart TB U1(["Citizen"]):::person --> C U2(["Citizen"]):::person --> C U3(["Citizen"]):::person --> C C["Certilia / AKD
single source of truth · eIDAS High"]:::warn --> X{{"Can mint or withhold
an identity on its own"}}:::bad X -. "everything depends on one entity" .-> D["No decentralised
trust"]:::bad classDef person fill:#fff,stroke:#002F6C,color:#002F6C,font-weight:600; classDef entity fill:#002F6C,stroke:#001631,color:#fff,font-weight:600; classDef bad fill:#C0181C,stroke:#7a1418,color:#fff,font-weight:600; classDef warn fill:#E3AF35,stroke:#9a6f1f,color:#3a2900,font-weight:600; classDef good fill:#1A7A3C,stroke:#0c3f23,color:#fff,font-weight:600;
Centralised eID. Croatia has a first-rate eID (Certilia MobileID, eIDAS High) — but one entity = one point of failure.
Why the existing solutions fall short: biometrics are hostile to privacy, social graphs are collusion-prone, and one company's KYC creates a new gatekeeper. We need a proof that is private, rooted in the state eID and usable on a public chain.
Solution

eID → soulbound personhood token

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.

flowchart LR E(["eID login
Certilia → EUDI"]):::person -->|"HMAC(ID no.)"| N["nullifier
ID number never onchain"]:::good N -->|"once per person"| I["One identity
SBT (soulbound)"]:::good I --> W1["Safe 1"]:::entity I --> W2["Safe 2"]:::entity I --> W3["Safe 3"]:::entity W1 -->|"same identity"| V{{"1 person = 1 vote"}}:::good W2 --> V W3 --> V V --> OK["Sybil-resistant
voting works"]:::good classDef person fill:#fff,stroke:#002F6C,color:#002F6C,font-weight:600; classDef entity fill:#002F6C,stroke:#001631,color:#fff,font-weight:600; classDef bad fill:#C0181C,stroke:#7a1418,color:#fff,font-weight:600; classDef warn fill:#E3AF35,stroke:#9a6f1f,color:#3a2900,font-weight:600; classDef good fill:#1A7A3C,stroke:#0c3f23,color:#fff,font-weight:600;
The vision — solved. eID → one irreversible identity → however many wallets, still only one vote.
1

One person, 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 ID number never goes onchain

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.

Recovery = eID

Lost your wallet? Log in with Certilia again → the same nullifier → move the identity to a new Safe. Your eID is your recovery.

EU

Source-agnostic

Certilia today, EUDI Wallet tomorrow. The same onchain layer works for all 27 EU countries as soon as EUDI goes live (mandatory ~2026/2027).

Composable

An SBT on a public chain can be used by any DAO, quadratic funding round or onchain vote — unlike the permissioned EU EBSI.

Private voting

MACI / Semaphore zk-nullifiers deliver one-human-one-vote without linking a vote to a citizen, with resistance to vote buying. (Phase 4.)

How it works

From eID login to an onchain SBT

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.

flowchart LR A([Citizen]):::user --> B[eID login
Certilia MobileID
eIDAS High]:::eid B --> C[Verifier
proves the session,
derives the nullifier]:::verify C --> D["nullifier =
HMAC(ID no., pepper)
ID number stays offchain"]:::null D --> E[IdentityRegistry
MINT SBT]:::chain E --> F([Personal SBT in
the anchor Safe]):::chain F -. "many wallets
= same identity" .-> F classDef user fill:#fff,stroke:#002F6C,color:#002F6C,font-weight:600; classDef eid fill:#0A3B82,stroke:#001631,color:#fff,font-weight:600; classDef verify fill:#002F6C,stroke:#001631,color:#fff,font-weight:600; classDef null fill:#16653a,stroke:#0c3f23,color:#fff,font-weight:600; classDef chain fill:#C8912A,stroke:#9a6f1f,color:#fff,font-weight:600;
Blue = eID / verification · green = nullifier (ID number never onchain) · gold = onchain SBT registry
The eID → onchain bridge

Pluggable verifier — chosen per phase

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.

VerifierHowDecentralisationPhase
A · zkTLS over Certilia OIDCThe client zk-proves that Certilia signed its id_token; the contract verifies the proofNo oracle network; relies on the Certilia PKIMVP
B · NFC eID chipThe client passively authenticates the chip issuer's signature and derives the nullifier locallyNo oracle network; relies on the state PKIMVP alt.
C · EIP-712 oracleAn off-chain verifier validates the id_token and signs an attestation; the contract checks the signerA single signer = centralisedTransitional
D · M-of-N Android meshLike C, but M independent Android nodes (hardware attestation) co-signHigh — nobody mints alonePhase 2
Honest about trust: verifiers A/B give Sybil resistance without a network because the session itself is proven cryptographically (the same approach as the proven World ID — the difference is the source: a Croatian/EU eID instead of biometrics). Android hardware attestation (the mesh, Phase 2) roots in Google → that is trust-minimised, not trustless; the mitigation is mixing manufacturers. We do not promise what has not been built.
Why a public good · why ITalk

Infrastructure everyone uses, open from day one

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).

  • Non-custodial software provider. ITalk writes software everyone can use; it does not hold anyone else's identities or funds.
  • Aligned with EU strategy. It complements eIDAS 2.0 / EUDI Wallet with the self-sovereign, composable layer the regulation itself points towards.
  • Reusable by everyone — municipalities, associations, cooperatives, DAOs, participatory budgets.

Why us · all in production, try it

Certilia eID verificationdomovina.aipinka.io"Login with Certilia" (the same SSO backend)
EURe wallet + Safe/relayerpay.domovina.aioffline QR + PDF417 barcodes
SMS out-of-band proofsms.domovina.aiotp.domovina.aiotp runs on the sms infrastructure
Public GIS map of Croatiagis.domovina.aifast WebGL map: municipalities, clubs, stadiums, Pinka campaigns, airports
ITalk d.o.o.Zagreb, est. 2016
Roadmap

Transparently: where we are and where we are going

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.

0

MVP — nullifier registry + SBT + verifier A/B

IdentityRegistry + PersonhoodSBT (EIP-5484) + verifier A (zkTLS/Certilia) or B (NFC eID); mock issuer/verifier harness.

NOW
1

A second independent source + map

Phone-SBT via reverse-OTP (sms.domovina.ai) + credibility score; the first real Croatian-eID mints; nodes on a public map.

PILOT
2

M-of-N Android verifier mesh

M separate EIP-712 signers (not MPC) + DAO onboarding + statuses + slashing. Acurast is under consideration as the substrate.

DECENTRALISATION
4

zk anonymous voting

MACI / Semaphore — one-human-one-vote without linking a vote to a citizen; threshold custody of the pepper.

PRIVACY
5

EUDI Wallet as a source

SD-JWT VC / mDoc over OpenID4VP — pan-EU. The same onchain layer, a new identity source for all 27 countries.

PAN-EU
What is already built

Not just an idea — the MVP is built

Accuracy over hype: this is genuinely done and proven locally. The rest is honestly marked as "planned".

Funding

Exactly what the money is for

We are seeking EU grants and community contributions to finish the protocol as a public good. Concrete tracks and amounts — nothing hidden.

Now
EU NGI Pilots
~€60,000
Cascade funding, no consortium required. MVP: nullifier registry + SBT + verifier-A (zkTLS/Certilia), open-source.
Next
Gnosis / GnosisDAO grant
€25–100k
Mainnet deploy, audit preparation, Safe/relayer integration.
Next
Optimism RetroPGF · Octant · Gitcoin
retro
Reward for a delivered public good and real usage.
Later (pan-EU): Digital Europe / EUDI Large-Scale Pilot via a consortium (POTENTIAL / EWC / NOBID / DC4EU) — a consortium share for the EUDI Wallet source. Bigger money, longer horizon.
Contribute or connect

We are building proof of personhood for EU democracy

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.

Join the discussion — t.me/airkuna_com Email for grants and partnerships Whitepaper One-pager summary Treasury flywheel Self-repaying investment (Hobba)

Onchain donations (EURe / xDAI on Gnosis) — coming soon. Until then, to contribute, reach out in the Telegram group or at [email protected].