Här är artikeln om hur man läser block explorers och förstår transaktioner, spår och loggar på Ethereum (EVM), skriven på ett reflekterande och insiktsfullt sätt med förklaringar för mindre insatta läsare:
Förstå transaktioner, spår och loggar på Ethereum (EVM) med block explorers
När du gör en transaktion på Ethereum eller annan blockkedja med smarta kontrakt har du antagligen kollat upp den på en block explorer som etherscan.io. Där ser du en mängd information som kan vara svår att förstå för den oinvigde. I den här artikeln ska vi gå igenom alla delar och hur du kan navigera informationen med hjälp av SQL-frågor.
Transaktioner
Transaktioner är bara toppen av isberget när det gäller data på Ethereum. Alla spår och loggar utlöses efter den inledande indata som kickar igång den översta funktionen. Låt oss börja med att identifiera alla fält du ser på transaktionssidan i block explorern:
[Beskrivning av transaktionsfälten med länkar till relevanta keccak hash och ABI-specifikationer]
Ett viktigt begrepp att lära sig är skillnaden mellan en EOA (Externally Owned Account) och en kontraktsadress. Kontrakt distribueras av EOA:er och kan anropas i transaktionens ”to”-fält. Om du klickar på en adress visar explorern om det är ett kontrakt eller en EOA. På Dune kan du gå samman med ethereum.creation_traces-tabellen för att kontrollera om det är ett kontrakt.
All data på blockkedjan representeras som hex-data. En 1inch-swap kommer exempelvis ha en sådan här indatasträng:
[Exempel på indatasträng med länk till transaktionen]
De första 4 bytarna är ”funktionssignaturen” vilket är keccak-hashen av funktionsnamnet och indatatyperna. Etherscan har en smidig ”decode”-knapp för vissa kontrakt som gör strängen läsbar. På Dune finns det dekodade tabeller baserade på kontraktens ABI:er som laddats upp.
Loggar
Loggar kan komma från vilken punkt som helst i en funktionsanrop. Utvecklare tenderar att skicka en logg i slutet av en funktion efter att all logik och överföringar är klara utan fel. Låt oss titta på ett swap-event från Uniswap V3:
[Exempel på logg med beskrivning av topic0, topic1/2/3, data och var loggen emitterades i kontraktskoden]
För att förstå logiken bakom var och hur ett event emitterades måste vi dyka ner i Solidity-koden. På Dune kan du fråga tabellen uniswap_v3_ethereum.Pair_evt_Swap för att se alla swaps för alla par skapade av Uniswap V3-fabriken.
Spår (ethereum.traces)
Spår kan snabbt bli svåra att navigera på grund av hur djupt nästade kontraktsanrop blir. Låt oss först förstå de olika spårtyperna:
- CREATE: Spår som emitteras när ett nytt kontrakt distribueras.
- DELEGATECALL: En proxy-teknik där en begäran vidarebefordras utan att logiken ändras.
- CALL: Det vanligaste spåret. Ett anrop kan vara en enkel ETH-överföring eller ett funktionsanrop på ett kontrakt.
- STATICCALL: Ett funktionsanrop som inte modifierar något tillstånd, t.ex. prisfrågor eller andra beräkningar.
Du behöver också förstå trace_address-kolumnen som visar hierarkin av funktionsanrop. Phalcon blocksec är ett bra verktyg för att se den här hierarkin.
[Exempel på ostrukturerad transaktion från Etherscan och strukturerad vy från Phalcon blocksec med beskrivning av hierarkin]
På Dune kan du inte se den här exakta ordningen, men du kan ändå koppla samman data med hjälp av transaction_hash.
Djupdyka i kryptodata
Om du förstår begreppen i den här guiden är du redo att börja skriva mer avancerade frågor. Att navigera data mellan olika verktyg och explorers kommer att vara en av dina viktigaste färdigheter.
Jag använder omkring 10 olika explorers varje vecka, och antalet olika dataverktyg är tio gånger så många. Jag skriver en årlig guide om hur dataverktygsfloran utvecklas:
[Länk till årlig guide om dataverktyg med beskrivning]
Ju fler verktyg du lär dig, desto mer flexibelt kan du bygga och kommunicera i den här jättelika ekosystemen. Som alltid är mina DM:s öppna på Twitter om du har frågor eller feedback.