الدرس رقم 3

Triển khai Bằng chứng công việc trên Blockchain

Chúng tôi sẽ tập trung triển khai phương pháp đồng thuận bằng chứng công việc trên blockchain của chúng tôi trong phiên này. Bằng chứng công việc là một phương pháp bảo mật đòi hỏi nỗ lực tính toán để thêm một khối mới vào chuỗi khối, ngăn chặn các tác nhân xấu thay đổi chuỗi nhanh chóng.

3.1 Hiểu về Bằng chứng công việc

  1. Giới thiệu khái niệm bằng chứng công việc: Giải thích rằng bằng chứng công việc yêu cầu người khai thác phải giải một câu đố khó về mặt tính toán để thêm một khối mới. Câu đố này liên quan đến việc tìm một giá trị băm đáp ứng các tiêu chí nhất định, chẳng hạn như có một số số 0 đứng đầu cụ thể.

    Python 
     pythonCopy code 
     class Blockchain: 
     def __init__(self): 
     self.chain = [] 
     self.difficulty = 4 # Điều chỉnh độ khó theo nhu cầu
    

    Mã này thêm một thuộc tính difficulty vào lớp Blockchain , đại diện cho số lượng số 0 đứng đầu được yêu cầu trong hàm băm.

  2. Triển khai phương thức proof_of_work : Phương pháp này sẽ tạo ra hàm băm hợp lệ bằng cách điều chỉnh giá trị nonce cho đến khi hàm băm đáp ứng tiêu chí độ khó.

    Python 
     pythonCopy code 
     import hashlib 
     class Blockchain: 
     def __init__(self): 
     self.chain = [] 
     self.difficulty = 4def proof_of_work(self, block): 
     target = "0" * self.difficulty 
     nonce = 0while Đúng: 
     data = str(block) + str(nonce) 
     hash_value = hashlib.sha256(data.encode()).hexdigest()
             nếu hash_value[:self.difficult] == mục tiêu: 
     trả về hash_value 
     nonce += 1
    

    Mã này thêm phương thức proof_of_work vào lớp Blockchain . Nó sử dụng một chuỗi target với số lượng số 0 đứng đầu được yêu cầu và điều chỉnh giá trị nonce cho đến khi tìm thấy hàm băm hợp lệ.

3.2 Thêm Bằng chứng Công việc vào Tạo Khối

  1. Cập nhật phương thức add_block : Sửa đổi phương thức add_block để bao gồm bằng chứng công việc. Tạo hàm băm hợp lệ cho khối mới bằng phương thức proof_of_work .

    Python 
     pythonSao chép mã 
     lớp Blockchain: 
     def __init__(self): 
     self.chain = [] 
     self.difficulty = 4def proof_of_work(self, block): 
     # Chi tiết triển khaidef add_block(self, block): 
     previous_hash = self.chain[-1].hash() if len(self.chain) > 0 khác Không có 
     block.previous_hash = previous_hash 
     block.mine(self.difficulty)
         self.chain.append(block)
    

    Mã này sửa đổi phương thức add_block để đặt previous_hash của khối mới, gọi phương thức mine trên khối với mức độ khó và nối khối vào chuỗi.

  2. Triển khai phương thức mine trong lớp Block : Phương thức mine sẽ điều chỉnh giá trị nonce của khối cho đến khi tìm thấy hàm băm hợp lệ.

    Python 
     pythonSao chép mã 
     nhập hashlib 
     lớp Khối: 
     def __init__(self, index, timestamp, data, previous_hash, nonce=0): 
     self.index = chỉ mục 
     self.timestamp = dấu thời gian 
     self.data = data 
     tự.previous_hash = previous_hash 
     self.nonce = nonce 
     self.hash = self.calcate_hash()
    
     def tính_hash(self): 
     dữ liệu = str(self.index) + str(self.timestamp) + str(self.data) + str(self.previous_hash) + str(self.nonce)
         trả về hashlib.sha256(data.encode()).hexdigest()
    
     def của tôi(bản thân, độ khó): 
     mục tiêu = "0" * độ khó 
     trong khi self.hash[:difficult] != target: 
     self.nonce += 1 
     self.hash = self.calcate_hash()
    

Mã này thêm phương thức mine vào lớp Block . Nó điều chỉnh giá trị nonce và tính toán lại hàm băm của khối cho đến khi hàm băm đáp ứng tiêu chí độ khó.

