Fältanteckningar

Att driva en flotta av kryptoautomater: kontanter, kassetter, regelefterlevnad

En kryptoautomat är en bankomat som fungerar åt båda håll: kunden matar in sedlar och får krypto, eller skickar krypto och tar ut sedlar. Att driva en flotta av dem är en logistikverksamhet med ett mjukvarugränssnitt. Skärmen ger kurs och bekräftar, men de svåra delarna är fysiska — kontanter som ligger i kassetter, maskiner som står på platser där du inte är, och ett utbyte som sker i varje skåp och som måste stämma ner till sista öret. Den som tänker på en kryptoautomat som en app har sett den enkla hälften.

Det här är därför en genomgång av den operativa hälften: de två delsystemen i skåpet, utbytet vid glaset, kassetterna som ingen visar i en demo, prognosproblemet som en flotta blir, och disciplinen att styra och stämma av maskiner du inte kan se.

Två maskiner i ett skåp

En kryptoautomat är egentligen två delsystem som skruvats ihop: en kontanthanteringsmaskin — sedelinmatare, validator, en utmatare eller recycler, och kassetterna som rymmer sedlarna — och en kryptoterminal — en plånbok, en nätverksanslutning och en skärm som ger kurs och bekräftar. Ett köp går från kontanter till krypto: kunden matar in sedlar, validatorn räknar och staplar dem, och maskinen skickar krypto till kundens plånbok. En försäljning går från krypto till kontanter: kunden skickar krypto till maskinens adress och, när överföringen bekräftats, räknar utmataren ut sedlar ur en kassett. Allt svårt finns där de två hälfterna möts, eftersom sedlar är fysiska och oåterkalleliga när de väl staplats medan krypto är digitalt och oåterkalleligt när det väl bekräftats — och maskinen får inte förbinda sig på den ena sidan förrän den andra är säker.

Växlingen vid glaset

Vid varje automat sker en växling, och den styrs av samma disciplin med låst kurs som en diskterminal: skärmen visar en kurs, håller den under sessionen med nedräkning, och kunden handlar mot den kursen, annars begärs en ny. Ordningen är säkerhetsmodellen. Vid köp släpper automaten ut krypto först när sedlarna är validerade och staplade – inte bara instoppade, eftersom en sedel som fortfarande sitter i escrow-öppningen ännu inte är pengar. Vid försäljning matar den inte ut en enda sedel förrän den inkommande överföringen har tillräckligt många bekräftelser, eftersom en utmatad sedel inte går att få tillbaka. Den oåterkalleliga handlingen kommer alltid sist, först när den andra sidan är slutgiltig. Blir ordningen fel har du byggt en automat som ger bort krypto för sedlar den aldrig behöll, eller kontanter för en överföring som aldrig kom fram.

Kassetter: den fysiska halvan som ingen demonstrerar

Kontanter finns i kassetter – utbytbara lådor med sedlar, vanligtvis en per valör, som sätts in i automaten. En recycler kan betala ut samma sedlar som den tagit emot; en enklare utmatare tar bara från kassetter som en operatör har fyllt på. Varje kassett har två siffror: antalet som mjukvaran tror på och antalet som fysiskt stämmer. Operatörens hela uppdrag, reducerat till en mening, är att hålla de två lika. Varje godkänd sedel räknar upp det förväntade antalet, varje utmatad sedel räknar ner det, och ett kontantuppsamlingsbesök nollställer det mot ett fysiskt räknat antal. När det förväntade och det räknade antalet skiljer sig åt vid en uppsamling är den skillnaden den viktigaste siffran i flottdriften – det är en felräkning, ett stopp eller något värre, och det upptäcks genom räkning, aldrig genom förhoppningar.

Kontantnivåer, och varför en flotta är ett prognosproblem

En automat är en syssla; en flotta är ett prognosproblem. En utmatare som blir tom skickar bort kunder, och en sedelmottagare vars stapel är full slutar ta emot kontanter – båda är driftstopp, och ingen av dem visar en felindikator som en förbipasserande lägger märke till, eftersom automaten helt enkelt inte kan slutföra den transaktion kunden ville göra. Därför följer konsolen kontantnivån per kassett och automat och omvandlar nivåerna till rutter: vilka skåp som behöver fyllas på och vilka som behöver tömmas, innan något av det slår i taket. En väl driven flotta är mest ett schema för värdetransporter – vem som kör till vilket skåp, med hur mycket, vilken dag – och mjukvaran finns för att bygga det schemat utifrån aktuella nivåer i stället för gissningar och panik på fredagseftermiddagen.

