Jika kita melihat trend beberapa tahun sebelumnya, kita telah mendengar tentang blockchain sepanjang masa, tetapi tidak banyak tentang spesifiknya.
Kita semua sedar bahawa mata wang kripto seperti Bitcoin, Ethereum, Dogecoin, Matic dan lain-lain bergantung pada teknologi blockchain. Blockchain mengetuai peristiwa penting yang merevolusikan banyak industri pada 2021 dan membuka jalan untuk pencapaian baharu.
Blockchain ialah satu cara untuk menyimpan data dengan cara yang sukar atau mustahil untuk diedit, digodam atau ditipu. Ia adalah lejar digital transaksi yang diduplikasi dan tersebar di seluruh rangkaian sistem komputer blockchain.
Ia adalah teknologi pangkalan data terobosan yang menguasai hampir semua mata wang kripto. Blockchain menjadikannya sangat sukar untuk menggodam atau menipu sistem dengan menyebarkan salinan pangkalan data yang sama di seluruh rangkaian.
Walaupun Bitcoin kini merupakan penggunaan yang paling menonjol untuk blockchain, teknologi ini boleh melayani pelbagai aplikasi yang sangat luas.
Mata wang kripto dan rantaian blok semakin popular sejak beberapa tahun kebelakangan ini, dan trend ini dijangka berterusan.
Kami akan membuat blockchain mudah dengan JavaScript dalam tutorial ini. Ia akan memberi anda pemahaman asas tentang cara blockchain berfungsi.
Mari kita panggilnya MelodyCoin dan teruskan tindakan!
Mencipta Blok
Untuk bermula, kami akan mencipta fail JavaScript baharu di mana kami akan meletakkan semua kod kami.
Mari kita panggil ia main.js dan mulakan dengan penerangan tentang cara blockchain dan blok sepatutnya kelihatan.
Buat kelas Blok dan berikannya fungsi Object() { [kod asli] } untuk bermula.
Anda mesti memberikan tarikh, dan cincangan blok sebelumnya apabila membuat blok baharu:
Berikut ialah definisi bagi setiap harta:
- Cap masa menunjukkan bila blok itu dibuat. Anda boleh menggunakan apa sahaja format yang anda pilih (dalam kes ini, cap masa UNIX).
- Sebarang bentuk data yang anda ingin sambungkan ke blok ini boleh disertakan dalam parameter data. Jika anda ingin mencipta mata wang kripto, anda boleh menyimpan data transaksi seperti penghantar/penerima dan jumlah wang yang dipindahkan ke sini.
- Hash sebelumnya ialah rentetan yang memegang cincang blok sebelumnya. Inilah yang akan menjana rantaian blok, yang akan menjadi kritikal dalam menyediakan integriti blockchain kami nanti.
Mencipta Hashes
Setiap blok dipautkan ke blok sebelumnya (dengan itu sifat previousHash). Iaitu, setiap blok memerlukan cincang. Hash adalah serupa dengan cap jari. Ia berbeza untuk setiap blok.
Cincang blok boleh dikira dengan menghantar semua kandungannya melalui fungsi cincang.
Jadi, mari kita mulakan dengan melaksanakan fungsi yang mengira cincang blok semasa.
Jadi, di bawah kelas Block, kami mentakrifkan fungsi calculateHash:
Walau bagaimanapun, cincang SHA256 tidak disokong oleh JavaScript dan mesti diperoleh daripada pustaka luaran.
Crypto-js ialah pakej hebat yang merangkumi pelaksanaan selamat beberapa algoritma cincang.
Kemudian kami boleh mengimportnya ke dalam kod main.js kami.
Sekarang kita mempunyai fungsi calculateHash() kita, mari kita gunakannya dalam fungsi Block kita:
Selepas menerangkan rupa Blok, kita boleh mentakrifkan rupa Blockchain. Jadi mari kita buat kelas baharu.
Dalam senario ini, blockchain adalah objek yang sangat mudah yang mempunyai rantaian hartanah. Ini ialah tatasusunan yang memegang semua blok pada rantai.
Sebelum kita boleh menambah blok, kita mesti mencipta apa yang dikenali sebagai "blok genesis." Ini adalah blok pertama dalam rantai, dan ia unik kerana ia tidak boleh menunjuk ke blok sebelumnya (ia adalah yang pertama!).
Jadi, untuk membina blok genesis, saya akan menambah fungsi pada kelas kami bernama createGenesisBlock (). Kembali ke dalam fungsi Object() { [kod asli] } kelas Blockchain kami.
Kami kini boleh memasukkan blok genesis pada bila-bila masa kami membina contoh Blockchain baharu:
Kaedah Blockchain
Sekarang, mari tambahkan kaedah pada kelas Blockchain kami yang akan membolehkan kami melakukan perkara seperti menambah blok baharu dan mengambil blok terbaharu.
Fungsi getLatestBlock adalah yang paling asas. Ia hanya mengembalikan ahli terakhir tatasusunan rantai:
Teknik addBlock lebih terlibat sedikit.
Sebelum kami boleh menambah blok baharu pada rantai kami, kami mesti menetapkan medan sebelumnyaHash blok itu dengan sewajarnya.
Ia mesti ditetapkan kepada cincang blok yang paling baru ditambah pada rantaian kami. Kami juga perlu mengira cincang blok baharu:
Ujian
Mari lihat bagaimana MelodyCoin kami telah keluar.
Buat contoh blockchain untuk mencapai ini. Mari tambah beberapa blok lagi:
Kami telah membuat dua blok baharu di sana. Mari kita lihat rupa blockchain kami pada masa ini.
MelodyCoin akan dirangkai dan diformatkan dengan empat ruang:
Sahkan Integriti Blockchain
Rantaian sekat adalah hebat kerana apabila satu blok telah ditambahkan, ia tidak boleh diubah suai tanpa membatalkan baki rantaian tersebut.
Walau bagaimanapun, tiada kaedah untuk saya menyemak integriti blockchain kami dengan pelaksanaan ini.
Mari perkenalkan fungsi isChainValid kepada blockchain kami. Jika rantaian itu sah, ia akan kembali benar; jika tidak, ia akan kembali palsu:
Menguji Integriti
Kini kami boleh menguji integriti blockchain kami. Jika kami melaksanakannya sekarang, ia akan mengesahkan bahawa rantai kami adalah tulen.
Marilah kita cuba mengusik blokchain kita sekarang. Mari kita ubah blok 2 dan tulis ganti kandungannya (katakan kita memindahkan 100 syiling bukannya empat).
Apabila kami melaksanakan ini, kami dapat melihat bahawa perisian mengiktiraf usaha kami untuk mengganggu rantaian.
Walau bagaimanapun, anda boleh percaya bahawa ada kaedah lain untuk saya campur tangan dengan ini. Saya mengubah kandungan dalam blok tetapi tidak mengira semula cincangan. Jadi anda boleh cuba menjadi pandai dan mengira semula cincangan blok yang sama itu.
Itu sahaja yang ada pada persediaan blockchain kecil kami! Ia membolehkan kami menambah blok baharu dan mengesan gangguan data dalam rantaian.
Terdapat dua isu dengan blockchain kecil kami yang mesti kami tangani:
- Komputer moden sangat pantas dan boleh menambah beribu-ribu blok pada rantai kami dalam beberapa saat. Kami jelas tidak mahu sesiapa menghantar spam blokchain kami.
- Blockchain kami masih terdedah kepada gangguan. Anda boleh mengemas kini kandungan blok dan kemudian hanya mengira semula cincang (dan cincang sebelumnya) untuk semua blok berikut. Walaupun anda mengacaukannya, anda akan berakhir dengan rantaian yang sah.
Untuk menangani kebimbangan ini, blockchain menggunakan teknik yang dikenali sebagai "bukti kerja." Anda mesti menunjukkan bahawa anda menggunakan sejumlah besar sumber pengiraan untuk mencipta blok menggunakan pendekatan ini. Ini juga dipanggil perlombongan.
Bukti kerja memerlukan cincangan blok bermula dengan jumlah sifar tertentu. Tetapi bagaimana anda boleh mengetahui sama ada hash anda sesuai dengan peraturan ini?
Kandungan blok menentukan cincangnya. Jadi kami sentiasa memperoleh cincangan yang sama, dengan syarat kami tidak mengubah suai kandungannya.
Setiap blok harus mempunyai nilai nonce yang ditambahkan padanya sebagai penyelesaian. Ini pada asasnya beberapa data rawak yang boleh kami kemas kini sehingga cincang blok kami bermula dengan sifar yang mencukupi. Kerana anda tidak boleh mengubah output fungsi cincang, anda perlu menguji banyak kombinasi yang berbeza dan mengharapkan yang terbaik.
Memperkenalkan Perlombongan kepada The Blockchain
Mari mulakan dengan memasukkan nonce dalam kelas Blok kami. Nonce ialah nilai tunggal dalam blok kami yang boleh kami ubah suai untuk memberi kesan kepada cincang blok.
Kami tidak dapat mengubah cap masa atau data.
Seterusnya, mari tulis fungsi mineBlock() yang akan melakukan perlombongan sebenar blok. Fungsi ini akan dihantar kesukaran yang diperlukan sebagai parameter dan akan terus dilaksanakan sehingga cincang blok kami bermula dengan sifar yang mencukupi.
Saya baru sahaja membuat gelung sementara asas yang akan dijalankan sehingga cincang kami bermula dengan sifar yang mencukupi. Kami menggunakan kesukaran untuk menentukan bilangan sifar yang diperlukan. Dengan kesukaran 5, cincang kita mesti bermula dengan 5 sifar.
Apabila cincang kami tidak mengandungi sifar yang mencukupi, kami menaikkan nonce satu per satu dan mengira semula cincang. Dan jika kami menemui cincang yang sepadan dengan kesukaran, kami log masuk ke konsol.
Ada satu perkara lagi yang perlu kita lakukan. Kami tidak benar-benar mengambil kira pembolehubah nonce dalam kaedah calculateHash kami, jadi inilah:
Kelas Blockchain
Mari kita uji pendekatan baharu ini dalam kelas blockchain kami dan lihat bagaimana ia berlaku.
Untuk memulakan, saya akan mentakrifkan kesukaran blokchain kami dalam fungsi Object(). Kami mentakrifkannya di sini kerana kami boleh menggunakannya di suatu tempat kemudian.
Fungsi addBlock kemudiannya mesti diubah suai supaya ia melombong blok sebelum menambahkannya ke dalam rantai kami.
Gunakan The Blockchain
Sekarang, mari letakkan blokchain baharu kami untuk digunakan dengan algoritma bukti kerja. Di sini, tambahkan beberapa pernyataan console.log.
Apabila kita melaksanakan kod ini, kita dapat melihat bahawa proses perlombongan tidak lagi begitu pesat.
Algoritma mengambil sedikit masa untuk menghasilkan blok dengan cincang yang bermula dengan tiga sifar (seperti yang dikonfigurasikan mengikut kesukaran).
Jadi itu adalah penghujung persediaan blokchain asas kami.
Kami boleh mengawal selia seberapa cepat blok baharu ditambahkan pada blockchain kami berkat mekanisme bukti kerja.
Ia adalah ciri keselamatan yang paling penting pada blockchain. Dan sekarang setelah anda memahami cara ia berfungsi, teruskan mencipta sendiri!
Sila tinggalkan balasan anda