← Alle artikelen

Enable ZK: privacy-bestendige humanitaire hulp op Aleo

·12 min lezen
Web3Zero-KnowledgeAleoHumanitaire hulp

Hoe HumanityLink humanitaire cash uitkeert als private on-chain waarde — de architectuur, de geldstroom en de interfaces die mensen daadwerkelijk gebruiken.

Humanitaire hulp verschuift al meer dan tien jaar van uitkeringen in natura naar directe cash. Alleen al het World Food Programme (WFP) ging van 3 miljoen cash-ontvangers in 2010 naar 9,3 miljoen in 2015, en die trend heeft zich sindsdien doorgezet. Cash is doorgaans goedkoper te leveren dan goederen, en het laat mensen kopen wat ze werkelijk nodig hebben in plaats van wat een inkoopcyclus heeft gegokt.

Die cash op een blockchain settelen is evenmin nieuw. Een publiek grootboek creëert één specifiek probleem dat papieren vouchers nooit hadden.

Donoren hebben een audit trail nodig. Elke dollar traceerbaar van de financieringsoverboeking tot aan de winkeltoonbank. Dat is geen bureaucratische wrijving — het is de voorwaarde om überhaupt gefinancierd te worden, en het is een redelijke eis.

Begunstigden hebben precies het tegenovergestelde nodig. Publiceer een transactiegeschiedenis van een hulppopulatie en je hebt een doelwitdatabase gebouwd: wie hulp ontving, hoeveel iemand bezit, welke winkels ze bezoeken, wanneer ze waarde bij zich dragen. Voor ongedocumenteerde migranten, vluchtelingen of wie dan ook in een betwist gebied is dat geen privacy-ongemak. Het is een veiligheidsprobleem.

Deze twee eisen lijken tegenstrijdig. Zero-knowledge proofs zijn de reden dat ze het niet zijn.

Toegangscontrole betekent dat data verborgen is voor mensen die geen toegang hebben gekregen. Dat is een afspraak. Die houdt stand zolang de afspraak standhoudt — tot beleid verandert, een database lekt of een overheid ernaar vraagt.

Encryptie is iets anders. De gevoelige velden zijn ciphertext on-chain. Ze openen vereist een sleutel, geen toestemming, en elke sleutel opent alleen waarvoor hij is uitgegeven. De geaggregeerde tellers blijven publiek: totaal uitgekeerd, totaal besteed, totaal uitbetaald.

Het grootboek kan volledig open zijn. Een donor verifieert de totalen zonder ooit een begunstigde te zien.

De scheiding

Enable ZK is gebouwd op Aleo, een Layer-1 waar programmastate expliciet óf privé is (versleutelde records, alleen leesbaar met de sleutel van de eigenaar) óf publiek (on-chain mappings die voor iedereen zichtbaar zijn). Het systeem gebruikt die scheiding bewust.

Privé: de identiteit van een begunstigde is een pseudoniem adres. Saldi zijn versleutelde records. Individuele betalingen en peer-to-peer-overboekingen lopen via transfer_private — bedragen en tegenpartijen verborgen.

Publiek: dát er een transactie plaatsvond, en de geaggregeerde tellers — totaal uitgekeerd, totaal besteed, totaal uitbetaald, totaal peer-to-peer overgemaakt, totaal aankopen bij merchants.

Het praktische gevolg, vanuit drie verschillende gezichtspunten: een merchant die een betaling verwerkt ziet een bedrag en een goedkeuring, nooit de identiteit, het saldo of de historie van de ontvanger. De NGO ontsleutelt haar eigen programmadata met haar view key, alleen voor haar eigen programma. Het publiek — donoren, auditors, journalisten — ziet de geaggregeerde stroom, precies wat verantwoording daadwerkelijk vereist. Niemand heeft ooit hoeven weten welke vluchteling op dinsdag rijst kocht om te verifiëren dat een gift is besteed zoals bedoeld.

Het systeem, van begin tot eind

Figuur 1: systeemarchitectuur

Figuur 1 toont de systeemarchitectuur: vier clients, één backend, drie service-lagen.

De clients zijn de drie interfaces voor mensen plus een publieke landingssite: een NGO-dashboard voor programmamedewerkers, een point-of-sale-app voor merchants, en WhatsApp — dat de volledige interface van de begunstigde is, met spraaksynthese voor gebruikers die niet comfortabel kunnen lezen.

