Bangun Blockchain Anda Sendiri
๐ 12 min baca ยท ๐ Python
Quick Answer
Cara terbaik untuk memahami blockchain adalah dengan membangunnya. Dalam sekitar 50 baris Python, Anda dapat membuat mainan blockchain yang berfungsi dengan hashing, rantai blok, penambangan bukti kerja, dan deteksi kerusakan โ ide inti yang sama yang mengamankan Bitcoin. Tidak diperlukan pengetahuan blockchain sebelumnya.
โ ๏ธ Ini adalah model pembelajaran, bukan kode produksi. Ini mengajarkan struktur data di balik Bitcoin โ ini bukan uang yang aman dan tidak boleh memiliki nilai nyata.
Langkah 1 โ Sebuah blok dan sidik jarinya
Sebuah blok menyimpan beberapa data (transaksi), link ke blok sebelumnya, dan "nonce" (angka yang dapat kita ubah). Identitasnya adalah hash SHA-256 dari semua isinya โ ubah satu karakter dan hashnya berubah sepenuhnya. Hash tersebut adalah sidik jari blok yang dapat dirusak.
import hashlib, json, time
class Block:
def __init__(self, index, transactions, previous_hash, nonce=0):
self.index = index
self.timestamp = time.time()
self.transactions = transactions
self.previous_hash = previous_hash
self.nonce = nonce
def hash(self):
# A block's fingerprint = SHA-256 of all its contents.
payload = json.dumps({
"index": self.index,
"timestamp": self.timestamp,
"transactions": self.transactions,
"previous_hash": self.previous_hash,
"nonce": self.nonce,
}, sort_keys=True).encode()
return hashlib.sha256(payload).hexdigest()Langkah 2 โ Penambangan (Bukti Kerja)
Menambang berarti menemukan hash yang memenuhi aturan โ di sini, dimulai dengan sejumlah angka nol. Tidak ada rumusnya; Anda melakukan brute force pada nonce sampai hashnya cocok. Memeriksa solusinya bersifat instan, tetapi menemukannya membutuhkan kerja keras. Asimetri tersebut adalah inti dari Proof of Work.
DIFFICULTY = 4 # require this many leading zeros
def mine(block):
# Proof of Work: keep changing the nonce until the hash
# starts with DIFFICULTY zeros. There is no shortcut โ
# you just have to guess, which is what costs energy.
target = "0" * DIFFICULTY
while not block.hash().startswith(target):
block.nonce += 1
return block.hash()Langkah 3 โ Merangkai balok
Setiap blok baru menyimpan hash dari blok sebelumnya, menyatukannya menjadi sebuah rantai yang dimulai dengan blok "genesis" yang dikodekan secara keras. Karena setiap blok berkomitmen pada blok sebelumnya, urutannya tetap dan riwayatnya dihubungkan bersama.
class Blockchain:
def __init__(self):
# The genesis block โ the very first, hard-coded block.
genesis = Block(0, [{"note": "genesis"}], "0")
mine(genesis)
self.chain = [genesis]
def add_block(self, transactions):
prev = self.chain[-1]
block = Block(len(self.chain), transactions, prev.hash())
mine(block) # do the work
self.chain.append(block)
return blockLangkah 4 โ Memvalidasi rantai
Untuk memercayai suatu rantai, Anda harus memeriksanya kembali: setiap blok harus menunjuk ke hash sebenarnya dari blok sebelumnya, dan setiap blok harus memenuhi aturan bukti kerja. Jika salah satu pemeriksaan gagal di mana pun, rantai tersebut tidak valid.
def is_valid(chain):
for i in range(1, len(chain)):
current, previous = chain[i], chain[i - 1]
# 1) Each block must point to the real hash of the one before it.
if current.previous_hash != previous.hash():
return False
# 2) Each block must satisfy the proof-of-work rule.
if not current.hash().startswith("0" * DIFFICULTY):
return False
return TrueLangkah 5 โ Jalankan dan coba curang
Sekarang tambahkan beberapa blok dan kemudian ubah transaksi lama. Saat Anda mengubah data sebelumnya, hash blok tersebut tidak lagi sesuai dengan apa yang diharapkan oleh blok berikutnya โ dan validasi langsung mengembalikan False. Inilah, secara singkat, mengapa Anda tidak bisa diam-diam menulis ulang sejarah Bitcoin.
bc = Blockchain()
bc.add_block([{"from": "Alice", "to": "Bob", "amount": 5}])
bc.add_block([{"from": "Bob", "to": "Carol", "amount": 2}])
print("Chain valid?", is_valid(bc.chain)) # True
# Now try to cheat: tamper with an old transaction.
bc.chain[1].transactions[0]["amount"] = 5000
print("Chain valid?", is_valid(bc.chain)) # False โ tampering is caught!๐ Pengambilan kunci
Blockchain hanyalah struktur data plus aturan: hash setiap blok, tautkan ke blok terakhir, dan buat penambahan blok menjadi mahal melalui bukti kerja. Perusakan memutus rantai hash โ itulah cara Bitcoin tetap aman dari kerusakan tanpa otoritas pusat.
Apa yang ditambahkan oleh Bitcoin asli
Rantai mainan kami mengajarkan kerangka. Bitcoin Asli menambahkan jaringan node peer-to-peer global, tanda tangan digital yang membuktikan siapa yang dapat membelanjakan koin, penyesuaian kesulitan otomatis, model UTXO, memblokir hadiah dan separuh, dan aturan konsensus yang memungkinkan orang asing setuju tanpa kepercayaan. Jelajahi masing-masing dalam penjelasan kami di bawah ini.
Pertanyaan yang sering diajukan
Apakah ini blockchain sungguhan seperti Bitcoin?โผ
Ini adalah model pengajaran yang disederhanakan yang berbagi ide-ide inti Bitcoin โ hashing, chaining, dan proof-of-work โ namun mengabaikan jaringan, tanda tangan digital, dan insentif ekonomi yang membuat Bitcoin aman dalam skala global. Ini untuk belajar, bukan untuk mencari uang.
Apakah saya perlu menjadi seorang programmer?โผ
Keakraban dasar dengan Python memang membantu, tetapi penjelasannya ditulis sehingga siapa pun dapat mengikuti logikanya. Anda dapat membacanya untuk memahami konsepnya bahkan tanpa menjalankan kodenya.
Mengapa penambangan hanya menambahkan angka nol?โผ
Membutuhkan hash untuk memulai dengan angka nol adalah kondisi yang mudah diperiksa tetapi sulit ditemukan. Satu-satunya cara untuk menemukan hash yang valid adalah dengan terus menebak (mengubah nonce), itulah sebabnya penambangan sebenarnya membutuhkan energi.
Apa yang hilang dibandingkan dengan Bitcoin asli?โผ
Jaringan node yang nyata, tanda tangan digital yang membuktikan kepemilikan, protokol peer-to-peer, penyesuaian kesulitan, model UTXO, dan hadiah blok. Tutorial ini mengajarkan struktur data; lihat penjelasan kami untuk sistem lengkap.