Pelajaran 3

การใช้ Proof-of-Work บน Blockchain

เราจะมุ่งเน้นไปที่การนำวิธีการฉันทามติ Proof-of-Work มาใช้กับบล็อกเชนของเราในเซสชั่นนี้ Proof-of-work เป็นวิธีการรักษาความปลอดภัยที่ต้องใช้ความพยายามในการคำนวณเพื่อเพิ่มบล็อกใหม่ให้กับบล็อกเชน เพื่อป้องกันไม่ให้ผู้ไม่ประสงค์ดีเปลี่ยนเชนอย่างรวดเร็ว

3.1 การทำความเข้าใจหลักฐานการทำงาน

  1. แนะนำแนวคิดของการพิสูจน์การทำงาน: อธิบายว่าการพิสูจน์การทำงานกำหนดให้นักขุดต้องแก้ปริศนาที่คำนวณยากเพื่อเพิ่มบล็อกใหม่ ปริศนานี้เกี่ยวข้องกับการค้นหาค่าแฮชที่ตรงตามเกณฑ์ที่กำหนด เช่น การมีเลขศูนย์นำหน้าตามจำนวนที่กำหนด

    Python 
     pythonCopy รหัส 
     คลาส Blockchain: 
     def __init__(self): 
     self.chain = [] 
     self.difficulty = 4 # ปรับระดับความยากได้ตามต้องการ
    

    รหัสนี้จะเพิ่มแอตทริบิวต์ difficulty ให้กับคลาส Blockchain ซึ่งแสดงถึงจำนวนศูนย์นำหน้าที่ต้องการในแฮช

  2. ใช้วิธี proof_of_work : วิธีการนี้จะสร้างแฮชที่ถูกต้องโดยการปรับค่า nonce จนกว่าแฮชจะตรงตามเกณฑ์ความยาก

    Python 
     pythonCopy รหัส 
     นำเข้า hashlib 
     คลาส Blockchain: 
     def __init__(self): 
     self.chain = [] 
     self.difficulty = 4def proof_of_work(self, block): 
     target = "0" * self.difficulty 
     nonce = 0 ในขณะที่ True: 
     data = str(block) + str(nonce) 
     hash_value = hashlib.sha256(data.encode()).hexdigest()
             ถ้า hash_value[:self.difficulty] == เป้าหมาย: 
     ส่งคืน hash_value 
     nonce += 1
    

    รหัสนี้จะเพิ่มวิธีการ proof_of_work ให้กับคลาส Blockchain โดยจะใช้สตริง target ที่มีจำนวนศูนย์นำหน้าที่ต้องการ และปรับค่า nonce จนกว่าจะพบแฮชที่ถูกต้อง

3.2 การเพิ่ม Proof-of-Work เพื่อบล็อกการสร้าง

  1. อัปเดตวิธี add_block : แก้ไขวิธี add_block เพื่อรวมหลักฐานการทำงาน สร้างแฮชที่ถูกต้องสำหรับบล็อกใหม่โดยใช้วิธี proof_of_work

    Python 
     pythonCopy รหัส 
     คลาส Blockchain: 
     def __init__(self): 
     self.chain = [] 
     self.difficulty = 4def proof_of_work(self, block): 
     # รายละเอียดการใช้งานdef add_block (self, block): 
     Previous_hash = self.chain[-1].แฮช() ถ้าเลน (self.chain) > 0 อื่นไม่มี 
     block.previous_hash = Previous_hash 
     block.mine (ความยากในตัวเอง)
         self.chain.append (บล็อก)
    

    โค้ดนี้จะแก้ไขเมธอด add_block เพื่อตั้ง previous_hash ของบล็อกใหม่ เรียกเมธอด mine บนบล็อกด้วยระดับความยาก และผนวกบล็อกเข้ากับเชน

  2. ใช้วิธี mine ในคลาส Block : วิธี mine จะปรับค่า nonce ของบล็อกจนกว่าจะพบแฮชที่ถูกต้อง

    Python 
     pythonCopy รหัส 
     นำเข้า hashlib 
     คลาส Block: 
     def __init__(self, ดัชนี, การประทับเวลา, ข้อมูล, Previous_hash, nonce=0): 
     self.index = ดัชนี 
     self.timestamp = การประทับเวลา 
     self.data = data 
     self.previous_hash = Previous_hash 
     self.nonce = nonce 
     self.hash = self.calculate_hash()
    
     def คำนวณ_แฮช (ตนเอง): 
     ข้อมูล = str (self.index) + str (self.timestamp) + str (self.data) + str(self.previous_hash) + str(self.nonce)
         กลับ hashlib.sha256(data.encode()).hexdigest()
    
     def ของฉัน (ตนเอง, ความยาก): 
     เป้าหมาย = "0" * ความยาก 
     ในขณะที่ self.hash[:difficulty] != เป้าหมาย: 
     self.nonce += 1 
     self.hash = self.calculate_hash()
    

