Feltnotater

Drift av en flåte med kryptominibanker: kontanter, kassetter, compliance

En krypto-ATM er en minibank som går begge veier: en kunde mater inn sedler og får krypto, eller sender krypto og tar ut sedler. Å drive en flåte av dem er logistikkvirksomhet i en programvaregrenseflate. Skjermen gir tilbud og bekrefter, men det vanskelige er fysisk — kontanter i kassetter, maskiner som står der du ikke er, og en veksling i hvert eneste skap som må stemme på øret. Den som tenker på en krypto-ATM som en app, har sett på den enkle halvdelen.

Dette er derfor en gjennomgang av den operative halvdelen: de to delsystemene inne i skapet, vekslingen ved glasset, kassettene ingen tar med i en demo, prognoseproblemet en flåte blir, og disiplinen det er å kontrollere og avstemme maskiner du ikke kan se.

To maskiner i ett skap

En krypto-ATM er egentlig to delsystemer skrudd sammen: en kontanthåndteringsmaskin — seddelmottaker, validator, en utbetaler eller resirkulator og kassettene som holder sedlene — og en kryptoterminal — en lommebok, en nettverkstilkobling og en skjerm som gir tilbud og bekrefter. Et kjøp går fra kontanter til krypto: kunden legger inn sedler, validatoren teller og stabler dem, og maskinen sender krypto til kundens lommebok. Et salg går fra krypto til kontanter: kunden sender krypto til maskinens adresse, og når overføringen er bekreftet, teller utbetaleren ut sedler fra en kassett. Alt det vanskelige ligger der de to halvdelene møtes, fordi sedler er fysiske og uopprettelige når de først er stablet, mens krypto er digitalt og uopprettelig når det først er bekreftet — og maskinen må ikke forplikte den ene siden før den andre er sikker.

Vekslingen ved glasset

Ved hver maskin skjer det en veksling, og den styres av samme disiplin med låst kurs som en skranketerminal: skjermen oppgir en kurs, holder den fast gjennom økten med nedtelling, og kunden handler mot den kursen, ellers får økten ny kurs. Rekkefølgen er sikkerhetsmodellen. Ved kjøp frigir maskinen krypto først når sedlene er validert og stablet — ikke bare satt inn, for en seddel som fortsatt står i escrow-åpningen er ennå ikke penger. Ved salg utbetaler den ikke en eneste seddel før den innkommende overføringen har nok bekreftelser, for en utbetalt seddel kan ikke hentes tilbake. Den uopprettelige handlingen kommer alltid sist, først når den andre siden er endelig. Tar du feil rekkefølge, har du bygget en maskin som gir bort krypto for sedler den aldri beholdt, eller kontanter for en overføring som aldri kom frem.

Kassetter: den fysiske halvdelen ingen demonstrerer

Kontanter ligger i kassetter — uttakbare bokser med sedler, vanligvis én per pålydende, som settes inn i maskinen. En resirkulator kan betale ut de samme sedlene den tok imot; en enklere utbetaler henter bare fra kassetter operatøren har fylt. Hver kassett har to tall: antallet programvaren tror på, og antallet som faktisk stemmer fysisk. Operatørens hele jobb, redusert til én setning, er å holde de to like. Hver godtatte seddel øker et antatt antall, hver utbetalte seddel reduserer det, og et kontantinnhentingsbesøk nullstiller det mot en fysisk telling. Når antatt og telt antall ikke stemmer ved en innhenting, er avviket det viktigste enkelttallet i flåtedriften — det er en feiltelling, et seddelstopp eller noe verre, og det avdekkes ved å telle, aldri ved å håpe.

Kontantnivåer, og hvorfor en flåte er et prognoseproblem

Én maskin er et strev; en flåte er et prognoseproblem. En utbetaler som går tom, avviser kunder, og en seddelmottaker med full stabler slutter å ta imot kontanter — begge er driftsstanser, og ingen av dem viser en feillampe en forbipasserende ville merket, fordi maskinen rett og slett ikke kan fullføre transaksjonen kunden ville ha. Derfor sporer konsollen kontantnivå per kassett per maskin og gjør nivåene om til ruter: hvilke skap som trenger påfyll og hvilke som må tømmes, før noen av dem treffer veggen. En godt drevet flåte er for det meste en verditransportplan — hvem som kjører til hvilket skap, med hvor mye, og på hvilken dag — og programvaren finnes for å bygge den planen ut fra levende nivåer i stedet for gjetning og panikk fredag ettermiddag.

