This guide explains the process of independently verifying ownership and cryptocurrency balances associated with wallet addresses published by OKX in their Proof of Reserves (PoR) reports. By following these steps, users can gain greater transparency into the exchange's holdings.
Understanding Proof of Reserves Verification
Proof of Reserves is a method for cryptocurrency exchanges to provide evidence that they hold sufficient assets to cover their customers' balances. The verification process consists of two main parts:
- Ownership Verification: Confirming that the published wallet addresses are genuinely controlled by OKX.
- Balance Verification: Confirming that the balances held in those addresses at a specific point in time (the snapshot block height) match the amounts published in the PoR report.
This independent auditability helps build trust and ensures accountability.
Pre-Verification Setup
Before you begin the verification process, you need to gather the necessary files and tools.
- Download the Verification Tool: Obtain the latest version of the open-source verification command-line tool from OKX's official GitHub repository.
- Download the Proof File: Acquire the most recent Merkle Tree Proof of Reserves (MTPoR) file, typically a CSV, from the official OKX website.
- Organize Files: Place both the downloaded verification tool (after unzipping it) and the PoR CSV file into the same folder on your computer for easier access during the process.
Verifying OKX's Ownership of Wallet Addresses
OKX's snapshot data includes addresses, a specific message, cryptographic signatures, and for Bitcoin, multisig redeem scripts. This data allows anyone to cryptographically verify that OKX controls the private keys for the addresses listed.
Supported Address Types and Methods
Bitcoin (BTC) Addresses:
- Multisignature (Multisig): These addresses use a 2-of-3 signature scheme. The data includes two signatures, proving control over at least two of the three required private keys.
- Single-signature (Singlesig): Ownership is proven by validating the signature against the public address and the predefined message.
- EVM Chains (ETH, USDT-ERC20, etc.): For Ethereum and compatible chains like Arbitrum and Optimism, ownership is verified by checking the signature against the address and the message.
- TRON (TRX) Addresses: Similar to EVM chains, TRX address ownership can be validated using the provided message and signature.
Using the Official Verification Tool
The most straightforward method is to use the tool provided by OKX.
- Open your system's terminal (Command Prompt on Windows, Terminal on macOS).
- Navigate to the directory containing the unzipped tool using the
cdcommand (e.g.,cd ~/Downloads/proof-of-reserves). Execute the appropriate command for your operating system, specifying the PoR filename:
- macOS:
./VerifyAddress --por_csv_filename=okx_por_20221122.csv - Windows:
VerifyAddress.exe --por_csv_filename=okx_por_20221122.csv
- macOS:
- A successful verification will output a message confirming all addresses passed the check.
Using Third-Party Tools for Manual Verification
For a more manual, transparent check, you can use third-party online verifiers or blockchain explorers.
- Open the downloaded OKX PoR CSV file.
- Locate a record and copy the three key elements: the address, the message ("I am an OKX address"), and the signature.
- Navigate to a reputable online message verification tool for the respective cryptocurrency (e.g., a Bitcoin or Ethereum message signing verification website).
- Paste the copied address, message, and signature into the tool's fields. A successful verification will indicate that the signature is valid for that address and message.
👉 Explore more strategies for wallet security
Verifying Staked ETH Asset Ownership
For Ethereum validator nodes, ownership is demonstrated through deposit transaction details.
- From the PoR file, copy a validator's public key.
- Visit a blockchain explorer like Beaconcha.in that supports Ethereum staking data.
- Paste the public key into the search bar.
- Examine the validator's deposit transaction. The "From" address should be an Ethereum address owned by OKX. You can then verify ownership of this deposit address using the message-signing method described in the previous section, linking the validator key back to an OKX-controlled address.
Verifying Wallet Address Balances
This process checks that the balances on the blockchain at the exact snapshot block height match the balances reported by OKX. You can verify a single address or the total sum of balances for a specific asset.
General Steps for Balance Verification
The open-source tool can query balance data in different ways. You typically need to configure an RPC (Remote Procedure Call) endpoint to connect to a blockchain node. Options include:
- Running Your Own Node: The most robust and trustless method, though it requires significant time and resources to sync.
- Third-Party RPC Services: Using services like Infura or Alchemy, often requiring an account and an API key for access to archive data.
- OKLink API: Configuring the tool to use OKLink's public API for balance queries.
Configuration is done by editing the rpc.json file included in the tool's directory, entering the relevant endpoints and API keys for the chains you wish to check.
Verifying a Single Address Balance
This confirms the balance of one specific wallet address.
- Open your terminal and navigate to the tool's directory.
Run a command specifying the mode (
single_address), coin, target address, and PoR file.- Example for an ETH address on macOS:
./CheckBalance --mode="single_address" --coin_name="eth" --address="0xc5451b523d5fffe1351337a221688a62806ad91a" --por_csv_filename=okx_por_20221122.csv
- Example for an ETH address on macOS:
- The tool will return the balance it found on the chain at the snapshot height. Compare this value to the balance listed for that address in the PoR CSV file. They should be identical.
Verifying Total Balance for a Single Asset
This confirms the sum of all balances for a specific cryptocurrency (e.g., total ETH across all OKX wallets).
- In your terminal, navigate to the tool's directory.
Run a command specifying the mode (
single_coin_total_balance), coin, and PoR file.- Example for total ETH on Windows:
CheckBalance.exe --mode="single_coin_total_balance" --coin_name="eth" --por_csv_filename=okx_por_20221122.csv
- Example for total ETH on Windows:
- The tool will return the aggregated balance it calculated from the chain. Compare this total to the sum of all balances for that coin in the PoR file. The values should match.
👉 View real-time tools for blockchain verification
Frequently Asked Questions
What is Proof of Reserves (PoR)?
Proof of Reserves is an auditing method that allows a cryptocurrency exchange to prove it holds enough assets to cover all client balances. It uses cryptographic techniques, like Merkle trees and digital signatures, to provide verifiable evidence without compromising user privacy.
Why is it important to verify exchange wallet addresses?
Verification ensures transparency and trust. It cryptographically proves that the exchange actually controls the wallets it claims to hold assets in and that those wallets contain the amount of cryptocurrency reported, reducing the risk of fractional reserve practices.
Do I need technical skills to perform this verification?
Basic comfort with using a command-line interface (terminal) is required to run the provided tools. While the underlying cryptography is complex, the process itself involves following clear steps and executing predefined commands.
What if the verification fails?
If the tool returns an error or a balance mismatch, first double-check that you are using the correct PoR file corresponding to the snapshot date and that your RPC configuration is accurate. Ensure your node or API provider has access to full archive data for historical balance queries. Consistent failures should be reported to OKX support.
Can I verify assets on Layer 2 networks like Arbitrum?
Yes, the process is similar. The verification tool supports multiple networks and assets, including ETH and USDT on Arbitrum, Optimism, Polygon, and Avalanche. You need to configure the correct RPC endpoint for the specific Layer 2 network in the rpc.json file.
How often does OKX publish new Proof of Reserves data?
OKX regularly publishes updated Merkle Tree Proof of Reserves data. It is best practice to always use the latest available files from their official website for the most current verification.