Introduksjon til EthereumJ

Java Top

Jeg kunngjorde nettopp det nye Lær våren kurs, med fokus på det grunnleggende i vår 5 og vårstøvel 2:

>> KONTROLLER KURSET

1. Introduksjon

I denne artikkelen ser vi på EthereumJ-biblioteket som lar oss samhandle med Ethereum blockchain ved hjelp av Java.

Først, la oss bare dykke inn i hva denne teknologien handler om.

2. Om Ethereum

Ethereum er en kryptovaluta utnytte en distribuert, peer-to-peer-database i form av en programmerbar blockchain, Ethereum Virtual Machine (EVM). Den er synkronisert og drives via forskjellige, men koblede noder.

Fra og med 2017, Noder synkronisere blockchain gjennom konsensus, skape mynter gjennom gruvedrift (bevis på arbeid), verifisere transaksjoner, utføre smarte kontrakter skrevet i Solidity, og kjøre EVM.

De blockchain er delt inn i blokker som inneholder konto står (inkludert transaksjoner mellom kontoer) og bevis på arbeid.

3. Den Ethereum Fasade

De org.ethereum.facade.Ethereum klasse abstrakterer og forener mange pakker med EthereumJ i ett brukervennlig grensesnitt.

Det er mulig å koble til en node for å synkronisere med det samlede nettverket, og når vi er koblet til, kan vi jobbe med blockchain.

Å lage et fasadeobjekt er like enkelt som:

Ethereum ethereum = EthereumFactory.createEthereum ();

4. Koble til Ethereum Network

For å koble til nettverket, må vi først koble til en node, dvs. en server som kjører den offisielle klienten. Noder er representert av org.ethereum.net.rlpx.Node klasse.

De org.ethereum.listener.EthereumListenerAdapter håndterer blockchain-hendelser oppdaget av vår klient etter at tilkoblingen til en node er etablert.

4.1. Koble til Ethereum Network

La oss koble til en node i nettverket. Dette kan gjøres manuelt:

String ip = "// localhost"; int port = 8345; Streng nodeId = "a4de274d3a159e10c2c9a68c326511236381b84c9ec ..."; ethereum.connect (ip, port, nodeId);

Koble til nettverket kan også gjøres automatisk ved hjelp av en bønne:

offentlig klasse EthBean {privat Ethereum ethereum; offentlig ugyldig start () {ethereum = EthereumFactory.createEthereum (); ethereum.addListener (ny EthListener (ethereum)); } offentlig Blokkere getBestBlock () {return ethereum.getBlockchain (). getBestBlock (); } offentlig BigInteger getTotalDifficulty () {return ethereum.getBlockchain (). getTotalDifficulty (); }}

Vi kan deretter injisere EthBean inn i vår applikasjonskonfigurasjon. Deretter kobles den automatisk til Ethereum-nettverket og begynner å laste ned blockchain.

Faktisk blir den mest tilkoblede behandlingen enkelt pakket inn og abstrahert ved å bare legge til en org.ethereum.listener.EthereumListenerAdapter eksempel til vår opprettet org.ethereum.facade.Ethereum som vi gjorde i vår start() metoden ovenfor:

EthBean eBean = nye EthBean (); Executors.newSingleThreadExecutor (). Send inn (eBean :: start); 

4.2. Håndtering av Blockchain ved hjelp av en lytter

Vi kan også underklasse EthereumListenerAdapter for å håndtere blockchain-hendelser oppdaget av vår klient.

For å oppnå dette trinnet, må vi lage vår underklassede lytter:

offentlig klasse EthListener utvider EthereumListenerAdapter {privat ugyldig ut (String t) {l.info (t); } // ... @ Overstyr offentlig ugyldighet onBlock (Blokkér blokk, liste kvitteringer) {if (syncDone) {out ("Net hash rate:" + calcNetHashRate (block)); ut ("Blokker vanskeligheter:" + block.getDifficultyBI (). toString ()); ut ("Blokker transaksjoner:" + block.getTransactionsList (). toString ()); ut ("Beste blokk (siste blokk):" + ethereum .getBlockchain () .getBestBlock (). toString ()); ut ("Total vanskelighetsgrad:" + ethereum .getBlockchain () .getTotalDifficulty (). toString ()); }} @Override public void onSyncDone (SyncState state) {out ("onSyncDone" + state); hvis (! syncDone) {ut ("** SYNKRANSER FERDIG **"); syncDone = sant; }}} 

De onBlock () metoden utløses på en hvilken som helst ny mottatt blokk (enten gammel eller nåværende). EthereumJ representerer og håndterer blokker ved hjelp av org.ethereum.core.Block klasse.

De onSyncDone () metoden utløses når synkroniseringen er fullført, og holder våre lokale Ethereum-data oppdatert.

5. Arbeide med Blockchain

Nå som vi kan koble til Ethereum-nettverket og jobbe direkte med blockchain, vil vi dykke inn i flere grunnleggende, men likevel veldig viktige operasjoner vi ofte bruker.

5.1. Sende inn en transaksjon

Nå som vi har koblet til blockchain, kan vi sende en transaksjon. Sende inn en Transaksjon er relativt enkelt, men å skape en faktisk Transaksjon er et langt tema for seg selv:

ethereum.submitTransaction (ny transaksjon (ny byte []));

5.2. Få tilgang til Blockchain Gjenstand

De getBlockchain () metoden returnerer a Blockchain fasadeobjekt med getters for å hente nåværende nettverksproblemer og spesifikk Blokker.

Siden vi satte opp vår EthereumListener i avsnitt 4.3 kan vi få tilgang til blockchain ved hjelp av metoden ovenfor:

ethereum.getBlockchain (); 

5.3. Returnerer en Ethereum-kontoadresse

Vi kan også returnere et Ethereum Adresse.

Å få et Ethereum Regnskap - Vi må først autentisere et offentlig og privat nøkkelpar på blockchain.

La oss lage en ny nøkkel med et nytt tilfeldig nøkkelpar:

org.ethereum.crypto.ECKey key = new ECKey (); 

Og la oss lage en nøkkel fra en gitt privat nøkkel:

org.ethereum.crypto.ECKey-nøkkel = ECKey.fromPivate (privKey);

Vi kan deretter bruke nøkkelen vår til å initialisere en Regnskap. Ved å ringe .i det() vi setter begge en ECKey og tilhørende AdresseRegnskap gjenstand:

org.ethereum.core.Account-konto = ny konto (); account.init (nøkkel);

6. Annen funksjonalitet

Det er to andre viktige funksjoner gitt av rammeverket som vi ikke vil dekke her, men det er verdt å nevne.

For det første har vi muligheten til å kompilere og utføre solide smarte kontrakter. Å skape kontrakter i Solidity, og deretter kompilere og utføre dem, er imidlertid et omfattende tema i seg selv.

For det andre, selv om rammeverket støtter begrenset gruvedrift ved hjelp av en CPU, er bruk av en GPU-gruver den anbefalte tilnærmingen gitt den manglende lønnsomheten til den tidligere.

Mer avanserte emner angående Ethereum i seg selv finner du i de offisielle dokumentene.

7. Konklusjon

I denne raske opplæringen viste vi hvordan du kobler til Ethereum-nettverket og flere viktige metoder for å jobbe med blockchain.

Som alltid kan koden som brukes i dette eksemplet finnes på GitHub.

Java bunn

Jeg kunngjorde nettopp det nye Lær våren kurs, med fokus på det grunnleggende i vår 5 og vårstøvel 2:

>> KONTROLLER KURSET

$config[zx-auto] not found$config[zx-overlay] not found