Alle vier komen samen bij één backend, en die concentratie ís het ontwerp. De backend is de enige component die private sleutels aanraakt, zero-knowledge proofs genereert en naar de chain schrijft. Geen enkel apparaat van een eindgebruiker houdt ooit een sleutel vast of bewijst iets, en dat is wat de rest van de gebruikerservaring mogelijk maakt.

De drie gestippelde groepen daaronder scheiden zaken die makkelijk door elkaar lopen. Storage is gewone infrastructuur — een Postgres-database per netwerk en objectopslag voor foto's. On-chain is de privacylaag: het Aleo-netwerk zelf, plus delegated proving, de manier waarop proof-generatie gebeurt zonder dat een telefoon het probeert. Value rails zijn de chains die dollars in en uit dragen — Ethereum voor de on-ramp, Stellar voor de uitbetaling, met MoneyGram aan het eind.

Proof-generatie is de ene plek waar de fysica zich in het ontwerp mengt. Een Aleo-proof voor een betaling duurt tot ongeveer dertig seconden, en dat getal is de reden dat proving wordt gedelegeerd aan een dienst in plaats van geprobeerd op een middenklasse Android-toestel, en waarom de point-of-sale-app rond een wachtscherm is gebouwd in plaats van een directe bevestiging.

Een QR-code is de wallet

Het privacymodel zou waardeloos zijn als het systeem van zijn gebruikers zou eisen dat ze het begrijpen.

De wallet van een begunstigde is een QR-code, bezorgd via WhatsApp of uitgedeeld als geprinte sticker. Geen app-installatie, geen seed phrase, geen kennis van crypto, en voor de stickerroute zelfs geen smartphone.

Alles wat een begunstigde doet, gebeurt in een chatgesprek. De kaart voor terugkerende gebruikers propt het essentiële in één bericht — hun platform-ID, op welk netwerk ze zitten, hun saldo met het equivalent in lokale valuta, en een link naar hun QR. Een menu biedt de vijf dingen die ze mogelijk willen: toon mijn QR, saldo bekijken, mijn gegevens, overboekingen, een probleem melden. Commando's werken ook als gewone tekst, in het Engels of Spaans, ongevoelig voor accenten en hoofdletters, want een lijstmenu is niet overal beschikbaar en een terugvaloptie die altijd werkt telt zwaarder dan een gepolijste die het soms doet.

De merchant-kant is een point-of-sale-app.

Figuur 2: schermafbeeldingen mobiele app voor merchants

Figuur 2 toont schermafbeeldingen van de mobiele app die merchants gebruiken. Het scannen van de QR van een begunstigde opent een doelkeuze, en de drie opties daarvan vertalen één-op-één naar on-chain transitions. Buy Goods is een gewone aankoop. Off-Ramp to Cash is de begunstigde die hulp aan de toonbank omzet in fysiek geld. Buy from Beneficiary is de interessante — de merchant die producten, ambachtswerk of diensten koopt van de begunstigde, betaald uit het eigen saldo van de merchant. Die stroom bestaat zodat hulpgeld in de lokale economie blijft circuleren in plaats van er bij het eerste gebruik direct uit weg te lekken.

Het dashboard van de NGO is de derde interface: begunstigden registreren, hulp uitkeren afzonderlijk of in bulk, merchants whitelisten, het programma pauzeren, de stromen volgen, rapportages exporteren.

Het ontwerpprincipe eronder: eenvoudig voor gebruikers, gecontroleerd achter de schermen. Elk stukje cryptografische en blockchain-complexiteit wordt geabsorbeerd door de backend. Elke programmatische controle — whitelisting van merchants, uitgifte-autoriteit, de pauzeknop, off-ramp-limieten — wordt on-chain afgedwongen, waar de regels gelden onafhankelijk van welk backend-gedrag dan ook.

De hulp is echt geld

Eén ontwerpbeslissing bepaalt alles wat erna komt: er is geen hulp-specifieke token. Hulp is gedenomineerd in USDCx, een door USDC gedekte stablecoin op Aleo, gehouden als gewone private token-records.

Dit is het verschil tussen digitale cash en een digitale voucher. Een voucher is een beperking in de vermomming van geld — alleen te besteden waar en waaraan de uitgever toestaat, waardeloos buiten het programma. Echte stablecoin-waarde kan bij elke goedgekeurde merchant worden besteed, overgemaakt naar een andere begunstigde en omgezet in fysiek geld. Die laatste eigenschap maakt het geheel een hulpinstrument in plaats van een winkeltegoed in een gesloten circuit.

