Question: Normally I just do this on python:

```
token = web3.eth.contract(address=contract_address, abi=abi)
balance_in_wei = token.functions.balanceOf(wallet).call()

```

However, when the function isn't in the "Read Contract" tab, this code wouldn't work at all.
[![enter image description here](https://i.stack.imgur.com/B4xC2.png)](https://i.stack.imgur.com/B4xC2.png)

The balanceOf function can be found in "Read as Proxy".
[![enter image description here](https://i.stack.imgur.com/pz7oF.png)](https://i.stack.imgur.com/pz7oF.png)

*How could I call this function as proxy in web3 py?* For context, I'm trying to get my balance of USDC: <https://etherscan.io/address/0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48>

Answer: 
I found your question in searching for the same issue and struggling for hours. For clear definitions the proxy contract A will point to contract B. What fixed it for me was using the ABI of the contract B and the address of contract A. Best of luck!
I think `balanceOf` returns a `BigNumber` value that needs to be formatted for display purposes. Are you running a formatting function prior to displaying the balance? Formatting functions take a `decimals` argument. Standard ERC-20 tokens implement 18 decimals *but* the USDC contract only implements 6 decimals. So the formatter function args might need to be adjusted.

<https://docs.openzeppelin.com/contracts/3.x/erc20#a-note-on-decimals>
<https://docs.ethers.io/v5/api/utils/display-logic/#utils-formatUnits>