Sans surprise, une fois mon indexer local synchronisé, aucun solde n’est correct.
{
"data": {
"account": [
{
"id": "5Dq8xjvkmbz7q4g2LbZgyExD26VSCutfEc6n4W4AfQeVHZqz",
"balance": 5602021717886,
"identity": {
"name": "HugoTrentesaux"
}
}
]
}
}
BC: 56020217440.77
SQ: 56020217178.86
Différence: 261.91
La première explication est que les frais ne sont pas pris en compte dans la somme des transferts. Mais ça n’explique pas toute la différence.
Donc mon approche n’est pas fiable, je pense qu’il faudrait ajouter un event de balanceChange à duniter qui diffuse la nouvelle valeur balance.free
à chaque changement d’état. L’indexer n’aurait donc qu’a écouter cet evenement, mettre à jour la nouvelle valeur pour le compte en y ajoutant simplement les DU non réclamés.
Problème: Ces nouveaux events participeront à augmenter encore la taille de la blockchain.
Et je maintiens que ce n’est pas au rôle de l’indexer de gérer des données mutables.
Dans notre squid je vois des events concernant les balances, mais je ne les ai jamais observé pour de vrai en blockchain:
Balances.Endowed : An account was created with some free balance.
Balances.DustLost : An account was removed whose balance was non-zero but below ExistentialDeposit, resulting in an outright loss.
Balances.Transfer : Transfer succeeded.
Balances.BalanceSet : A balance was set by root.
Balances.Reserved : Some balance was reserved (moved from free to reserved).
Balances.Unreserved : Some balance was unreserved (moved from reserved to free).
Balances.ReserveRepatriated : Some balance was moved from the reserve of the first account to the second account. Final argument indicates the destination balance type.
Balances.Deposit : Some amount was deposited (e.g. for transaction fees).
Balances.Withdraw : Some amount was withdrawn from the account (e.g. for transaction fees).
Balances.Slashed : Some amount was removed from the account (e.g. for misbehavior).
Balances.Minted : Some amount was minted into an account.
Balances.Burned : Some amount was burned from an account.
Balances.Suspended : Some amount was suspended from an account (it can be restored later).
Balances.Restored : Some amount was restored into an account.
Balances.Upgraded : An account was upgraded.
Balances.Issued : Total issuance was increased by amount
, creating a credit to be balanced.
Balances.Rescinded : Total issuance was decreased by amount
, creating a debt to be balanced.
Balances.Locked : Some balance was locked.
Balances.Unlocked : Some balance was unlocked.
Balances.Frozen : Some balance was frozen.
Balances.Thawed : Some balance was thawed.
Balances.TotalIssuanceForced : The TotalIssuance
was forcefully changed.
Aucun d’entre eux ne sont traités (hormis le Balance.tranfer) pour le moment dans notre squid.
Mais typiquement quand je fais un transfer, je ne vois que l’event de transfer (celui que j’utilise donc actuellement pour sommer le montant aux comptes), rien d’autre:
ok pour la science, je relance une sync en ayant ajouté la gestion de ces events, pour les frais et les réserves, où je somme avec les balances existantes, on verra ce que ça donne, mais bon…
balances.deposit
balances.withdraw
balances.reserved
balances.unreserved
balances.endowed
balances.dustLost
balances.slashed