یادداشت‌های میدانی

راه‌اندازی ناوگان ATM کریپتو: پول نقد، کاست‌ها، انطباق

ATM کریپتو دستگاه نقدی است که در هر دو جهت کار می‌کند: مشتری اسکناس وارد می‌کند و کریپتو می‌گیرد، یا کریپتو می‌فرستد و اسکناس تحویل می‌گیرد. اداره‌ی ناوگانی از این دستگاه‌ها یک کسب‌وکار لجستیکی است با رابط نرم‌افزاری. صفحه قیمت می‌دهد و تأیید می‌کند، اما بخش‌های سخت فیزیکی‌اند: پولی که در کاست‌ها نشسته، دستگاه‌هایی که در جاهایی ایستاده‌اند که شما نیستید، و مبادله‌ای که در هر کابینت رخ می‌دهد و باید تا آخرین سنت تطبیق بخورد. هر کس ATM کریپتو را یک اپلیکیشن بداند، به نیمه‌ی آسان نگاه کرده است.

پس این یک کالبدشکافی از نیمه‌ی عملیاتی است: دو زیرسیستم داخل کابینت، مبادله پشت شیشه، کاست‌هایی که هیچ‌کس در دمو نشان نمی‌دهد، مسئله‌ی پیش‌بینی که یک ناوگان به آن تبدیل می‌شود، و انضباط کنترل و تطبیق دستگاه‌هایی که نمی‌توانید ببینید.

دو دستگاه در یک کابینت

ATM کریپتو در واقع دو زیرسیستم است که به هم پیچ شده‌اند: یک دستگاه مدیریت پول نقد، شامل اسکناس‌گیر، اعتبارسنج، توزیع‌کننده یا recycler و کاست‌هایی که اسکناس‌ها را نگه می‌دارند، و یک پایانه‌ی کریپتو، شامل کیف پول، اتصال شبکه و صفحه‌ای که قیمت می‌دهد و تأیید می‌گیرد. خرید از نقد به کریپتو است: مشتری اسکناس وارد می‌کند، اعتبارسنج می‌شمارد و انبارشان می‌کند، و دستگاه کریپتو را به کیف پول مشتری می‌فرستد. فروش از کریپتو به نقد است: مشتری کریپتو را به نشانی دستگاه می‌فرستد و پس از تأیید انتقال، توزیع‌کننده اسکناس‌ها را از یک کاست می‌شمارد و بیرون می‌دهد. هر چیز دشواری همان‌جاست که این دو نیمه به هم می‌رسند، چون اسکناس فیزیکی است و پس از انبار شدن بازگشت‌ناپذیر، و کریپتو دیجیتال است و پس از تأیید بازگشت‌ناپذیر؛ و دستگاه نباید هیچ‌کدام را متعهد شود تا مطمئن شود طرف دیگر قطعی است.

مبادله پشت شیشه

در هر دستگاه یک مبادله انجام می‌شود و همان انضباطِ نرخ قفل‌شده‌ای بر آن حاکم است که بر ترمینال باجه‌ای: صفحه نرخ را اعلام می‌کند، آن را با شمارنده معکوس تا پایان جلسه نگه می‌دارد و مشتری یا با همین نرخ معامله می‌کند یا جلسه دوباره نرخ‌گذاری می‌شود. ترتیب مراحل همان مدل ایمنی است. در خرید، دستگاه فقط پس از اعتبارسنجی و انباشت اسکناس‌ها کریپتو آزاد می‌کند، نه صرفاً پس از واردکردن آن‌ها، چون اسکناسی که هنوز در دهانه موقت است، هنوز پول نیست. در فروش، تا زمانی که تراکنش ورودی تأییدهای کافی نگرفته، حتی یک اسکناس پرداخت نمی‌کند، چون اسکناسِ پرداخت‌شده پس گرفتنی نیست. اقدام برگشت‌ناپذیر همیشه آخر انجام می‌شود، آن هم فقط وقتی طرف دیگر قطعی شده باشد. اگر این ترتیب را اشتباه بگیرید، دستگاهی ساخته‌اید که کریپتو را در ازای اسکناسی که هرگز نگه نداشته می‌بخشد، یا پول نقد را برای انتقالی می‌دهد که هرگز نرسیده است.

