How USDT TRC20 Payment Verification Works
InvoCert's MVP payment verification supports one payment method: USDT on TRON, using the TRC20 token standard. Here's what actually happens between a buyer submitting a transaction hash and an invoice being marked paid.
The transaction reference
For USDT TRC20, the transaction reference a buyer submits on the payment page is the TRON transaction hash — the same identifier a wallet or exchange shows after a transfer completes. Submitting that hash is what connects an on-chain payment to a specific invoice.
What gets checked
Submitting a hash doesn't mark an invoice paid by itself. The system reads the transaction from TRON, decodes its Transfer event logs from the token contract, and checks that the transfer actually matches the invoice:
- the correct USDT TRC20 contract;
- the correct receiving wallet — the one shown on the invoice;
- an amount that reflects what's owed, including partial and overpayment handling;
- that the transaction occurred at or after invoice creation.
Only decoded event-log data is used for this check, not just the top-level transaction fields, since token transfers on TRON are represented as contract events rather than native value transfers.
Waiting for finality
A transaction that has been broadcast isn't necessarily final. InvoCert waits for the transaction to be confirmed/solid before committing a payment — a transaction that's found but not yet final is queued and retried rather than accepted immediately. If confirmation signals ever conflict, the more conservative result is used. This avoids marking an invoice paid against a transaction that could still be reorganized.
What happens with a mismatch
If the hash points to the wrong wallet, the wrong contract, an invoice that's already paid or void, or a transaction that predates the invoice, the submission is rejected rather than silently ignored, and the outcome is recorded. This is also how suspicious or fraudulent submission attempts get surfaced for review.
Why decouple the invoice from the chain at all
Keeping the invoice record separate from the raw blockchain data — and reconciling the two only through an explicit, verified transaction reference — is what lets InvoCert support partial payments, overpayments, and clear payment history without needing to constantly poll every merchant wallet for incoming activity.