Fjernlås, og å handle fra en konsoll

Maskinene står der operatøren ikke er — i en lobby, på et butikkgulv, i en stasjonshall — så kontrollen må være fjernstyrt. Fra konsollen kan en operatør låse én enkelt maskin eller hele flåten umiddelbart, og en låst maskin fullfører ingenting nytt. Lås er svaret på et seddelstopp, en mistenkt feil, et kontantavvik eller en maskin som må fryses mens noen kjører ut til den. Nøkler og kassetter blir der de er; maskinen slutter bare å transaksjonere til et menneske opphever låsen. Disiplinen er at farlige handlinger skjer fra konsollen med oppgitt årsak og havner i en logg — ikke ved at noen trykker på maskinens egen skjerm ute i felt, uten registrering, slik at ingen i ettertid kan rekonstruere hva som ble gjort eller hvorfor.

En flåte med kryptoautomater er ikke et programvareprodukt med litt maskinvare på siden. Det er en kontantlogistikkvirksomhet med en skjerm på fronten — og hvert tall på den skjermen må kunne avstemmes mot en pengeseddel du kan holde i hånden.
— Protocore · Betalingsutvikling

Å avstemme en maskin du ikke kan se

Avstemming er det daglige beviset på at en flåte er ærlig. Hver økt ved en maskin etterlater en post — sedler inn og krypto ut, eller krypto inn og sedler ut, med låst kurs, lommebokadresser og bekreftelser vedlagt. Summer en maskins økter siden forrige innhenting, og du får kontantene den bør inneholde; tell kassettene ved besøket, og du får kontantene den faktisk inneholder; de to må treffe hverandre. Kryptosiden avstemmes på samme måte, mot maskinens lommebokbeholdning. En flåte som avstemmer per maskin, per dag, fanger et dårlig skap første dag — et seddelstopp, en skimming, en feiltelling — i stedet for å oppdage det som et hull ved kvartalsslutt ingen kan forklare. Hele poenget med hovedboken per maskin er at den tåler en revisjon nettopp fordi den aldri fikk lov til å drive.

Compliance er operatørens ansvar; programvaren håndhever og registrerer

Operatøren av en flåte med kryptoautomater bærer forpliktelsene. Tillatelsene den må inneha, identitetskontrollene den må gjennomføre og transaksjonsgrensene den må overholde varierer etter hvor hver maskin står, og de tilhører operatøren — ikke boksen, og ikke leverandøren av boksen. Programvaren er med vilje mekanisk: den håndhever de grensene per kunde og per dag operatøren konfigurerer, ber om det identitetstrinnet operatøren krever ved den terskelen operatøren setter, og registrerer hver seddel, hver overføring og hver grensebeslutning slik at operatøren kan stå til rette for flåten i ettertid. Maskinen bestemmer ikke policy; den anvender operatørens policy likt i hvert skap og skriver ned hva som skjedde. Å få policyen riktig er operatørens disiplin. Programvarens bidrag er å gjøre policyen enhetlig og etterprøvbar på tvers av en flåte ingen enkeltperson kan overvåke samtidig.

Den ærlige grensen

En enkelt maskin på ett sted trenger knapt en flåtekonsoll — et regneark og en ukentlig telling holder. Maskineriet her kommer til sin rett i flåteskala, der tallene ikke lenger får plass i ett hode: kontantnivåer på tvers av mange skap, kassetttellinger som må avstemmes per sted, fjernlås for maskiner timer unna og en hovedbok per maskin som tåler en revisjon. Driver du ett skap, er dette overhead; driver du tjue, er planen, avstemmingen og fjernkontrollene forskjellen mellom en virksomhet og en haug med skap som sakte glir ut av balanse. Flåtekonsollen finnes på /products/atm, og begrepene — kassett, resirkulator, avstemming, oppgjør — står i /glossary.

Har du et system som skal bygges?

Fortell oss problemet. Vi kommer tilbake med en arkitektur og en plan.