Het leven van één hulpdollar

Figuur 3: geldstroom

Figuur 3 illustreert de volledige geldstroom: zes stappen, vijf actoren en twee verschillende manieren waarop waarde in cash verandert.

De NGO keert hulp uit aan een begunstigde — een privaat USDCx-record, getrokken uit de pool van het programma. Vanaf daar kan het geld zijwaarts bewegen voordat het het systeem verlaat: van begunstigde naar begunstigde, rechtstreeks vanuit WhatsApp, wat van belang is omdat huishoudens onderling delen, lenen en schulden verrekenen, of een systeem daar nu op anticipeert of niet. Het kan worden besteed bij de kassa van een merchant. Of de merchant kan het de andere kant op laten lopen en goederen kopen van de begunstigde, betaald uit het eigen saldo.

Stap één tot en met vier settelen allemaal privé op Aleo. Alleen de geaggregeerde tellers bewegen in het openbaar.

De laatste twee stappen zijn de twee uitbetalingsroutes, en die zijn werkelijk verschillend. Een begunstigde wisselt om bij een merchant — de merchant overhandigt lokale valuta over de toonbank en neemt de USDCx aan. Een merchant wisselt om via de off-ramp-pijplijn, die eindigt bij een MoneyGram-uitbetaling. De één is een lokale, menselijke transactie; de ander een settlement over vier netwerken.

Alles wat waarde verplaatst is idempotent van constructie. Bulk-uitgifte draagt een request-ID dat on-chain in een nullifier-mapping wordt vastgelegd, zodat een opnieuw uitgezonden batch niet twee keer kan minten, ongeacht wat een backend denkt; de vault aan de Ethereum-kant sleutelt elke inkomende overboeking op dezelfde manier. De chain is overal de bron van waarheid — de whitelist-controle van merchants bij elke betaling leest die direct opnieuw uit in plaats van een gecachete kopie te vertrouwen.

Geld erin krijgen

HumanityLink financiert het programma: fiat wordt USDC bij een exchange, komt terecht in een Ethereum-vaultcontract dat per NGO is uitgerold, en wordt via Circle's xReserve naar Aleo gebridged. Van begin tot eind duurt dat ongeveer drie tot vier minuten — zo'n vijfentwintig seconden voor de Ethereum-bevestiging, dan een paar minuten voordat de relayer USDCx aan de overkant mint.

De vault is bewust minimaal, ruwweg 240 regels Solidity. Hij houdt geen reserve aan en heeft geen stortingsstroom: elke dollar die binnenkomt wordt bij de volgende orchestrator-ronde volledig gebridged, dus het contract houdt middelen alleen kort onderweg vast en heeft nauwelijks state om aan te vallen. Het Aleo-bestemmingsadres ligt bij constructie vast en kan niet worden gewijzigd, wat begrenst wat een gecompromitteerde operator-sleutel kan doen — die kan een bridge starten, nooit een bridge omleiden. Minten aan de Aleo-kant wordt afgehandeld door de bridge-relayer via data die bij deployment in de vault is ingebakken, dus er is überhaupt geen off-chain mint-endpoint in het systeem.

Geld eruit krijgen

Figuur 4: uitbetaling bij MoneyGram

Figuur 4 toont het uitbetalingsproces: het saldo van een merchant omzetten in fysiek geld kost drie chains, en elke stap lost precies één probleem op.

Aleo levert de privacy — maar heeft geen fiat-rails. Ethereum is waar Circle's xReserve USDCx terugkoopt naar canonieke USDC. Stellar is de chain waarop MoneyGrams cash-pickup-anchor draait, bereikt via Circle's cross-chain transfer protocol.

Het Aleo-saldo van de merchant wordt verbrand, geattesteerd naar Ethereum en verder naar Stellar, en er wordt een MoneyGram-opname geopend; de merchant rondt de identiteitsverificatie af via een link die over WhatsApp wordt bezorgd en ontvangt een referentienummer dat hij bij elk MoneyGram-loket kan gebruiken. Realistisch duurt de hele pijplijn een half uur, grotendeels wachten op cross-chain attestatie.

