Veldnotities

Een crypto-ATM-vloot beheren: cash, cassettes, compliance

Een crypto-ATM is een geldautomaat die twee kanten op werkt: een klant stopt er bankbiljetten in en ontvangt crypto, of stuurt crypto en haalt bankbiljetten op. Een vloot daarvan beheren is een logistiek bedrijf in een softwarejasje. Het scherm geeft koersen en vraagt bevestiging, maar het moeilijke deel is fysiek — cash in cassettes, machines op plekken waar jij niet bent, en een uitwisseling bij elke kast die tot op de cent moet sluiten. Wie een crypto-ATM als een app ziet, heeft naar de makkelijke helft gekeken.

Dit is dus een teardown van de operationele helft: de twee subsystemen in de kast, de uitwisseling aan het glas, de cassettes die niemand in een demo laat zien, het forecastingprobleem dat een vloot wordt, en de discipline van het controleren en reconciliëren van machines die je niet kunt zien.

Twee machines in één kast

Een crypto-ATM bestaat eigenlijk uit twee aan elkaar gekoppelde subsystemen: een cashmachine — biljettenacceptor, validator, een dispenser of recycler en de cassettes waarin de biljetten zitten — en een cryptoterminal — een wallet, een netwerkverbinding en een scherm dat koersen toont en bevestiging vraagt. Een buy loopt van cash naar crypto: de klant stopt biljetten in, de validator telt en stapelt ze, en de machine stuurt crypto naar de wallet van de klant. Een sell loopt van crypto naar cash: de klant stuurt crypto naar het adres van de machine en zodra de transfer is bevestigd, telt de dispenser biljetten uit een cassette. Alles wat moeilijk is zit waar die twee helften elkaar raken, omdat biljetten fysiek zijn en onomkeerbaar zodra ze gestapeld zijn, terwijl crypto digitaal is en onomkeerbaar zodra het bevestigd is — en de machine geen van beide kanten mag vastleggen voordat de andere zeker is.

De wisseling aan het glas

Bij elke machine vindt een wisseling plaats, en daarvoor geldt dezelfde discipline van vastgezette koersen als bij een balieterminal: het scherm toont een koers, houdt die voor de sessie vast met een aftelklok, en de klant transacteert tegen die koers, anders vraagt de sessie een nieuwe koers op. De volgorde is het veiligheidsmodel. Bij een aankoop geeft de machine pas crypto vrij nadat de biljetten zijn gevalideerd en gestapeld — niet al bij het inbrengen, want een biljet dat nog in de escrow-sleuf zit, is nog geen geld. Bij een verkoop betaalt de machine geen enkel biljet uit voordat de inkomende overboeking genoeg bevestigingen heeft, want een uitgegeven biljet haal je niet meer terug. De onomkeerbare actie komt altijd laatst, pas wanneer de andere kant definitief is. Zet je die volgorde verkeerd, dan bouw je een machine die crypto weggeeft voor biljetten die hij nooit heeft behouden, of contant geld voor een overboeking die nooit is aangekomen.

Cassettes: de fysieke helft die niemand demonstreert

Contant geld zit in cassettes — verwijderbare bakken met biljetten, doorgaans één per coupure, die in de machine schuiven. Een recycler kan dezelfde biljetten uitbetalen die hij heeft ingenomen; een eenvoudigere dispenser put alleen uit cassettes die een operator heeft geladen. Elke cassette heeft twee getallen: het aantal dat de software denkt te hebben en het aantal dat er fysiek werkelijk is. De hele taak van de operator komt neer op één zin: die twee gelijk houden. Elk geaccepteerd biljet verhoogt een verwacht aantal, elk uitgegeven biljet verlaagt het, en een geldophaalronde zet het terug op basis van een fysieke telling. Als het verwachte en het getelde aantal bij een ophaalronde verschillen, is dat verschil het belangrijkste getal in het vlootbeheer — het is een telfout, een storing of iets ergers, en je vindt het door te tellen, nooit door te hopen.

Contantniveaus, en waarom een vloot een voorspellingsprobleem is

