Esses tokens de reflection não calculam os saldos da mesma forma (simples) de um token qualquer.
Exemplo de um token genérico:
- ABC tem 10 tokens e XYZ tem 5 tokens.
- O estado do array
addresses é:
[ABC: 5, XYZ: 10]- ABC envia 10 tokens para XYZ.
- É realizado as operações:
addresses[ABC] = addresses[ABC] - 10 e
addresses[XYZ] = addresses[XYZ] + 10No caso de um token de reflection, todos os saldos devem ser dinâmicos, já que ao contrário de um token comum onde cada transação só afeta quem envia e quem recebe (ABC e XYZ), cada transação afeta todos os endereços com tokens através do tal "imposto" das transações (e.g cada transação cobra 2% e envia para o restante dos hodlers).
Dessa forma, o endereço ABC enviaria 10 tokens para XYZ, porém XYZ apenas receberia 8 tokens, sendo que os 2 restantes seriam distribuídos para todos os outros endereços, proporcionalmente ao balanço de cada.
No seu screenshot, a função
balanceOf chama
tokenFromReflection, que deriva o saldo do endereço baseado no rate atual da rede, digamos, 25 tokens a cada 1 token de "share" do total da rede. Após a transação de ABC -> XYZ, os 2 tokens taxados são somados ao rate da rede, fazendo com que cada token de share agora equivale a 25.2 tokens.
Claro que tem toda uma matemática por trás para derivar esses valores, mas estou explicando tudo da forma mais simples possível para você entender a logíca por trás disso.