De gestippelde retourlijn in het diagram is het deel dat opvalt. De on-chain grootboekregel die het openstaande saldo van een merchant afboekt, draait nádat de uitbetaling is geslaagd, niet ervoor. Als er halverwege iets misgaat, registreert de chain de merchant nog steeds als tegoed hebbend, en de run van de volgende nacht pikt hem op. Elke merchant heeft eigen, toegewijde bridge-sleutels op alle drie de chains, dus niets wordt gepoold en niets wordt gedeeld.

Elke stap is Circle-geattesteerde burn-and-mint — geen wrapped assets, geen liquiditeitspools — wat het bridge-risico terugbrengt tot Circle's attestatiedienst in plaats van tot iemands multisig.

Wie mag uitkeren

Hulp komt in circulatie via uitgifte, dus uitgifte is het controlepunt dat het zwaarst weegt.

Er worden twee Leo-programma's per NGO uitgerold: een kern-hulpcontract en een bulk-uitgifte-metgezel, die bestaat vanwege een harde platformlimiet — een Leo-functie zit vast op zestien outputs, dus het kerncontract kan hooguit vier ontvangers per aanroep bedienen, terwijl de metgezel er tot vijftien batcht.

Autorisatie loopt in twee lagen. Het hulpprogramma vertrouwt precies één minter: het bulkprogramma. Het bulkprogramma vertrouwt op zijn beurt een expliciete, benoemde set caller-sleutels. Beide controles draaien in de on-chain finalize-stap voordat een onderliggende mint wordt uitgevoerd, dus vertrouwen wijst precies één richting op en elke batch heeft een geverifieerde oorsprong.

Elke NGO rolt haar eigen instantie van beide programma's uit, en de admin-autoriteit wordt bij deployment ingesteld op degene die uitrolde — dat is wat één codebase vele organisaties laat bedienen zonder aanpassingen per tenant. De programma's zijn permanent niet-upgradebaar per assertie. Elke wijziging betekent een nieuwe deployment, en de admin-overdrachtsfunctie weigert zowel het burn-adres als de huidige admin als doel, zodat de autoriteit niet verweesd kan raken.

Private saldi zijn UTXO's

Nog één onderdeel van het model verdient uitleg, omdat het mensen verrast die van account-gebaseerde chains komen.

Op Aleo is een privaat saldo geen account waarvan het getal omhoog en omlaag gaat. Het is een verzameling losse versleutelde records — structureel Bitcoins UTXO-model met verborgen inhoud. Een overboeking consumeert hele input-records en produceert nieuwe: één voor de ontvanger, één als wisselgeld terug naar de zender. Er wordt niets ter plekke bewerkt, en een besteed record wordt gemarkeerd door een nullifier, wat dubbel uitgeven voorkomt zonder te onthullen welk record bewoog.

Daar volgen twee gevolgen uit. Records stapelen zich op — elke ontvangen uitgifte, elke geaccepteerde betaling, elke wisselgeld-output voegt er één toe, dus de wallet van een actieve merchant groeit onbeperkt en kost elke keer meer tijd om te scannen. En een wallet kan tien dollar bevatten en toch geen vijf kunnen betalen, als het saldo in twintig records van vijftig cent zit en geen enkele toelaatbare input het bedrag dekt.

Het antwoord is een achtergrond-consolidatiedienst die op een vast interval elke wallet doorloopt en gefragmenteerde records samenvoegt richting een streefaantal. Omdat die continu draait, hoeft de samenvoeging vrijwel nooit inline tijdens een betaling te gebeuren — en dat is wat een aankoop op één proof en ruwweg dertig seconden houdt, in plaats van twee proofs en een minuut.

Waar het staat

Enable ZK draait in pilots met twee NGO's in Colombia. Hulp stroomt van begin tot eind: fiat erin via een vaultcontract per NGO, private uitgifte op Aleo, besteden bij gewhiteliste merchants, peer-to-peer-circulatie tussen begunstigden, en uitbetaling voor merchants via MoneyGram.

Het bredere punt is dat de spanning tussen privacy en controleerbaarheid in humanitaire cash geen filosofische afweging is om over te discussiëren. Het is een engineeringprobleem met een oplossing die vandaag bestaat: versleutel wat een persoon identificeert, publiceer wat bewijst dat het geld bewoog, en laat beide eigenschappen tegelijk gelden.


Projectinformatie: blockstatsolutions.com/projects/humanitylink Landingspagina van het project: enable-zk.humanity.link

Werk je in humanitaire cash- en voucherhulp, of bouw je privacy-infrastructuur en wil je ervaringen uitwisselen — ik hoor graag van je.