Untuk memahami block chain mari kita buat contoh mainan sederhana blockchain Di sini akan menggunakan tiga transaksi sederhana sebagai konten Programnya ditulis dengan bahasa R
Untuk memahami gambar di atas kita perlu tahu dulu apa itu hash. Hash adalah fungsi dalam bahasa programming yang akan menghasilkan sandi yang unik. Ada berbagai fungsi tegantung tujuan dan tingkat kompleksitas algoritma yang diinginkan. Untuk tujuan pembelajaran, saya ambil contoh seperti di bawah ini:
hash <- function(x, l = 5) {
hash <- sapply(unlist(strsplit(x, "")), function(x) which(c(LETTERS, letters, 0:9, "-", " ") == x))
hash <- as.hexmode(hash[quantile(1:length(hash), (0:l)/l)])
paste(hash, collapse = "")
}
hash(trnsac1)## [1] "024040262329"
## [1] "051c2c222323"
Kami akan menggunakan fungsi ini untuk membuat sandi masing masing transaksi. Dengan cara ini, akan terbentuk rantai berupa “Header”,“Hash” dan “Transaction”.
Berdasarkan data transaksi di atas akan terbentuk rangkaian blockchain. Blockchain tsb dapat distribusikan ke beberapa komputer, teknologi blockchain ini yang sering disebut distribusi buku besar, atau ledger distributed. Lihat fungsi untuk menambahkan transaksi ke blockchain yang sudah ada atau membuat yang baru jika Anda memulai dengan NULL.
add_trnsac <- function(bc, trnsac) {
if (is.null(bc)) bc <- data.frame(Header = hash(sample(LETTERS, 20, replace = TRUE)),
Hash = hash(trnsac), Transaction = trnsac, stringsAsFactors = FALSE)
else bc <- rbind(bc, data.frame(Header = hash(paste0(c(bc[nrow(bc), "Header"]), bc[nrow(bc), "Hash"])),
Hash = hash(trnsac), Transaction = trnsac))
bc
}## Header Hash Transaction
## 1 10050502060e 024040262329 Budi beli mobil dari Bowo
## Header Hash Transaction
## 1 10050502060e 024040262329 Budi beli mobil dari Bowo
## 2 36353b37373e 051c2c222323 Edi beli rumah dari Rini
## 3 38383c3a3738 051c27262323 Eny beli mobil dari Budi
Cek nilai hash
test_bc <- function(bc) {
integrity <- TRUE
row <- 2
while (integrity && row <= nrow(bc)) {
if (hash(paste0(c(bc[(row-1), "Header"]), hash(bc[(row-1), "Transaction"]))) != bc[row, "Header"]) integrity <- FALSE
row <- row + 1
}
if (integrity) {
TRUE
} else {
warning(paste("blockchain is corrupted at row", (row-2)))
FALSE
}
}
# test integrity of blockchain
test_bc(bc)## [1] TRUE
Sekarang dicoba apakah transaksi di block-chain bisa diretas/di-heck? Mr. Busro(maaf nama fiksi) adalah orang yang ingin cepat kaya dengan menghalalkan segala cara. Dia coba retas transaksi kedua “trnsac2 <-”Edi beli rumah dari Rini”, sehingga bukan Edi tetapi atas nama dia yang memiliki rumah Rini. Bahkan dia berusaha mengubah nilai hash transaksi sehingga konsisten dengan transaksi yang dimanipulasi
bc[2, "Transaction"] <- "Busro beli rumah dari Rini"
bc[2, "Hash"] <- hash("Busro beli rumah dari Rini")
bc## Header Hash Transaction
## 1 10050502060e 024040262329 Budi beli mobil dari Bowo
## 2 36353b37373e 024040222323 Busro beli rumah dari Rini
## 3 38383c3a3738 051c27262323 Eny beli mobil dari Budi
## Warning in test_bc(bc): blockchain is corrupted at row 2
## [1] FALSE
Berdasarkan hasil test di atas, yang ditunjukkan “In test_bc(bc) : blockchain is corrupted at row 2”. Artinya Mr.Busro, tidak berhasil meretas/heck file dalam block-chain. Jadi semua transaksi dijamin aman.