Lewati ke konten utama

Memahami Blockchain dengan Membuatnya di R

Implementasikan blockchain kecil di R dan pelajari seperti apa bentuk blockchain serta beberapa konsep inti di baliknya!
Diperbarui 28 Sep 2026  · 10 mnt Baca

Jelajahi bersama AI

ChatGPTClaudePerplexity

Semua orang membicarakan mata uang kripto sekarang—terima kasih pada hype Bitcoin. Jauh lebih menarik daripada apakah ada gelembung Bitcoin atau tidak adalah pertanyaan tentang bagaimana teknologi ini sebenarnya bekerja dan apa kemampuannya. Kisah Bitcoin dimulai dengan whitepaper berjudul "Bitcoin: A Peer-to-Peer Electronic Cash System" pada tahun 2008. Dalam paper tersebut, penulis bernama Satoshi Nakamoto (masih ada perdebatan besar tentang siapa sebenarnya Satoshi) memperkenalkan teknologi dan gagasan baru yang revolusioner: mata uang elektronik terdesentralisasi yang berjalan di atas sesuatu yang disebut blockchain. Gagasan ini menyebar sejak saat itu dan kini dapat diterapkan ke banyak bidang lain.

Saya pertama kali mengenal blockchain di sebuah pertemuan BlockchainSociety di Oxford. Semua orang di sana tampak sangat antusias dengan potensi teknologi baru ini. Dan memang, kedengarannya menarik: basis data terdesentralisasi dan tak dapat disusupi untuk transaksi keuangan, kontrak, atau apa pun yang Anda inginkan (misalnya mesin pemungutan suara yang tidak bisa diretas). Janji blockchain bagi komunitas kripto adalah akan mendisrupsi seluruh industri dengan merevolusi kepercayaan sehingga kita tidak lagi membutuhkan pihak ketiga seperti bank atau pengacara—kita hanya membutuhkan kekuatan kriptografi.

Walau gagasan dasarnya cukup intuitif, pertanyaan tentang bagaimana blockchain bekerja pada tingkat teknis agak lebih sulit dipahami. Minggu lalu saya menemukan artikel di R-bloggers, di mana BigData Doc membangun blockchain sepenuhnya di R. Blockchain yang dibuat di R mungkin bukan hal paling efisien dan praktis di dunia, tetapi ini adalah cara yang hebat untuk memahami prinsip pemrograman dan kripto di baliknya. Saya juga ingin memahaminya, dan itulah mengapa saya mengimplementasikan versi yang lebih kecil dari blockchain di R: "Jika Anda bisa memrogramnya, Anda pasti memahaminya".

Apa itu Blockchain?

Misalkan tujuan Anda adalah menyimpan beberapa data dengan cara yang aman. Untuk itu, pertama-tama Anda menyimpan data ke dalam sebuah wadah—yang Anda sebut blok. Dalam kasus Bitcoin, setiap blok memuat beberapa transaksi keuangan. Ketika ada transaksi baru (atau ada data baru) sebuah blok baru akan dibuat dan ditambahkan bersama blok-blok sebelumnya membentuk sebuah rantai—itulah blockchain.

Mari kita lihat bagaimana blockchain memanfaatkan kriptografi sehingga praktis tak bisa diretas.

1. Blok

    block_example <- list(index = 1,
                     timestamp = "2018-01-05 17.00 MST",
                     data = "some data",
                     previous_hash = 0,
                     proof = 9,
                     new_hash = NULL)

Sebelum Anda mulai membangun blockchain—alias merangkai berbagai wadah berisi data—Anda perlu mengenal dua konsep lagi: Hashing dan Algoritma Proof-of-Work.

2. Hash

