Creazione di grafi delle transazioni · Lezione 6 di 6
Tracciamento tra chain
9 min di lettura
I fondi raramente rimangono su una sola chain. I ladri scambiano i token rubati su un DEX, li trasferiscono tramite bridge su un’altra rete, li convertono in bitcoin attraverso un protocollo di swap cross-chain e poi usano un servizio di exchange istantaneo, spesso nel giro di poche ore. Ogni passaggio lascia registrazioni su due o più registri che non condividono un grafo comune delle transazioni. Il tracciamento cross-chain consiste nel ricollegare queste registrazioni e nel valutare con trasparenza quanto sia solido ciascun collegamento.
Tre tipi di collegamento
All’interno di una chain, un output speso o un evento di trasferimento costituisce un fatto certo. Tra chain diverse non esiste un collegamento condiviso, quindi l’analista deve stabilirne uno. Ogni collegamento cross-chain rientra in una di tre categorie:
| Categoria | Fondamento | Esempio |
|---|---|---|
| Deterministico | Il protocollo stesso registra il collegamento tramite un identificatore condiviso | Un ID di deposito del bridge o una sequenza di messaggi che compare negli eventi sia della chain di origine sia di quella di destinazione |
| Registrato dal protocollo | Le registrazioni pubbliche del servizio associano le transazioni in entrata a quelle in uscita | Un’API di un protocollo di swap cross-chain che associa ogni hash in entrata al relativo hash in uscita |
| Probabilistico | È dedotto dalla corrispondenza di importo, orario e comportamento | Un deposito presso un servizio di exchange istantaneo e un pagamento di valore simile pochi minuti dopo su un’altra chain |
Indica sempre la categoria di ciascun collegamento nel tuo percorso. Un percorso è solido solo quanto il suo collegamento più debole.
Anche il tempo si comporta in modo diverso tra le varie chain. Gli intervalli tra i blocchi vanno da molto meno di un secondo a circa dieci minuti, e il ritardo tra i due lati di un trasferimento dipende dal meccanismo: pochi secondi per una rete di liquidità, alcuni minuti per un bridge che attende la finalità della chain di origine e circa sette giorni per un prelievo standard da un rollup ottimistico. Converti ogni timestamp in UTC, annota l’altezza del blocco di ciascuna chain e stabilisci le finestre di corrispondenza in base ai tempi effettivi del meccanismo, non a una stima fissa.
Swap e asset wrapped sulla stessa chain
Prima di lasciare una chain, i fondi spesso cambiano forma. Uno swap DEX è il caso più semplice: in una sola transazione, l’indirizzo dell’utente invia il token A a un pool e riceve il token B; entrambi sono visibili come eventi di trasferimento con lo stesso hash di transazione (vedi la lezione Swap DEX e flussi di liquidità). Il collegamento è deterministico, ma l’importo cambia in base al prezzo, quindi nel tracciamento devi passare da un asset all’altro e registrare il tasso.
Gli asset wrapped rappresentano un asset in una forma diversa. WETH avvolge ETH sulla stessa Ethereum: il contratto WETH emette un evento Deposit quando ETH entra e un evento Withdrawal quando esce, con un rapporto uno a uno. I token di bitcoin wrapped su Ethereum sono coniati e bruciati da un custode o da un bridge; il collegamento al bitcoin reale passa quindi dalle registrazioni dell’emittente, non da una delle due chain. Le versioni bridged dello stesso token possono coesistere su una rete con indirizzi di contratto diversi: identifica sempre un token tramite il suo indirizzo di contratto, mai tramite il suo ticker.
Bridge
Un bridge trasferisce valore tra chain. Sono predominanti tre modelli:
- Lock-and-mint: l’asset viene bloccato in un contratto sulla chain di origine e una versione wrapped viene coniata sulla chain di destinazione. Il processo inverso è burn-and-release.
- Rete di liquidità: l’utente deposita fondi sulla chain di origine e un relayer o un fornitore di liquidità paga asset nativi sulla chain di destinazione usando i propri fondi, per poi essere rimborsato. È veloce, ma il pagamento proviene dall’indirizzo di qualcun altro.
- Protocolli di messaggistica: un livello di messaggistica generico trasporta un messaggio da una chain all’altra; applicazioni come i bridge di token si basano su di esso.
La maggior parte dei bridge assegna a ogni trasferimento un identificatore che compare su entrambi i lati. Per esempio, il contratto core di Wormhole emette sulla chain di origine LogMessagePublished(address indexed sender, uint64 sequence, uint32 nonce, bytes payload, uint8 consistencyLevel). Il messaggio firmato accettato dalla chain di destinazione è indicizzato in modo univoco dalla chain dell’emittente, dall’indirizzo dell’emittente e dal numero di sequenza; far corrispondere questi tre valori collega quindi deterministicamente i due lati. Altri bridge usano allo stesso scopo un ID di deposito, un nonce o un hash del messaggio. I bridge canonici dei rollup sono trattati nella lezione Layer 2, sidechain e bridge come fonti di dati.
La regola pratica: prima di far corrispondere gli importi, leggi l’evento del bridge sulla chain di origine, trova il suo identificatore e i campi di destinazione (ID della chain di destinazione, destinatario, token, importo), quindi cerca lo stesso identificatore sulla chain di destinazione. Ricorri alla corrispondenza di importo e orario solo se non esiste un identificatore.
Protocolli di swap cross-chain
Alcuni protocolli scambiano asset nativi tra chain senza ricorrere a token wrapped. THORChain è l’esempio più noto. Per scambiare bitcoin con ether, l’utente invia BTC all’indirizzo vault del protocollo con una nota in un output OP_RETURN (mantenuta entro 80 byte, il limite predefinito di lunga data per il relay di dati di questo tipo) che indica l’asset e l’indirizzo di destinazione. Una transazione decodificata fittizia:
txid 2c9d…71be (Bitcoin, fittizio)
vout 0 0.75000000 BTC bc1q…vlt8 indirizzo vault in entrata del protocollo di swap
vout 1 OP_RETURN "=:ETH.ETH:0xA1b2…9F" nota: swap al prezzo di mercato in ETH, destinatario 0xA1b2…9F
vout 2 0.21843000 BTC bc1q…k2ze resto
La nota =:ETH.ETH:0xA1b2…9F significa «scambia al prezzo di mercato in ETH nativo su Ethereum e paga 0xA1b2…9F». L’indirizzo di destinazione è scritto nella transazione della chain di origine e le registrazioni pubbliche del protocollo associano l’hash in entrata al pagamento in ETH in uscita. Ecco perché questi swap, pur essendo veloci, sono tra i modi più tracciabili di passare da una chain all’altra. Dopo il furto di circa 1,5 miliardi di dollari ai danni di Bybit nel febbraio 2025, gli aggressori hanno convertito gran parte degli ETH rubati in bitcoin, principalmente tramite THORChain; una stima pubblicata il 27 febbraio 2025 dal ricercatore di sicurezza Taylor Monahan ha conteggiato almeno 161.490 ETH trasferiti tramite THORChain in 3.934 transazioni nell’arco di circa cinque giorni.
Exchange istantanei e corrispondenza di importo e orario
I servizi di exchange istantaneo ricevono un deposito in un asset e ne pagano un altro, solitamente senza richiedere un account. Sono servizi custodial, quindi il collegamento è presente nelle loro registrazioni e gli analisti on-chain possono basarsi solo sulla corrispondenza di importo e orario.
Esempio svolto. Un wallet sotto indagine invia 2.00000000 BTC a un indirizzo di deposito di un exchange istantaneo alle 14:02 UTC. In quel momento, 1 BTC = 60.000 USD e 1 ETH = 2.400 USD, quindi 2 BTC valgono 50 ETH. Considerando una commissione del servizio dallo 0,5% all’1%, oltre ai costi di rete, il pagamento atteso è di circa 49,4-49,75 ETH. La query seguente elenca i pagamenti in ETH del servizio nell’ora successiva, entro una fascia di valore del 5%:
SELECT o.txid, o.to_address, o.block_timestamp, o.amount_eth,
ABS(o.amount_eth - 49.6) / 49.6 AS rel_gap -- scostamento dal valore atteso
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 -- fascia del 5% sotto i 50 ETH
ORDER BY rel_gap;
Restituisce quattro pagamenti: 49,61 ETH alle 14:19, 49,58 ETH alle 14:51, 49,20 ETH alle 14:33 e 48,95 ETH alle 14:48. I primi due rientrano nell’intervallo atteso; gli ultimi due no. La corrispondenza ha ridotto i quattro candidati a due, ma non ha stabilito un collegamento. Ulteriori elementi possono aiutare a distinguerli: uno dei destinatari invia in seguito fondi a un indirizzo di deposito di un exchange già utilizzato in precedenza dal soggetto? Condivide con i wallet noti del soggetto le fonti di finanziamento per il gas o le abitudini temporali? Ogni fatto indipendente rafforza o indebolisce un candidato.
Quantificare l’incertezza
I collegamenti probabilistici richiedono numeri, non solo aggettivi:
- Dimensione dell’insieme di candidati: quanti pagamenti rientrano nella finestra e nella fascia. Un candidato su quattro è molto diverso da uno su quaranta.
- Tasso di corrispondenze casuali: applica la stessa regola di corrispondenza a un campione di depositi non correlati effettuati allo stesso servizio in orari casuali. Se anche il 60% dei depositi casuali trova una «corrispondenza», l’indizio è debole; se accade nel 2% dei casi, è forte.
- Sensibilità: amplia e restringi la finestra temporale e la fascia di valore. Un collegamento che compare solo con un’impostazione molto ristretta è fragile.
- Riscontri corroboranti: conta i segnali indipendenti (importo, tempistiche, comportamento del destinatario, successiva convergenza con wallet noti) e annota quelli che contraddicono il collegamento.
Poi descrivi il risultato con un linguaggio calibrato e assegna un livello di confidenza a ciascun risultato (vedi la lezione Confidenza, incertezza e linguaggio), mantieni visivamente distinti nei diagrammi i collegamenti deterministici e quelli probabilistici (per esempio, con linee continue e tratteggiate) ed elenca gli identificatori e le query in un’appendice, così che il percorso possa essere ricostruito su entrambe le chain.
Focus sull'esame: le tre categorie di collegamento cross-chain (deterministico, registrato dal protocollo, probabilistico) e perché un percorso è solido solo quanto il suo collegamento più debole; swap DEX e asset wrapped come cambiamenti di forma sulla stessa chain, inclusi gli eventi WETH Deposit e Withdrawal e l’identificazione dei token tramite indirizzo di contratto; bridge lock-and-mint, burn-and-release, a rete di liquidità e di messaggistica; corrispondenza dei trasferimenti tramite bridge usando identificatori condivisi, come la chain dell’emittente, l’indirizzo dell’emittente e la sequenza di Wormhole; lettura di una nota di swap cross-chain in un output OP_RETURN; corrispondenza di importo e orario con aspettative adeguate alle commissioni; dimensione dell’insieme di candidati, tasso di corrispondenze casuali, sensibilità e riscontri corroboranti.