สร้างบล็อคเชนของคุณเอง
📖 12 นาทีอ่าน · 🐍 Python
Quick Answer
วิธีที่ดีที่สุดในการทำความเข้าใจบล็อคเชนคือการสร้างบล็อคเชนขึ้นมา ใน Python ประมาณ 50 บรรทัด คุณสามารถสร้างบล็อกเชนของเล่นที่ใช้งานได้ด้วยการแฮช ห่วงโซ่บล็อก การขุดแบบพิสูจน์การทำงาน และการตรวจจับการงัดแงะ ซึ่งเป็นแนวคิดหลักเดียวกันกับการรักษาความปลอดภัยของ Bitcoin ไม่จำเป็นต้องมีความรู้ด้านบล็อกเชนมาก่อน
⚠️ นี่คือโมเดลการเรียนรู้ ไม่ใช่โค้ดที่ใช้งานจริง มันสอนโครงสร้างข้อมูลที่อยู่เบื้องหลัง Bitcoin ซึ่งไม่ใช่เงินที่ปลอดภัยและไม่ควรมีมูลค่าที่แท้จริง
ขั้นตอนที่ 1 — บล็อกและลายนิ้วมือ
บล็อกเก็บข้อมูลบางส่วน (ธุรกรรม) ลิงก์ไปยังบล็อกก่อนหน้า และ "nonce" (ตัวเลขที่เราสามารถเปลี่ยนแปลงได้) ข้อมูลประจำตัวของมันคือแฮช SHA-256 ของเนื้อหาทั้งหมด - เปลี่ยนอักขระหนึ่งตัวและแฮชจะเปลี่ยนทั้งหมด แฮชนั้นเป็นลายนิ้วมือที่เห็นได้ชัดของบล็อก
import hashlib, json, time
class Block:
def __init__(self, index, transactions, previous_hash, nonce=0):
self.index = index
self.timestamp = time.time()
self.transactions = transactions
self.previous_hash = previous_hash
self.nonce = nonce
def hash(self):
# A block's fingerprint = SHA-256 of all its contents.
payload = json.dumps({
"index": self.index,
"timestamp": self.timestamp,
"transactions": self.transactions,
"previous_hash": self.previous_hash,
"nonce": self.nonce,
}, sort_keys=True).encode()
return hashlib.sha256(payload).hexdigest()ขั้นตอนที่ 2 — การขุด (หลักฐานการทำงาน)
การขุดหมายถึงการค้นหาแฮชที่ตรงตามกฎ — ในที่นี้เริ่มต้นด้วยจำนวนศูนย์ที่กำหนด ไม่มีสูตร; คุณบังคับโนนซ์อย่างดุร้ายจนกระทั่งแฮชเข้ากัน การตรวจสอบวิธีแก้ปัญหาทำได้ทันที แต่การค้นหาวิธีแก้ไขนั้นต้องใช้ความพยายาม ความไม่สมดุลนั้นเป็นหัวใจสำคัญของ Proof of Work
DIFFICULTY = 4 # require this many leading zeros
def mine(block):
# Proof of Work: keep changing the nonce until the hash
# starts with DIFFICULTY zeros. There is no shortcut —
# you just have to guess, which is what costs energy.
target = "0" * DIFFICULTY
while not block.hash().startswith(target):
block.nonce += 1
return block.hash()ขั้นตอนที่ 3 – การผูกมัดบล็อก
แต่ละบล็อกใหม่จะเก็บแฮชของบล็อกก่อนหน้า โดยเชื่อมเข้าด้วยกันเป็นลูกโซ่ที่ขึ้นต้นด้วยบล็อก "genesis" แบบฮาร์ดโค้ด เนื่องจากทุกบล็อกกระทำต่อบล็อกที่อยู่ก่อนหน้า ลำดับจึงได้รับการแก้ไขและประวัติถูกเชื่อมโยงเข้าด้วยกัน
class Blockchain:
def __init__(self):
# The genesis block — the very first, hard-coded block.
genesis = Block(0, [{"note": "genesis"}], "0")
mine(genesis)
self.chain = [genesis]
def add_block(self, transactions):
prev = self.chain[-1]
block = Block(len(self.chain), transactions, prev.hash())
mine(block) # do the work
self.chain.append(block)
return blockขั้นตอนที่ 4 — ตรวจสอบความถูกต้องของห่วงโซ่
หากต้องการเชื่อถือ chain คุณต้องตรวจสอบอีกครั้ง: ทุกบล็อกจะต้องชี้ไปที่แฮชจริงของบล็อกก่อนหน้า และทุกบล็อกจะต้องเป็นไปตามกฎการพิสูจน์การทำงาน หากการตรวจสอบอย่างใดอย่างหนึ่งล้มเหลว แสดงว่าเชนไม่ถูกต้อง
def is_valid(chain):
for i in range(1, len(chain)):
current, previous = chain[i], chain[i - 1]
# 1) Each block must point to the real hash of the one before it.
if current.previous_hash != previous.hash():
return False
# 2) Each block must satisfy the proof-of-work rule.
if not current.hash().startswith("0" * DIFFICULTY):
return False
return Trueขั้นตอนที่ 5 — เรียกใช้และลองโกง
ตอนนี้เพิ่มสองสามช่วงตึกแล้วแก้ไขธุรกรรมเก่า ทันทีที่คุณเปลี่ยนข้อมูลที่ผ่านมา แฮชของบล็อกนั้นจะไม่ตรงกับสิ่งที่บล็อกถัดไปคาดหวังอีกต่อไป และการตรวจสอบความถูกต้องจะส่งคืนค่าเท็จทันที นี่คือสาเหตุโดยย่อว่าทำไมคุณไม่สามารถเขียนประวัติศาสตร์ของ Bitcoin ใหม่อย่างเงียบๆ ได้
bc = Blockchain()
bc.add_block([{"from": "Alice", "to": "Bob", "amount": 5}])
bc.add_block([{"from": "Bob", "to": "Carol", "amount": 2}])
print("Chain valid?", is_valid(bc.chain)) # True
# Now try to cheat: tamper with an old transaction.
bc.chain[1].transactions[0]["amount"] = 5000
print("Chain valid?", is_valid(bc.chain)) # False — tampering is caught!🔑 ประเด็นสำคัญ
บล็อกเชนเป็นเพียงโครงสร้างข้อมูลบวกกฎ: แฮชแต่ละบล็อก เชื่อมโยงกับบล็อกสุดท้าย และทำให้การเพิ่มบล็อกมีค่าใช้จ่ายสูงผ่านการพิสูจน์การทำงาน การงัดแงะจะทำลายห่วงโซ่ของแฮช ซึ่งแน่นอนว่า Bitcoin จะสามารถเห็นการงัดแงะได้โดยไม่ต้องอาศัยอำนาจจากส่วนกลาง
สิ่งที่ Bitcoin จริงเพิ่มเข้ามา
ห่วงโซ่ของเล่นของเราสอนเรื่องโครงกระดูก Real Bitcoin เพิ่มเครือข่ายโหนดแบบ peer-to-peer ทั่วโลก ลายเซ็นดิจิทัลที่พิสูจน์ว่าใครสามารถใช้เหรียญได้ การปรับความยากอัตโนมัติ โมเดล UTXO รางวัลบล็อกและการลดครึ่งหนึ่ง และกฎฉันทามติที่ให้คนแปลกหน้าตกลงโดยไม่ไว้วางใจ สำรวจแต่ละรายการในตัวอธิบายของเราด้านล่าง
คำถามที่พบบ่อย
นี่เป็นบล็อคเชนจริงเช่น Bitcoin หรือไม่?▼
มันเป็นรูปแบบการสอนที่เรียบง่ายซึ่งแบ่งปันแนวคิดหลักของ Bitcoin — การแฮช การเชื่อมโยง และการพิสูจน์การทำงาน — แต่ตัดการเชื่อมต่อเครือข่าย ลายเซ็นดิจิทัล และสิ่งจูงใจทางเศรษฐกิจที่ทำให้ Bitcoin ปลอดภัยในระดับโลก มีไว้เพื่อการเรียนรู้ ไม่ใช่เพื่อการหาเงิน
ฉันจำเป็นต้องเป็นโปรแกรมเมอร์หรือไม่?▼
ความคุ้นเคยขั้นพื้นฐานกับ Python ช่วยได้ แต่คำอธิบายถูกเขียนขึ้นเพื่อให้ทุกคนสามารถปฏิบัติตามตรรกะได้ คุณสามารถอ่านเพื่อทำความเข้าใจแนวคิดต่างๆ ได้แม้ว่าจะไม่ได้รันโค้ดก็ตาม
ทำไมการขุดถึงเพิ่มศูนย์?▼
การกำหนดให้แฮชเริ่มต้นด้วยเลขศูนย์เป็นเงื่อนไขที่ตรวจสอบได้ง่ายแต่หายาก วิธีเดียวที่จะค้นหาแฮชที่ถูกต้องคือการเดาต่อไป (เปลี่ยน nonce) ซึ่งเป็นสาเหตุที่ทำให้การขุดจริงต้องใช้พลังงาน
สิ่งที่ขาดหายไปเมื่อเทียบกับ Bitcoin จริง?▼
เครือข่ายโหนดที่แท้จริง ลายเซ็นดิจิทัลที่พิสูจน์ความเป็นเจ้าของ โปรโตคอลแบบเพียร์ทูเพียร์ การปรับความยาก โมเดล UTXO และรางวัลบล็อก บทช่วยสอนนี้จะสอนโครงสร้างข้อมูล ดูคำอธิบายของเราสำหรับระบบทั้งหมด