הערות שטח

ניהול צי כספומטי קריפטו: מזומן, קסטות, ציות

כספומט קריפטו הוא מכונת מזומן שפועלת בשני הכיוונים: לקוח מזין שטרות ומקבל קריפטו, או שולח קריפטו ואוסף שטרות. ניהול צי כאלה הוא עסק לוגיסטי בלבוש של ממשק תוכנה. המסך מציע מחיר ומאשר, אבל החלקים הקשים פיזיים — מזומן שיושב בקסטות, מכונות שעומדות במקומות שאתם לא נמצאים בהם, והחלפה שמתרחשת בכל ארון ושחייבת להתאים עד הסנט. מי שחושב על כספומט קריפטו כעל אפליקציה הסתכל על החצי הקל.

לכן זה פירוק של החצי התפעולי: שתי תת-המערכות בתוך הארון, ההחלפה מאחורי הזכוכית, הקסטות שאף אחד לא שם בדמו, בעיית התחזית שצי הופך אליה, והמשמעת של שליטה והתאמה במכונות שאי אפשר לראות.

שתי מכונות בארון אחד

כספומט קריפטו הוא למעשה שתי תת-מערכות מוברגות יחד: מכונת טיפול במזומן — מקבל שטרות, ולידטור, מנפק או recycler, והקסטות שמחזיקות את השטרות — ומסוף קריפטו — ארנק, חיבור לרשת ומסך שמציע מחיר ומאשר. קנייה היא מזומן לקריפטו: הלקוח מכניס שטרות, הוולידטור סופר ומערם אותם, והמכונה שולחת קריפטו לארנק הלקוח. מכירה היא קריפטו למזומן: הלקוח שולח קריפטו לכתובת המכונה, ולאחר שההעברה מאושרת המנפק סופר שטרות מקסטה. כל הקושי נמצא במפגש בין שני החצאים, כי שטרות הם פיזיים ובלתי הפיכים ברגע שנערמו, בעוד שקריפטו הוא דיגיטלי ובלתי הפיך ברגע שאושר — והמכונה אסור שתחייב צד אחד לפני שהצד השני ודאי.

ההחלפה מאחורי הזכוכית

בכל מכונה מתרחשת החלפה, והיא כפופה לאותה משמעת של שער נעול כמו בטרמינל דלפק: המסך מציג שער, מחזיק אותו למשך הסשן עם ספירה לאחור, והלקוח מבצע את העסקה מול הציטוט הזה, או שהסשן מתומחר מחדש. הסדר הוא מודל הבטיחות. בקנייה, המכונה משחררת קריפטו רק אחרי שהשטרות אומתו והוערמו — לא רק הוכנסו, כי שטר שעדיין בצוואר ה-escrow עוד אינו כסף. במכירה, היא לא מוציאה אף שטר עד שההעברה הנכנסת צברה מספיק אישורים, כי שטר שכבר נפלט אי אפשר להחזיר. הפעולה הבלתי הפיכה תמיד באה אחרונה, רק אחרי שהצד השני סופי. טועים בסדר הזה, ובונים מכונה שמחלקת קריפטו תמורת שטרות שלא נשארו אצלה, או מזומן תמורת העברה שמעולם לא הגיעה.

קסטות: החצי הפיזי שאף אחד לא מציג בדמו

המזומן נמצא בקסטות — קופסאות נשלפות של שטרות, בדרך כלל אחת לכל ערך נקוב, שנכנסות למכונה. מכונת recycler יכולה לשלם החוצה את אותם שטרות שקלטה; מכונת משיכה פשוטה יותר מושכת רק מקסטות שהמפעיל טען. לכל קסטה שני מספרים: הספירה שהתוכנה מאמינה בה והספירה שנכונה פיזית. כל עבודתו של המפעיל, בתמצית של משפט אחד, היא לשמור על שוויון בין השניים. כל שטר שנקלט מגדיל את הספירה המשוערת, כל שטר שנמשך מקטין אותה, וביקור איסוף מזומן מאפס אותה מול ספירה פיזית. כשהספירה המשוערת והספירה בפועל נבדלות באיסוף, הפער הזה הוא המספר החשוב ביותר בתפעול צי מכונות — זו טעות ספירה, תקיעה, או משהו חמור יותר, והוא נמצא בספירה, לא בתקווה.

רמות מזומן, ולמה צי מכונות הוא בעיית חיזוי

מכונה אחת היא מטלה; צי הוא בעיית חיזוי. מכונת משיכה שהתרוקנה מסלקת לקוחות, וקולט שטרות שהמגירה שלו מלאה מפסיק לקבל מזומן — שניהם השבתות, ואף אחת מהן לא מדליקה נורת שגיאה שעובר אורח היה שם לב אליה, כי המכונה פשוט לא יכולה להשלים את הפעולה שהלקוח רצה. לכן הקונסולה עוקבת אחר רמת המזומן בכל קסטה בכל מכונה והופכת את הרמות למסלולים: אילו ארונות צריכים מילוי ואילו צריכים ריקון, לפני שאחד מהם נתקע בקיר. צי שמנוהל היטב הוא בעיקר לוח זמנים של הובלת מזומנים — מי נוסע לאיזה ארון, עם כמה כסף, ובאיזה יום — והתוכנה קיימת כדי לבנות את הלוח הזה מרמות חיות במקום ניחושים ופאניקה של יום שישי אחר הצהריים.

