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.
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.