รหัสนี้จะเพิ่มวิธี mine ให้กับคลาส Block มันจะปรับค่า nonce และคำนวณแฮชของบล็อกใหม่จนกว่าแฮชจะตรงตามเกณฑ์ความยาก

3.3 การทดสอบการนำหลักฐานการปฏิบัติงานไปใช้

  1. สร้างอินสแตนซ์บล็อกเชนใหม่: สร้างอินสแตนซ์วัตถุ Blockchain ใหม่และเพิ่มบล็อกบางส่วนในห่วงโซ่

    Python 
     pythonCopy รหัส 
     blockchain = Blockchain() 
     block1 = Block(1, datetime.now(), "บล็อก 1 ข้อมูล") 
     block2 = บล็อก(2, datetime.now(), "บล็อกข้อมูล 2") 
     block3 = บล็อก(3, datetime.now(), "บล็อก 3 ข้อมูล")
    

    รหัสนี้สร้างวัตถุ Blockchain ใหม่และสามบล็อก

  2. เพิ่มบล็อกลงในบล็อกเชน: ใช้วิธี add_block เพื่อเพิ่มบล็อกลงในเชน

    Python 
     pythonCopy รหัส 
     blockchain.add_block(block1)
    blockchain.add_block(block2)
    blockchain.add_block(block3)
    

    รหัสนี้จะเพิ่มบล็อกลงในบล็อคเชน

  3. พิมพ์บล็อกเชน: แสดงบล็อกของบล็อกเชนและแฮชของบล็อกเหล่านั้น

    Python 
     pythonCopy รหัส 
     สำหรับบล็อกใน blockchain.chain:
     พิมพ์ (f "บล็อก: {block.index}") 
     พิมพ์ (f" แฮช: {block.hash}")
    

    รหัสนี้จะวนซ้ำบล็อกของบล็อกเชนและพิมพ์ดัชนีและค่าแฮช

3.4 บทสรุป

ในบทเรียนนี้ เราได้นำอัลกอริธึมฉันทามติการพิสูจน์การทำงานในบล็อกเชนของเราไปใช้ เรานำเสนอแนวคิดของการพิสูจน์การทำงาน อธิบายว่าคนงานเหมืองต้องแก้ปริศนาที่คำนวณยากได้อย่างไร และนำไปใช้ในบล็อกเชนของเราโดยการปรับค่า nonce จนกว่าจะพบแฮชที่ถูกต้อง นอกจากนี้เรายังทดสอบการใช้งาน Proof-of-Work ด้วยการเพิ่มบล็อกในเชนและแสดงเนื้อหาของบล็อคเชน

Pernyataan Formal
* Investasi Kripto melibatkan risiko besar. Lanjutkan dengan hati-hati. Kursus ini tidak dimaksudkan sebagai nasihat investasi.
* Kursus ini dibuat oleh penulis yang telah bergabung dengan Gate Learn. Setiap opini yang dibagikan oleh penulis tidak mewakili Gate Learn.
Katalog
Pelajaran 3

