MENGENAL BLOCKCHAIN
Apa itu blockchain
Simple nya blockchain adalah struktur data yang tidak dapat dirubah hanya bisa di tambahkan saja. Setiap data dari blockchain ini saling terhubung dimana kalau ada terjadi perubahan di salah satu block data maka akan berpengaruh terhadap data yang selanjutnya.
Dengan blockchain ini setiap transaksi dari bitcoin di simpan dalam sebuah Open Ledger ( Buku Besar ) yang di distribusikan ke dalam jaringan bitcoin. Setiap blockchain ini akan di bagikan copy datanya kepada setiap komputer yang terhubung pada jaringan tersebut. Pada setiap penambahan data akan ada pengecekan apakah datanya valid atau tidak yang biasanya proses ini disebut dengan mining atau di kenal dalam istilah lain Proof of work.
Terdapat beberapa element di dalam blockchain yaitu data
Hash
Block
Proof of work
Berikut kita bahas satu persatu.
Hash
Sebelum lanjut lebih dalam lagi tentang data block ini saya ingin menyebut istilah disini yaitu Hash dimana Hash ini adalah sebuah digital fingerprint atau identitas dari sebuah data digital. Sebagai contoh berikut ini :
String data = "Hello World";
log(data.hashCode());
// -862545276
Disini kita ketahui identitas digital dari object “Hello World” adalah -862545276.
Setiap data atau object digital pada data block tersebut akan di hash dengan algoritma
SHA-256. Berikut ini contoh nya :
String data = "Hello World";
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] bytes = digest.digest(data.getBytes());
String hash = DatatypeConverter.printHexBinary(bytes).toLowerCase();
log(hash);
// a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e
Block
Blockchain sendiri adalah kumpulah dari beberapa data block yang mana data block ini adalah data dari transaksi yang kita buat. Atau kita bisa definisikan sendiri akan data didalam block ini. Yang mana dengan begini Blockchain ini tidak hanya bisa digunakan untuk mencatat transaksi keuangan saja.
Didalam sebuah block ini pun nanti akan memiliki sebuah identitas digital yang selanjutnya akan kita hash. Hash disini adalah identitas data block yang kita enkripsi dengan algoritma SHA-256.
Data hash disini akan ada dua macam yaitu hash dari block itu sendiri dan hash dari block sebelumnya.
{
"chain": [
{
"index": 0,
"timestamp": "01/12/2017",
"data": {
"amaount": 0.000005RTC
},
"prevHash": "0",
"hash": "bd53895e5f46d62330b1b6143df108bc91133faaf5b046b5ec3379c9a0246e59",
"nonce": 0
},
{
"index": 1,
"timestamp": "02/12/2017",
"data": {
"amaount": 0.000012RTC
},
"prevHash": "bd53895e5f46d62330b1b6143df108bc91133faaf5b046b5ec3379c9a0246e59",
"hash": "0000e814afc9e67c4e8d211ae495773bb8916f84f686642e08a6d42190e24a17",
"nonce": 179487
}
]
}
Pada contoh diatas kita memiliki dua data hash block yang mana jika berubah data yang pertama maka data hash block selanjutnya akan berubah juga yang mana ini adalah bentuk chain atau keterkaitan dari data blockchain ini.
Proof of work
Didalam proses penambahan data salah satu yang tidak dapat kita hindari adalah spamming dan ddos. Untuk itu kita perlu memvalidasi akan setiap data dari setiap block ini.
POW atau Proof of work adalah sebuah protocol yang di fungsikan untuk memvalidasi setiap data yang masuk yang berguna untuk mengatasi serangan spam dan serangan ddos.
POW yang biasa di pakai pada blockchain biasanya adalah dengan memastikan string "oooo" pada setiap hash data dari setiap block ini. Sebagai contoh adaalah berikut ini :
{
"index": 1,
"timestamp": "02/12/2017",
"data": {
"amaount": 4
},
"prevHash": "bd53895e5f46d62330b1b6143df108bc91133faaf5b046b5ec3379c9a0246e59",
"hash": "8280412b62d1d5212e269c5f49aed1bd2481b2d00a7be407a7440505800e3eca",
"nonce": 0
}
Kita ketahui pada data di atas data hash nya adalah "8280412b62d1d5212e269c5f49aed1bd2481b2d00a7be407a7440505800e3eca" yang mana disini data has tidak memiliki string "oooo".
Untuk itu kita perlu melakukan proses perhitungan untuk mendapatkan nilai hash yang berawalan "oooo" dengan merubah nilai nonce berikut ini adalah contoh fungsi untuk menghitung dari hash nya:
public Block mineBlock(){
while (!setHash().substring(0, 2).equals("00")){
this.nonce++;
}
return this;
}
Dengan begitu maka data yang akan masuk akan di validasi dulu apakah sudah mengandung persyaratan tersebut atau belum. Dengan begini maka akan sedikit memerlukan waktu untuk proses perhitungan nya.
{
"index": 1,
"timestamp": "02/12/2017",
"data": {
"amaount": 4
},
"prevHash": "bd53895e5f46d62330b1b6143df108bc91133faaf5b046b5ec3379c9a0246e59",
"hash": "0000e814afc9e67c4e8d211ae495773bb8916f84f686642e08a6d42190e24a17",
"nonce": 179487
}
Dari hasil perhitungan yang telah dilakukan maka disini ditemukan variable nonce 179487. Didalam dunia bitcoin proses ini disebut dengan mining atau menambang coin yang mana menemukan data nonce dari setiap block. Pada sistem bitcoin jika kita telah berhasil melakukan perhitungan.