Anda di halaman 1dari 8

MEMBUAT BLOCKCHAIN PERTAMA ANDA DENGAN JAVA.

BAGIAN 1.

Tujuan dari seri tutorial ini, adalah untuk membantu Anda membangun gambaran tentang
bagaimana seseorang dapat mengembangkan teknologi blockchain.

Dalam tutorial ini kita akan:

 Buat 'blockchain' pertama (sangat) dasar Anda .

 Menerapkan sistem bukti kerja (penambangan) sederhana.

 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.

Anda dapat mendukung tutorial ini dan yang akan datang :)


btc: 17svYzRv4XJ1Sfi1TSThp3NBFnh7Xsi6fu
Pengaturan.
Kami akan menggunakan Java tetapi Anda harus bisa mengikuti dalam bahasa OOP apa
pun . Saya akan menggunakan Eclipse tetapi Anda dapat menggunakan editor teks mewah baru
(meskipun Anda akan kehilangan banyak mengasapi yang baik).

Anda akan perlu:

 Java dan JDK diinstal. (duh).

 Eclipse (atau IDE / Text Editor lainnya).

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 ).

Sekarang kamu baik-baik saja :)


Membuat Blockchain.
Blockchain hanyalah rantai / daftar blok. Setiap blok dalam blockchain akan memiliki sidik jari
digital sendiri, berisi sidik jari digital dari blok sebelumnya, dan memiliki beberapa data
(misalnya data ini dapat berupa transaksi).

Saya harap Nakamoto tidak pernah melihat ini.

Hash = Digital Fingerprint.

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

dan mari tambahkan metode ini ke konstruktor Blok ...

Waktu untuk beberapa pengujian ...

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.

Outputnya akan terlihat mirip dengan ini:

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.

Mari mulai menambang blok !!!

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.

Mari kita tambahkan kesulitan sebagai variabel statis ke kelas NoobChain:


kesulitan int public static = 5;

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

Jika seseorang merusak � dengan data di sistem blockchain Anda:

 Blockchain mereka tidak valid.

 Mereka tidak akan dapat membuat blockchain yang lebih lama.

 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.

Anda semua selesai dengan blockchain dasar Anda!

Tepuk-tepuk dirimu sendiri.


Blockchain Anda: > Terdiri
dari blok yang menyimpan data.
> Memiliki tanda tangan digital yang menyatukan blok Anda.
> Membutuhkan bukti penambangan kerja untuk memvalidasi blok baru.
> Dapat dicek untuk melihat apakah data di dalamnya valid dan tidak berubah.

Anda dapat mengunduh file proyek ini di Github .

Anda mungkin juga menyukai