Uvod u EthereumJ
Upravo sam najavio novo Uči proljeće tečaj, usredotočen na osnove Spring 5 i Spring Boot 2:
>> PROVJERITE TEČAJ1. Uvod
U ovom ćemo članku pogledati biblioteku EthereumJ koja nam omogućuje interakciju s Ethereum blockchain-om, koristeći Javu.
Prvo, samo nakratko zaronimo u to o čemu se radi u ovoj tehnologiji.
2. O Ethereumu
Ethereum je kriptovaluta iskorištavanjem distribuirane, peer-to-peer baze podataka u obliku programabilnog blockchain, virtualni stroj Ethereum (EVM). Sinkronizira se i njime se upravlja preko različitih, ali povezanih čvorovi.
Od 2017. godine Čvorovi sinkronizirati blockchain putem konsenzusa, stvarajte kovanice rudarstvom (dokaz o radu), provjeriti transakcije, izvršiti pametni ugovori napisano u Solidity i pokrenite EVM.
The blockchain je podijeljena na blokovi koji sadrže stanja računa (uključujući transakcije između računi) i dokaz o radu.
3. The Ethereum Fasada
The org.ethereum.fasada.Ethereum klase apstrahira i objedinjuje mnoge pakete EthereumJ-a u jedno sučelje jednostavno za upotrebu.
Moguće je povezati se s čvorom radi sinkronizacije s cjelokupnom mrežom, a nakon povezivanja možemo raditi s blockchainom.
Stvaranje fasadnog objekta jednostavno je kao:
Ethereum ethereum = EthereumFactory.createEthereum ();
4. Povezivanje s mrežom Ethereum
Da bismo se povezali s mrežom, prvo se moramo povezati s čvorom, tj. poslužitelj koji pokreće službeni klijent. Čvorovi su predstavljeni s org.ethereum.net.rlpx.Node razred.
The org.ethereum.listener.EthereumListenerAdapter obrađuje blockchain događaje koje je naš klijent otkrio nakon što je veza s čvorom uspješno uspostavljena.
4.1. Povezivanje s mrežom Ethereum
Spojimo se na čvor na mreži. To se može učiniti ručno:
Niz ip = "// localhost"; int port = 8345; Niz nodeId = "a4de274d3a159e10c2c9a68c326511236381b84c9ec ..."; ethereum.connect (ip, port, nodeId);
Povezivanje s mrežom može se izvršiti i automatski pomoću graha:
javni razred EthBean {privatni Ethereum ethereum; javni void start () {ethereum = EthereumFactory.createEthereum (); ethereum.addListener (novi EthListener (ethereum)); } javni blok getBestBlock () {return ethereum.getBlockchain (). getBestBlock (); } javni BigInteger getTotalDifficffic () {return ethereum.getBlockchain (). getTotalDifficffic (); }}
Tada možemo ubrizgati svoje EthBean u našu konfiguraciju aplikacije. Zatim se automatski povezuje s mrežom Ethereum i započinje preuzimanje blockchaina.
U stvari, većina obrada veza prikladno je omotana i apstrahirana jednostavnim dodavanjem org.ethereum.listener.EthereumListenerAdapter primjer našeg stvorenog org.ethereum.fasada.Ethereum primjerice, kao što smo to učinili u našem početak() gore navedena metoda:
EthBean eBean = novi EthBean (); Izvršitelji.newSingleThreadExecutor (). Submit (eBean :: start);
4.2. Rukovanje blockchainom pomoću slušatelja
Možemo također podrazvrstiti EthereumListenerAdapter za obradu blockchain događaja koje je otkrio naš klijent.
Da bismo postigli ovaj korak, trebamo napraviti našeg podrazvrstanog slušatelja:
javna klasa EthListener proširuje EthereumListenerAdapter {private void out (String t) {l.info (t); } // ... @Preuzmi javnu prazninu onBlock (Blokiraj blok, Popis priznanica) {if (syncDone) {out ("Neto brzina raspršivanja:" + calcNetHashRate (blok)); out ("Blokiraj poteškoću:" + block.getDifficfficBI (). toString ()); out ("Blokiraj transakcije:" + block.getTransactionsList (). toString ()); out ("Najbolji blok (zadnji blok):" + ethereum .getBlockchain () .getBestBlock (). toString ()); out ("Ukupna poteškoća:" + ethereum .getBlockchain () .getTotalDifficulty (). toString ()); }} @Override public void onSyncDone (stanje SyncState) {out ("onSyncDone" + state); if (! syncDone) {out ("** SINHRONIZIRANO **"); syncDone = true; }}}
The onBlock () metoda aktivira se na bilo kojem novom bloku (bilo starom ili trenutnom). EthereumJ predstavlja i obrađuje blokove pomoću org.ethereum.core.Block razred.
The onSyncDone () metoda aktivira se nakon završetka sinkronizacije, ažurirajući naše lokalne Ethereum podatke.
5. Rad s blockchainom
Sad kad se možemo povezati s mrežom Ethereum i izravno raditi s blockchainom, zaronit ćemo u nekoliko osnovnih, ali unatoč tome vrlo važnih operacija koje ćemo često koristiti.
5.1. Slanje transakcije
Sada, kada smo se povezali s blockchainom, možemo poslati transakciju. Podnošenje a Transakcija je relativno lako, ali stvara stvarnu Transakcija je podugačka tema za sebe:
ethereum.submitTransaction (nova transakcija (novi bajt []));
5.2. Pristupite Blockchain Objekt
The getBlockchain () metoda vraća a Blockchain fasadni objekt s getterima za dohvaćanje trenutnih poteškoća s mrežom i specifičnih Blokovi.
Otkad smo postavili svoj EthereumListener u odjeljku 4.3, blockchainu možemo pristupiti gore navedenom metodom:
ethereum.getBlockchain ();
5.3. Vraćanje adrese Ethereum računa
Također možemo vratiti Ethereum Adresa.
Da biste dobili Ethereum Račun - prvo moramo ovjeriti par javnih i privatnih ključeva na blockchainu.
Stvorimo novi ključ s novim parom slučajnih ključeva:
org.ethereum.crypto.ECKey ključ = novi ECKey ();
Ajmo stvoriti ključ od zadanog privatnog ključa:
org.ethereum.crypto.ECKey ključ = ECKey.fromPivate (privKey);
Tada možemo koristiti naš ključ za inicijalizaciju datoteke Račun. Pozivanjem .u tome() postavili smo oboje ECKey i pridruženi Adresa na Račun objekt:
org.ethereum.core.Account račun = novi račun (); account.init (ključ);
6. Ostale funkcionalnosti
Postoje još dvije glavne funkcionalnosti predviđene okvirom koje ovdje nećemo obrađivati, ali koje vrijedi spomenuti.
Prvo, imamo sposobnost kompajliranja i izvršavanja pametnih ugovora Solidity. Međutim, stvaranje ugovora u Solidityju, a zatim njihovo sastavljanje i izvršavanje samo je po sebi opsežna tema.
Drugo, iako okvir podržava ograničeno rudarenje pomoću CPU-a, korištenje GPU minera je preporučeni pristup s obzirom na nedostatak profitabilnosti prvog.
Naprednije teme o samom Ethereumu mogu se naći u službenim dokumentima.
7. Zaključak
U ovom smo brzom vodiču pokazali kako se povezati s mrežom Ethereum i nekoliko važnih metoda za rad s blockchainom.
Kao i uvijek kod korišten u ovom primjeru, možete ga pronaći na GitHubu.
Dno Java