Jika kita melihat tren beberapa tahun sebelumnya, kita telah mendengar tentang blockchain sepanjang waktu, tetapi tidak banyak tentang spesifiknya.
Kita semua sadar bahwa cryptocurrency seperti Bitcoin, Ethereum, Dogecoin, Matic, dan lainnya bergantung pada teknologi blockchain. Blockchain memimpin peristiwa penting yang merevolusi banyak industri pada tahun 2021 dan membuka jalan bagi pencapaian baru.
Blockchain adalah sarana penyimpanan data dengan cara yang sulit atau tidak mungkin untuk diedit, diretas, atau ditipu. Ini adalah buku besar transaksi digital yang diduplikasi dan tersebar di seluruh jaringan sistem komputer blockchain.
Ini adalah teknologi basis data terobosan yang menggerakkan hampir semua mata uang kripto. Blockchain membuatnya sangat sulit untuk meretas atau menipu sistem dengan menyebarkan salinan identik dari database di seluruh jaringan.
Sementara Bitcoin sekarang menjadi penggunaan yang paling menonjol untuk blockchain, teknologi ini dapat melayani berbagai aplikasi yang sangat luas.
Cryptocurrency dan blockchain semakin populer dalam beberapa tahun terakhir, dan tren ini diperkirakan akan terus berlanjut.
Kami akan membuat blockchain sederhana dengan JavaScript dalam tutorial ini. Ini akan memberi Anda pemahaman dasar tentang cara kerja blockchain.
Sebut saja MelodyCoin dan langsung beraksi!
Membuat Blok
Untuk memulai, kita akan membuat file JavaScript baru di mana kita akan menempatkan semua kode kita.
Sebut saja main.js dan mulai dengan deskripsi tentang bagaimana seharusnya tampilan blockchain dan blok.
Buat kelas Block dan berikan fungsi Object() { [native code] } untuk memulai.
Anda harus memberikan tanggal, dan hash dari blok sebelumnya saat membuat blok baru:
Berikut adalah definisi untuk masing-masing properti:
- Stempel waktu menunjukkan kapan blok dibuat. Anda dapat menggunakan format apa pun yang Anda pilih (dalam hal ini, stempel waktu UNIX).
- Segala bentuk data yang ingin Anda hubungkan ke blok ini dapat dimasukkan dalam parameter data. Jika Anda ingin membuat cryptocurrency, Anda dapat menyimpan data transaksi seperti pengirim/penerima dan jumlah uang yang dipindahkan di sini.
- PreviousHash adalah string yang menyimpan hash blok sebelumnya. Inilah yang akan menghasilkan rantai blok, yang akan sangat penting dalam memberikan integritas blockchain kita nanti.
Membuat Hash
Setiap blok terhubung ke blok sebelumnya (dengan demikian properti PreviousHash). Artinya, setiap blok membutuhkan hash. Sebuah hash mirip dengan sidik jari. Ini berbeda untuk setiap blok.
Hash sebuah blok dapat dihitung dengan melewatkan semua isinya melalui fungsi hash.
Jadi, mari kita mulai dengan mengimplementasikan fungsi yang menghitung hash dari blok saat ini.
Jadi, di bawah kelas Block, kita mendefinisikan fungsi calcHash:
Namun, hash SHA256 tidak didukung oleh JavaScript dan harus diperoleh dari perpustakaan eksternal.
Crypto-js adalah paket fantastis yang mencakup implementasi aman dari beberapa algoritma hash.
Kemudian kita dapat mengimpornya ke dalam kode main.js kita.
Sekarang kita memiliki fungsi calcHash() kita, mari kita gunakan dalam fungsi Block kita:
Setelah menjelaskan seperti apa sebuah Blok, kita dapat menentukan seperti apa seharusnya Blockchain itu. Jadi mari kita buat kelas baru.
Dalam skenario ini, blockchain adalah objek yang sangat sederhana yang memiliki rantai properti. Ini adalah larik yang menahan semua blok pada rantai.
Sebelum kita dapat menambahkan blok, pertama-tama kita harus membuat apa yang dikenal sebagai "blok genesis." Ini adalah blok pertama dalam rantai, dan unik karena tidak dapat menunjuk ke blok sebelumnya (ini adalah yang pertama!).
Jadi, untuk membangun blok genesis, saya akan menambahkan fungsi ke kelas kita yang bernama createGenesisBlock (). Kembali ke fungsi Object() { [native code] } dari kelas Blockchain kami.
Kami sekarang dapat menyertakan blok genesis kapan saja kami membuat instance Blockchain baru:
Metode Blockchain
Sekarang, mari tambahkan metode ke kelas Blockchain kita yang memungkinkan kita melakukan hal-hal seperti menambahkan blok baru dan mengambil blok terbaru.
Fungsi getLatestBlock adalah yang paling dasar. Itu hanya mengembalikan anggota terakhir dari array rantai:
Teknik addBlock sedikit lebih terlibat.
Sebelum kita dapat menambahkan blok baru ke rantai kita, pertama-tama kita harus mengatur bidang sebelumnyaHash blok itu dengan tepat.
Itu harus disetel ke hash dari blok yang paling baru ditambahkan ke rantai kami. Kita juga perlu menghitung hash dari blok baru:
pengujian
Mari kita lihat bagaimana MelodyCoin kami telah keluar.
Buat instance blockchain untuk mencapai ini. Mari tambahkan beberapa blok lagi:
Kami telah membuat dua blok baru di sana. Mari kita intip seperti apa blockchain kita saat ini.
MelodyCoin akan dirangkai dan diformat dengan empat spasi:
Verifikasi Integritas Blockchain
Blockchain sangat fantastis karena setelah satu blok ditambahkan, itu tidak dapat dimodifikasi tanpa membatalkan sisa rantai.
Namun, tidak ada metode bagi saya untuk memeriksa integritas blockchain kami dengan implementasi ini.
Mari perkenalkan fungsi isChainValid ke blockchain kita. Jika rantai itu sah, itu akan mengembalikan true; jika tidak, itu akan mengembalikan false:
Menguji Integritas
Kami sekarang dapat menguji integritas blockchain kami. Jika kita menjalankannya sekarang, itu akan mengkonfirmasi bahwa rantai kita asli.
Sekarang mari kita coba mengutak-atik blockchain kita. Mari kita ubah blok 2 dan menimpa isinya (misalkan kita mentransfer 100 koin, bukan empat).
Ketika kami menjalankan ini, kami dapat melihat bahwa perangkat lunak mengenali upaya kami untuk merusak rantai.
Namun, Anda dapat percaya bahwa ada metode lain bagi saya untuk ikut campur dengan ini. Saya mengubah konten di blok tetapi tidak menghitung ulang hash. Jadi Anda bisa mencoba menjadi pintar dan menghitung ulang hash dari blok yang sama.
Hanya itu yang ada di pengaturan blockchain kecil kami! Ini memungkinkan kami untuk menambahkan blok baru dan mendeteksi gangguan data di dalam rantai.
Ada dua masalah dengan blockchain kecil kami yang harus kami atasi:
- Komputer modern sangat cepat dan dapat menambahkan ribuan blok ke rantai kami dalam hitungan detik. Kami jelas tidak ingin ada yang mengirim spam ke blockchain kami.
- Blockchain kami masih rentan terhadap gangguan. Anda dapat memperbarui konten blok dan kemudian menghitung ulang hash (dan hash sebelumnya) untuk semua blok berikut. Bahkan jika Anda mengacaukannya, Anda akan berakhir dengan rantai yang sah.
Untuk mengatasi masalah ini, blockchain menggunakan teknik yang dikenal sebagai “bukti kerja.” Anda harus menunjukkan bahwa Anda menggunakan sejumlah besar sumber daya komputasi untuk membuat blok menggunakan pendekatan ini. Ini juga disebut pertambangan.
Proof-of-work mengharuskan hash blok dimulai dengan jumlah nol tertentu. Tetapi bagaimana Anda bisa tahu apakah hash Anda sesuai dengan aturan ini?
Isi sebuah blok menentukan hash-nya. Jadi kami selalu mendapatkan hash yang sama, asalkan kami tidak mengubah isinya.
Setiap blok harus memiliki nilai nonce yang ditambahkan sebagai solusi. Ini pada dasarnya adalah beberapa data acak yang dapat kami perbarui hingga hash blok kami dimulai dengan nol yang cukup. Karena Anda tidak dapat mengubah output fungsi hash, Anda harus menguji banyak kombinasi berbeda dan berharap yang terbaik.
Perkenalkan Penambangan ke Blockchain
Mari kita mulai dengan memasukkan nonce di kelas Block kita. Nonce adalah nilai tunggal di dalam blok kita yang dapat kita modifikasi untuk memengaruhi hash blok.
Kami tidak dapat mengubah stempel waktu atau data.
Selanjutnya, mari kita tulis fungsi mineBlock() yang akan melakukan penambangan sebenarnya dari sebuah blok. Fungsi ini akan mengirimkan tingkat kesulitan yang diperlukan sebagai parameter dan akan terus dijalankan hingga hash blok kita dimulai dengan angka nol yang cukup.
Saya baru saja membuat loop while dasar yang akan berjalan sampai hash kita dimulai dengan angka nol yang cukup. Kami menggunakan kesulitan untuk menentukan berapa banyak nol yang dibutuhkan. Dengan tingkat kesulitan 5, hash kita harus dimulai dengan 5 angka nol.
Ketika hash kami tidak mengandung cukup nol, kami menaikkan nonce satu per satu dan menghitung ulang hash. Dan jika kami menemukan hash yang sesuai dengan kesulitan, kami mencatatnya ke konsol.
Ada satu hal lagi yang perlu kita lakukan. Kami tidak benar-benar memperhitungkan variabel nonce dalam metode countHash kami, jadi ini dia:
Kelas Blockchain
Mari kita uji pendekatan baru ini di kelas blockchain kita dan lihat bagaimana hasilnya.
Untuk memulai, saya akan mendefinisikan tingkat kesulitan blockchain kita dalam fungsi Object(). Kami mendefinisikannya di sini karena kami dapat menggunakannya di suatu tempat nanti.
Fungsi addBlock kemudian harus dimodifikasi sedemikian rupa sehingga menambang blok sebelum menambahkannya ke dalam rantai kita.
Gunakan Blockchain
Sekarang, mari kita gunakan blockchain baru kita untuk digunakan dengan algoritma proof-of-work. Di sini, tambahkan beberapa pernyataan console.log.
Ketika kami mengeksekusi kode ini, kami dapat mengamati bahwa proses penambangan tidak lagi terlalu cepat.
Dibutuhkan beberapa waktu untuk algoritma untuk menghasilkan blok dengan hash yang dimulai dengan tiga nol (seperti yang dikonfigurasi oleh kesulitan).
Jadi itulah akhir dari setup blockchain dasar kami.
Kami dapat mengatur seberapa cepat blok baru ditambahkan ke blockchain kami berkat mekanisme proof-of-work.
Ini adalah fitur keamanan paling signifikan di blockchain. Dan sekarang setelah Anda memahami cara kerjanya, mulailah membuat milik Anda sendiri!
Tinggalkan Balasan