Implementasi Blockchain Sederhana di Python
Pendahuluan
Blockchain adalah teknologi yang mendasari cryptocurrency seperti Bitcoin dan Ethereum. Teknologi ini memungkinkan penyimpanan data yang aman, transparan, dan tidak dapat diubah tanpa persetujuan mayoritas jaringan. Dalam artikel ini, kita akan membahas bagaimana mengimplementasikan blockchain sederhana menggunakan Python.
Cara Kerja Blockchain
Blockchain terdiri dari serangkaian blok yang saling terhubung. Setiap blok memiliki:
- Index: Nomor urut blok.
- Timestamp: Waktu pencatatan blok.
- Daftar transaksi: Data transaksi yang disimpan dalam blok.
- Hash blok sebelumnya: Menghubungkan blok saat ini dengan blok sebelumnya.
- Nonce: Angka yang digunakan dalam proses Proof of Work (PoW).
- Hash blok: Identifikasi unik dari blok yang dihasilkan dengan algoritma hash.
Untuk menambang blok, blockchain menggunakan Proof of Work (PoW), yang mengharuskan pencarian nilai nonce sehingga hash blok memenuhi kriteria tertentu.
Implementasi Blockchain di Python
Berikut adalah kode untuk mengimplementasikan blockchain sederhana menggunakan Python:
import hashlib
import json
import time
class Block:
def __init__(self, index, previous_hash, transactions, timestamp=None, nonce=0):
self.index = index
self.previous_hash = previous_hash
self.transactions = transactions
self.timestamp = timestamp or time.time()
self.nonce = nonce
self.hash = self.calculate_hash()
def calculate_hash(self):
"""Menghitung hash blok berdasarkan atributnya."""
block_string = json.dumps({
"index": self.index,
"previous_hash": self.previous_hash,
"transactions": self.transactions,
"timestamp": self.timestamp,
"nonce": self.nonce
}, sort_keys=True).encode()
return hashlib.sha256(block_string).hexdigest()
def mine_block(self, difficulty):
"""Menambang blok menggunakan Proof of Work (PoW)."""
target = "0" * difficulty
while self.hash[:difficulty] != target:
self.nonce += 1
self.hash = self.calculate_hash()
print(f"Block {self.index} mined: {self.hash}")
class Blockchain:
def __init__(self, difficulty=4):
self.chain = [self.create_genesis_block()]
self.pending_transactions = []
self.difficulty = difficulty
def create_genesis_block(self):
"""Membuat blok pertama (genesis block)."""
return Block(0, "0", [], timestamp=time.time())
def get_latest_block(self):
"""Mengambil blok terakhir dalam blockchain."""
return self.chain[-1]
def add_transaction(self, transaction):
"""Menambahkan transaksi ke daftar transaksi tertunda."""
self.pending_transactions.append(transaction)
def mine_pending_transactions(self):
"""Menambang transaksi yang tertunda ke dalam blok baru."""
latest_block = self.get_latest_block()
new_block = Block(index=latest_block.index + 1,
previous_hash=latest_block.hash,
transactions=self.pending_transactions)
new_block.mine_block(self.difficulty)
self.chain.append(new_block)
self.pending_transactions = [] # Reset transaksi setelah ditambang
def is_chain_valid(self):
"""Memeriksa apakah blockchain valid dengan mengecek setiap blok."""
for i in range(1, len(self.chain)):
current_block = self.chain[i]
previous_block = self.chain[i - 1]
if current_block.hash != current_block.calculate_hash():
return False
if current_block.previous_hash != previous_block.hash:
return False
return True
# Contoh penggunaan Blockchain
if __name__ == "__main__":
blockchain = Blockchain(difficulty=4)
print("Menambahkan transaksi...")
blockchain.add_transaction({"from": "Alice", "to": "Bob", "amount": 50})
blockchain.add_transaction({"from": "Charlie", "to": "Dave", "amount": 25})
print("Menambang blok baru...")
blockchain.mine_pending_transactions()
print("Menambahkan transaksi lain...")
blockchain.add_transaction({"from": "Eve", "to": "Frank", "amount": 75})
blockchain.mine_pending_transactions()
print("\nBlockchain valid:", blockchain.is_chain_valid())
print("\nBlockchain data:")
for block in blockchain.chain:
print(f"Index: {block.index}, Hash: {block.hash}, Transactions: {block.transactions}")
Penjelasan Kode
- Class
Block- Menyimpan informasi blok, termasuk hash dan transaksi.
- Memiliki metode
calculate_hash()untuk menghasilkan hash blok. - Metode
mine_block(difficulty)mencari nonce yang memenuhi kriteria hash.
- Class
Blockchain- Menyimpan rantai blok dalam
self.chain. - Memiliki
create_genesis_block()untuk membuat blok pertama. - Metode
add_transaction()menyimpan transaksi sementara sebelum dimasukkan ke dalam blok. - Metode
mine_pending_transactions()menambang transaksi dalam satu blok. - Metode
is_chain_valid()mengecek validitas blockchain dengan memastikan setiap blok sesuai dengan hash sebelumnya.
- Menyimpan rantai blok dalam
- Simulasi Blockchain
- Menambahkan transaksi ke dalam blockchain.
- Menambang blok baru untuk memvalidasi transaksi.
- Memeriksa keabsahan blockchain.
- Menampilkan data blockchain.
Hasil Eksekusi dan Penjelasan
Program blockchain sederhana ini berhasil dieksekusi, menghasilkan output berikut:
Menambahkan transaksi...
Menambang blok baru...
Block 1 mined: 000062fcb96025a85a4a579eb28f0c72d90ab1a7b8da90fbf3b9f1b9ada4c6b5
Menambahkan transaksi lain...
Block 2 mined: 0000c4ca488ad816acb3965eadd23449ac4cbcb8608a08d4802672d51b7de583
Analisis Data Blockchain
- Genesis Block (Blok 0)
- Index: 0
- Hash:
0bd44f7e510b301d9ea691966b4a9570e4681350fb225cef1fe0344fd00603be - Previous Hash:
"0"(Karena ini adalah blok pertama) - Transactions: Kosong (karena blok pertama tidak berisi transaksi)
- Blok 1 (Blok pertama yang ditambang)
- Index: 1
- Hash:
000062fcb96025a85a4a579eb28f0c72d90ab1a7b8da90fbf3b9f1b9ada4c6b5 - Previous Hash:
0bd44f7e510b301d9ea691966b4a9570e4681350fb225cef1fe0344fd00603be - Transactions:
- Alice mengirim 50 ke Bob
- Charlie mengirim 25 ke Dave
- Blok 2 (Blok kedua yang ditambang)
- Index: 2
- Hash:
0000c4ca488ad816acb3965eadd23449ac4cbcb8608a08d4802672d51b7de583 - Previous Hash:
000062fcb96025a85a4a579eb28f0c72d90ab1a7b8da90fbf3b9f1b9ada4c6b5 - Transactions:
- Eve mengirim 75 ke Frank
✅ Blockchain valid: Program memastikan bahwa setiap blok terhubung ke blok sebelumnya dengan hash yang benar.
✅ Proof of Work berhasil: Blok yang ditambang memiliki hash yang diawali dengan “0000”, sesuai dengan tingkat kesulitan (difficulty=4).
✅ Transaksi berhasil disimpan: Data transaksi dicatat dengan benar di dalam blockchain.
Kesimpulan
Blockchain adalah teknologi yang memungkinkan penyimpanan data yang aman dan transparan. Dengan Python, kita dapat mengimplementasikan blockchain sederhana yang memiliki fitur Proof of Work (PoW), penambangan blok, dan validasi data.
Meskipun contoh di atas masih bersifat dasar, pengembang dapat mengembangkannya lebih lanjut dengan fitur seperti smart contracts, jaringan P2P, dan digital signatures untuk menjadikannya lebih mirip dengan blockchain nyata seperti Bitcoin dan Ethereum.