Uvod u EthereumJ

Java Top

Upravo sam najavio novo Uči proljeće tečaj, usredotočen na osnove Spring 5 i Spring Boot 2:

>> PROVJERITE TEČAJ

1. 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

Upravo sam najavio novo Uči proljeće tečaj, usredotočen na osnove Spring 5 i Spring Boot 2:

>> PROVJERITE TEČAJ