Kryptokassoissa yleinen oikotie on odottaa kiinteä aika ja julistaa maksu sitten ”valmiiksi”. Aika on huono mittari. Lohkoja syntyy epäsäännöllisesti, verkkojen lopullisuusominaisuudet eroavat toisistaan, ja minuutti sitten näkynyt siirto voi kadota, kun kilpaileva lohko voittaa.
FeitPay käsittelee jokaista vahvistusta todisteena ja kirjaa, mistä se on peräisin.
Mitä lopullisuusmoottori todella tarkistaa
Jokaisesta havaitusta siirrosta moottori tallentaa verkon, transaktion tiivisteen (hash), tulosteen (output) tai lokimerkinnän (log) indeksin, lohkon tiivisteen ja lohkon korkeuden. Vahvistukset lasketaan kyseisen verkon nykyisestä ketjun kärjestä, ei seinäkellosta:
- pelkästään mempoolissa nähty siirto on
detected, ei koskaanconfirmed; - lohkoon sisältyvän siirron vahvistukset lasketaan kyseisen lohkon korkeudesta;
- vaadittu määrä tulee verkon vahvistuskäytännöstä, joka voi tiukentua summan kasvaessa.
Maksusta tulee confirmed vasta, kun jokainen odotetun summan muodostava ajoissa saapunut siirto on saavuttanut kynnyksen.
Uudelleenjärjestelyt ovat odotettavissa, joten ne mallinnetaan
Jos siirron sisältävä lohko korvataan, havaintoa ei poisteta vaan se merkitään poistuneeksi. Maksu siirtyy tilaan reorged — eksplisiittiseen tilaan, jolla on oma webhookinsa, payment.reorged — ja palaa tilaan confirming vasta, kun siirto nähdään uudelleen voittaneessa ketjussa.
Tästä seuraa kaksi sääntöä:
- Vahvistettu maksu ei koskaan palaa huomaamatta aiempaan tilaan. Jokainen vahvistuksen jälkeinen muutos tuottaa korjaavan tapahtuman, johon järjestelmäsi voivat reagoida.
- Alkuperäiset havainnot jäävät aikajanalle, joten asiakastuki näkee tarkalleen, mitä tapahtui ja milloin.
Miksi tällä on merkitystä kauppiaille
Toimituspäätösten pitäisi perustua tosiasioihin, jotka voit näyttää jollekulle toiselle: lohkoon, vahvistusten määrään ja sovellettuun käytäntöön. Juuri ne hallintapaneelin maksun aikajana tuo näkyviin, ja niihin jokainen webhook viittaa.
FeitPayn Bitcart-tilin kautta käsitellyt maksut noudattavat samaa periaatetta: maksusta tulee confirmed vasta, kun Bitcart ilmoittaa sen laskun valmistuneen, ja jokainen tilamuutos kirjataan syineen.