Construire des graphes de transactions · Leçon 6 sur 6
Traçage inter-chaînes
10 min de lecture
Les fonds restent rarement sur une seule chaîne. Les voleurs échangent les jetons volés sur une plateforme d’échange décentralisée (DEX), les transfèrent vers un autre réseau, les convertissent en bitcoins au moyen d’un protocole d’échange inter-chaînes, puis utilisent un service d’échange instantané, souvent en quelques heures. Chaque déplacement laisse des traces sur deux registres ou plus qui ne partagent aucun graphe de transactions commun. Le traçage inter-chaînes consiste à reconnecter ces traces et à indiquer honnêtement le degré de fiabilité de chaque rapprochement.
Trois types de liens
Sur une même chaîne, une sortie dépensée ou un événement de transfert constitue un fait établi. Entre différentes chaînes, il n’existe aucune arête commune : l’analyste doit donc établir un lien. Chaque lien inter-chaînes relève de l’un des trois degrés suivants :
| Degré | Fondement | Exemple |
|---|---|---|
| Déterministe | Le protocole lui-même consigne le lien au moyen d’un identifiant partagé | Un identifiant de dépôt sur un pont ou un numéro de séquence de message qui apparaît dans les événements source et de destination |
| Consigné par le protocole | Les registres publics du service associent les transactions entrantes et sortantes | Une API de protocole d’échange inter-chaînes qui associe chaque hachage entrant à son hachage sortant |
| Probabiliste | Déduit de la concordance du montant, de l’heure et du comportement | Un dépôt auprès d’un service d’échange instantané et un paiement de valeur similaire quelques minutes plus tard sur une autre chaîne |
Indiquez toujours le degré de fiabilité de chaque lien dans votre parcours. Un parcours n’est aussi solide que son maillon le plus faible.
Le temps se comporte également différemment selon les chaînes. Les intervalles entre les blocs vont de bien moins d’une seconde à environ dix minutes, et le délai entre les deux côtés d’un transfert dépend du mécanisme : quelques secondes pour un réseau de liquidité, quelques minutes pour un pont qui attend la finalité de la chaîne source et environ sept jours pour un retrait standard depuis un rollup optimiste. Convertissez chaque horodatage en UTC, notez la hauteur de bloc de chaque chaîne et définissez les fenêtres de rapprochement en fonction du délai réel du mécanisme plutôt que d’une estimation fixe.
Échanges et actifs enveloppés sur une même chaîne
Avant de quitter une chaîne, les fonds changent souvent de forme. Un échange sur une DEX est le cas le plus simple : dans une seule transaction, l’adresse de l’utilisateur envoie le jeton A à un pool et reçoit le jeton B, les deux étant visibles sous forme d’événements de transfert partageant le même hachage de transaction (voir la leçon Échanges sur DEX et flux de liquidité). Le lien est déterministe, mais le montant varie selon le prix : votre traçage doit donc changer d’actif et consigner le taux.
Les actifs enveloppés représentent un actif sous une autre forme. WETH enveloppe ETH sur Ethereum même : le contrat WETH émet un événement Deposit lorsque des ETH entrent et un événement Withdrawal lorsqu’ils ressortent, selon un ratio de un pour un. Les jetons de bitcoins enveloppés sur Ethereum sont créés et détruits par un dépositaire ou un pont : le lien avec les bitcoins réels passe donc par les registres de cet émetteur, et non par l’une ou l’autre chaîne. Des versions inter-chaînes d’un même jeton peuvent coexister sur un réseau sous différentes adresses de contrat : identifiez donc toujours un jeton par son adresse de contrat, jamais par son symbole boursier.
Ponts
Un pont transfère de la valeur entre chaînes. Trois modèles dominent :
- Verrouillage et création : l’actif est verrouillé dans un contrat sur la chaîne source et une version enveloppée est créée sur la chaîne de destination. L’opération inverse est la destruction et libération.
- Réseau de liquidité : l’utilisateur dépose des fonds sur la chaîne source et un relais ou fournisseur de liquidité verse des actifs natifs sur la chaîne de destination à partir de ses propres fonds, avant d’être remboursé. C’est rapide, mais le paiement provient de l’adresse d’une autre personne.
- Protocoles de transmission de messages : une couche de messagerie générale transmet un message d’une chaîne à une autre, et des applications comme les ponts de jetons s’appuient sur cette couche.
La plupart des ponts attribuent à chaque transfert un identifiant qui apparaît des deux côtés. Le contrat central de Wormhole, par exemple, émet l’événement LogMessagePublished(address indexed sender, uint64 sequence, uint32 nonce, bytes payload, uint8 consistencyLevel) sur la chaîne source. Le message signé accepté par la chaîne de destination est indexé de façon unique par la chaîne émettrice, l’adresse émettrice et le numéro de séquence : faire correspondre ces trois valeurs relie donc les deux côtés de manière déterministe. D’autres ponts utilisent un identifiant de dépôt, un nonce ou un hachage de message à cette fin. Les ponts canoniques de rollup sont abordés dans la leçon Les solutions de couche 2, les chaînes latérales et les ponts comme sources de données.
La règle pratique : avant de faire un rapprochement par montant, consultez l’événement du pont sur la chaîne source, repérez son identifiant et les champs de destination (identifiant de la chaîne de destination, destinataire, jeton, montant), puis cherchez le même identifiant sur la chaîne de destination. Ne vous rabattez sur le montant et l’heure que si aucun identifiant n’existe.
Protocoles d’échange inter-chaînes
Certains protocoles échangent des actifs natifs entre chaînes sans les envelopper. THORChain en est l’exemple le plus connu. Pour échanger des bitcoins contre de l’éther, l’utilisateur envoie des BTC à l’adresse du coffre-fort du protocole avec un mémo dans une sortie OP_RETURN (limité à 80 octets, la limite de relais par défaut de longue date pour ce type de données) qui indique l’actif et l’adresse de destination. Exemple fictif de transaction décodée :
txid 2c9d…71be (Bitcoin, fictif)
vout 0 0.75000000 BTC bc1q…vlt8 adresse entrante du coffre-fort du protocole d’échange
vout 1 OP_RETURN "=:ETH.ETH:0xA1b2…9F" mémo : échange au cours du marché vers ETH, destinataire 0xA1b2…9F
vout 2 0.21843000 BTC bc1q…k2ze monnaie rendue
Le mémo =:ETH.ETH:0xA1b2…9F signifie « échanger au cours du marché contre de l’ETH natif sur Ethereum et payer 0xA1b2…9F ». L’adresse de destination est inscrite dans la transaction de la chaîne source, et les registres publics du protocole associent le hachage entrant au paiement sortant en ETH. Voilà pourquoi ces échanges, bien que rapides, comptent parmi les moyens les plus traçables de changer de chaîne. Après le vol d’environ 1,5 milliard de dollars chez Bybit en février 2025, les attaquants ont converti une grande partie des ETH volés en bitcoins, principalement via THORChain ; une estimation publiée le 27 février 2025 par la chercheuse en sécurité Taylor Monahan faisait état d’au moins 161 490 ETH transférés par THORChain au cours de 3 934 transactions en environ cinq jours.
Services d’échange instantané et rapprochement par montant et par heure
Les services d’échange instantané reçoivent un dépôt dans un actif et versent un autre actif, généralement sans compte. Ils sont dépositaires : le lien se trouve donc dans leurs registres, et les analystes des chaînes ne peuvent effectuer un rapprochement qu’en fonction du montant et de l’heure.
Exemple détaillé. Un portefeuille faisant l’objet d’une enquête envoie 2,00000000 BTC à une adresse de dépôt d’un service d’échange instantané à 14:02 UTC. À ce moment-là, 1 BTC = 60 000 USD et 1 ETH = 2 400 USD : 2 BTC valent donc 50 ETH. En tenant compte de frais de service de 0,5 % à 1 %, auxquels s’ajoutent les frais du réseau, le paiement attendu est d’environ 49,4 à 49,75 ETH. La requête ci-dessous répertorie les paiements en ETH du service au cours de l’heure suivante, dans une fourchette de valeur de 5 % :
SELECT o.txid, o.to_address, o.block_timestamp, o.amount_eth,
ABS(o.amount_eth - 49.6) / 49.6 AS rel_gap -- écart par rapport à la valeur attendue
FROM service_outflows_eth o
WHERE o.block_timestamp >= TIMESTAMP '2026-05-11 14:02:00'
AND o.block_timestamp < TIMESTAMP '2026-05-11 15:02:00'
AND o.amount_eth BETWEEN 47.5 AND 50.0 -- fourchette de 5 % sous 50 ETH
ORDER BY rel_gap;
Elle renvoie quatre paiements : 49,61 ETH à 14:19, 49,58 ETH à 14:51, 49,20 ETH à 14:33 et 48,95 ETH à 14:48. Les deux premiers correspondent à la fourchette attendue ; les deux derniers n’y correspondent pas. Le rapprochement a réduit le nombre de candidats de quatre à deux, mais n’a pas établi de lien. D’autres éléments peuvent permettre de les départager : l’un des destinataires envoie-t-il ensuite des fonds à une adresse de dépôt d’une plateforme d’échange que le sujet a déjà utilisée ? Partage-t-il des sources de financement du gaz ou des habitudes de synchronisation avec les portefeuilles connus du sujet ? Chaque fait indépendant renforce ou affaiblit un candidat.
Quantifier l’incertitude
Les liens probabilistes exigent des chiffres, pas seulement des qualificatifs :
- Taille de l’ensemble de candidats : combien de paiements correspondent à la fenêtre et à la fourchette. Un candidat sur quatre n’a rien à voir avec un candidat sur quarante.
- Taux de correspondance fortuite : appliquez la même règle de rapprochement à un échantillon de dépôts sans lien avec l’enquête, effectués auprès du même service à des moments aléatoires. Si 60 % des dépôts aléatoires trouvent également une « correspondance », celle-ci constitue un indice faible ; si ce taux est de 2 %, l’indice est fort.
- Sensibilité : élargissez et rétrécissez la fenêtre temporelle ainsi que la fourchette de valeur. Un lien qui n’apparaît qu’avec un seul réglage étroit est fragile.
- Corroboration : comptez les signaux indépendants (montant, synchronisation, comportement de destination, convergence ultérieure avec des portefeuilles connus) et consignez ceux qui contredisent le lien.
Formulez ensuite le résultat dans un langage nuancé et attribuez un niveau de confiance à chaque constat (voir la leçon Confiance, incertitude et formulation), distinguez visuellement les liens déterministes des liens probabilistes dans les schémas (par exemple, par des traits pleins et pointillés) et répertoriez les identifiants et les requêtes dans une annexe afin que le parcours puisse être reconstitué sur les deux chaînes.
Points clés pour l’examen : les trois degrés de lien inter-chaînes (déterministe, consigné par le protocole, probabiliste) et la raison pour laquelle un parcours n’est aussi solide que son maillon le plus faible ; les échanges sur DEX et les actifs enveloppés comme changements de forme sur une même chaîne, notamment les événementsDepositetWithdrawalde WETH et l’identification des jetons par adresse de contrat ; les ponts à verrouillage et création, à destruction et libération, les réseaux de liquidité et les protocoles de transmission de messages ; le rapprochement des transferts par pont au moyen d’identifiants partagés, comme la chaîne émettrice, l’adresse émettrice et le numéro de séquence de Wormhole ; la lecture d’un mémo d’échange inter-chaînes dans une sortieOP_RETURN; le rapprochement par montant et par heure avec des estimations ajustées des frais ; la taille de l’ensemble de candidats, le taux de correspondance fortuite, la sensibilité et la corroboration.
Questions d’entraînement
Vérifiez votre compréhension. Ces questions ne comptent pas pour l’examen.
Connectez-vous pour enregistrer votre progression et reprendre là où vous vous êtes arrêté. C’est gratuit. Se connecter