Fjärrlåsning, och att agera från en konsol

Automaterna står på platser där operatören inte är – en entré, ett butiksgolv, en stationshall – så kontrollen måste ske på distans. Från konsolen kan en operatör låsa en enskild automat eller hela flottan direkt, och en låst automat slutför inget nytt. Låsning är svaret på ett stopp, ett misstänkt fel, en kontantavvikelse eller en automat som måste frysas medan någon åker ut till den. Nycklar och kassetter stannar där de är; automaten slutar bara transagera tills en människa häver låsningen. Principen är att farliga åtgärder görs från konsolen med en angiven orsak och hamnar i en logg – inte genom att någon trycker på automatens egen skärm ute på plats, ospårat, där ingen i efterhand kan rekonstruera vad som gjordes eller varför.

En flotta av kryptoautomater är inte en mjukvaruprodukt med lite hårdvara på. Det är en kontantlogistikverksamhet med en skärm på framsidan – och varje siffra på den skärmen måste stämma av mot en sedel du kan hålla i handen.
— Protocore · Betalningsteknik

Att stämma av en automat du inte kan se

Avstämning är det dagliga beviset på att en flotta är ärlig. Varje session vid en automat lämnar en post – sedlar in och krypto ut, eller krypto in och sedlar ut, med den låsta kursen, plånboksadresserna och bekräftelserna kopplade till sig. Summera en automats sessioner sedan senaste uppsamlingen och du får de kontanter den bör innehålla; räkna kassetterna vid besöket och du får de kontanter den faktiskt innehåller; de två måste mötas. Kryptosidan stäms av på samma sätt, mot automatens plånbokssaldo. En flotta som stäms av per automat och dag fångar ett felaktigt skåp första dagen – ett stopp, en skimning, en felräkning – i stället för att upptäcka det som ett hål vid kvartalsslutet som ingen kan förklara. Poängen med huvudboken per automat är att den klarar en revision just för att den aldrig tilläts driva iväg.

Compliance är operatörens ansvar; mjukvaran upprätthåller och dokumenterar

Operatören av en flotta av kryptoautomater bär ansvaret. Tillstånden som krävs, identitetskontrollerna som ska göras och transaktionsgränserna som ska följas varierar efter var varje automat står, och de tillhör operatören – inte lådan och inte tillverkaren av lådan. Mjukvarans uppgift är medvetet mekanisk: upprätthålla de gränser per kund och dag som operatören konfigurerar, begära det identitetssteg operatören kräver vid den tröskel operatören sätter, och registrera varje sedel, varje överföring och varje gränsbeslut så att operatören kan stå till svars för flottan i efterhand. Automaten bestämmer inte policy; den tillämpar operatörens policy på samma sätt i varje skåp och skriver ned vad som hände. Att få policyn rätt är operatörens disciplin. Mjukvarans bidrag är att göra policyn enhetlig och spårbar i en flotta som ingen enskild person kan övervaka i sin helhet.

Den ärliga gränsen

En enskild automat på ett ställe behöver knappt en flottkonsol – ett kalkylblad och en veckoräkning räcker. Maskineriet här lönar sig i flottskala, där siffrorna inte längre ryms i ett huvud: kontantnivåer i många skåp, kassettantal som måste stämmas av per plats, fjärrlåsning för automater som ligger flera timmar bort och en huvudbok per automat som klarar en revision. Driver du ett skåp är detta overhead; driver du tjugo är schemat, avstämningen och fjärrkontrollerna skillnaden mellan en verksamhet och en hög skåp som sakta driver ur balans. Flottkonsolen finns på /products/atm, och termerna – kassett, recycler, avstämning, avveckling – finns i /glossary.

Har du ett system att bygga?

Berätta vad problemet är. Vi återkommer med en arkitektur och en plan.