Check a Monero payment proof

Only the transaction ID leaves your browser: it goes to two public Monero nodes so the transaction can be read and the two answers compared. The proof, the address and the message stay here.

Data: your browser talks directly to public Monero nodes. The transaction is read from two independent public Monero nodes so they can be compared, which means those two operators see your IP address and the transaction ID you asked about. The proof string, the address and the message never leave your browser: the signature check is arithmetic, and it runs on your device.

Monero payments are private, which is why a sender needs a way to prove one and a receiver needs a way to check it. This is the checking half, and it asks for nothing you would not put in an email.

The other tools want a key. This one does not.

A Monero transaction proof is a signed statement, not a secret. It says: whoever made this transaction knew the key behind it, and it paid this address. Checking one needs the proof, the transaction ID, the address and the message - all things a sender can put in an email without giving anything away. Yet nearly every site offering to check a payment asks instead for the transaction secret key, and sends it to a server. That is a different thing entirely: a key covering a real transaction, dropped into somebody else’s access logs. This page never asks for one, and there is nowhere here to put one.

  • Asked for: the proof string, the transaction ID, the address, and the message the sender signed.
  • Never asked for: a view key, a spend key, a transaction secret key, or a wallet connection.
  • Sent anywhere: the transaction ID, to two public nodes, so the transaction can be read and compared.

Two answers, not one

The signature and the money are separate claims, and this page reports them separately because collapsing them is how people get robbed. A proof can be perfectly genuine - somebody really did know the secret behind that transaction - and still credit your address with nothing, because the payment went somewhere else. A page that printed one word for both would have you release the goods.

  • Does the signature hold: was this proof made for this transaction, this address and this message.
  • What arrived: which outputs of the transaction belong to that address, and how much they carry.
  • How settled it is: whether the transaction is mined, and how many blocks have followed it.

An amount is only printed when the chain agrees

The amount in a Monero output is hidden behind a commitment, and the proof lets it be recovered. This page recovers it and then rebuilds the commitment from what it recovered. If the two do not match, it says the amount is unknown instead of printing the number it decoded. Reading the transaction from two independent nodes is the same instinct: a single node that rewrote one field could make a real proof look forged, or the reverse, and nothing in the proof itself would notice.

Questions

Where do I get the proof string?
From whoever made the payment. In the command-line wallet it is get_tx_proof, and in the desktop wallet it is under Advanced, Prove/Check. What they send you starts with OutProofV2 or InProofV2.
The signature holds but it says nothing arrived. What does that mean?
That the proof is genuine and the money went somewhere else. It proves whoever wrote it knew the secret behind that transaction; it does not prove they paid you. Check the address you gave them character by character, and check the message matches exactly.
What is the message field?
An optional line the sender chose - an invoice number, say - which is hashed into the proof. If they used one, you need the same text, exactly. A single different character makes a real proof fail here, which is the point of it.
Does anything I paste reach your server?
No. The only thing that leaves your browser is the transaction ID, which goes to two public Monero nodes so the transaction can be read. The proof, the address and the message are used by arithmetic that runs on your device.