کاست‌ها: نیمه فیزیکی‌ای که هیچ‌کس دمو نمی‌کند

پول نقد در کاست‌ها نگهداری می‌شود؛ جعبه‌های جداشدنی اسکناس، معمولاً یکی برای هر ارزش اسمی، که داخل دستگاه جا می‌خورند. ریسایکلر می‌تواند همان اسکناس‌های دریافتی را پرداخت کند؛ دیسپنسر ساده‌تر فقط از کاست‌هایی برداشت می‌کند که اپراتور پر کرده است. هر کاست دو عدد دارد: تعدادی که نرم‌افزار فکر می‌کند و تعدادی که واقعاً هست. کل کار اپراتور، در یک جمله، برابر نگه‌داشتن این دو عدد است. هر اسکناس پذیرفته‌شده یک واحد به شمارش نرم‌افزاری اضافه می‌کند، هر اسکناس پرداخت‌شده یکی کم می‌کند و هر بار جمع‌آوری نقدینگی، شمارش را با شمارش فیزیکی تنظیم مجدد می‌کند. وقتی در زمان جمع‌آوری این دو عدد نمی‌خوانند، آن اختلاف مهم‌ترین عدد در عملیات ناوگان است؛ یا شمارش اشتباه است، یا گیرکردن اسکناس، یا چیزی بدتر، و راه پیدا کردنش شمردن است، نه امیدواری.

سطح نقدینگی و اینکه چرا مدیریت ناوگان مسئله پیش‌بینی است

یک دستگاه یک دردسر است؛ یک ناوگان یک مسئله پیش‌بینی. دیسپنسری که خالی شود مشتری را برمی‌گرداند و اسکناس‌پذیری که استکرش پر شده باشد دیگر پول نمی‌گیرد. هر دو یعنی توقف سرویس، و هیچ‌کدام چراغ خطایی نشان نمی‌دهند که رهگذر متوجه شود، چون دستگاه فقط نمی‌تواند تراکنش مورد نظر مشتری را کامل کند. پس کنسول سطح نقدینگی هر کاست در هر دستگاه را دنبال می‌کند و آن را به مسیر تبدیل می‌کند: کدام کابینت‌ها باید پر شوند و کدام خالی، پیش از آنکه به بن‌بست برسند. ناوگانی که خوب اداره شود بیشتر یک برنامه حمل نقدینگی است: چه کسی، به کدام کابینت، با چه مقدار پول و در چه روزی برود. نرم‌افزار هم برای این است که این برنامه را از سطح‌های زنده بسازد، نه از حدس و وحشت بعدازظهر جمعه.

قفل از راه دور و اقدام از کنسول

دستگاه‌ها جاهایی هستند که اپراتور آنجا نیست؛ لابی، سالن فروشگاه، سالن ایستگاه. پس کنترل باید از راه دور باشد. اپراتور از کنسول می‌تواند یک دستگاه یا کل ناوگان را فوراً قفل کند و دستگاه قفل‌شده هیچ تراکنش جدیدی کامل نمی‌کند. قفل پاسخ به گیرکردن اسکناس، خرابی مشکوک، مغایرت نقدینگی یا دستگاهی است که باید تا رسیدن فرد به محل، مسدود بماند. کلیدها و کاست‌ها همان‌جا می‌مانند؛ دستگاه فقط تا زمانی که یک انسان آن را آزاد کند تراکنش نمی‌کند. اصل کار این است که اقدام‌های حساس از کنسول و با ذکر دلیل انجام شوند و در لاگ ثبت شوند، نه با لمس صفحه خود دستگاه در محل، بدون ثبت، جایی که بعداً هیچ‌کس نتواند بفهمد چه کاری و چرا انجام شده است.

ناوگان ATM کریپتو یک محصول نرم‌افزاری با کمی سخت‌افزار اضافه نیست. یک عملیات لجستیک نقدینگی است که جلویش یک صفحه نمایش دارد و هر عددِ روی آن صفحه باید با اسکناسی که می‌توانید در دست بگیرید تطبیق داشته باشد.
— Protocore · مهندسی پرداخت