נעילה מרחוק, ופעולה מתוך קונסולה

המכונות עומדות במקומות שבהם המפעיל לא נמצא — לובי, רצפת חנות, אולם תחנה — ולכן השליטה חייבת להיות מרחוק. מהקונסולה המפעיל יכול לנעול מכונה אחת או את הצי כולו באופן מיידי, ומכונה נעולה לא משלימה שום פעולה חדשה. נעילה היא התגובה לתקיעה, לחשד לתקלה, לפער במזומן, או למכונה שצריך להקפיא בזמן שמישהו נוסע אליה. המפתחות והקסטות נשארים במקומם; המכונה פשוט מפסיקה לבצע עסקאות עד שאדם משחרר אותה. העיקרון הוא שפעולות מסוכנות מתבצעות מהקונסולה עם סיבה מצורפת ונרשמות ביומן — ולא על ידי מישהו שלוחץ על מסך המכונה עצמה בשטח, ללא תיעוד, כשאיש לא יוכל לשחזר אחר כך מה נעשה ולמה.

צי כספומטי קריפטו אינו מוצר תוכנה עם קצת חומרה לצדו. זו פעילות לוגיסטיקת מזומנים עם מסך בחזית — וכל מספר על המסך הזה חייב להתיישב מול שטר שאפשר להחזיק ביד.
— Protocore · הנדסת תשלומים

התאמה של מכונה שאי אפשר לראות

התאמה היא ההוכחה היומית שצי מכונות הוא ישר. כל סשן במכונה משאיר רישום — שטרות פנימה וקריפטו החוצה, או קריפטו פנימה ושטרות החוצה, עם השער הנעול, כתובות הארנק והאישורים. סכמו את הסשנים של מכונה מאז האיסוף האחרון ותקבלו את המזומן שהיא אמורה להחזיק; ספרו את הקסטות בביקור ותקבלו את המזומן שהיא מחזיקה; השניים חייבים להיפגש. צד הקריפטו מותאם באותו אופן, מול יתרת הארנק של המכונה. צי שמתאים לכל מכונה בכל יום תופס ארון בעייתי כבר ביום הראשון — תקיעה, העתקת כרטיסים, טעות ספירה — במקום לגלות אותו כחור בסוף רבעון שאיש לא מצליח להסביר. כל העניין בפנקס לכל מכונה הוא שהוא עומד בביקורת בדיוק משום שמעולם לא איפשרו לו לסטות.

הציות הוא תפקיד המפעיל; התוכנה אוכפת ורושמת

מפעיל צי כספומטי קריפטו נושא בהתחייבויות. ההרשאות שעליו להחזיק, בדיקות הזהות שעליו להריץ ומגבלות העסקאות שעליו לכבד משתנות לפי המקום שבו כל מכונה עומדת, והן שייכות למפעיל — לא לקופסה, ולא לספק הקופסה. מה שהתוכנה עושה הוא מכני בכוונה: אוכפת את מגבלות הלקוח והיום שהמפעיל מגדיר, מבקשת את שלב הזיהוי שהמפעיל דורש בסף שהמפעיל קובע, ורושמת כל שטר, כל העברה וכל החלטה לגבי מגבלה, כדי שהמפעיל יוכל לתת דין וחשבון על הצי בהמשך. המכונה לא קובעת מדיניות; היא מיישמת את מדיניות המפעיל באותו אופן בכל ארון ורושמת מה קרה. לקבוע מדיניות נכונה זו משמעת של המפעיל. התרומה של התוכנה היא להפוך את המדיניות לאחידה ולניתנת לביקורת בצי שאף אדם לא יכול לפקח עליו בבת אחת.

הגבול, בלי עיגולי פינות

מכונה בודדת במקום אחד כמעט לא צריכה קונסולת צי — גיליון אלקטרוני וספירה שבועית יספיקו. המנגנון כאן מוכיח את עצמו בקנה מידה של צי, כשהמספרים כבר לא נכנסים בראש אחד: רמות מזומן בארונות רבים, ספירות קסטות שחייבות להתאים לכל אתר, נעילה מרחוק למכונות שרחוקות שעות נסיעה, ופנקס לכל מכונה שעומד בביקורת. מפעילים ארון אחד וזה תקורה; מפעילים עשרים, והלוח, ההתאמה והשליטה מרחוק הם ההבדל בין עסק לבין ערימת ארונות שמאבדת איזון לאט. קונסולת הצי נמצאת ב-/products/atm, והמונחים — cassette, recycler, reconciliation, settlement — ב-/glossary.

יש מערכת לבנות?

ספרו לנו מהי הבעיה. נחזור עם ארכיטקטורה ותוכנית.