Ľahký klienti Etherea využívajúci Web3j

Java Top

Práve som oznámil nové Naučte sa jar kurz zameraný na základy jari 5 a Spring Boot 2:

>> SKONTROLUJTE KURZ

1. Úvod

Tento výukový program predstavuje Web3j, implementáciu populárnej abstrakčnej knižnice Web3 v prostredí Java.

Web3j sa používa na interakciu so sieťou Ethereum pripojením k uzlom Etherea pomocou JSON-RPC alebo známe štandardy ako HTTP, WebSockets, IPC.

Ethereum je celá téma sama o sebe, takže sa najskôr poďme rýchlo pozrieť na to, čo to je!

2. Ethereum

Ethereum je (1) kryptomena (symbol tokenu ETH), (2) distribuovaný superpočítač, (3) blockchain a (4) sieť inteligentných kontraktov napísaná v Pevnosť.

Inými slovami, Ethereum ( sieť) je prevádzkovaný množstvom pripojených serverov s názvom uzly ktoré komunikujú akousi sieťovou topológiou (technicky to nie je úplne pravda, ale dosť blízko na to, aby lepšie pochopili, ako to celé funguje).

Web3ja jej nadradenej knižnice Web3, umožňuje webové aplikácie pripojiť sa k jednému z nich uzly a tým odovzdať Ethereum transakcie, ktoré sú pre všetky účely a účely zostavené Solidity smart kontraktfunkcie ktoré boli predtým nasadené do éteru sieť. Viac informácií o inteligentných zmluvách nájdete v našom článku o ich vytváraní a nasadení pomocou Solidity tu.

Každý uzol vysiela svoje zmeny navzájom uzol aby bolo možné dosiahnuť konsenzus a overenie. Teda každý uzol obsahuje celú históriu Ethereum blockchain súčasne čím sa vytvorí nadbytočná záloha všetkých údajov spôsobom chráneným proti neoprávnenej manipulácii a prostredníctvom konsenzu a overenia všetkými ostatnými. uzol v sieť.\

Podrobnejšie informácie o ethereu nájdete na oficiálnej stránke.

3. Nastaviť

Aby sme mohli využívať celú sadu funkcií poskytovaných Web3j, musíme urobiť niečo viac pre to, aby sme nastavenie nastavili ako obvykle. Po prvé, Web3j sa dodáva v niekoľkých samostatne stojacich moduloch, z ktorých každý je možné voliteľne pridať k jadru pom.xml závislosť:

 org.web3j jadro 3.3.1 

Vezmite prosím na vedomie, že tím vo Web3j poskytuje vopred pripravený Spring Boot Starter so zabudovanou konfiguráciou a obmedzenou funkčnosťou!

V tomto článku obmedzíme naše zameranie na základné funkcie (vrátane toho, ako pridať Web3j do aplikácie Spring MVC, aby sa získala kompatibilita so širším rozsahom webových webov Spring).

Celý zoznam týchto modulov nájdete na serveri Maven Central.

3.1. Zostavovanie zmlúv: hľuzovka alebo solc

Existujú dva hlavné spôsoby kompilácie a nasadenia inteligentných kontraktov Ethereum (.solc súbory):

  1. Oficiálny kompilátor Solidity.
  2. Hľuzovka (abstrakčná sada na testovanie, nasadenie a správu inteligentných zmlúv).

V tomto článku sa budeme držať hľuzovky. Hľuzovka zjednodušuje a abstrahuje proces zostavovania inteligentných zmlúv, migruje ich a umiestňuje ich do siete. To tiež zabalí Solc prekladač nám umožňuje získať nejaké skúsenosti s oboma.

Postup nastavenia hľuzovky:

$ npm inštalácia hľuzovky - g $ verzia hľuzovky

Štyri kľúčové príkazy, ktoré použijeme na inicializáciu nášho projektu, zostavenie našej aplikácie, nasadenie našej aplikácie do Blockchainu a jeho otestovanie:

$ truffle init $ truffle compile $ truffle migrate $ truffle test

Poďme si teraz predstaviť jednoduchý príklad:

