Hi, I am currently conducting an analysis of Lido StETH holders and their balances over time. To do this quickly and cheaply I am using etherscans method of subtracting outbound tokens from inbound tokens to get the balance of an address at any point in time.
This has been successful in principal, however it seems that there is sometimes some unaccounted for transfers (I suspect from mints?) that are causing balances to return as negative.
Here is one such example:
At block 16546200: Etherscan value ~-4183336466029845598375,
balanceOf() Value: 2798160878585542078071
Strangely though in the contract code it seems that mints do in fact emit a transfer() from NULL → Msg.Sender on successful mints.
if anybody has any information that could help me fill in the gaps here it would be greatly appreciated.
The best approach in my opinion would be to use our Subgraph.
In a single request you can get shares of an address with protocol totals (total shares and pooled ETH) at any block. Then, you just need to calculate the balance.