Un portefeuille DeFi laisse derrière lui une trace publique et complète. Chaque swap, chaque dépôt de liquidité, chaque récolte de récompenses est horodaté, signé, vérifiable par n’importe qui. Pourtant, la question la plus élémentaire que se pose son détenteur, celle de savoir où il en est vraiment, n’a aucune réponse lisible dans un explorateur de blocs.
La donnée qui manque n’est pas sur la chaîne. Elle tient au contexte de chaque opération : à quel cours, pour quelle raison, à quel coût complet. La consigner suppose un registre tenu à part, tableur maison ou outil dédié comme Tradoshi, journal de trading, dont le principe est de reconstituer un résultat net que la chaîne ne donne pas.
Pourquoi un explorateur de blocs ne donne pas une performance
Un explorateur restitue des transactions, pas des positions. Il sait qu’une adresse a envoyé des stablecoins et reçu un actif en retour à une date donnée. Il ignore trois choses : le prix de revient de ce qui a été engagé, le motif de l’opération, et le lien entre cette transaction et celles qui l’ont précédée.
L’écheveau se resserre dès que le portefeuille traverse plusieurs chaînes. Un actif passé par un pont change d’adresse de contrat, et sa filiation se coupe net. Les transactions échouées prélèvent des frais qui n’apparaissent dans aucun solde. Un portefeuille réparti sur quatre ou cinq protocoles finit par produire un enchevêtrement de mouvements dont aucun ne porte l’information décisive : la valeur en monnaie de compte à l’instant où il a eu lieu.
Lire plus : Qu’est-ce qu’un DePIN ?
Les postes qui échappent au calcul : gas, impermanent loss, récompenses
Trois postes faussent presque toujours le résultat, et aucun des trois ne se lit directement dans l’historique d’une adresse.
Le gas, réglé dans une autre unité que l’actif traité
Les frais de réseau se paient dans le jeton natif de la chaîne, jamais dans l’actif échangé. Une opération sur un jeton ERC-20 se règle en ether, dont le cours évolue de son côté, et son montant dépend de la demande d’espace de bloc au moment de l’envoi, comme le détaille la documentation d’Ethereum consacrée au gas. Sur plusieurs centaines d’opérations, ce seul poste déplace sensiblement le résultat, d’autant qu’il frappe aussi les transactions qui échouent.
L’impermanent loss, qui ne laisse aucune transaction
Elle ne produit aucun mouvement observable. Elle se révèle à la sortie : les quantités retirées d’une position de liquidité ne sont pas celles qui avaient été déposées, et leur valeur diffère de celle qu’auraient eue les deux actifs simplement conservés côte à côte. L’explorateur affiche un dépôt, puis un retrait. Jamais l’écart entre les deux scénarios, qui est pourtant le coût réel de la position.
Les récompenses, versées dans un troisième jeton
Le staking et le farming distribuent souvent un actif différent de ceux engagés, parfois recomposé automatiquement. Chaque versement porte son propre prix d’acquisition, celui du cours à la réception, et non celui du jour où l’on décide enfin de faire les comptes. Les additionner en quantité sans les valoriser un par un produit un chiffre qui ne signifie rien.
Les données à consigner pour chaque opération
Reconstituer un résultat net exploitable demande peu de champs, à condition de les tenir dès l’opération et non après coup. Chaque ligne devrait porter la date et l’heure en UTC, la chaîne et le protocole employés, puis la nature exacte du mouvement : swap, apport ou retrait de liquidité, prise de récompense, passage par un pont, approbation de contrat.
Viennent ensuite les colonnes qui font le calcul. L’actif entrant et l’actif sortant avec leurs quantités, et surtout leur valeur unitaire en monnaie de compte au moment de l’opération, pas au moment de la saisie. Les frais de réseau se notent deux fois, dans le jeton natif et dans leur contre-valeur au même instant. Le hash de transaction et l’adresse du portefeuille referment la ligne : ils permettent de revenir à la preuve quand un écart apparaît des mois plus tard.
Reste un dernier champ, le plus négligé, et il ne se trouve nulle part sur la chaîne : le motif de l’opération, en une ligne. Les colonnes précédentes donnent un résultat net défendable, y compris devant une obligation déclarative. Celle-ci donne un historique dont on peut encore apprendre quelque chose, quand la raison d’une position a depuis longtemps quitté la mémoire. Sur la chaîne, tout est conservé sauf cela.
