A stablecoin transfer is not a payment
Moving value on-chain is the solved part. Turning a transfer into a payment your ledger trusts — idempotency, reconciliation, finality, recourse, audit trail — is the integration work where stablecoin projects stall.
A stablecoin transfer settles in seconds. You get a transaction hash, a confirmed amount, an address that received. It looks like the end of the story, and it is actually the beginning. For that transfer to become a payment — something your finance system can book, reconcile at month end, and an auditor can reconstruct — you need a whole layer of software that never shows up in the demo. Moving value on-chain is the solved part. Turning that movement into a payment is the work, and all of it lives off the happy path.
The transfer gives you less than you think
Put the two side by side and the gap is obvious. A transfer hands you a hash, an amount, and an address. Accounting needs something else: an idempotent record tied to a specific invoice, one entry not two if anything is retried, a rule for when "confirmed" becomes "final", and a defined process for the day it goes wrong. An address that receives is not a customer. An amount that arrives is not a settled invoice. Between them sits the job of mapping an on-chain event — anonymous, memo-less, denominated in a currency that is not your books' currency — onto an entity in your system, exactly once.
Ordinary distributed-systems work in a crypto hat
None of the hard parts are smart-contract wizardry. They are the problems any distributed system has, made sharper by the setting. Idempotency, because an indexer that re-scans a block or a webhook that fires twice must never book the same inflow twice; you need a stable key that ties a payment intent to the observed on-chain event. Reconciliation, the core of it: matching that event to an invoice, a customer, a currency and the day's rate. Finality, deciding how many confirmations count as settled and what you do when a reorg reopens a block you treated as closed. And recourse, because there is no chargeback — the refund and dispute logic is code you own end to end.
Then there are the quieter details: fees are a cost line someone has to account for, key custody is a security problem before it is a payments problem, and the reference that links a transfer to an invoice has to survive a user who forgets to include it. This is unglamorous integration work between a chain and an ERP, and treating it as "a service that watches wallets" is exactly how stablecoin projects stall in month two.
Confirmed by the network, booked by your books
The last requirement is the one that decides whether the system is trusted. Your reconciliation has to be provable. It is not enough that the numbers tie out inside your database; an auditor, a bank, or a counterparty's finance team wants to reconstruct the link from each booked payment back to a verifiable on-chain event, without taking your word for it. That means an audit trail built to be read by someone who does not trust the operator — the cleanest version anchors the reconciliation ledger's fingerprint on a chain nobody controls, so the mapping between inflow and invoice can be checked independently.
A transfer is confirmed by the network. A payment is confirmed by your books — and by the proof that the two match.
If you are moving to stablecoin rails, who owns reconciliation: engineering or finance?