3.3 Kiểm tra việc triển khai Bằng chứng công việc

  1. Tạo một phiên bản blockchain mới: Khởi tạo một đối tượng Blockchain mới và thêm một số khối vào chuỗi.

    Python 
     pythonSao chép mã 
     blockchain = Blockchain() 
     block1 = Block(1, datetime.now(), "Chặn dữ liệu 1") 
     block2 = Block(2, datetime.now(), "Dữ liệu khối 2") 
     block3 = Block(3, datetime.now(), "Dữ liệu khối 3")
    

    Mã này tạo một đối tượng Blockchain mới và ba khối.

  2. Thêm khối vào chuỗi khối: Sử dụng phương thức add_block để thêm khối vào chuỗi.

    Python 
     pythonSao chép mã 
     blockchain.add_block(block1)
    blockchain.add_block(block2)
    blockchain.add_block(block3)
    

    Mã này thêm các khối vào blockchain.

  3. In blockchain: Hiển thị các khối của blockchain và hàm băm của chúng.

    Python 
     pythonSao chép mã 
     cho khối trong blockchain.chain:
     print(f"Block: {block.index}") 
     print(f"Hash: {block.hash}")
    

    Mã này lặp lại các khối của blockchain và in các giá trị chỉ mục và hàm băm của chúng.

3.4 Kết luận

Trong bài học này, chúng tôi đã triển khai thuật toán đồng thuận bằng chứng công việc trong blockchain của mình. Chúng tôi đã giới thiệu khái niệm bằng chứng công việc, giải thích cách nó yêu cầu người khai thác giải một câu đố khó về mặt tính toán và triển khai nó trong chuỗi khối của chúng tôi bằng cách điều chỉnh giá trị nonce cho đến khi tìm thấy hàm băm hợp lệ. Chúng tôi cũng đã thử nghiệm việc triển khai bằng chứng công việc bằng cách thêm các khối vào chuỗi và hiển thị nội dung của chuỗi khối.

إخلاء المسؤولية
* ينطوي الاستثمار في العملات الرقمية على مخاطر كبيرة. فيرجى المتابعة بحذر. ولا تهدف الدورة التدريبية إلى تقديم المشورة الاستثمارية.
* تم إنشاء الدورة التدريبية من قبل المؤلف الذي انضم إلى مركز التعلّم في Gate. ويُرجى العلم أنّ أي رأي يشاركه المؤلف لا يمثّل مركز التعلّم في Gate.
الكتالوج
الدرس رقم 3

Triển khai Bằng chứng công việc trên Blockchain

Chúng tôi sẽ tập trung triển khai phương pháp đồng thuận bằng chứng công việc trên blockchain của chúng tôi trong phiên này. Bằng chứng công việc là một phương pháp bảo mật đòi hỏi nỗ lực tính toán để thêm một khối mới vào chuỗi khối, ngăn chặn các tác nhân xấu thay đổi chuỗi nhanh chóng.

3.1 Hiểu về Bằng chứng công việc

  1. Giới thiệu khái niệm bằng chứng công việc: Giải thích rằng bằng chứng công việc yêu cầu người khai thác phải giải một câu đố khó về mặt tính toán để thêm một khối mới. Câu đố này liên quan đến việc tìm một giá trị băm đáp ứng các tiêu chí nhất định, chẳng hạn như có một số số 0 đứng đầu cụ thể.

    Python 
     pythonCopy code 
     class Blockchain: 
     def __init__(self): 
     self.chain = [] 
     self.difficulty = 4 # Điều chỉnh độ khó theo nhu cầu
    

    Mã này thêm một thuộc tính difficulty vào lớp Blockchain , đại diện cho số lượng số 0 đứng đầu được yêu cầu trong hàm băm.

  2. Triển khai phương thức proof_of_work : Phương pháp này sẽ tạo ra hàm băm hợp lệ bằng cách điều chỉnh giá trị nonce cho đến khi hàm băm đáp ứng tiêu chí độ khó.

    Python 
     pythonCopy code 
     import hashlib 
     class Blockchain: 
     def __init__(self): 
     self.chain = [] 
     self.difficulty = 4def proof_of_work(self, block): 
     target = "0" * self.difficulty 
     nonce = 0while Đúng: 
     data = str(block) + str(nonce) 
     hash_value = hashlib.sha256(data.encode()).hexdigest()
             nếu hash_value[:self.difficult] == mục tiêu: 
     trả về hash_value 
     nonce += 1
    

    Mã này thêm phương thức proof_of_work vào lớp Blockchain . Nó sử dụng một chuỗi target với số lượng số 0 đứng đầu được yêu cầu và điều chỉnh giá trị nonce cho đến khi tìm thấy hàm băm hợp lệ.

