Pengenalan EthereumJ

Java Teratas

Saya baru sahaja mengumumkan kursus Learn Spring yang baru , yang berfokus pada asas-asas Spring 5 dan Spring Boot 2:

>> SEMAK KURSUS

1. Pengenalan

Dalam artikel ini, kita melihat perpustakaan EthereumJ yang membolehkan kita berinteraksi dengan blockchain Ethereum, menggunakan Java.

Pertama, mari kita selami sebentar mengenai teknologi ini.

2. Mengenai Ethereum

Ethereum adalah cryptocurrency yang memanfaatkan, pangkalan data peer-to-peer yang diedarkan dalam bentuk blockchain yang dapat diprogramkan , Mesin Maya Ethereum (EVM). Ia disegerakkan dan dikendalikan melalui nod yang berbeza tetapi bersambung .

Sehingga 2017, Node menyegerakkan blockchain melalui kata sepakat, membuat duit syiling melalui perlombongan ( bukti kerja ), mengesahkan transaksi, melaksanakan kontrak pintar yang ditulis dalam Solidity, dan menjalankan EVM.

The blockchain dibahagikan kepada blok yang mengandungi negeri akaun (termasuk urus niaga di antara akaun ) dan bukti kerja .

3. Ethereum Facade

The org.ethereum.facade.Ethereum abstrak kelas dan menyatukan banyak pakej EthereumJ ke dalam satu mudah untuk menggunakan antara muka.

Ada kemungkinan untuk menyambung ke nod untuk diselaraskan dengan rangkaian keseluruhan dan, setelah disambungkan, kita dapat bekerja dengan blockchain.

Membuat objek fasad semudah:

Ethereum ethereum = EthereumFactory.createEthereum();

4. Menyambung ke Rangkaian Ethereum

Untuk menyambung ke rangkaian, pertama-tama kita mesti menyambung ke nod , iaitu pelayan yang menjalankan klien rasmi. Nod diwakili oleh kelas org.ethereum.net.rlpx.Node .

The org.ethereum.listener.EthereumListenerAdapter acara mengendalikan blockchain dikesan oleh pelanggan kami selepas sambungan kepada nod telah ditubuhkan dengan jayanya.

4.1. Menyambung ke Rangkaian Ethereum

Mari sambungkan ke nod di rangkaian. Ini boleh dilakukan secara manual:

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

Menyambung ke rangkaian juga dapat dilakukan secara automatik menggunakan kacang:

public class EthBean { private Ethereum ethereum; public void start() { ethereum = EthereumFactory.createEthereum(); ethereum.addListener(new EthListener(ethereum)); } public Block getBestBlock() { return ethereum.getBlockchain().getBestBlock(); } public BigInteger getTotalDifficulty() { return ethereum.getBlockchain().getTotalDifficulty(); } }

Kami kemudian dapat memasukkan EthBean ke dalam konfigurasi aplikasi kami. Kemudian secara automatik menyambung ke rangkaian Ethereum dan mula memuat turun blockchain.

Malah, pemprosesan pemberhentian yang adalah sesuai dibungkus dan disarikan dengan hanya menambah org.ethereum.listener.EthereumListenerAdapter contoh untuk kami dicipta org.ethereum.facade.Ethereum contoh, seperti yang kita lakukan dalam kita start () kaedah di atas:

EthBean eBean = new EthBean(); Executors.newSingleThreadExecutor().submit(eBean::start); 

4.2. Mengendalikan Blockchain Menggunakan Pendengar

Kami juga dapat subkelas EthereumListenerAdapter untuk menangani peristiwa blockchain yang dikesan oleh pelanggan kami.

Untuk mencapai langkah ini, kita perlu menjadikan pendengar subkelas kami:

public class EthListener extends EthereumListenerAdapter { private void out(String t) { l.info(t); } //... @Override public void onBlock(Block block, List receipts) { if (syncDone) { out("Net hash rate: " + calcNetHashRate(block)); out("Block difficulty: " + block.getDifficultyBI().toString()); out("Block transactions: " + block.getTransactionsList().toString()); out("Best block (last block): " + ethereum .getBlockchain() .getBestBlock().toString()); out("Total difficulty: " + ethereum .getBlockchain() .getTotalDifficulty().toString()); } } @Override public void onSyncDone(SyncState state) { out("onSyncDone " + state); if (!syncDone) { out(" ** SYNC DONE ** "); syncDone = true; } } } 

Kaedah onBlock () dipicu pada setiap blok baru yang diterima (sama ada lama atau semasa). EthereumJ mewakili dan menangani blok menggunakan kelas org.ethereum.core.Block .

Kaedah onSyncDone () diaktifkan setelah penyegerakan selesai, menjadikan data Ethereum tempatan kami terkini.

5. Bekerja dengan Blockchain

Sekarang kita dapat menyambung ke rangkaian Ethereum dan bekerja secara langsung dengan blockchain, kita akan menyelidiki beberapa operasi asas tetapi tetap sangat penting yang sering kita gunakan.

5.1. Mengemukakan Transaksi

Sekarang, setelah kita terhubung ke blockchain, kita dapat mengirimkan transaksi. Mengemukakan Transaksi agak mudah tetapi membuat Transaksi sebenarnya adalah topik yang panjang dengan sendirinya:

ethereum.submitTransaction(new Transaction(new byte[]));

5.2. Akses Objek Blockchain

Kaedah getBlockchain () mengembalikan objek fasad Blockchain dengan getter untuk mengambil kesukaran rangkaian semasa dan Blok tertentu .

Oleh kerana kami menyediakan EthereumListener kami di bahagian 4.3, kami dapat mengakses blockchain menggunakan kaedah di atas:

ethereum.getBlockchain(); 

5.3. Mengembalikan Alamat Akaun Ethereum

Kami juga boleh mengembalikan Alamat Ethereum .

Untuk mendapatkan Akaun Ethereum - pertama-tama kita perlu mengesahkan pasangan kunci awam dan peribadi di blockchain.

Mari buat kunci baru dengan pasangan kunci rawak baru:

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

Dan mari buat kunci dari kunci peribadi yang diberikan:

org.ethereum.crypto.ECKey key = ECKey.fromPivate(privKey);

Kami kemudian boleh menggunakan kunci kami untuk memulakan Akaun . Dengan memanggil .init () kami menetapkan ECKey dan Alamat yang berkaitan pada objek Akaun :

org.ethereum.core.Account account = new Account(); account.init(key);

6. Fungsi Lain

Terdapat dua fungsi utama lain yang disediakan oleh rangka kerja yang tidak akan kita bahas di sini tetapi yang perlu disebutkan.

Pertama, kita mempunyai kemampuan untuk menyusun dan melaksanakan kontrak pintar Soliditi. Walau bagaimanapun, membuat kontrak dalam Solidity, dan kemudian menyusun dan melaksanakannya adalah topik yang luas dengan sendirinya.

Kedua, walaupun kerangka kerja mendukung penambangan terhad menggunakan CPU, penggunaan penambang GPU adalah pendekatan yang disarankan memandangkan kurangnya keuntungan yang pertama.

Topik yang lebih maju mengenai Ethereum itu sendiri boleh didapati di dokumen rasmi.

7. Kesimpulannya

Dalam tutorial ringkas ini, kami menunjukkan cara menyambung ke rangkaian Ethereum dan beberapa kaedah penting untuk bekerja dengan blockchain.

Seperti biasa kod yang digunakan dalam contoh ini boleh didapati di GitHub.

Bahagian bawah Java

Saya baru sahaja mengumumkan kursus Learn Spring yang baru , yang berfokus pada asas-asas Spring 5 dan Spring Boot 2:

>> SEMAK KURSUS