Hash membantu memastikan integritas sebuah blok dengan menghubungkannya ke blok-blok lain dalam rantai. Fungsi hash mengambil sesuatu sebagai masukan dan memberikan keluaran terenkripsi yang unik. Contohnya seperti ini: Anda memberi teman Anda sebuah teka-teki "Program statistik mana yang lebih baik: Stata atau R?" dan Anda memberinya hash dari jawaban yang benar: "71ec0b920622cf4358bbc21d6a8b41f903584808db53ec07a8aa79119304ce86". Ia kini dapat memeriksa sendiri apakah ia memiliki jawaban yang benar dengan hanya memasukkan jawabannya ke fungsi Hash (dalam kasus Anda algoritma SHA256):

    library("digest")

    digest("Stata" ,"sha256") # first try
    ## [1] "3ac273f00d52dc9caf89cbd71e73e5915229a588117ca3441630089409ddb7bc"
    digest("R", "sha256") # second try
    ## [1] "71ec0b920622cf4358bbc21d6a8b41f903584808db53ec07a8aa79119304ce86"

Bagaimana ini membantu Anda?

Dalam hal ini, Anda tidak hanya memasukkan informasi tentang blok (indeks, timestamp, data) ke fungsi hash, tetapi juga hash dari blok sebelumnya. Artinya Anda hanya bisa menghitung hash yang valid jika Anda mengetahui hash dari blok sebelumnya, yang dibuat menggunakan hash dari blok sebelumnya lagi, dan seterusnya. Ini memberi Anda rantai blok yang tidak dapat diubah dan berurutan. Jika Anda mengubah satu blok setelahnya, Anda harus menghitung ulang semua hash untuk blok-blok berikutnya.

    #Function that creates a hashed "block"
    hash_block <- function(block){
      block$new_hash <- digest(c(block$index,
                                 block$timestamp,
                                 block$data,
                                 block$previous_hash), "sha256")
      return(block)
    }


3. Proof-of-Work

Jika ada banyak informasi yang harus disimpan di blockchain, Anda perlu membuat banyak blok baru. Dalam banyak kasus, Anda ingin mengendalikan berapa banyak blok baru yang dibuat. Dalam kasus mata uang kripto, misalnya, koin akan kehilangan nilainya jika ada jumlah koin tak terbatas yang bisa dibuat setiap detik.

Karena itu, kita menambahkan algoritma "Proof-of-Work" (PoW) yang mengontrol tingkat kesulitan pembuatan blok baru. "Proof" berarti komputer telah melakukan sejumlah pekerjaan tertentu. Dalam praktiknya tujuannya adalah membuat sesuatu yang sulit dibuat tetapi mudah diverifikasi. Saya akan menggunakan "tugas" berikut sebagai PoW: temukan angka berikutnya yang habis dibagi 99 dan habis dibagi oleh angka proof dari blok terakhir.

    ### Simple Proof of Work Alogrithm
    proof_of_work <- function(last_proof){
      proof <- last_proof + 1

      # Increment the proof number until a number is found that is divisable by 99 and by the proof of the previous block
      while (!(proof %% 99 == 0 & proof %% last_proof == 0 )){
        proof <- proof + 1
      }

      return(proof)
    }

Untuk blockchain seperti Bitcoin atau Ethereum, pekerjaan membuat blok baru dilakukan oleh para penambang. Ketika sebuah blok baru harus dibuat, sebuah masalah komputasional dikirim ke jaringan. Penambang yang pertama kali memecahkan masalah PoW akan membuat blok baru dan diberi imbalan dalam Bitcoin (inilah cara Bitcoin baru sebenarnya dibuat). "Undian" untuk menemukan proof yang benar ini memastikan bahwa kekuatan pembuatan blok baru terdesentralisasi. Ketika blok baru ditambang, blok tersebut dikirim ke semua orang sehingga setiap node di jaringan memiliki salinan blockchain terbaru. Gagasan bahwa blockchain terpanjang dalam jaringan (yang "paling banyak dikerjakan") adalah versi blockchain yang valid disebut "konsensus terdesentralisasi".

