Drift af en flåde af krypto-ATM'er: kontanter, kassetter, compliance
En krypto-ATM er en pengeautomat, der virker begge veje: en kunde fører sedler ind og får krypto, eller sender krypto og henter sedler. At drive en flåde af dem er en logistikvirksomhed med en softwaregrænseflade. Skærmen giver tilbud og bekræfter, men det svære er fysisk – kontanter i kassetter, maskiner på steder, hvor du ikke selv er, og en veksling ved hvert skab, der skal stemme på øret. Den, der tænker på en krypto-ATM som en app, har kun set den nemme halvdel.
Så dette er en gennemgang af den operationelle halvdel: de to delsystemer i skabet, vekslingen ved glasset, kassetterne, som ingen tager med i en demo, prognoseproblemet, en flåde bliver til, og disciplinen i at styre og afstemme maskiner, du ikke kan se.
To maskiner i ét skab
En krypto-ATM er egentlig to delsystemer, skruet sammen: en kontanthåndteringsmaskine – seddelindlæser, validator, en udbetaler eller recycler og de kassetter, der rummer sedlerne – og en kryptoterminal – en wallet, en netværksforbindelse og en skærm, der giver tilbud og bekræfter. Et køb går fra kontanter til krypto: kunden indfører sedler, validatoren tæller og stakker dem, og maskinen sender krypto til kundens wallet. Et salg går fra krypto til kontanter: kunden sender krypto til maskinens adresse, og når overførslen er bekræftet, tæller udbetaleren sedler ud af en kassette. Alt det svære ligger, hvor de to halvdele mødes, for sedler er fysiske og uigenkaldelige, når de først er stakket, mens krypto er digitalt og uigenkaldeligt, når det først er bekræftet – og maskinen må ikke forpligte den ene side, før den anden er sikker.
Vekslingen ved glasset
Ved hver maskine foregår der en veksling, og den følger den samme disciplin med låst kurs som en skranketerminal: skærmen oplyser en kurs, holder den fast under sessionen med en nedtælling, og kunden handler til den kurs, ellers genberegner sessionen kursen. Rækkefølgen er sikkerhedsmodellen. Ved et køb frigiver maskinen først krypto, når sedlerne er valideret og stablet — ikke blot indført, for en seddel, der stadig sidder i escrow-slusen, er endnu ikke penge. Ved et salg udbetaler den ikke en eneste seddel, før den indgående overførsel har nok bekræftelser, for en udbetalt seddel kan ikke hentes tilbage. Den uigenkaldelige handling kommer altid sidst, først når den anden side er endelig. Er rækkefølgen forkert, har du bygget en maskine, der giver krypto væk for sedler, den aldrig beholdt, eller kontanter for en overførsel, der aldrig kom frem.
Kassetter: den fysiske halvdel, ingen demonstrerer
Kontanter ligger i kassetter — aftagelige bokse med sedler, typisk én pr. seddelværdi, som sættes i maskinen. En recycler kan udbetale de samme sedler, den har modtaget; en simplere udbetalingsautomat trækker kun fra kassetter, en operatør har fyldt. Hver kassette har to tal: det antal, softwaren tror på, og det antal, der fysisk er sandt. Operatørens hele opgave, reduceret til én sætning, er at holde de to lige. Hver modtaget seddel øger det forventede antal, hver udbetalt seddel mindsker det, og et kontantindsamlingsbesøg nulstiller det mod en fysisk optælling. Når det forventede og det optalte antal afviger ved en indsamling, er det hul det vigtigste enkelttal i flådedriften — det er en fejloptælling, et jam eller noget værre, og det findes ved at tælle, aldrig ved at håbe.
Kontantbeholdning, og hvorfor en maskinflåde er et prognoseproblem
Én maskine er et ærinde; en flåde er et prognoseproblem. En udbetalingsautomat, der løber tør, afviser kunder, og en seddelmodtager med fuld stacker holder op med at tage imod kontanter — begge dele er nedbrud, og ingen af dem viser en fejllampe, som en forbipasserende ville lægge mærke til, for maskinen kan simpelthen ikke gennemføre den transaktion, kunden ville have. Derfor følger konsollen kontantbeholdningen pr. kassette pr. maskine og omsætter den til ruter: hvilke skabe skal fyldes, og hvilke skal tømmes, før det ene eller det andet løber ind i muren. En velkørt flåde er mest af alt en værditransportplan — hvem kører til hvilket skab, med hvor meget, og hvilken dag — og softwaren findes for at bygge den plan ud fra live-beholdninger i stedet for gætværk og panik fredag eftermiddag.
Fjernlåsning og handling fra en konsol
Maskinerne står steder, hvor operatøren ikke er — en lobby, et butiksgulv, en stationshal — så styringen skal kunne ske på afstand. Fra konsollen kan en operatør låse en enkelt maskine eller hele flåden øjeblikkeligt, og en låst maskine gennemfører ikke noget nyt. Låsning er svaret på et jam, en mistænkt fejl, en kontantdifference eller en maskine, der skal fryses, mens nogen kører ud til den. Nøgler og kassetter bliver, hvor de er; maskinen holder blot op med at handle, indtil et menneske frigiver den. Disciplinen er, at farlige handlinger sker fra konsollen med en begrundelse og havner i en log — ikke ved, at nogen trykker på maskinens egen skærm ude i marken uden registrering, hvor ingen senere kan rekonstruere, hvad der blev gjort, eller hvorfor.
En flåde af kryptoautomater er ikke et softwareprodukt med lidt hardware på. Det er en kontantlogistik med en skærm på forsiden — og hvert tal på den skærm skal kunne afstemmes til en pengeseddel, du kan holde i hånden.
Afstemning af en maskine, du ikke kan se
Afstemning er det daglige bevis på, at en flåde er ærlig. Hver session ved en maskine efterlader en post — sedler ind og krypto ud, eller krypto ind og sedler ud, med den låste kurs, wallet-adresserne og bekræftelserne knyttet til. Læg en maskines sessioner siden sidste indsamling sammen, og du får de kontanter, den bør indeholde; tæl kassetterne ved besøget, og du får de kontanter, den indeholder; de to skal mødes. Kryptosiden afstemmes på samme måde, mod maskinens wallet-saldo. En flåde, der afstemmer pr. maskine og pr. dag, opdager et dårligt skab den første dag — et jam, en skimming, en fejloptælling — i stedet for at finde det som et hul i kvartalsregnskabet, som ingen kan forklare. Hele pointen med hovedbogen pr. maskine er, at den består en revision, netop fordi den aldrig fik lov at skride.
Compliance er operatørens ansvar; softwaren håndhæver og registrerer
Operatøren af en flåde af kryptoautomater bærer forpligtelserne. De tilladelser, den skal have, de identitetskontroller, den skal udføre, og de transaktionsgrænser, den skal overholde, varierer efter, hvor hver maskine står, og de tilhører operatøren — ikke boksen og ikke boksens leverandør. Det, softwaren gør, er bevidst mekanisk: den håndhæver de grænser pr. kunde og pr. dag, operatøren konfigurerer, beder om det identitetstrin, operatøren kræver, ved den tærskel, operatøren fastsætter, og registrerer hver seddel, hver overførsel og hver grænsebeslutning, så operatøren kan stå til regnskab for flåden bagefter. Maskinen bestemmer ikke politikken; den anvender operatørens politik ens ved hvert skab og skriver ned, hvad der skete. At få politikken rigtig er operatørens disciplin. Softwarens bidrag er at gøre politikken ensartet og revisionsegnet på tværs af en flåde, som ingen enkeltperson kan overvåge på én gang.
Den ærlige grænse
En enkelt maskine på ét sted har næsten ikke brug for en flådekonsol — et regneark og en ugentlig optælling ville række. Maskineriet her tjener sig ind i flådeskala, hvor tallene ikke længere kan være i ét hoved: kontantbeholdning på tværs af mange skabe, kassettetællinger, der skal afstemmes pr. lokation, fjernlåsning af maskiner timers kørsel væk og en hovedbog pr. maskine, der kan modstå en revision. Driver du ét skab, er det overhead; driver du tyve, er planen, afstemningen og fjernstyringen forskellen på en forretning og en bunke skabe, der langsomt glider ud af balance. Flådekonsollen findes på /products/atm, og begreberne — kassette, recycler, afstemning, settlement — står i /glossary.
Skal der bygges et system?
Fortæl os om problemet. Vi vender tilbage med en arkitektur og en plan.