Author

Topic: Estudando algumas sorces, entendendo reflections (Read 125 times)

legendary
Activity: 2758
Merit: 6830
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] + 10

No 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. Cheesy
newbie
Activity: 1
Merit: 0
Sou bem novo no mundo de solidity, estudei o necessário para entender as sintaxes mas para me aprofundar, comecei a ler as sources das criptomoedas. E me deparei com esse tal de reflections que tem pra todo canto, tem muito o que eu entender então esse será meu primeiro de muitos topicos aqui.

https://prnt.sc/127tg78

por que geralmente todos os contratos usam isso? Não poderia ser mais fácil, por exemplo:

mapping (address => uint256) public balanceOf;

return balanceOf[msg.address]

Se alguém poder explicar o motivo de usar uma logica mais complexa, e também qual a logica por trás, ficarei muito grato. Não precisa ser tudo em detalhes, apenas um empurrãozinho já vai me ajudar muito.
Jump to: