Notatki z praktyki

Akceptowanie kryptowalut w punkcie sprzedaży

Akceptowanie kryptowalut w punkcie sprzedaży oznacza, że klient stojący przy Twojej ladzie płaci aktywem cyfrowym — stablecoinem takim jak USDC albo monetą taką jak BTC — a Ty, sprzedawca, dostajesz uznanie w euro. Aktywo wysłane przez klienta i pieniądze, które otrzymujesz, to dwie różne rzeczy, połączone kursem ustalonym w chwili zbliżenia. Nic w Twojej kasie, księgach ani koncie bankowym nie „wie”, że w grę weszło krypto. Terminal pokazuje cenę w euro, klient skanuje kod, a kilka sekund później sprzedaż zamyka się w euro — w tej samej pozycji, w jakiej znalazłaby się płatność kartą. Krypto w punkcie sprzedaży jest metodą płatności, a nie zmianą księgową, i utrzymanie tego stanu to cały problem inżynieryjny.

Warto od tego zacząć, bo większość nieporozumień wokół płatności kryptowalutami bierze się ze zlania dwóch pytań, które powinny pozostać osobne: jak płaci klient i w jakiej walucie zostaje sprzedawca. Rozdziel je, a reszta wynika sama.

Problem, który naprawdę trzeba rozwiązać

Sprzedawca chce sprzedaży, a nie zmienności kursu. Nie chce kończyć dnia z workiem aktywów o niepewnej wartości ani zmuszać księgowego do nagłego posługiwania się dwiema walutami. Chce, by cena była ustalona między zbliżeniem a paragonem, pieniądze były w euro, a uzgodnienie wyglądało jak każdy inny dzień z kartami. Sklep, który przyjmuje krypto naiwnie, nie dostaje nic z tego: bierze aktywo, którego cena zmienia się, gdy klient jeszcze się waha, odkłada je do portfela i dziedziczy w księgach drugą walutę, którą ktoś musi teraz ręcznie wycenić i przeliczyć. Cel projektowy jest więc wąski i rygorystyczny — krypto ma być widoczne w jednym miejscu, w momencie płatności, i niewidoczne wszędzie indziej.

Jedno zbliżenie: kod QR, zablokowany kurs, pozycja w euro

Prześledźmy przebieg przy ladzie. Kasjer nabija koszyk na €24.00. Terminal pokazuje sumę w euro i generuje kod QR zawierający żądanie płatności — kwotę, adres docelowy lub fakturę oraz krótkotrwały identyfikator kursu. Klient skanuje go własnym portfelem, widzi dokładnie, co zaraz wyśle, i potwierdza. Terminal śledzi sieć w poszukiwaniu tego przelewu i po potwierdzeniu drukuje paragon w euro. Z perspektywy kasjera rytm jest identyczny jak przy karcie: suma, przyłożenie, akceptacja, paragon. Nikt za ladą nie wpisuje adresu ani nie czyta salda w niczym innym niż euro.

Umieszczenie żądania wewnątrz kodu QR sprawia, że można bezpiecznie podać je telefonowi obcej osoby. Kwota i adres docelowy podróżują w kodzie, z sumą kontrolną, więc klient nie może zapłacić na zły adres ani zapłacić złej kwoty przez literówkę — to ten sam zabieg, co tożsamość z konstrukcji po stronie windykacji, zastosowany przy ladzie. Kod, który się skanuje, jest kodem poprawnym; nie ma pola wolnego tekstu, w którym można się pomylić.

Rozliczenie w euro, żeby księgi nigdy nie poznały krypto

Między aktywem wysłanym przez klienta a euro, które zatrzymuje sprzedawca, znajduje się konwersja, a miejsce, w którym się odbywa, jest całą sztuczką. Klient wysyła USDC lub BTC; platforma przelicza i uznaje konto sprzedawcy w EUR. Księga sprzedawcy widzi wyłącznie uznanie w euro i pozycję prowizji w euro — o takim samym kształcie jak rozliczenie karty — ponieważ aktywo jest konwertowane na platformie, a nie zostawiane w portfelu, którym sprzedawca musiałby zarządzać. Na koniec dnia księgi są w euro od początku do końca. Nie ma koszyka monet do wyceny, drugiej waluty w księgach ani niczego do wypłacenia w poniedziałek rano.