Dalam kasus Bitcoin, masalah PoW melibatkan pencarian angka yang menghasilkan hash dengan sejumlah nol di depan (penjelasan terbaik yang saya temukan ada di video dari Savjee). Untuk menyesuaikan peningkatan kecepatan komputasi dan jumlah penambang yang bervariasi dalam jaringan, tingkat kesulitan PoW dapat diatur agar waktu pembuatan blok baru tetap konstan sekitar sepuluh menit.

4. Menambahkan Blok Baru

Sekarang Anda tahu seperti apa sebuah blok, bagaimana blok-blok dirangkai menggunakan hash, dan bagaimana laju pembuatan blok baru diatur oleh PoW. Jadi mari kita gabungkan dalam sebuah fungsi:

    #A function that takes the previous block and normally some data (in our case the data is a string indicating which block in the chain it is)
    gen_new_block <- function(previous_block){

      #Proof-of-Work
      new_proof <- proof_of_work(previous_block$proof)

      #Create new Block
      new_block <- list(index = previous_block$index + 1,
                        timestamp = Sys.time(),
                        data = paste0("this is block ", previous_block$index +1),
                        previous_hash = previous_block$new_hash,
                        proof = new_proof)

      #Hash the new Block
      new_block_hashed <- hash_block(new_block)

      return(new_block_hashed)
    }

Sebelum Anda mulai membangun blockchain, Anda perlu memulai rantainya terlebih dahulu. Ini dilakukan menggunakan apa yang disebut Genesis Block. Blok ini tidak berisi data dan memiliki nilai sembarang untuk proof dan hash sebelumnya (karena tidak ada blok sebelumnya).

    # Define Genesis Block (index 1 and arbitrary previous hash)
    block_genesis <-  list(index = 1,
                           timestamp = Sys.time(),
                           data = "Genesis Block",
                           previous_hash = "0",
                           proof = 1)


5. Membangun Blockchain

Sekarang Anda bisa mulai membangun blockchain. Mulailah dengan blok Genesis lalu tambahkan beberapa blok menggunakan loop.

    blockchain <- list(block_genesis)
    previous_block <- blockchain[[1]]

      # How many blocks should we add to the chain after the genesis block
      num_of_blocks_to_add <- 5

      # Add blocks to the chain
      for (i in 1: num_of_blocks_to_add){
        block_to_add <- gen_new_block(previous_block) 
        blockchain[i+1] <- list(block_to_add)
        previous_block <- block_to_add

        print(cat(paste0("Block ", block_to_add$index, " has been added", "\n",
                   "\t", "Proof: ", block_to_add$proof, "\n",
                   "\t", "Hash: ", block_to_add$new_hash)))
      }
    ## Block 2 has been added
    ##  Proof: 99
    ##  Hash: 7d3dfbb58b410838769f6080dbc62a44a4c5d411a41048c4e597d26dccd1cd38NULL
    ## Block 3 has been added
    ##  Proof: 198
    ##  Hash: 4f8bdd79d751f9e9829c14c52a737f257285b61e54b29531dd59bf1a530f1097NULL
    ## Block 4 has been added
    ##  Proof: 396
    ##  Hash: 512b877c4ff92605d9fe10ac73ced20f748742964f306c211c4691f15425a26eNULL
    ## Block 5 has been added
    ##  Proof: 792
    ##  Hash: a3baaa025186c5bcb2238a888bc65e705ffe73c17dc5c8f26ee337fd62867993NULL
    ## Block 6 has been added
    ##  Proof: 1584
    ##  Hash: d12c3f54c14f3287a9f31ab542271197ba6a658cee561a9289819dd563fe4991NULL

Jika Anda ingin menambahkan jauh lebih banyak blok, Anda akan menyadari bahwa ini memakan waktu yang semakin lama. Alasannya adalah angka proof meningkat secara eksponensial.

blockchain R