การใช้ Proof-of-Work บน Blockchain

เราจะมุ่งเน้นไปที่การนำวิธีการฉันทามติ Proof-of-Work มาใช้กับบล็อกเชนของเราในเซสชั่นนี้ Proof-of-work เป็นวิธีการรักษาความปลอดภัยที่ต้องใช้ความพยายามในการคำนวณเพื่อเพิ่มบล็อกใหม่ให้กับบล็อกเชน เพื่อป้องกันไม่ให้ผู้ไม่ประสงค์ดีเปลี่ยนเชนอย่างรวดเร็ว

3.1 การทำความเข้าใจหลักฐานการทำงาน

  1. แนะนำแนวคิดของการพิสูจน์การทำงาน: อธิบายว่าการพิสูจน์การทำงานกำหนดให้นักขุดต้องแก้ปริศนาที่คำนวณยากเพื่อเพิ่มบล็อกใหม่ ปริศนานี้เกี่ยวข้องกับการค้นหาค่าแฮชที่ตรงตามเกณฑ์ที่กำหนด เช่น การมีเลขศูนย์นำหน้าตามจำนวนที่กำหนด

    Python 
     pythonCopy รหัส 
     คลาส Blockchain: 
     def __init__(self): 
     self.chain = [] 
     self.difficulty = 4 # ปรับระดับความยากได้ตามต้องการ
    

    รหัสนี้จะเพิ่มแอตทริบิวต์ difficulty ให้กับคลาส Blockchain ซึ่งแสดงถึงจำนวนศูนย์นำหน้าที่ต้องการในแฮช

  2. ใช้วิธี proof_of_work : วิธีการนี้จะสร้างแฮชที่ถูกต้องโดยการปรับค่า nonce จนกว่าแฮชจะตรงตามเกณฑ์ความยาก

    Python 
     pythonCopy รหัส 
     นำเข้า hashlib 
     คลาส Blockchain: 
     def __init__(self): 
     self.chain = [] 
     self.difficulty = 4def proof_of_work(self, block): 
     target = "0" * self.difficulty 
     nonce = 0 ในขณะที่ True: 
     data = str(block) + str(nonce) 
     hash_value = hashlib.sha256(data.encode()).hexdigest()
             ถ้า hash_value[:self.difficulty] == เป้าหมาย: 
     ส่งคืน hash_value 
     nonce += 1
    

    รหัสนี้จะเพิ่มวิธีการ proof_of_work ให้กับคลาส Blockchain โดยจะใช้สตริง target ที่มีจำนวนศูนย์นำหน้าที่ต้องการ และปรับค่า nonce จนกว่าจะพบแฮชที่ถูกต้อง

3.2 การเพิ่ม Proof-of-Work เพื่อบล็อกการสร้าง

  1. อัปเดตวิธี add_block : แก้ไขวิธี add_block เพื่อรวมหลักฐานการทำงาน สร้างแฮชที่ถูกต้องสำหรับบล็อกใหม่โดยใช้วิธี proof_of_work

    Python 
     pythonCopy รหัส 
     คลาส Blockchain: 
     def __init__(self): 
     self.chain = [] 
     self.difficulty = 4def proof_of_work(self, block): 
     # รายละเอียดการใช้งานdef add_block (self, block): 
     Previous_hash = self.chain[-1].แฮช() ถ้าเลน (self.chain) > 0 อื่นไม่มี 
     block.previous_hash = Previous_hash 
     block.mine (ความยากในตัวเอง)
         self.chain.append (บล็อก)
    

    โค้ดนี้จะแก้ไขเมธอด add_block เพื่อตั้ง previous_hash ของบล็อกใหม่ เรียกเมธอด mine บนบล็อกด้วยระดับความยาก และผนวกบล็อกเข้ากับเชน

  2. ใช้วิธี mine ในคลาส Block : วิธี mine จะปรับค่า nonce ของบล็อกจนกว่าจะพบแฮชที่ถูกต้อง

    Python 
     pythonCopy รหัส 
     นำเข้า hashlib 
     คลาส Block: 
     def __init__(self, ดัชนี, การประทับเวลา, ข้อมูล, Previous_hash, nonce=0): 
     self.index = ดัชนี 
     self.timestamp = การประทับเวลา 
     self.data = data 
     self.previous_hash = Previous_hash 
     self.nonce = nonce 
     self.hash = self.calculate_hash()
    
     def คำนวณ_แฮช (ตนเอง): 
     ข้อมูล = str (self.index) + str (self.timestamp) + str (self.data) + str(self.previous_hash) + str(self.nonce)
         กลับ hashlib.sha256(data.encode()).hexdigest()
    
     def ของฉัน (ตนเอง, ความยาก): 
     เป้าหมาย = "0" * ความยาก 
     ในขณะที่ self.hash[:difficulty] != เป้าหมาย: 
     self.nonce += 1 
     self.hash = self.calculate_hash()
    