تطبیق دستگاهی که نمی‌بینید

تطبیق، اثبات روزانه درستی یک ناوگان است. هر جلسه در دستگاه یک رکورد به جا می‌گذارد: اسکناس ورودی و کریپتوی خروجی، یا کریپتوی ورودی و اسکناس خروجی، همراه با نرخ قفل‌شده، آدرس‌های کیف پول و تأییدها. جلسه‌های یک دستگاه از آخرین جمع‌آوری را جمع بزنید تا نقدینگیِ مورد انتظار به دست بیاید؛ کاست‌ها را در بازدید بشمارید تا نقدینگیِ واقعی به دست بیاید؛ این دو باید برابر باشند. سمت کریپتو هم به همین شکل با موجودی کیف پول دستگاه تطبیق داده می‌شود. ناوگانی که هر دستگاه را هر روز تطبیق می‌دهد، کابینت مشکل‌دار را از روز اول پیدا می‌کند، چه گیرکردن اسکناس باشد، چه اسکیمینگ، چه شمارش اشتباه، نه اینکه آن را به شکل یک حفره پایان فصل کشف کند که کسی توضیحش را نمی‌داند. فلسفه دفتر کل هر دستگاه این است که در حسابرسی دوام می‌آورد، دقیقاً چون هرگز اجازه نداد از مسیر منحرف شود.

انطباق وظیفه اپراتور است؛ نرم‌افزار اجرا و ثبت می‌کند

تعهدات ناوگان ATM کریپتو بر دوش اپراتور است. مجوزهایی که باید داشته باشد، بررسی‌های هویتی که باید انجام دهد و سقف‌های تراکنشی که باید رعایت کند بسته به محل هر دستگاه فرق می‌کند و به اپراتور تعلق دارد، نه به دستگاه و نه به سازنده آن. کار نرم‌افزار عمداً مکانیکی است: اعمال هر سقف روزانه و به‌ازای مشتری که اپراتور تنظیم کرده، درخواست هر مرحله احراز هویتی که اپراتور در هر آستانه‌ای که تعیین کرده لازم بداند، و ثبت هر اسکناس، هر انتقال و هر تصمیم مربوط به سقف تا اپراتور بعداً بتواند درباره ناوگان پاسخگو باشد. دستگاه سیاست تعیین نمی‌کند؛ سیاست اپراتور را در همه کابینت‌ها یکسان اجرا می‌کند و آنچه رخ داده را می‌نویسد. درست تعیین کردن سیاست وظیفه اپراتور است. سهم نرم‌افزار یکنواخت و قابل‌حسابرسی کردن آن سیاست در ناوگانی است که هیچ فردی نمی‌تواند همه‌اش را یک‌جا زیر نظر داشته باشد.

مرز صادقانه

یک دستگاه در یک مکان به‌سختی به کنسول ناوگان نیاز دارد؛ یک صفحه‌گسترده و شمارش هفتگی کافی است. این ابزارها در مقیاس ناوگان ارزش خود را نشان می‌دهند، جایی که اعداد در ذهن یک نفر جا نمی‌شوند: سطح نقدینگی در کابینت‌های متعدد، شمارش کاست‌ها که باید به‌ازای هر محل تطبیق بخورد، قفل از راه دور برای دستگاه‌هایی که ساعت‌ها دورند، و دفتر کل هر دستگاه که در حسابرسی می‌ایستد. با یک کابینت این فقط سربار است؛ با بیست کابینت، برنامه‌ریزی، تطبیق و کنترل از راه دور فرق یک کسب‌وکار با تلی از کابینت‌هاست که کم‌کم از تعادل خارج می‌شوند. کنسول ناوگان در /products/atm است و اصطلاحات (کاست، ریسایکلر، تطبیق، تسویه) در /glossary آمده‌اند.

سیستمی برای ساختن دارید؟

مسئله را بگویید. با یک معماری و یک برنامه برمی‌گردیم.