Eén machine is een klusje; een vloot is een voorspellingsprobleem. Een dispenser die leeg raakt, stuurt klanten weg, en een biljetlezer waarvan de stacker vol zit, neemt geen contant geld meer aan — beide zijn storingen, en geen van beide geeft een foutlampje dat een voorbijganger opmerkt, omdat de machine de gewenste transactie simpelweg niet kan afronden. Daarom houdt de console het contantniveau per cassette per machine bij en zet die niveaus om in routes: welke kasten moeten worden bijgevuld en welke geleegd, voordat een van beide tegen de muur loopt. Een goed gerunde vloot is vooral een geldtransportschema — wie rijdt naar welke kast, met hoeveel geld, op welke dag — en de software bestaat om dat schema te maken op basis van actuele niveaus in plaats van gissen en paniek op vrijdagmiddag.

Remote lock, en handelen vanuit een console

De machines staan op plekken waar de operator niet is — een lobby, een winkelvloer, een stationshal — dus de besturing moet op afstand kunnen. Vanuit de console kan een operator één machine of de hele vloot direct vergrendelen, en een vergrendelde machine rondt niets nieuws meer af. Vergrendelen is het antwoord op een storing, een vermoedelijk defect, een kasverschil, of een machine die bevroren moet worden terwijl iemand erheen rijdt. Sleutels en cassettes blijven waar ze zijn; de machine stopt alleen met transacteren tot een mens hem weer vrijgeeft. De discipline is dat gevaarlijke acties vanuit de console gebeuren, met een reden erbij, en in een log terechtkomen — niet doordat iemand ter plekke ongeregistreerd op het scherm van de machine tikt, waarna niemand later kan reconstrueren wat er is gedaan of waarom.

Een vloot crypto-ATM's is geen softwareproduct met wat hardware eraan. Het is een cashlogistieke operatie met een scherm op de voorkant — en elk getal op dat scherm moet kloppen met een bankbiljet dat je in je hand kunt houden.
— Protocore · Engineering Betalingen

Een machine afstemmen die je niet kunt zien

Reconciliatie is het dagelijkse bewijs dat een vloot eerlijk is. Elke sessie bij een machine laat een record na — biljetten erin en crypto eruit, of crypto erin en biljetten eruit, met de vastgezette koers, de walletadressen en de bevestigingen erbij. Tel de sessies van een machine sinds de laatste ophaalronde op en je krijgt het contant geld dat hij zou moeten bevatten; tel de cassettes bij het bezoek en je krijgt het geld dat hij bevat; die twee moeten gelijk zijn. De cryptokant wordt op dezelfde manier afgestemd, tegen het walletsaldo van de machine. Een vloot die per machine en per dag reconcilieert, ziet een slechte kast al op dag één — een storing, skimming, een telfout — in plaats van het te ontdekken als een gat bij kwartaaleinde dat niemand kan verklaren. Het hele punt van het grootboek per machine is dat het een audit doorstaat, juist omdat het nooit mocht afdrijven.

Compliance is de taak van de operator; de software dwingt af en legt vast

De operator van een crypto-ATM-vloot draagt de verplichtingen. De vergunningen die hij moet hebben, de identiteitscontroles die hij moet uitvoeren en de transactielimieten die hij moet naleven verschillen per locatie van elke machine, en ze zijn van de operator — niet van de kast, en niet van de leverancier van de kast. Wat de software doet, is bewust mechanisch: de limieten per klant en per dag afdwingen die de operator instelt, vragen om de identiteitsstap die de operator vereist bij de drempel die de operator bepaalt, en elk biljet, elke overboeking en elke limietbeslissing vastleggen, zodat de operator later verantwoording kan afleggen over de vloot. De machine bepaalt geen beleid; hij past het beleid van de operator bij elke kast hetzelfde toe en schrijft op wat er gebeurde. Het beleid goed krijgen is de discipline van de operator. De bijdrage van de software is dat beleid uniform en controleerbaar maken over een vloot die niemand in zijn eentje tegelijk kan overzien.

De eerlijke grens

Een enkele machine op één locatie heeft nauwelijks een vlootconsole nodig — een spreadsheet en een wekelijkse telling volstaan. De machinerie hier verdient zich terug op vlootschaal, waar de cijfers niet meer in één hoofd passen: contantniveaus over veel kasten, cassettetellingen die per locatie moeten sluiten, remote lock voor machines uren verderop en een grootboek per machine dat een audit doorstaat. Met één kast is dit overhead; met twintig maken het schema, de reconciliatie en de afstandsbediening het verschil tussen een bedrijf en een hoop kasten die langzaam uit balans raken. De vlootconsole staat op /products/atm, en de termen — cassette, recycler, reconciliatie, settlement — staan in de /glossary.

Een systeem te bouwen?

Vertel ons het probleem. Wij komen terug met een architectuur en een plan.