Pengantar EthereumJ

Java Top

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

>> LIHAT KURSUSnya

1. Perkenalan

Pada artikel ini, kita melihat pustaka EthereumJ yang memungkinkan kita berinteraksi dengan blockchain Ethereum, menggunakan Java.

Pertama, mari kita selami secara singkat tentang apa teknologi ini.

2. Tentang Ethereum

Ethereum adalah mata uang kripto yang memanfaatkan database terdistribusi, peer-to-peer dalam bentuk blockchain yang dapat diprogram , Mesin Virtual Ethereum (EVM). Ini disinkronkan dan dioperasikan melalui node yang berbeda tetapi terhubung .

Pada 2017, Nodes menyinkronkan blockchain melalui konsensus, membuat koin melalui penambangan ( bukti kerja ), memverifikasi transaksi, melaksanakan kontrak pintar yang ditulis dalam Solidity, dan menjalankan EVM.

The blockchain dibagi menjadi blok yang mengandung negara akun (termasuk transaksi antara account ) dan bukti kerja .

3. Fasad Ethereum

Kelas org.ethereum.facade.Ethereum mengabstraksi dan menyatukan banyak paket EthereumJ menjadi satu antarmuka yang mudah digunakan.

Dimungkinkan untuk terhubung ke node untuk disinkronkan dengan keseluruhan jaringan dan, setelah terhubung, kita dapat bekerja dengan blockchain.

Membuat objek fasad semudah:

Ethereum ethereum = EthereumFactory.createEthereum();

4. Menghubungkan ke Jaringan Ethereum

Untuk terhubung ke jaringan, pertama kita harus terhubung ke node , yaitu server yang menjalankan klien resmi. Node diwakili oleh kelas org.ethereum.net.rlpx.Node .

The org.ethereum.listener.EthereumListenerAdapter peristiwa menangani blockchain terdeteksi oleh klien kami setelah koneksi ke node telah dibentuk berhasil.

4.1. Menghubungkan ke Jaringan Ethereum

Mari hubungkan ke node di jaringan. Ini dapat dilakukan secara manual:

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

Menghubungkan ke jaringan juga dapat dilakukan secara otomatis 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 kami ke dalam konfigurasi aplikasi kami. Kemudian secara otomatis terhubung ke jaringan Ethereum dan mulai mengunduh blockchain.

Bahkan, pengolahan paling koneksi nyaman dibungkus dan disarikan hanya dengan menambahkan org.ethereum.listener.EthereumListenerAdapter misalnya untuk kami dibuat org.ethereum.facade.Ethereum Misalnya, seperti yang kita lakukan di kami start () metode di atas:

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

4.2. Menangani Blockchain Menggunakan Pendengar

Kami juga dapat membuat subkelas EthereumListenerAdapter untuk menangani peristiwa blockchain yang terdeteksi oleh klien kami.

Untuk menyelesaikan langkah ini, kita perlu membuat listener subclass kita:

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; } } } 

Metode onBlock () dipicu pada setiap blok baru yang diterima (baik lama atau saat ini). EthereumJ mewakili dan menangani blok menggunakan kelas org.ethereum.core.Block .

Metode onSyncDone () diaktifkan setelah sinkronisasi selesai, menjadikan data Ethereum lokal kami mutakhir.

5. Bekerja Dengan Blockchain

Sekarang kita dapat terhubung ke jaringan Ethereum dan bekerja langsung dengan blockchain, kita akan menyelami beberapa operasi dasar namun sangat penting yang sering kita gunakan.

5.1. Mengirimkan Transaksi

Sekarang, setelah kami terhubung ke blockchain, kami dapat mengirimkan transaksi. Mengirimkan Transaksi relatif mudah tetapi membuat Transaksi sebenarnya adalah topik yang panjang dengan sendirinya:

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

5.2. Access the Blockchain Object

The getBlockchain () method returns a Blockchain facade object with getters for fetching current network difficulties and specific Blocks.

Since we set up our EthereumListener in section 4.3, we can access the blockchain using the above method:

ethereum.getBlockchain(); 

5.3. Returning an Ethereum Account Address

We can also return an Ethereum Address.

To get an Ethereum Account – we first need to authenticate a public and private key pair on the blockchain.

Let's create a fresh key with a new random key pair:

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

And let's create a key from a given private key:

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

We can then use our key to initialize an Account. By calling .init() we set both an ECKey and the associated Address on the Account object:

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

6. Other Functionality

There are two other major functionalities provided for by the framework that we won't cover here but that are worth mentioning.

First, we have the ability to compile and execute Solidity smart contracts. However, creating contracts in Solidity, and subsequently compiling and executing them is an extensive topic in its own right.

Second, although the framework supports limited mining using a CPU, using a GPU miner is the recommended approach given the lack of profitability of the former.

More advanced topics regarding Ethereum itself can be found in the official docs.

7. Kesimpulan

Dalam tutorial singkat ini, kami menunjukkan cara terhubung ke jaringan Ethereum dan beberapa metode penting untuk bekerja dengan blockchain.

Seperti biasa, kode yang digunakan dalam contoh ini dapat ditemukan di GitHub.

Jawa bawah

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

>> LIHAT KURSUSnya