איך להוכיח תשלום מונרו: מדריך הוכחת עסקה ואימות
Introduction: Privacy Does Not Mean Unverifiable
One of the most common misconceptions about Monero is that its privacy features make it impossible to prove a payment was made. This is simply not true. Monero includes sophisticated cryptographic proof mechanisms that allow a sender to prove a payment was made to a specific address without revealing any information to third parties. This capability is essential for commerce, dispute resolution, tax compliance, and any situation where you need to demonstrate that funds were sent.
The elegance of Monero's approach is that payment proofs are voluntary and selective. You can prove a payment was made to a specific recipient without revealing the amount to anyone else, and the recipient can verify the payment without gaining any additional information about your other transactions. This article explains the different types of Monero payment proofs, how to generate and verify them, and when each type is appropriate.
Understanding Monero's Privacy Model
To understand how payment proofs work, it helps to briefly review how Monero transactions function. When you send Monero, the transaction uses three key privacy technologies: ring signatures hide the true sender among decoy outputs, stealth addresses ensure that each payment goes to a unique one-time address that cannot be linked to the recipient's public address, and RingCT (Ring Confidential Transactions) hides the amount being transferred.
These features mean that a blockchain observer cannot determine who sent a transaction, who received it, or how much was transferred. However, the participants in a transaction, the sender and recipient, have access to additional cryptographic information that can be used to prove specific claims about the transaction without breaking the privacy protections for the broader public.
The Transaction Key (tx_key)
What Is the tx_key?
Every Monero transaction generates a transaction private key, commonly called the tx_key or tx_secret_key. This key is created by the sender's wallet during transaction construction and is essential for proving that a payment was made. The tx_key, combined with the recipient's public address and the transaction hash, can cryptographically prove that a specific amount was sent to a specific address in a specific transaction.
Your wallet stores the tx_key for every transaction you send. It is unique to each transaction and cannot be derived from your wallet's master keys alone. This means that even if someone has your wallet's view key, they cannot generate tx_keys for past transactions. The tx_key must be obtained from the wallet that created the transaction.
How to Retrieve the tx_key in the GUI Wallet
In the Monero GUI wallet, retrieving the tx_key is straightforward. Navigate to the History tab and find the transaction you want to prove. Click on the transaction to expand its details. You will see the transaction ID (hash) and other information. Click the "Proof" button or look for the option to generate a transaction proof. The wallet will display or copy the tx_key for that transaction.
Alternatively, you can use the Advanced section of the GUI wallet. Go to Prove/Check and select the "Generate Proof" tab. Enter the transaction ID, the recipient's address, and optionally a message. The wallet will generate a proof string that combines the tx_key with the other necessary information in a standardized format.
How to Retrieve the tx_key in the CLI Wallet
In the Monero CLI wallet, use the following command to retrieve the tx_key for a specific transaction:
get_tx_key [transaction_id]
The wallet will return the tx_key as a 64-character hexadecimal string. Store this string securely, as it is the essential component for proving the payment. You can also generate a complete proof using the command:
get_tx_proof [transaction_id] [recipient_address] [optional_message]
This command generates an OutProofV2 string that contains all the information needed for verification.
OutProofV2: Proving You Sent a Payment
How It Works
OutProofV2 is Monero's standardized format for proving that you sent a payment. When you generate an OutProofV2 proof, your wallet creates a cryptographic signature that demonstrates you know the tx_key for a specific transaction and that the transaction included an output to the specified recipient address. The proof optionally includes a message that is signed along with the transaction data, preventing the proof from being repurposed or taken out of context.
The cryptographic process works by using the tx_key to derive the one-time address that the recipient's funds were sent to, then proving that this derived address matches one of the outputs in the transaction. Because only the sender's wallet knows the tx_key, only the sender can generate this proof. The proof also reveals the amount sent to the recipient, allowing the verifier to confirm both that a payment was made and how much was paid.
Generating an OutProofV2
In the GUI wallet, navigate to Prove/Check and select Generate Proof. Fill in the transaction ID, the recipient's address, and an optional message such as "Payment for invoice #1234." Click Generate, and the wallet produces a proof string starting with "OutProofV2." This string can be shared with the recipient or any third party who needs to verify the payment.
In the CLI wallet, the command is:
get_tx_proof [txid] [address] [message]
The message parameter is optional but recommended. Including a specific message like an invoice number or dispute reference prevents the proof from being used to verify claims about different transactions or contexts.
InProofV2: Proving You Received a Payment
InProofV2 allows the recipient of a transaction to prove that they received funds. This is useful when a recipient needs to demonstrate to a third party that they were paid, for example during an audit or dispute. The recipient generates the proof using their wallet's private keys and the transaction ID.
To generate an InProofV2 in the CLI wallet:
get_tx_proof [txid] [your_address] [message]
When the address you provide is your own and the transaction includes an output to your address, the wallet generates an InProofV2 rather than an OutProofV2. This proof demonstrates that your wallet can identify and decrypt the output directed to you in the specified transaction, confirming receipt.
SpendProof: Proving You Spent Funds
SpendProof provides a way to prove that you spent funds in a specific transaction without revealing the tx_key or the recipient's address. This is useful in situations where you need to demonstrate that you no longer control certain funds, such as proving to a tax authority that you disposed of cryptocurrency on a specific date, without revealing who you paid.
A SpendProof works by demonstrating that you know the key image for one of the real inputs in the transaction. Key images are unique identifiers that prevent double-spending in Monero. By proving knowledge of a key image's private key, you prove that you are the one who spent those funds. Generate a SpendProof in the CLI wallet with:
get_spend_proof [txid] [message]
Verifying Payment Proofs
Verification in the GUI Wallet
To verify a payment proof in the Monero GUI wallet, navigate to the Prove/Check section and select the Check tab. Paste the proof string (OutProofV2, InProofV2, or SpendProof) along with the transaction ID, the address, and the message that was included when the proof was generated. Click Check, and the wallet will verify the proof and display the result, including the amount if applicable.
Verification in the CLI Wallet
In the CLI wallet, use the appropriate check command:
check_tx_proof [txid] [address] [message] [proof_string]
For SpendProof verification:
check_spend_proof [txid] [message] [proof_string]
The wallet will output whether the proof is valid and, for OutProofV2 and InProofV2 proofs, the amount that was sent or received. Verification does not require any special keys. Anyone with the proof string and the associated transaction ID, address, and message can verify it.
Verification Without a Wallet
Payment proofs can also be verified programmatically using the Monero RPC interface or third-party libraries. This is useful for merchants and services that need to automate payment verification. The verification is purely mathematical and does not require access to any private keys or wallet state.
Practical Use Cases
Dispute Resolution
If you purchase goods or services with Monero and the seller claims they never received payment, an OutProofV2 provides irrefutable evidence that you sent the specified amount to their address. When generating the proof, include a message referencing the specific order or invoice number. This creates a tamper-proof record that can be presented to a mediator or dispute resolution service.
Refund Verification
When a merchant issues a refund in Monero, they can generate an OutProofV2 to prove the refund was sent. This protects the merchant from false claims of unreceived refunds. For the customer, requesting this proof before closing a dispute ensures they have documentation of the refund transaction.
Tax Documentation
In jurisdictions where cryptocurrency transactions must be reported for tax purposes, payment proofs provide documentation of specific transactions without exposing your entire financial history. A SpendProof can demonstrate that you disposed of funds on a specific date, while an OutProofV2 can document specific payments. These proofs can be provided to tax authorities or auditors while maintaining privacy over your broader transaction history.
Business Accounting
Businesses that accept Monero can use InProofV2 to document received payments for accounting purposes. This is particularly valuable for audit trails, where the business needs to link specific incoming payments to invoices or customer accounts.
Cryptographic Foundations
Monero's payment proofs rely on Diffie-Hellman key exchange principles. When a sender creates a transaction, they use the recipient's public view key and the transaction private key to derive a shared secret. This shared secret is used to create the one-time stealth address where the funds are sent. The payment proof demonstrates knowledge of this shared secret without revealing the underlying private keys.
The mathematical security of these proofs is based on the discrete logarithm problem on elliptic curves, the same foundation that secures the broader Monero protocol. Breaking a payment proof would require solving the discrete logarithm problem, which is computationally infeasible with current technology. This means that a valid proof provides strong mathematical certainty that the claimed payment occurred.
Limitations and Considerations
Payment proofs have some important limitations to understand. First, they reveal the amount sent to a specific address, which partially reduces the privacy of that specific transaction. Share proofs only with parties who have a legitimate need to verify the payment. Second, proofs are tied to specific transactions and cannot be used to prove general claims about your account balance or transaction history. Third, the tx_key must be stored or retrievable from your wallet. If you lose access to your wallet and do not have the tx_key backed up separately, you cannot generate a proof for past transactions.
It is also worth noting that an OutProofV2 proves that a transaction was created and broadcast, but it does not prove that the transaction was confirmed on the blockchain. The verifier should independently confirm that the transaction ID exists and has sufficient confirmations before accepting the proof as final.
Conclusion
Monero's payment proof system demonstrates that privacy and accountability are not mutually exclusive. You can maintain complete financial privacy by default while retaining the ability to selectively prove specific payments when necessary. This voluntary disclosure model is more aligned with how privacy works in the physical world, where you can choose to show a receipt without revealing your entire bank statement.
At MoneroSwapper, we encourage all users to familiarize themselves with payment proofs. Whether you are resolving a dispute, documenting a business transaction, or satisfying a regulatory requirement, knowing how to generate and verify Monero payment proofs is an essential skill for anyone who transacts in private digital currency.
🌍 קרא בשפה