This guide explains how to independently verify the ownership and balance of OKX's wallet addresses using their publicly available Proof of Reserves (PoR) data and open-source verification tools. By following these steps, you can confirm that OKX maintains adequate reserves to cover user holdings.
Understanding Proof of Reserves
Proof of Reserves is a method used by cryptocurrency exchanges to demonstrate they hold sufficient assets to cover all customer balances. OKX provides regular snapshots of their wallet addresses, along with cryptographic signatures and open-source tools, enabling anyone to verify these claims independently. This process enhances transparency and builds trust within the crypto ecosystem.
Preparations for Verification
Before starting the verification process, you need to gather the necessary files and tools.
- Visit the official OKX website and download the latest Proof of Reserves snapshot file, which is typically a ZIP archive.
Download the open-source verification tools provided by OKX. The ZIP folder usually contains two key utilities:
- VerifyAddress: A tool to confirm OKX's ownership of the reserve addresses.
- CheckBalance: A tool to verify the balances of those addresses at the snapshot block height. Note: This tool requires an
rpc.jsonfile to be configured with node RPC or OKLink API information.
- Store the downloaded Proof of Reserves snapshot file and the verification tools in the same directory on your computer for easier access via command-line operations.
The snapshot data includes addresses, signed messages ("I am an OKX address"), signatures, and for Bitcoin, multi-signature redemption scripts. The verification process cryptographically confirms that OKX controls these addresses.
- Bitcoin (BTC) Wallets: OKX uses both single-signature and multi-signature (2-of-3) addresses. For multi-signature addresses, the data includes two signatures from the three private keys held by OKX. Verifying these signatures proves ownership of at least two private keys, confirming control of the address. Single-signature addresses are verified using the standard message and signature method.
- Ethereum (ETH) and Tether (USDT) Wallets: Ownership is proven by verifying the message and its corresponding signature for each address.
How to Verify OKX's Ownership of Wallet Addresses
You can confirm OKX's control over the published addresses using either their open-source tools or trusted third-party verification websites.
Using the Open-Source Verification Tool
This method verifies all addresses in the snapshot file at once using the command line.
Open your terminal program:
- macOS: Open the "Terminal" application.
- Windows: Open "Command Prompt".
Navigate to the downloaded folder. Use the
cdcommand. For example, if your files are in theDownloads/proof-of-reservesfolder, you would enter:cd ~/Downloads/proof-of-reservesRun the verification command. The exact filename will change with each snapshot. Replace
okx_por_20221122.csvwith your actual filename.macOS:
./VerifyAddress --por_csv_filename=okx_por_20221122.csvWindows:
VerifyAddress.exe --por_csv_filename=okx_por_20221122.csvNote for macOS Users: If you see a security error, go to System Preferences > Security & Privacy > General. Click the lock to make changes, and allow apps downloaded from App Store and identified developers.
- Review the output. A successful verification will return the message:
"Verify address signature end, all address passed".
Using a Third-Party Tool
For individual address verification, you can use popular blockchain explorers. This is useful for spot-checking specific addresses from the snapshot.
- BTC Single-Signature Address: Use a Bitcoin message verification tool.
- EVM Address (ETH, USDT-ERC20): Use an Ethereum message verification tool.
- TRX Chain Address (USDT-TRC20): Use a Tron message verification tool.
Example: Verifying a BTC Address
- Open the OKX PoR CSV file.
- Copy a single record, including the
address,message, andsignaturefields. - Go to a public Bitcoin message verification website.
- Paste the address, signature, and message into the respective fields.
- A successful verification will confirm the message was signed by the private key controlling that address.
Verifying OKX's ETH Staking Assets
For Ethereum validator nodes, ownership is verified through the beacon chain.
- Open the
eth_staking.csvfile from the OKX snapshot. - Copy any
validator publickey. - Go to a beacon chain explorer like beaconcha.in and paste the public key into the search bar.
- On the validator page, check the "From address" and "Recipient address" fields. These addresses are signed by OKX, and their ownership can be verified using the message/signature method described in the previous sections, confirming OKX's control over the staking assets.
How to Verify the Balance of OKX Wallet Addresses
Balance verification ensures the amounts held in OKX's wallets at the specific snapshot block height match the liabilities reported to users. You can verify a single address or the total sum for a specific cryptocurrency.
General Process for Balance Verification
The CheckBalance tool queries the blockchain state at a historical block height to retrieve balances. To do this, it needs access to a node with archived blockchain data. You have three options:
- Default RPC: The tool may have a pre-configured node (simplest option).
- Third-Party RPC: Configure the
rpc.jsonfile to use a service like Infura or Alchemy (see Appendix). - OKLink API: Configure the
rpc.jsonfile with an API key from OKLink (see Appendix).
👉 Explore more strategies for on-chain data verification
Verifying BTC Address Balances
This process involves querying the Bitcoin blockchain at the exact snapshot height.
Option 1: Using Your Own Node (Advanced)
This method provides the highest degree of independence but is technically complex and time-consuming.
- Install and sync a Bitcoin Core archive node (v0.21+).
- Configure its RPC settings and sync to the latest block.
- Roll back the node to the precise block height of the OKX snapshot using the
invalidateblockcommand with the hash of the subsequent block. - Configure the
rpc.jsonfile to point to your local node.
Option 2: Using a Pre-configured RPC or API
This is the recommended method for most users. Simply ensure your rpc.json file is configured for your chosen service (OKLink, Infura, etc.).
Running the Balance Check
- Open your terminal and navigate to the folder containing the tools and snapshot.
Verify a Single Address:
macOS:
./CheckBalance --mode="single_address" --coin_name="btc" --address="3A1JRKqfGGxoq2qSHLv85u4zn935VR9ToL" --por_csv_filename=okx_por_20221122.csvWindows:
CheckBalance.exe --mode="single_address" --coin_name="btc" --address="3A1JRKqfGGxoq2qSHLv85u4zn935VR9ToL" --por_csv_filename=okx_por_20221122.csvThe tool will output the on-chain balance for the specified address. Compare it to the value in the snapshot file.
Verify the Total Balance for BTC:
macOS:
./CheckBalance --mode="single_coin_total_balance" --coin_name="btc" --por_csv_filename=okx_por_20221122.csvWindows:
CheckBalance.exe --mode="single_coin_total_balance" --coin_name="btc" --por_csv_filename=okx_por_20221122.csvThe tool will output the sum of all BTC addresses in the snapshot. Compare this total to the published sum.
Verifying ETH and USDT Address Balances
OKX holds assets on multiple chains like Ethereum Mainnet, Arbitrum, Optimism, etc. The process is similar to BTC verification but uses the appropriate coin_name.
- Open your terminal and navigate to the correct folder.
Verify a Single Address:
Example for an ETH address on macOS:
./CheckBalance --mode="single_address" --coin_name="eth" --address="0xc5451b523d5fffe1351337a221688a62806ad91a" --por_csv_filename=okx_por_20221122.csv- Replace
coin_nameandaddresswith the values you want to check (e.g.,usdt-erc20,usdt-arbitrum).
Verify the Total Balance for a Crypto Asset:
Example for total ETH on macOS:
./CheckBalance --mode="single_coin_total_balance" --coin_name="eth" --por_csv_filename=okx_por_20221122.csv- Replace
coin_namewith the desired asset (e.g.,usdt-poly,eth-optimism).
In both cases, compare the returned balance from the tool against the balance listed in the OKX Proof of Reserves file. A match confirms the reserve amount.
👉 Get advanced methods for configuring node connections
Frequently Asked Questions
What is Proof of Reserves and why is it important?
Proof of Reserves is an auditing method that allows a cryptocurrency exchange to prove it holds enough assets to cover all customer deposits. It's crucial for user trust and platform transparency, providing cryptographic evidence that user funds are backed 1:1 and are not being misused.
Do I need technical skills to perform this verification?
A basic comfort level with using the command line is required to run the provided tools. While the process has been simplified, verifying via a personal Bitcoin node is an advanced task. Most users can successfully verify balances using third-party RPCs or the OKLink API with the configured tools.
What does it mean if the address ownership verification fails?
If the VerifyAddress tool returns an error, it indicates a mismatch between the published address, message, and signature. This would be a serious issue. However, if you encounter an error, first double-check that you are using the correct snapshot file and command syntax before drawing conclusions.
Can I verify balances without running a full node?
Yes, absolutely. The open-source tools are designed to work with external services like Infura, Alchemy, or OKLink's API. By configuring the rpc.json file with the necessary endpoints and API keys, you can query historical balance data without the need for local node synchronization.
How often does OKX publish new Proof of Reserves data?
OKX commits to providing regular, monthly Proof of Reserves audits. You should always use the most recent snapshot file available on their official website to perform your verification, as wallet addresses and balances change over time.
What cryptocurrencies are supported for verification?
The supported assets typically include major coins like BTC, ETH, and USDT across various networks (Ethereum, Tron, Polygon, Arbitrum, Optimism, Avalanche). The exact list and naming conventions (e.g., usdt-erc20) can be found in the documentation within the snapshot download.
Appendix: Configuring External Services
Using Third-Party Node RPC (e.g., Infura, Alchemy)
To use a service like Infura, you need to edit the rpc.json file included with the verification tools.
- Sign up for an account with an archive node provider and obtain your project's RPC endpoint URL.
- Open the
rpc.jsonfile in a text editor. - Locate the section for the blockchain you want to query (e.g.,
"eth"). - Replace the existing URL with the one from your provider, which typically includes your Project ID or API key.
- Save the file. The
CheckBalancetool will now use this endpoint to fetch historical balance data.
Using OKLink API for Balance Verification
OKLink provides a straightforward API for this purpose.
- Login to your OKLink account and navigate to your profile.
- Find the API section and select Create API under On-chain Data.
- Generate a new API key.
- Open the
rpc.jsonfile and find the"oklink"section. - Insert your newly generated API key into the designated field and save the configuration. The tool will now use OKLink's services for verification.