Zadaniem klienta jest płacić tym, co ma. Zadaniem sprzedawcy jest prowadzić księgi w jednej walucie. Punkt sprzedaży, który rozlicza krypto w euro, to po prostu maszyna dbająca o to, by te dwa fakty nigdy się nie spotkały.
— Protocore · Inżynieria płatności

Kurs jest zablokowany, a nie gonią go

Zmienność kursu budzi największy lęk, a odpowiedzią jest zablokowany kurs z odliczaniem. Gdy terminal pokazuje cenę w euro, jednocześnie ustala kurs ważny przez wskazane okno — kilka sekund. Klient płaci w tym oknie, po tym kursie, a euro uznane na koncie sprzedawcy to euro z ekranu, a nie to, co zrobił rynek, gdy ładował się portfel. Jeśli okno minie przed potwierdzeniem, terminal wycenia ponownie: nowy kod, świeże odliczanie, jawnie nowa cena — nigdy ciche dryfowanie. Sprzedawca nie jest narażony na ruch kursu między zbliżeniem a potwierdzeniem; to ryzyko ponosi ten, kto ustalił kurs, a nie sklepikarz, który chciał tylko sprzedać kawę.

Gdy klient się ociąga albo terminal jest offline

Sieci się zacinają, a sklepy tracą łączność, więc zachowanie offline musi być celowo nudne. Dwa przypadki. Gdy klient się ociąga, kurs po prostu wygasa i jest wyceniany ponownie — płatność albo zostaje potwierdzona w oknie, albo nie dochodzi do skutku, i nie ma połowicznie zakończonej sprzedaży do cofania. Gdy offline przechodzi sam terminal, nadal może wyświetlić żądanie na znaną kwotę, ale nie może ustalić nowego kursu ani potwierdzić rozliczenia, więc trzyma sprzedaż jako oczekującą i uzgadnia ją po ponownym połączeniu, zamiast udawać sukces. Nadrzędna zasada brzmi: paragon drukuje się po potwierdzeniu, nigdy na nadzieję — paragon w euro oznacza, że euro są rozliczone, a sprzedaż, której terminal nie mógł potwierdzić, pozostaje otwarta i widoczna w konsoli operatora, zamiast po cichu zniknąć.

Gdzie terminal spotyka gateway

Lada to stacjonarne oblicze tego samego stosu akceptacji, który działa online. Zbliżeniowa płatność krypto w sklepie i checkout z płatnością przez link to pod spodem to samo zdarzenie — żądanie, płatność, rozliczenie w euro, paragon — przedstawione na różnych powierzchniach. Dzięki temu sprzedawca uzgadnia krypto w sklepie i zamówienia online w jednym miejscu, w euro, z tymi samymi pozycjami prowizji i tymi samymi eksportami, zamiast prowadzić dwie księgi, które na koniec miesiąca trzeba zszywać. Terminal znajdziesz pod /products/pos; internetowa strona tych samych torów to /products/gateway; a słownictwo — kurs, rozliczenie, acquirer, uzgodnienie — jest zdefiniowane w /glossary.

Uczciwa granica

Jeśli nikt przy Twojej ladzie nie chce płacić kryptowalutami, terminal krypto rozwiązuje problem, którego nie masz — przyjmuj karty i idź dalej. Zasługuje na miejsce tam, gdzie realna część Twoich klientów już posiada aktywa cyfrowe i woli je wydać, niż najpierw wypłacać: na niektórych szlakach turystycznych, w niektórych środowiskach online-native, w regionach, gdzie stablecoiny są po prostu sposobem trzymania pieniędzy do wydania. W takich miejscach odmowa przyjęcia płatności to odmowa sprzedaży. Opisane wyżej mechanizmy — kod QR, zablokowany kurs, rozliczenie w euro, zasada potwierdzenia przed paragonem — pozwalają zrealizować taką sprzedaż bez przejmowania zmienności kursu, drugiej waluty ani projektu księgowego. Krypto zostaje po stronie klienta; euro zostają Twoje.

Masz system do zbudowania?

Opisz nam problem. Wrócimy z architekturą i planem.