pragmatická pevnosť ^ 0,4,17; contract contract {function Example () {// constructor}} 

Čo by pri kompilácii malo priniesť nasledujúci ABI JSON:

{"contractName": "Example", "abi": [{"input": [], "payable": false, "stateMutability": "nonpayable", "type": "constructor"}], "bytecode": "0x60606040523415600e57600080fd5b603580601b6 ...," deployedBytecode ":" 0x6060604052600080fd00a165627a7a72305 ..., // ...}

Potom môžeme pomocou dodávaného bajtkódu a ABI v rámci našej aplikácie komunikovať s nasadenými zmluvami!

3.2. Testovanie zmlúv: Ganache

Jedným z najjednoduchších spôsobov práce s ethernetovým testnetom je spustenie vlastného servera Ganache. Použijeme vopred pripravené riešenie pripravené na použitie, pretože jeho nastavenie a konfigurácia je najjednoduchšia. Poskytuje tiež rozhranie a shell servera pre Ganache CLI, ktorý poháňa Ganache pod kapotou.

Môžeme sa pripojiť k nášmu serveru Ganache na predvolenej dodanej adrese URL: // localhost: 8545 alebo // localhost: 7545.

Existuje niekoľko ďalších populárnych prístupov k nastaveniu testovacej siete, vrátane použitia Meta-Mask, Infura alebo Go-Lang and Geth.

V tomto článku sa budeme držať Ganache, pretože nastavenie vlastnej inštancie GoLang (a jej konfigurácia ako vlastnej testnet) môže byť dosť zložité a keďže stav Meta-Mask v prehliadači Chrome je v súčasnosti neistý.

Môžeme použiť Ganache na scenáre manuálneho testovania (pri ladení alebo dokončení našich testov integrácie) alebo ich môžeme použiť na scenáre automatizovaného testovania (ktoré musíme zostaviť, aby sme ich vytvorili, pretože za takýchto okolností nemusíme mať k dispozícii koncové body).

4. Web3 a RPC

Web3 poskytuje fasádu a rozhranie pre ľahkú interakciu s blokmi reťazca Ethereum a serverovými uzlami Ethereum. Inými slovami, Web3 uľahčuje komunikáciu medzi klientmi a ethereovým blockchainom prostredníctvom JSON-RPC. Web3J je oficiálny port Java pre Web3.

Web3j môžeme inicializovať na použitie v našej aplikácii odovzdaním poskytovateľa (napr. Koncový bod uzla tretej strany alebo miestny uzol Ethereum):

Web3j web3a = Web3j.build (nový HttpService ()); Web3j web3b = Web3j.build (nový HttpService ("YOUR_PROVIDER_HERE")); Web3j myEtherWallet = Web3j.build (nový HttpService ("// api.myetherapi.com/eth"));

Tretia možnosť ukazuje, ako pridať externého poskytovateľa (čím sa spojí s ich uzlom Ethereum). Máme ale tiež možnosť nechať možnosť nášho poskytovateľa prázdnu. V takom prípade sa použije predvolený port (8545) dňa localhost namiesto toho.

5. Základné metódy Web3

Teraz, keď vieme, ako inicializovať našu aplikáciu na komunikáciu s ethereum blockchainom, pozrime sa na niekoľko základných spôsobov interakcie s ethereum blockchainom.

Je dobrou politikou zabaliť vaše metódy Web3 do a CompleteableFuture na spracovanie asynchrónneho charakteru požiadaviek JSON-RPC vykonaných vo vašom nakonfigurovanom uzle Ethereum.

5.1. Číslo aktuálneho bloku

Môžeme napríklad vráti číslo aktuálneho bloku:

verejné EthBlockNumber getBlockNumber () {výsledok EthBlockNumber = nové EthBlockNumber (); výsledok = this.web3j.ethBlockNumber () .sendAsync () .get (); návratový výsledok; }

5.2. Účet

Ak chcete získať účet zadanej adresy:

verejné EthAccounts getEthAccounts () {výsledok EthAccounts = nové EthAccounts (); výsledok = this.web3j.ethAccounts () .sendAsync () .get (); návratový výsledok; }

5.3. Počet transakcií na účte

Ak chcete získať počet transakcií na danej adrese:

public EthGetTransactionCount getTransactionCount () {EthGetTransactionCount result = new EthGetTransactionCount (); result = this.web3j.ethGetTransactionCount (DEFAULT_ADDRESS, DefaultBlockParameter.valueOf ("najnovšie")) .sendAsync () .get (); návratový výsledok; }

5.4. Zostatok na účte

A nakoniec, získať aktuálny zostatok adresy alebo peňaženky:

verejný EthGetBalance getEthBalance () {výsledok EthGetBalance = nový EthGetBalance (); this.web3j.ethGetBalance (DEFAULT_ADDRESS, DefaultBlockParameter.valueOf ("najnovšie")) .sendAsync () .get (); návratový výsledok; }

6. Práca so zmluvami vo Web3j

Keď sme zostavili našu zmluvu Solidity pomocou Truffle, môžeme s ňou pracovať Aplikačné binárne rozhrania (ABI) pomocou samostatného nástroja príkazového riadku Web3j, ktorý je k dispozícii tu, alebo ako samostatný zip tu.

6.1. CLI Magic

Potom môžeme automaticky vygenerovať naše Java Smart Contract Wrappers (v podstate POJO vystavujúce smart contract ABI) pomocou nasledujúceho príkazu:

$ web3j hľuzovka generovať [--javaTypes | --solidityTypes] /path/to/.json -o / path / to / src / main / java -p com.your.organisation.name

Spustenie nasledujúceho príkazu v koreňovom adresári projektu:

web3j hľuzovka generovanie dev_truffle / build / contract / Example.json -o src / main / java / com / baeldung / web3 / contract -p com.baeldung

vygeneroval náš Príklad trieda:

verejná trieda Príklad rozširuje zmluvu {private static final String BINARY = "0x60606040523415600e576 ..."; // ...}

6.2. Java POJO

Teraz, keď máme inteligentný obaľovač zmlúv, môžeme programovo vytvoriť peňaženku a potom nasadiť našu zmluvu na túto adresu:

WalletUtils.generateNewWalletFile ("PASSWORD", nový súbor ("/ cesta / k / cieľu"), pravda);
Credentials credentials = WalletUtils.loadCredentials ("HESLO", "/ cesta / do / walletfile");

6.3. Uzavrieť zmluvu

Môžeme nasadiť našu zmluvu takto:

Vzorová zmluva = Example.deploy (this.web3j, poverenia, ManagedTransaction.GAS_PRICE, Contract.GAS_LIMIT) .send (); 

A potom získajte adresu:

contractAddress = contract.getContractAddress ();

6.4. Odosielanie transakcií

Ak chcete poslať a Transakcia pomocou Funkcie nášho Zmluva môžeme inicializovať Web3j Funkcia s Zoznam vstupných hodnôt a a Zoznam výstupných parametrov:

Zoznam inputParams = nový ArrayList (); Zoznam outputParams = nový ArrayList (); Function function = new Function ("fuctionName", inputParams, outputParams); Reťazec encodedFunction = FunctionEncoder.encode (funkcia); 

Potom môžeme inicializovať našu Transakcia s nevyhnutnými plyn (slúži na vykonanie Transakcia) a nonce parametre:

BigInteger nonce = BigInteger.valueOf (100); BigInteger gasprice = BigInteger.valueOf (100); BigInteger gaslimit = BigInteger.valueOf (100); Transakčná transakcia = Transaction .createFunctionCallTransaction ("FROM_ADDRESS", nonce, gasprice, gaslimit, "TO_ADDRESS", encodedFunction); EthSendTransaction transactionResponse = web3j.ethSendTransaction (transakcia) .sendAsync (). Get (); transactionHash = transactionResponse.getTransactionHash (); 

Celý zoznam funkcií inteligentných zmlúv nájdete v oficiálnych dokumentoch.

7. Záver

To je všetko! Nastavili sme aplikáciu Java Spring MVC s Web3j - je čas na blockchain!

Príklady kódov použitých v tomto článku sú ako vždy k dispozícii na GitHub.

Java dole

Práve som oznámil nové Naučte sa jar kurz zameraný na základy jari 5 a Spring Boot 2:

>> SKONTROLUJTE KURZ

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