Perkenalkan konsep bukti kerja: Jelaskan bahwa bukti kerja mengharuskan penambang memecahkan teka-teki komputasi yang sulit untuk menambahkan blok baru. Teka-teki ini melibatkan pencarian nilai hash yang memenuhi kriteria tertentu, seperti memiliki sejumlah angka nol di depan.
Python 
 pythonSalin kode 
 kelas Blockchain: 
 def __init__(self): 
 self.chain = [] 
 self.difficulty = 4 # Sesuaikan tingkat kesulitan sesuai kebutuhan
Kode ini menambahkan atribut difficulty ke kelas Blockchain , yang mewakili jumlah angka nol di depan yang diperlukan dalam hash.
Menerapkan metode proof_of_work : Metode ini akan menghasilkan hash yang valid dengan menyesuaikan nilai nonce hingga hash memenuhi kriteria kesulitan.
Python 
 pythonSalin kode 
 impor hashlib 
 kelas Blockchain: 
 def __init__(mandiri): 
 self.chain = [] 
 self.difficulty = 4def proof_of_work(self, block): 
 target = "0" * self.difficulty 
 nonce = 0sementara Benar: 
 data = str(block) + str(nonce) 
 hash_value = hashlib.sha256(data.encode()).hexdigest()
         jika hash_value[:self.difficulty] == target: 
 mengembalikan nilai_hash 
 nonce += 1
Kode ini menambahkan metode proof_of_work ke kelas Blockchain . Ia menggunakan string target dengan jumlah nol di depan yang diperlukan dan menyesuaikan nilai nonce hingga hash yang valid ditemukan.
Perbarui metode add_block : Ubah metode add_block untuk menyertakan bukti kerja. Hasilkan hash yang valid untuk blok baru menggunakan metode proof_of_work .
Python 
 pythonSalin kode 
 kelas Blockchain: 
 def __init__(mandiri): 
 self.chain = [] 
 self.difficulty = 4def proof_of_work(self, block): 
 # Detail implementasidef add_block(self, block): 
 previous_hash = diri.rantai[-1].hash() if len(self.chain) > 0 lain Tidak ada 
 blok.previous_hash = previous_hash 
 block.mine(self.difficulty)
     self.chain.append(blok)
Kode ini memodifikasi metode add_block untuk menyetel previous_hash dari blok baru, memanggil metode mine pada blok dengan tingkat kesulitan, dan menambahkan blok ke rantai.
Menerapkan metode mine di kelas Block : Metode mine akan menyesuaikan nilai nonce blok hingga hash yang valid ditemukan.
Python 
 pythonSalin kode 
 impor hashlib 
 kelas Blok: 
 def __init__(mandiri, indeks, stempel waktu, data, hash_sebelumnya, nonce=0): 
 self.index = indeks 
 self.timestamp = stempel waktu 
 self.data = data 
 diri.previous_hash = previous_hash 
 self.nonce = nonce 
 self.hash = self.calculate_hash()
 def hitung_hash(mandiri): 
 data = str(self.index) + str(self.cap waktu) + str(data diri) + str(self.previous_hash) + str(diri.nonce)
     kembalikan hashlib.sha256(data.encode()).hexdigest()
 def milikku(mandiri, kesulitan): 
 target = "0" * kesulitan 
 sementara self.hash[:kesulitan] != target: 
 self.nonce += 1 
 self.hash = self.calculate_hash()
Kode ini menambahkan metode mine ke kelas Block . Ini menyesuaikan nilai nonce dan menghitung ulang hash blok hingga hash memenuhi kriteria kesulitan.
Buat instance blockchain baru: Buat instance objek Blockchain baru dan tambahkan beberapa blok ke rantai.
Python 
 pythonSalin kode 
 blockchain = Blockchain() 
 blok1 = Blok(1, datetime.now(), "Blokir 1 Data") 
 blok2 = Blokir(2, tanggalwaktu.sekarang(), "Blokir 2 Data") 
 blok3 = Blokir(3, tanggalwaktu.sekarang(), "Blokir 3 Data")
Kode ini membuat objek Blockchain baru dan tiga blok.
Tambahkan blok ke blockchain: Gunakan metode add_block untuk menambahkan blok ke rantai.
Python 
 pythonSalin kode 
 blockchain.add_block(block1)
blockchain.add_block(blok2)
blockchain.tambahkan_blok(blok3)
Kode ini menambahkan blok ke blockchain.
Cetak blockchain: Menampilkan blok blockchain dan hashnya.
Python 
 pythonSalin kode 
 untuk blok di blockchain.chain:
 print(f"Blok: {block.index}") 
 print(f"Hash: {block.hash}")
Kode ini mengulangi blok-blok blockchain dan mencetak indeks dan nilai hashnya.
Dalam pelajaran ini, kami telah menerapkan algoritma konsensus bukti kerja di blockchain kami. Kami memperkenalkan konsep proof-of-work, menjelaskan bagaimana hal ini mengharuskan penambang untuk memecahkan teka-teki komputasi yang sulit, dan menerapkannya di blockchain kami dengan menyesuaikan nilai nonce hingga hash yang valid ditemukan. Kami juga menguji penerapan bukti kerja dengan menambahkan blok ke rantai dan menampilkan konten blockchain.