ระบบล็อก/ปลดล็อก (Locks) เจาะลึก: กุญแจล็อกที่ติดมากับเงินแต่ละก้อนคืออะไร ทำไมเปิดได้แค่เจ้าของ
เจาะลึกเงื่อนไขใน Script ล็อก และการใช้ Digital Signature ปลดล็อกเงินโดยไม่ต้องโชว์ Private Key
ตอนที่ 15 เรารู้ว่าเงินทุกก้อนเกิดจากรางวัลนักขุด (Block Reward)
ก้อนที่ยังไม่ได้ใช้เรียกว่า ผลลัพธ์ธุรกรรมที่ยังไม่ได้ใช้ (UTXO)
และค่าธรรมเนียมคือเศษที่เราเลือกไม่ทอนกลับหาตัวเอง
ตลอดหลายตอนที่ผ่านมา เราพูดถึง “กุญแจล็อก” แบบผ่าน ๆ มาตลอด
วันนี้ถึงเวลาผ่ามันดูจริง ๆ แล้วครับ
ไอ้กุญแจล็อกนี่มันคืออะไร
เขียนด้วยภาษาอะไร
แล้วทำไมทั้งเครือข่ายถึงเชื่อว่าเปิดได้แค่เจ้าของตัวจริง
🔐 กุญแจล็อกคืออะไร? ตอบ: ชุดเงื่อนไขที่แปะอยู่บนเงินแต่ละก้อน
เริ่มจากคำถามก่อน
อะไรเป็นตัวกันไม่ให้บิทคอยน์ของเราถูกขโมย
คำตอบคือ
ผลลัพธ์ธุรกรรม (Transaction Output) ทุกก้อนมี ระบบล็อก (Lock) ติดมาด้วยเสมอ
ล็อกนี้คือ ชุดเงื่อนไข ที่เขียนกำกับไว้ว่าต้องทำอะไรบ้างถึงจะหยิบก้อนนี้ไปใช้ได้
ล็อกแบบที่เจอบ่อยสุดอ่านแล้วประมาณว่า
“ก้อนนี้ล็อกไว้กับที่อยู่ (Address) เลขนี้นะ
ใครจะใช้ ต้องพิสูจน์ให้ได้ว่าเป็นเจ้าของที่อยู่นี้”
ในเมื่อเงินทุกก้อนที่เราเคยรับมา มีเงื่อนไขแบบนี้ติดอยู่
คนอื่นเลยหยิบของเราไปใช้ไม่ได้
แม้ทั้งสมุดบัญชีจะเปิดให้ทุกคนอ่านก็ตาม
🛠️ แล้วล็อกถูกใส่ตอนไหน? ตอบ: ตอนสร้างก้อนใหม่นี่แหละ
จากตอนที่ 14–15
ธุรกรรมบิทคอยน์คือการหยิบก้อนเก่ามาสร้างก้อนใหม่
ตอนที่เราสร้างก้อนใหม่แต่ละก้อน
เราจะแปะล็อกใส่มันไปด้วยในคราวเดียวกัน
เช่น เราจะส่งบิทคอยน์ให้เพื่อน
เราก็สร้างก้อนใหม่ แล้วแปะล็อกที่เขียนว่า
“เปิดได้เฉพาะเจ้าของที่อยู่ของเพื่อนเท่านั้น”
พอก้อนนี้ลงสมุดบัญชีไปแล้ว
มันก็ “เป็นของเพื่อน” โดยอัตโนมัติ
เพราะมีแค่เพื่อนคนเดียวที่ถือกุญแจส่วนตัว (Private Key — ตอนที่ 7)
ที่จะมาปลดล็อกก้อนนี้ได้
และอย่าลืมว่าแม้แต่ก้อนเงินทอนที่สร้างกลับหาตัวเอง
ก็ต้องแปะล็อกไว้กับที่อยู่ของเราเหมือนกัน
📜 ล็อกหน้าตาเป็นยังไง? ตอบ: เป็นโค้ดสั้น ๆ ที่เขียนด้วยภาษาสคริปต์ (Script)
ตรงนี้หลายคนอาจนึกไม่ออกว่า
เงื่อนไขบนก้อนเงินมันเก็บอยู่ในรูปอะไร
คำตอบคือ บิทคอยน์มีภาษาโปรแกรมจิ๋ว ๆ ของตัวเอง
ชื่อว่า ภาษาสคริปต์ (Script)
ล็อกแต่ละอันคือโค้ดสั้น ๆ ที่เขียนด้วยภาษานี้
เพื่อให้เห็นภาพแบบง่ายสุด (ของจริงซับซ้อนกว่านี้นิดหน่อย)
ล็อกมาตรฐานหน้าตาคล้าย ๆ ว่า
“เอาที่อยู่นี้ ไปเทียบกับหลักฐานที่เจ้าของยื่นมา
ถ้าเข้ากัน ให้ผ่าน
ถ้าไม่เข้ากัน ให้เตะออก”
ในภาษาสคริปต์มี คำสั่ง (Function) สำเร็จรูปให้เลือกใช้หลายตัว
คำสั่งที่ใช้กันบ่อยสุดสำหรับล็อกแบบนี้ชื่อ CHECKSIG
หน้าที่ของมันคือเทียบว่า
หลักฐานที่ยื่นมา ตรงกับที่อยู่ในล็อกจริงไหม
พูดง่าย ๆ
ล็อก = โจทย์เล็ก ๆ ที่แปะอยู่บนก้อนเงิน
ใครแก้โจทย์นี้ได้ คนนั้นแหละใช้เงินก้อนนี้ได้
🔓 แล้วเราปลดล็อกยังไง? ตอบ: ยื่นคำตอบแนบมากับธุรกรรม
ฝั่งล็อกเป็นโจทย์
ฝั่งเราในฐานะเจ้าของก็ต้องยื่นคำตอบ
เวลาเราสร้างธุรกรรมเพื่อใช้ก้อนไหน
เราจะแนบ “คำตอบ” ไว้คู่กับข้อมูลขาเข้าของธุรกรรม (Input) นั้นเสมอ
พอธุรกรรมวิ่งถึงโหนดทั่วเครือข่าย
ผู้บันทึกบัญชีแต่ละเครื่องจะเอา ล็อก กับ คำตอบ มารันประกบกัน
ถ้าคำตอบแก้โจทย์ในล็อกสำเร็จ → ผลออกมาว่า ผ่าน
โหนดก็ยอมรับธุรกรรม แล้วส่งต่อให้โหนดในเครือข่าย
รอนักขุดหยิบลงบล็อกตามกระบวนการจากตอนที่ 10
ถ้าคำตอบไม่ตรง → ไม่ผ่าน
โหนดเตะธุรกรรมทิ้งทันที ไม่มีเจรจา
จุดสำคัญคือ
การเช็กแบบนี้เกิดขึ้นที่โหนดทุกเครื่องโดยอิสระจากกัน
ไม่ต้องมีคนกลางคอยอนุมัติเลย
🤫 เดี๋ยวก่อน… ยื่นกุญแจส่วนตัวเข้าไปในธุรกรรมเลยเหรอ?
คำตอบคือ ไม่เด็ดขาด
วิธีที่บิทคอยน์ใช้จริงคือ
เราเอากุญแจส่วนตัวมาสร้าง ลายเซ็นดิจิทัล (Digital Signature)
ซึ่งก็คือ “ลายเซ็นใช้ครั้งเดียว” ที่เคยเกริ่นไว้ตอนที่ 14 นั่นเอง
แล้วเรายื่นแค่ลายเซ็นนี้เป็นคำตอบของล็อก
คำสั่ง CHECKSIG ในล็อกจะเทียบลายเซ็นกับที่อยู่
ด้วยคณิตศาสตร์ชุดหนึ่งที่มหัศจรรย์มาก คือ
- เช็กได้ว่าลายเซ็นนี้สร้างจากกุญแจส่วนตัวที่คู่กับที่อยู่จริง
- แต่จากลายเซ็น ย้อนกลับไปหากุญแจส่วนตัวไม่ได้
นั่นแปลว่าเราพิสูจน์ความเป็นเจ้าของได้
โดยกุญแจส่วนตัวไม่เคยออกจากมือเราเลยแม้แต่ครั้งเดียว
(กลไกคณิตศาสตร์ของลายเซ็นดิจิทัลมีตอนเฉพาะ รอติดตามครับ) 🎛️ ล็อกไม่ได้มีแค่แบบเดียว: ตั้งเงื่อนไขแปลก ๆ ได้อีกเพียบ ภาษาสคริปต์ไม่ได้มีแค่คำสั่ง CHECKSIG
เราสามารถผสมคำสั่งหลายตัวเข้าด้วยกัน
สร้างล็อกที่มีเงื่อนไขซับซ้อนกว่า “เปิดได้เฉพาะเจ้าของที่อยู่นี้” ได้อีกมาก
ยกตัวอย่างเช่น - ล็อกที่เปิดได้หลังวันที่กำหนดเท่านั้น ก่อนนั้นใครก็หยิบไม่ได้
- ล็อกที่ต้องใช้ลายเซ็นจาก 2 ใน 3 ที่อยู่พร้อมกัน เหมือนเซฟที่ต้องหมุนกุญแจสองดอกพร้อมกัน
นี่คือเหตุผลที่บางคนเรียกบิทคอยน์ว่า
เงินที่ตั้งโปรแกรมได้ (Programmable Money)
เพราะเงินแต่ละก้อนสามารถแบก “กติกาการใช้งาน” ติดตัวไปด้วย
ตั้งแต่วินาทีที่มันถูกสร้าง
🔮 ตอนหน้า: วันนี้เราพูดถึง “ที่อยู่” กับ “กุญแจ” สลับกันไปมา
หลายคนอาจเริ่มสับสนว่าสองอย่างนี้คืออันเดียวกันไหม
จริง ๆ แล้วไม่ใช่ครับ
ตอนหน้าเราจะมาแยกให้ชัดว่า
กุญแจ (Keys) กับ ที่อยู่ (Addresses) ต่างกันยังไง
แล้วตัวไหนควรเอาไปบอกคนอื่น ตัวไหนห้ามบอกเด็ดขาด
🧠 สรุปวันนี้ จำแค่นี้
- ผลลัพธ์ธุรกรรมทุกก้อนมีระบบล็อก (Lock) ติดมาด้วย มันคือชุดเงื่อนไขที่บอกว่าต้องทำอะไรถึงจะใช้ก้อนนี้ได้ นี่แหละตัวกันเงินไม่ให้ถูกขโมย
- ล็อกถูกแปะตอนสร้างก้อนใหม่ โดยคนส่งเป็นคนตั้งเงื่อนไข เช่น “เปิดได้เฉพาะเจ้าของที่อยู่นี้” แม้แต่ก้อนเงินทอนก็ต้องล็อกกับที่อยู่ตัวเอง
- ล็อกเขียนด้วยภาษาสคริปต์ (Script) ภาษาโปรแกรมจิ๋วของบิทคอยน์ คำสั่งยอดฮิตคือ CHECKSIG ที่เทียบหลักฐานกับที่อยู่ในล็อก
- เวลาจะใช้เงิน เราไม่ได้ยื่นกุญแจส่วนตัว แต่ยื่นลายเซ็นดิจิทัล (Digital Signature) ที่สร้างจากกุญแจ เช็กได้ว่าเป็นเจ้าของจริง แต่ย้อนกลับไปหากุญแจไม่ได้
- ล็อกตั้งเงื่อนไขซับซ้อนได้ เช่น เปิดได้หลังวันกำหนด หรือต้องใช้หลายลายเซ็นพร้อมกัน นี่คือที่มาของคำว่าเงินที่ตั้งโปรแกรมได้ (Programmable Money)
🖼️ สไลด์ทั้งหมดของตอนนี้ (8 รูป)
แบบทดสอบท้ายบทเรียน
ตอบคำถาม 3 ข้อ เพื่อเช็กความเข้าใจของตัวเองได้เลย
1. ระบบล็อก (Locking Script) บนก้อนเงินบิทคอยน์ถูกเขียนขึ้นด้วยภาษาอะไร?
2. เวลาเราต้องการปลดล็อกเงินเพื่อโอนให้คนอื่น เราส่งอะไรไปเป็นหลักฐานคำตอบ?
3. คำว่า 'Programmable Money' (เงินที่ตั้งโปรแกรมได้) หมายถึงอะไรในบิทคอยน์?
อ่านตอนนี้จบแล้วใช่ไหม?
กดบันทึกเพื่อติดตามความก้าวหน้าการเรียนของคุณ





