MEMBUAT BLOCKCHAIN DENGAN JAVA Dan ECLIPSE
MEMBUAT BLOCKCHAIN DENGAN JAVA Dan ECLIPSE
BAGIAN 1.
Tujuan dari seri tutorial ini, adalah untuk membantu Anda membangun gambaran tentang
bagaimana seseorang dapat mengembangkan teknologi blockchain.
Mengagumi kemungkinan .
(Saya akan menganggap Anda memiliki pemahaman dasar tentang Pemrograman Berorientasi
Objek )
Perlu dicatat bahwa ini tidak akan berfungsi penuh, siap untuk rantai blok produksi. Alih-alih, ini
adalah bukti implementasi konsep untuk membantu Anda memahami apa itu blockchain untuk
tutorial di masa mendatang.
Secara opsional, Anda dapat mengambil perpustakaan GSON oleh google ( siapakah mereka
??? ). Ini akan memungkinkan kita untuk mengubah objek menjadi Json \ o /. Ini adalah pustaka
yang sangat berguna yang kami juga akan menggunakan lebih lanjut untuk hal-hal peer2peer,
tetapi jangan ragu untuk menggunakan metode alternatif.
Di Eclipse buat (file> baru>) proyek Java. Saya akan memanggil Proyek saya " noobchain " dan
membuat Kelas baru dengan nama yang sama ( NoobChain ).
Setiap blok tidak hanya berisi hash dari blok sebelumnya, tetapi hash sendiri sebagian,
dihitung dari hash sebelumnya . Jika data blok sebelumnya diubah maka hash blok sebelumnya
akan berubah (karena dihitung sebagian, oleh data) pada gilirannya mempengaruhi semua hash
dari blok di sana setelahnya. Menghitung dan membandingkan hash memungkinkan kita
untuk melihat apakah blockchain tidak valid.
Apa artinya ini ? ... Mengubah data apa pun dalam daftar ini, akan mengubah tanda tangan
dan memutus rantai .
Jadi Pertama, mari kita buat Blok kelas yang membentuk blockchain:
Seperti yang Anda lihat, Blok dasar kami berisi String hashtanda tangan digital
kami. Variabel previousHashuntuk menyimpan hash blok sebelumnya dan String datauntuk
menahan data blok kami.
Selanjutnya kita akan membutuhkan cara untuk menghasilkan sidik jari digital ,
ada banyak algoritma kriptografi yang dapat Anda pilih, namun SHA256 cocok untuk contoh
ini. Kita bisa import java.security.MessageDigest;mendapatkan akses ke algoritma SHA256.
Kita perlu menggunakan SHA256 nanti, jadi mari kita buat metode penolong yang berguna
di kelas 'utilitas' StringUtil baru :
Ini sebagian besar merupakan salinan karbon dari http://www.baeldung.com/sha-256-hashing-
java
Jangan terlalu khawatir jika Anda tidak memahami konten metode penolong ini , yang
perlu Anda ketahui adalah bahwa ia membutuhkan string dan menerapkan algoritma SHA256
untuknya, dan mengembalikan tanda tangan yang dihasilkan sebagai string.
Sekarang mari kita gunakan helper applySha256 kami , dalam metode baru di kelas Block ,
untuk menghitung hash. Kita harus menghitung hash dari semua bagian blok yang kita tidak ingin
dirusak. Jadi untuk blok kami, kami akan menyertakan ,, dan .previousHashdatatimeStamp
Di kelas NoobChain utama kami mari kita membuat beberapa blok dan mencetak hash ke layar
untuk melihat bahwa semuanya berjalan dengan baik.
Mari kita uji ini ...
Blok pertama disebut blok genesis, dan karena tidak ada blok sebelumnya kita hanya akan
memasukkan "0" sebagai hash sebelumnya.
Nilai Anda akan berbeda karena stempel waktu Anda akan berbeda.
Setiap blok sekarang memiliki tanda tangan digital sendiri berdasarkan informasi dan tanda
tangan dari blok sebelumnya.
Saat ini tidak banyak rantai blok , jadi mari kita simpan blok kita di ArrayList dan juga impor
gson untuk melihatnya sebagai Json. ( klik di sini untuk mengetahui cara mengimpor
perpustakaan gson )
Sekarang output kita akan terlihat lebih dekat dengan apa yang kita harapkan dari blockchain.
Sekarang kita perlu cara untuk memeriksa integritas blockchain kita.
Mari kita membuat metode Boolean isChainValid () di kelas NoobChain , yang akan mengulang
semua blok dalam rantai dan membandingkan hash. Metode ini perlu memeriksa variabel hash
sebenarnya sama dengan hash yang dihitung, dan hash blok sebelumnya sama
dengan variabel hash sebelumnya .
Setiap perubahan pada blok blockchain akan menyebabkan metode ini mengembalikan false.
Pada jaringan bitcoin, node membagikan blockchain mereka dan rantai valid terpanjang
diterima oleh jaringan. Apa yang menghentikan seseorang merusak data di blok lama lalu
membuat blockchain yang lebih lama dan menyajikannya ke jaringan? Bukti
kerja . Sistem hashcash proof of work berarti perlu waktu dan tenaga komputasi yang cukup
untuk membuat blok baru. Karenanya penyerang akan membutuhkan lebih banyak kekuatan
komputasi daripada gabungan rekan-rekan lainnya.
hashcash, wow.
Kami akan meminta para penambang untuk melakukan pembuktian-kerja dengan mencoba nilai
variabel yang berbeda di blok hingga hashnya dimulai dengan angka 0 tertentu.
Mari menambahkan int disebut Nonce untuk dimasukkan dalam kita calculateHash () metode,
dan sangat dibutuhkan mineBlock () metode:
Pada kenyataannya setiap penambang akan mulai iterasi dari titik acak. Beberapa penambang
bahkan dapat mencoba angka acak untuk nonce. Juga perlu dicatat bahwa pada kesulitan yang
lebih sulit, solusi mungkin memerlukan lebih dari integer.MAX_VALUE, penambang kemudian
dapat mencoba mengubah stempel waktu.
Metode mineBlock () mengambil int yang disebut kesulitan, ini adalah angka 0 yang harus
mereka pecahkan. Kesulitan yang rendah seperti 1 atau 2 dapat diselesaikan hampir secara instan
pada kebanyakan komputer, saya akan menyarankan sekitar 4-6 untuk pengujian. Pada saat
penulisan, kesulitan Litecoin adalah sekitar 442.592.
Kita harus memperbarui NoobChain kelas untuk memicu mineBlock () metode untuk setiap blok
baru. The isChainValid () Boolean juga harus memeriksa apakah setiap blok memiliki
dipecahkan (oleh pertambangan) hash.
Perhatikan kami juga memeriksa dan mencetak isChainValid .
Menjalankan ini, hasil Anda akan terlihat seperti:
Menambang setiap blok membutuhkan waktu! (sekitar 3 detik) Anda harus dipusingkan dengan
nilai kesulitan untuk melihat bagaimana itu mempengaruhi waktu yang dibutuhkan untuk
menambang setiap blok;)
Blokir jujur di jaringan Anda akan memiliki keuntungan waktu pada rantai
terpanjang.
Blockchain yang dirusak tidak akan dapat mengejar ketinggalan dengan rantai yang lebih
panjang & valid. *
* kecuali jika mereka memiliki kecepatan komputasi yang jauh lebih tinggi daripada gabungan
semua node di jaringan Anda. Komputer kuantum masa depan atau sesuatu.