Journal · September 14, 2026

Confirmations are evidence, not a timer

Why FeitPay counts confirmations per network and treats chain reorganisations as first-class events instead of edge cases.

A common shortcut in crypto checkouts is to wait a fixed amount of time and then call a payment “done”. Time is a poor proxy. Blocks arrive irregularly, networks have different finality properties, and a transfer that was visible a minute ago can disappear when a competing block wins.

FeitPay treats every confirmation as a piece of evidence and records where it came from.

What the finality engine actually checks

For each observed transfer the engine stores the network, the transaction hash, the output or log index, the block hash and the block height. Confirmations are computed from the current chain tip for that network, not from a wall clock:

  • a transfer seen only in the mempool is detected, never confirmed;
  • a transfer inside a block counts confirmations from that block’s height;
  • the required count comes from the network’s confirmation policy, which can tighten as the amount grows.

The payment only becomes confirmed when every on-time transfer that makes up the expected amount has reached the threshold.

Reorganisations are expected, so they are modelled

If the block containing a transfer is replaced, the observation is marked as removed rather than deleted. The payment moves to reorged — an explicit state with its own webhook, payment.reorged — and only returns to confirming when the transfer is seen again in the winning chain.

Two rules follow from this:

  1. A confirmed payment never silently reverts. Any change after confirmation produces a compensating event that your systems can react to.
  2. The original observations stay in the timeline, so support teams can see exactly what happened and when.

Why this matters for merchants

Fulfilment decisions should rest on facts you can show to someone else: the block, the count, the policy that applied. That is what the payment timeline in the dashboard exposes, and what every webhook references.

Payments processed through FeitPay’s Bitcart account follow the same principle: a payment becomes confirmed only when Bitcart reports its invoice complete, and every status change is recorded with its reason.

← All journal entries