How do I check a VERI balance?
Check a VERI balance
Call balanceOf(address) on the VERI contract through a public Ethereum JSON-RPC endpoint with curl and divide the result by 10^18; read the balance rather than summing Transfer logs, which miss two balance changes.
- Chain#
- Ethereum (eip155:1)
- Deployed#
- Block 3,586,472 · 23 Apr 2017
- Source#
- Verified on Etherscan
- Transactions#
- All transactions
- Last verified#
- 13 Oct 2026
You need an address to look up and curl. The example uses the contract owner, 0x82c48875C17EE5812f909a9d75C0F64f7A8719FE; replace it with the address you want.
1. Build the calldata#
balanceOf(address) has the selector 0x70a08231. Append the address, without its 0x, left-padded with zeros to 32 bytes (64 hex characters), as the ABI specification describes:
0x70a08231
000000000000000000000000
82c48875c17ee5812f909a9d75c0f64f7a8719fe
Joined: 0x70a0823100000000000000000000000082c48875c17ee5812f909a9d75c0f64f7a8719fe. Case doesn’t matter in calldata.
With Foundry installed, its cast command builds it for you, and the later steps show cast doing the call and the conversion too:
# 0x70a0823100000000000000000000000082c48875c17ee5812f909a9d75c0f64f7a8719fe
cast calldata 'balanceOf(address)' 0x82c48875C17EE5812f909a9d75C0F64f7A8719FE
2. Call the contract#
Send an eth_call to a public Ethereum JSON-RPC endpoint. Either of these works without a key:
curl -s https://ethereum-rpc.publicnode.com -X POST -H 'content-type: application/json' \
--data '{"jsonrpc":"2.0","id":1,"method":"eth_call","params":[{"to":"0x8f3470a7388c05ee4e7af3d01d8c722b0ff52374","data":"0x70a0823100000000000000000000000082c48875c17ee5812f909a9d75c0f64f7a8719fe"},"latest"]}'
curl -s https://eth.drpc.org -X POST -H 'content-type: application/json' \
--data '{"jsonrpc":"2.0","id":1,"method":"eth_call","params":[{"to":"0x8f3470a7388c05ee4e7af3d01d8c722b0ff52374","data":"0x70a0823100000000000000000000000082c48875c17ee5812f909a9d75c0f64f7a8719fe"},"latest"]}'
The answer is one 32-byte word in result, for example "result":"0x0000000000000000000000000000000000000000000000001ae18cdf42a3beab".
export ETH_RPC_URL=https://ethereum-rpc.publicnode.com
# 1936984205269647019 [1.936e18], the same word decoded as a number
cast call 0x8f3470a7388c05ee4e7af3d01d8c722b0ff52374 'balanceOf(address)(uint256)' 0x82c48875C17EE5812f909a9d75C0F64f7A8719FE
3. Convert to VERI#
The word is the balance in base units. VERI has 18 decimals, so divide by 10^18:
python3 -c 'print(int("0x0000000000000000000000000000000000000000000000001ae18cdf42a3beab", 16) / 10**18)'
# 1.936984205269647
# 1.936984205269647019
cast call 0x8f3470a7388c05ee4e7af3d01d8c722b0ff52374 'balanceOf(address)' 0x82c48875C17EE5812f909a9d75C0F64f7A8719FE | xargs cast from-wei
A result of 0x0000…0000 means the address holds no VERI.
On Etherscan#
Etherscan’s Read Contract view runs balanceOf from the verified source, so the same three steps work in a browser:
- Open the contract page, choose the Contract tab, then Read Contract. Functions that take no input, such as
decimalsandtotalSupply, show their value at once. - Open
balanceOf, paste the address into the_ownerfield and press Query. - The result is labelled
uint256and is the balance in base units, the same numbercurlreturns in hex. Divide it by 10^18 for VERI.
The token page shows the balance already divided once you paste the address into the holder filter. Blockscout lists VERI with the other tokens on the address page, https://eth.blockscout.com/address/<address>?tab=tokens.
Why not sum the Transfer logs#
The VERI contract changed balances twice without emitting a Transfer: when it allocated the whole supply to the deployer, and when transferOwnership moved all of it to the current owner. A balance rebuilt from logs alone starts from zero for those addresses and is wrong for everything downstream. balanceOf reads the contract’s own storage and is always right. See How VERI differs from a modern ERC-20.
For agents and tools#
The committed ABI decodes balanceOf and the other calls; decimals() returns uint256 in it, not uint8. /tokenlist.json and /facts.json carry the address and decimals; the data files page lists every file. A historical balance ("latest" replaced by a block number in hex, or --block <number> with cast) needs an archive node; https://eth.drpc.org serves those without a key.