Bagi mata uang kripto seperti Bitcoin, ini akan menjadi masalah karena waktu untuk membuat blok baru seharusnya kurang lebih konstan (sekitar 10 menit pada kasus Bitcoin). Karena itu tingkat kesulitan PoW harus terus disesuaikan untuk mengimbangi peningkatan kecepatan komputasi dan jumlah penambang yang bervariasi di jaringan pada waktu tertentu.

Terakhir, seperti inilah rupa satu blok dalam rantai Anda:

    blockchain[[5]]
    ## $index
    ## [1] 5
    ## 
    ## $timestamp
    ## [1] "2018-02-08 12:02:56 GMT"
    ## 
    ## $data
    ## [1] "this is block 5"
    ## 
    ## $previous_hash
    ## [1] "26cdc16a4560df5fa2fd521dbca22670e2475c35d3dd90781872bee98a164eef"
    ## 
    ## $proof
    ## [1] 792
    ## 
    ## $new_hash
    ## [1] "2eef25bf0bc4ee81e8c7cd1dfda65855b4ba32aba218d8c525a03a72b3454d74"


Ringkasan

Dalam tulisan singkat ini, Anda membuat blockchain paling sederhana. Tujuan utamanya adalah memperkenalkan seperti apa bentuk blockchain dan beberapa konsep inti di baliknya. Memahami penerapan kriptografi yang jenius benar-benar menunjukkan mengapa orang begitu antusias dengan kemungkinan yang ditawarkan blockchain.

Untuk membawa blockchain ke produksi, dibutuhkan jauh lebih banyak pekerjaan: menyiapkan API, membuat dompet, tanda tangan digital menggunakan pasangan kunci publik-pribadi, dan sebagainya. Saya juga hanya menyinggung permukaan konsep konsensus terdesentralisasi yang merupakan inti dari jaringan blockchain.

Pengenalan singkat ini merujuk pada posting blog Gerald Nash yang mengimplementasikan "blockchain terkecil" dalam Python. Saya mengimplementasikannya di R dan menambahkan implementasi PoW dari Daniel van Flymen.

Untuk mendalami topik blockchain, saya merekomendasikan whitepaper Bitcoin yang brilian dan orisinal dari Satoshi Nakamoto serta posting blog dari BigData Doc.

Jika Anda memiliki pemikiran atau tanggapan atas tulisan ini, silakan hubungi saya di Twitter: Anda dapat menemukan saya di @jj_mllr atau lihat @CorrelAid, sebuah jaringan analis data muda yang ingin mengubah dunia dengan pendekatan analisis data yang lebih inklusif, terpadu, dan inovatif.

Topik
R
Data Science
Big Data

Pelajari lebih lanjut tentang R

{count, plural, one {Kursus} other {Kursus}}

Pengantar R

{hours} jam
3.1M
Kuasai dasar analisis data di R, termasuk vectors, lists, dan data frames, lalu praktikkan R dengan data sets nyata.
Lihat DetailRight Arrow
Mulai Kursus
Lihat SelengkapnyaRight Arrow
Terkait

{count, plural, one {blog} other {blogs}}

Tutorial Korelasi di R

Dapatkan pengenalan dasar-dasar korelasi di R: pelajari lebih lanjut tentang koefisien korelasi, matriks korelasi, plotting korelasi, dan sebagainya.
David Woods's photo

David Woods

13 mnt

{count, plural, one {blog} other {blogs}}

40 Pertanyaan Wawancara DBMS Teratas di 2026

Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Dario Radečić's photo

Dario Radečić

15 mnt

{count, plural, one {blog} other {blogs}}

Spaghetti Plot dan Jalur Badai

Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Hugo Bowne-Anderson's photo

Hugo Bowne-Anderson

13 mnt

{count, plural, one {blog} other {blogs}}

12 Alternatif ChatGPT Terbaik yang Bisa Anda Coba pada 2026

Artikel ini menyajikan daftar alternatif ChatGPT yang akan meningkatkan produktivitas Anda.
Javier Canales Luna's photo

Javier Canales Luna

14 mnt

Lihat SelengkapnyaLihat Selengkapnya