3.2 Thêm Bằng chứng Công việc vào Tạo Khối

  1. Cập nhật phương thức add_block : Sửa đổi phương thức add_block để bao gồm bằng chứng công việc. Tạo hàm băm hợp lệ cho khối mới bằng phương thức proof_of_work .

    Python 
     pythonSao chép mã 
     lớp Blockchain: 
     def __init__(self): 
     self.chain = [] 
     self.difficulty = 4def proof_of_work(self, block): 
     # Chi tiết triển khaidef add_block(self, block): 
     previous_hash = self.chain[-1].hash() if len(self.chain) > 0 khác Không có 
     block.previous_hash = previous_hash 
     block.mine(self.difficulty)
         self.chain.append(block)
    

    Mã này sửa đổi phương thức add_block để đặt previous_hash của khối mới, gọi phương thức mine trên khối với mức độ khó và nối khối vào chuỗi.

  2. Triển khai phương thức mine trong lớp Block : Phương thức mine sẽ điều chỉnh giá trị nonce của khối cho đến khi tìm thấy hàm băm hợp lệ.

    Python 
     pythonSao chép mã 
     nhập hashlib 
     lớp Khối: 
     def __init__(self, index, timestamp, data, previous_hash, nonce=0): 
     self.index = chỉ mục 
     self.timestamp = dấu thời gian 
     self.data = data 
     tự.previous_hash = previous_hash 
     self.nonce = nonce 
     self.hash = self.calcate_hash()
    
     def tính_hash(self): 
     dữ liệu = str(self.index) + str(self.timestamp) + str(self.data) + str(self.previous_hash) + str(self.nonce)
         trả về hashlib.sha256(data.encode()).hexdigest()
    
     def của tôi(bản thân, độ khó): 
     mục tiêu = "0" * độ khó 
     trong khi self.hash[:difficult] != target: 
     self.nonce += 1 
     self.hash = self.calcate_hash()
    

Mã này thêm phương thức mine vào lớp Block . Nó điều chỉnh giá trị nonce và tính toán lại hàm băm của khối cho đến khi hàm băm đáp ứng tiêu chí độ khó.

3.3 Kiểm tra việc triển khai Bằng chứng công việc

  1. Tạo một phiên bản blockchain mới: Khởi tạo một đối tượng Blockchain mới và thêm một số khối vào chuỗi.

    Python 
     pythonSao chép mã 
     blockchain = Blockchain() 
     block1 = Block(1, datetime.now(), "Chặn dữ liệu 1") 
     block2 = Block(2, datetime.now(), "Dữ liệu khối 2") 
     block3 = Block(3, datetime.now(), "Dữ liệu khối 3")
    

    Mã này tạo một đối tượng Blockchain mới và ba khối.

  2. Thêm khối vào chuỗi khối: Sử dụng phương thức add_block để thêm khối vào chuỗi.

    Python 
     pythonSao chép mã 
     blockchain.add_block(block1)
    blockchain.add_block(block2)
    blockchain.add_block(block3)
    

    Mã này thêm các khối vào blockchain.

  3. In blockchain: Hiển thị các khối của blockchain và hàm băm của chúng.

    Python 
     pythonSao chép mã 
     cho khối trong blockchain.chain:
     print(f"Block: {block.index}") 
     print(f"Hash: {block.hash}")
    

    Mã này lặp lại các khối của blockchain và in các giá trị chỉ mục và hàm băm của chúng.

3.4 Kết luận

Trong bài học này, chúng tôi đã triển khai thuật toán đồng thuận bằng chứng công việc trong blockchain của mình. Chúng tôi đã giới thiệu khái niệm bằng chứng công việc, giải thích cách nó yêu cầu người khai thác giải một câu đố khó về mặt tính toán và triển khai nó trong chuỗi khối của chúng tôi bằng cách điều chỉnh giá trị nonce cho đến khi tìm thấy hàm băm hợp lệ. Chúng tôi cũng đã thử nghiệm việc triển khai bằng chứng công việc bằng cách thêm các khối vào chuỗi và hiển thị nội dung của chuỗi khối.

إخلاء المسؤولية
* ينطوي الاستثمار في العملات الرقمية على مخاطر كبيرة. فيرجى المتابعة بحذر. ولا تهدف الدورة التدريبية إلى تقديم المشورة الاستثمارية.
* تم إنشاء الدورة التدريبية من قبل المؤلف الذي انضم إلى مركز التعلّم في Gate. ويُرجى العلم أنّ أي رأي يشاركه المؤلف لا يمثّل مركز التعلّم في Gate.