รหัสนี้จะเพิ่มวิธี mine ให้กับคลาส Block มันจะปรับค่า nonce และคำนวณแฮชของบล็อกใหม่จนกว่าแฮชจะตรงตามเกณฑ์ความยาก

3.3 การทดสอบการนำหลักฐานการปฏิบัติงานไปใช้

  1. สร้างอินสแตนซ์บล็อกเชนใหม่: สร้างอินสแตนซ์วัตถุ Blockchain ใหม่และเพิ่มบล็อกบางส่วนในห่วงโซ่

    Python 
     pythonCopy รหัส 
     blockchain = Blockchain() 
     block1 = Block(1, datetime.now(), "บล็อก 1 ข้อมูล") 
     block2 = บล็อก(2, datetime.now(), "บล็อกข้อมูล 2") 
     block3 = บล็อก(3, datetime.now(), "บล็อก 3 ข้อมูล")
    

    รหัสนี้สร้างวัตถุ Blockchain ใหม่และสามบล็อก

  2. เพิ่มบล็อกลงในบล็อกเชน: ใช้วิธี add_block เพื่อเพิ่มบล็อกลงในเชน

    Python 
     pythonCopy รหัส 
     blockchain.add_block(block1)
    blockchain.add_block(block2)
    blockchain.add_block(block3)
    

    รหัสนี้จะเพิ่มบล็อกลงในบล็อคเชน

  3. พิมพ์บล็อกเชน: แสดงบล็อกของบล็อกเชนและแฮชของบล็อกเหล่านั้น

    Python 
     pythonCopy รหัส 
     สำหรับบล็อกใน blockchain.chain:
     พิมพ์ (f "บล็อก: {block.index}") 
     พิมพ์ (f" แฮช: {block.hash}")
    

    รหัสนี้จะวนซ้ำบล็อกของบล็อกเชนและพิมพ์ดัชนีและค่าแฮช

3.4 บทสรุป

ในบทเรียนนี้ เราได้นำอัลกอริธึมฉันทามติการพิสูจน์การทำงานในบล็อกเชนของเราไปใช้ เรานำเสนอแนวคิดของการพิสูจน์การทำงาน อธิบายว่าคนงานเหมืองต้องแก้ปริศนาที่คำนวณยากได้อย่างไร และนำไปใช้ในบล็อกเชนของเราโดยการปรับค่า nonce จนกว่าจะพบแฮชที่ถูกต้อง นอกจากนี้เรายังทดสอบการใช้งาน Proof-of-Work ด้วยการเพิ่มบล็อกในเชนและแสดงเนื้อหาของบล็อคเชน

Pernyataan Formal
* Investasi Kripto melibatkan risiko besar. Lanjutkan dengan hati-hati. Kursus ini tidak dimaksudkan sebagai nasihat investasi.
* Kursus ini dibuat oleh penulis yang telah bergabung dengan Gate Learn. Setiap opini yang dibagikan oleh penulis tidak mewakili Gate Learn.