Introduktion til EthereumJ

Java Top

Jeg har lige annonceret det nye Lær foråret kursus med fokus på det grundlæggende i Spring 5 og Spring Boot 2:

>> KONTROLLER KURSEN

1. Introduktion

I denne artikel ser vi på EthereumJ-biblioteket, der giver os mulighed for at interagere med Ethereum blockchain ved hjælp af Java.

Lad os først kort dykke ned i, hvad denne teknologi handler om.

2. Om Ethereum

Ethereum er en kryptokurrency udnytte en distribueret, peer-to-peer-database i form af en programmerbar blockchain, Ethereum Virtual Machine (EVM). Det er synkroniseret og betjenes gennem forskellige, men forbundet noder.

Fra 2017, Knuder synkronisere blockchain gennem konsensus, opret mønter gennem minedrift (bevis for arbejde), kontrollere transaktioner, udføre smarte kontrakter skrevet i Solidity, og køre EVM.

Det blockchain er opdelt i blokke som indeholder konto stater (herunder transaktioner mellem konti) og bevis for arbejde.

3. Den Ethereum Facade

Det org.ethereum.facade.Ethereum klasse abstracts og forener mange pakker af EthereumJ i en brugervenlig grænseflade.

Det er muligt at oprette forbindelse til en node for at synkronisere med det samlede netværk, og når vi først er forbundet, kan vi arbejde med blockchain.

Oprettelse af et facadeobjekt er lige så let som:

Ethereum ethereum = EthereumFactory.createEthereum ();

4. Oprettelse af forbindelse til Ethereum-netværket

For at oprette forbindelse til netværket skal vi først oprette forbindelse til en node, dvs. en server, der kører den officielle klient. Noder er repræsenteret af org.ethereum.net.rlpx.Node klasse.

Det org.ethereum.listener.EthereumListenerAdapter håndterer blockchain-hændelser, der er opdaget af vores klient, efter at forbindelsen til en node er etableret med succes.

4.1. Opretter forbindelse til Ethereum-netværket

Lad os oprette forbindelse til en node på netværket. Dette kan gøres manuelt:

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

Tilslutning til netværket kan også ske automatisk ved hjælp af en bønne:

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

Vi kan derefter indsprøjte vores EthBean ind i vores applikationskonfiguration. Derefter opretter den automatisk forbindelse til Ethereum-netværket og begynder at downloade blockchain.

Faktisk pakkes og abstraheres den mest forbindelsesbehandling bekvemt ud ved blot at tilføje en org.ethereum.listener.EthereumListenerAdapter eksempel til vores oprettede org.ethereum.facade.Ethereum eksempel, som vi gjorde i vores Start() metode ovenfor:

EthBean eBean = ny EthBean (); Executors.newSingleThreadExecutor (). Indsend (eBean :: start); 

4.2. Håndtering af Blockchain ved hjælp af en lytter

Vi kan også underklasse EthereumListenerAdapter til at håndtere blockchain-begivenheder, som vores klient har opdaget.

For at udføre dette trin bliver vi nødt til at gøre vores underklassificerede lytter:

offentlig klasse EthListener udvider EthereumListenerAdapter {privat ugyldig ud (String t) {l.info (t); } // ... @Override public void onBlock (Block block, List receipts) {if (syncDone) {out ("Net hash rate:" + calcNetHashRate (block)); ud ("Blokeringsproblem:" + block.getDifficultyBI (). toString ()); out ("Bloker transaktioner:" + block.getTransactionsList (). toString ()); out ("Bedste blok (sidste blok):" + ethereum .getBlockchain () .getBestBlock (). toString ()); ud ("Total vanskelighed:" + ethereum .getBlockchain () .getTotalDifficulty (). toString ()); }} @ Overstyr offentlig ugyldighed onSyncDone (SyncState-tilstand) {ud ("onSyncDone" + tilstand); hvis (! syncDone) {ud ("** SYNKRONERET FERDIG **"); syncDone = sandt; }}} 

Det onBlock () metode udløses på enhver modtaget ny blok (hvad enten den er gammel eller aktuel). EthereumJ repræsenterer og håndterer blokke ved hjælp af org.ethereum.core.Block klasse.

Det onSyncDone () metoden udløses, når synkroniseringen er afsluttet, hvilket opdaterer vores lokale Ethereum-data.

5. Arbejde med Blockchain

Nu hvor vi kan oprette forbindelse til Ethereum-netværket og arbejde direkte med blockchain, dykker vi ned i flere grundlæggende, men alligevel meget vigtige operationer, vi ofte bruger.

5.1. Indsendelse af en transaktion

Nu, da vi har oprettet forbindelse til blockchain, kan vi sende en transaktion. Indsendelse af en Transaktion er relativt let, men at skabe en faktisk Transaktion er et langt emne i sig selv:

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

5.2. Adgang til Blockchain Objekt

Det getBlockchain () metode returnerer a Blockchain facadeobjekt med getters til at hente aktuelle netværksproblemer og specifikt Blokke.

Siden vi oprettede vores EthereumListener i afsnit 4.3 kan vi få adgang til blockchain ved hjælp af ovenstående metode:

ethereum.getBlockchain (); 

5.3. Returnering af en Ethereum-kontoadresse

Vi kan også returnere et Ethereum Adresse.

At få et Ethereum Konto - vi skal først godkende et offentligt og privat nøglepar på blockchain.

Lad os oprette en ny nøgle med et nyt tilfældigt nøglepar:

org.ethereum.crypto.ECKey nøgle = ny ECKey (); 

Og lad os oprette en nøgle ud fra en given privat nøgle:

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

Vi kan derefter bruge vores nøgle til at initialisere en Konto. Ved at ringe .i det() vi sætter begge en ECKey og det tilknyttede Adresse på den Konto objekt:

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

6. Anden funktionalitet

Der er to andre vigtige funktioner, der er fastsat i rammen, som vi ikke vil dække her, men det er værd at nævne.

For det første har vi evnen til at kompilere og udføre Smart Solid-kontrakter. Imidlertid er oprettelse af kontrakter i soliditet og efterfølgende kompilering og udførelse af dem et omfattende emne i sig selv.

For det andet, selvom rammen understøtter begrænset minedrift ved hjælp af en CPU, er det en anbefalet tilgang at bruge en GPU-minearbejder i betragtning af den tidligere manglende rentabilitet.

Mere avancerede emner vedrørende selve Ethereum kan findes i de officielle dokumenter.

7. Konklusion

I denne hurtige vejledning viste vi, hvordan du opretter forbindelse til Ethereum-netværket og flere vigtige metoder til at arbejde med blockchain.

Som altid kan koden, der bruges i dette eksempel, findes på GitHub.

Java bund

Jeg har lige annonceret det nye Lær foråret kursus med fokus på det grundlæggende i Spring 5 og Spring Boot 2:

>> KONTROLLER KURSEN

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