Coinbase is ultimately a double-ended marketplace. But to add more complexity to the fire, one's own systems count as yet another source of truth. So what the sellers say, what buyers say and what we say have to reconciled. It's these reconciliation processes that are the hard part...
I've had to deal with micropayment reconciliation for a minor handset mfgr (multiple currencies, payment processors, timezones, products, on and on). Sometimes the credit card processor up and changes the API without notice, and a whole slew of payments have to rerun. This is where fields in the local reconcilation db start to creep in and all sort of weird flags get made. What the heck is flag F? (IOTW, document the heck out of the db schema AND have lots^10 unit tests.)