Block-Chain Basic

By Bambangpe

Jan 10, 2022

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

Contoh ada 3 transaksi

trnsac1 <- "Budi beli mobil dari Bowo"
trnsac2 <- "Edi beli rumah dari Rini"
trnsac3 <- "Eny beli mobil dari Budi"

Diagram Blockchain

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:

Fungsi basic hash

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"
hash(trnsac2)
## [1] "051c2c222323"

Fungsi yang dipakai Block Chain

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.

Transaksi ke block-chain

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
}

Buat block-chain dan tambahkan transaksi

set.seed(1234)
bc <- add_trnsac(NULL, trnsac1)
bc
##         Header         Hash               Transaction
## 1 10050502060e 024040262329 Budi beli mobil dari Bowo

Tambahkan transaksi

bc <- add_trnsac(bc, trnsac2)
bc <- add_trnsac(bc, trnsac3)
bc
##         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

Test kebenaran

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
## [1] TRUE

Transaksi yang di heck

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

Contoh jika ada transaksi yg di retas/heck

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
test_bc(bc)
## Warning in test_bc(bc): blockchain is corrupted at row 2
## [1] FALSE

Kesimpulan

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.