Infura, tvrtka koja nudi besplatni pristup hostanim nodeovima za Ethereum blockchain, izbacila je novi alat: EthQL.

EthQL je the GraphiQL alat koji se može koristiti za pregledavanje i pretraživanje Ethereum blockchaina. GraphiQL se inače koristi kao interaktivni alat za pretragu GraphQL baza.

Da ne duljimo s teorijom, pogledajmo što se zapravo može postići s EthQL alatom.

Kako koristiti EthQL

U lijevu stranu ekrana upisuje se upit, dok rezultat biva ispisan na desnoj. Upiti izgledaju ovako:

query {
  block(number:1) {
    hash
  }
}
  • query znači “započni upit”, a sam upit ide između vitičastih zagrada ({, })
  • block je jedan od elemenata koji možemo pretraživati i odgovara blockovima blockchaina
  • (number:1) označava broj bloka koji nas zanima. U ovom slučaju prvi Ethereum blok.
  • podaci koje želimo izvući iz tog bloka se nalaze u tijelu ({, }) upita
  • hash znači hash bloka – svaki blok u blockchainu ima svoj hash, skup brojki i slova koji ga jedinstveno označavaju i osiguravaju njegovu validnost.

Drugim riječima, ovaj upit znači: “Daj mi hash prvog Ethereum bloka”.

Primjer
Primjer

Primjer 1: Provjera bilance

Evo kako možemo provjeriti stanje neke Ethereum adrese i broj transakcija poslan preko iste:

query {
  account(address:"0xbE2B28F870336B4eAA0aCc73cE02757fcC428dC9") {
    balance
    transactionCount
    code
  }
}
Provjera stanja
Provjera stanja

Primjer 2: Provjera tipa

Neke Ethereum adrese su eksterne (tj. imaju privatni ključ) a neke su interne ili “Contract” tj. postoje samo na blockchainu i nema načina da ih se otključa. U ovom alatu postoji atribut type za provjeru tipa računa, no trenutno to ne radi i uvijek vraća null.

Promjena: Ova je greška otklonjena od 5.8.2018!

Type
Type

Imamo alternativu kako provjeriti radi li se o pametnom ugovoru ili konkretnoj adresi. Atribut code ispisuje programski kod koji je spremljen na toj adresi. Ako taj kod nije 0x, znači da se radi o pametnom ugovoru a ne o korisničkoj adresi.

query {
  account(address:"0xb8f1437c742dc042af73d5bd18c8fc985ec8e3b4") {
    balance
    transactionCount
    type
    code
  }
}
Type
Type

Primjer 3: Detekcija najnovijih transakcija

Evo kako pratiti kada je neki specifični račun bio umiješan u transakciju:

query {
  block(number:6033927) {
    transactionsInvolving(participants:["0xbE2B28F870336B4eAA0aCc73cE02757fcC428dC9", "0x65e2c5175e2e618f48e70343b14c31b280e42d90"]) {
      from {address}
      to {address}
    }
  }
}

Pomoću block(number:6033927) ciljamo specifični blok primjera radi, jer znamo da je u tom bloku adresa 0x65e2c5175e2e618f48e70343b14c31b280e42d90 imala transakcije. transactionsInvolving će izbaciti sve transakcije koje su imale veze s nekima od navedenih adresa, te ispisati primatelja i pošiljatelja.

Tracking
Tracking

No, kako pratiti najnoviji blok? Za to služe Tagovi:

query {
  block(tag:LATEST) {
    transactionsInvolving(participants:["0xbE2B28F870336B4eAA0aCc73cE02757fcC428dC9", "0x65e2c5175e2e618f48e70343b14c31b280e42d90"]) {
      from {address}
      to {address}
    }
  }
}

Ako sada na našem serveru napravimo skriptu koja će redovito provjeravati rezultat ovog upita – preferabilno svakih 10ak sekundi da uhvati svaki novi Ethereum blok a opet ne preoptereti server – imamo metodu za dobivanje signala kad se transakcija nekog određenog računa pojavi u blockchainu.

Tada je samo pitanje implementacije kako ćemo to dodati u Telegram ili neku drugu vrstu notifikacije.

Zaključak

EthQL je zanimljiv novi alat za pretraživanje Ethereum blockchaina koji će, kad izađe iz Alpha faze, zasigurno pomoći kod raznih slučajeva digitalne forenzike. Za još primjera sintakse pogledajte ovdje a za puni ispis dostupnih tipova podataka napravite novi query na __schema entitetu:

query {
  __schema {
    types {
      name
      kind
      description
      fields {
        name
        description
      }
    }
  }
}

Jeste li i vi isprobali neke zanimljive upite?

LEAVE A REPLY

Please enter your comment!
Please enter your name here