ไข่ส้มวิทยา ไข่ส้มวิทยา
หมวดที่ 3: ธุรกรรมและกุญแจดิจิทัล • ตอนที่ 21

SegWit: อัปเกรดที่ย้ายลายเซ็นออกจากธุรกรรม ทำให้ธุรกรรมเบาและถูกลง

รู้จัก SegWit (Segregated Witness) การแยกส่วนลายเซ็นเพื่อแก้ปัญหาความดัดแปลงได้ ขยายขนาดบล็อก และลดค่าธรรมเนียม

#Bitcoinมือใหม่ #SegWit #SoftFork #TransactionMalleability #พยานแยกส่วน
สไลด์ปกตอนที่ 21: SegWit: อัปเกรดที่ย้ายลายเซ็นออกจากธุรกรรม ทำให้ธุรกรรมเบาและถูกลง
🔍 แตะเพื่อขยายรูป
สไลด์ประกอบบทเรียนตอนที่ 21 — แตะเพื่อดูแบบเต็มจอ

ตอนที่ 20 เราเห็นแล้วว่าลายเซ็นดิจิทัลถูกฝังอยู่ในทุกธุรกรรมเพื่อใช้พิสูจน์ว่าเราคือเจ้าของเงินตัวจริง แต่เราทิ้งท้ายไว้ว่า ลายเซ็นพวกนี้กินพื้นที่ในบล็อกไม่น้อย และมันเคยทำให้เกิดปัญหาคลาสสิกที่ทำให้เลขอ้างอิงธุรกรรมสามารถเปลี่ยนไปเองได้!

วันนี้เราจะมาดูการอัปเกรดครั้งประวัติศาสตร์ของบิทคอยน์ที่แก้ปัญหานั้นได้อย่างหมดจด พร้อมกับช่วยขยายพื้นที่บล็อกและลดค่าธรรมเนียมไปในตัว นั่นคือ SegWit ครับ

🧾 ปัญหาดั้งเดิม: ใบเสร็จที่เลขเอกสารเปลี่ยนเองได้ (Transaction Malleability)

ลองนึกภาพว่าเราโอนเงินให้เพื่อน แล้วได้เลขใบเสร็จอ้างอิง TXID: 1234 เราเก็บเลขนี้ไว้ตรวจสอบว่าเงินถึงเพื่อนหรือยัง แต่พอเปิดดูอีกที ระบบดันบอกว่าไม่มีรายการ 1234 อยู่ในระบบ มีแต่รายการ 5678 ที่ยอดเงินและปลายทางเหมือนกันเป๊ะ!

เงินไม่ได้หายไปไหน เพื่อนได้รับเงินครบถ้วน แต่ เลขอ้างอิงที่เราถืออยู่กลับเพี้ยนไป ความวุ่นวายแบบนี้เคยเกิดขึ้นจริงในบิทคอยน์ยุคแรกครับ

🔍 ย้อนดูโครงสร้างธุรกรรมแบบเก่า

จากตอนที่ 14 และ 16 เรารู้ว่าธุรกรรมบิทคอยน์ประกอบด้วย:

  • ข้อมูลขาเข้า (Inputs)
  • ข้อมูลขาออก (Outputs)
  • ส่วนปลดล็อก (ScriptSig): ซึ่งมีลายเซ็นดิจิทัลและกุญแจสาธารณะแปะติดอยู่คู่กับ Input แต่ละอัน

ในโครงสร้างธุรกรรมแบบดั้งเดิม ส่วนปลดล็อกเหล่านี้กระจายตัวปะปนอยู่ทั่วทั้งธุรกรรม และที่สำคัญคือ เลขอ้างอิงธุรกรรม (TXID) คำนวณมาจากการนำข้อมูลทั้งหมดของธุรกรรม (รวมถึงลายเซ็น) ไปเข้าฟังก์ชันแฮช SHA-256

⚠️ ทำไมลายเซ็นถึงทำให้เลขอ้างอิงเปลี่ยนตาม?

ในทางคณิตศาสตร์ ลายเซ็นดิจิทัล ECDSA หนึ่งอัน สามารถเขียนแทนได้มากกว่า 1 รูปแบบโดยที่ยังคงถูกต้องและตรวจผ่านเหมือนเดิม

และเพราะ TXID คิดคำนวณจากข้อมูลทุกไบต์รวมถึงลายเซ็น:

  • ระหว่างที่ธุรกรรมลอยอยู่ใน Mempool ผู้ไม่หวังดีหรือโหนดระหว่างทางสามารถดัดแปลงตัวเลขในลายเซ็นเล็กน้อยแล้วส่งต่อ
  • ธุรกรรมยังคงถูกต้อง เงินยังวิ่งไปหาผู้รับตามปกติ
  • แต่ ค่าแฮช TXID ที่บันทึกลงบล็อกเชนจะกลายเป็นตัวเลขใหม่ทันที!

ปัญหานี้เรียกว่า ความดัดแปลงได้ของธุรกรรม (Transaction Malleability) แม้เงินจะไม่หาย แต่เลขอ้างอิงที่ไม่แน่นอนทำให้การสร้างระบบอย่าง Layer 2 หรือ Lightning Network ทำได้ยากลำบากมาก

✂️ SegWit แก้ปัญหานี้อย่างไร? (Segregated Witness)

คำว่า SegWit ย่อมาจาก Segregated Witness แปลตรงตัวว่า “การแยกพยานออกมา”

พยาน (Witness) ในที่นี้ก็คือข้อมูลส่วนปลดล็อกทั้งหมด (ลายเซ็นและกุญแจสาธารณะ) ที่ใช้พิสูจน์ความเป็นเจ้าของ:

  1. ย้ายที่อยู่ใหม่: ตัดส่วนปลดล็อกทั้งหมดออกจากตัวธุรกรรมหลัก แล้วนำไปจัดเก็บรวมกันไว้ในโซนใหม่ท้ายธุรกรรมที่เรียกว่า โครงสร้างพยาน (Witness Structure)
  2. เปลี่ยนสูตรคำนวณ TXID: ให้คำนวณแฮชเฉพาะเนื้อหาการโอนเงิน (ใครโอนหาใคร เท่าไหร่) โดย ไม่นำข้อมูล Witness มาคำนวณ TXID อีกต่อไป

ผลลัพธ์คือ ไม่ว่าใครจะดัดแปลงลายเซ็นอย่างไร ค่า TXID ก็จะคงที่และเชื่อถือได้ 100% ปัญหา Transaction Malleability จึงหมดไปอย่างสิ้นเชิง!

📦 ของแถมสุดคุ้ม: ขยายความจุบล็อกและลดค่าธรรมเนียม (Block Weight & Discount)

เมื่อย้ายส่วนปลดล็อกแยกออกมา นักพัฒนาจึงได้โอกาสปรับวิธีคิดขนาดของบล็อกใหม่:

  • เดิมทีกำหนดเพดานตายตัวที่ขนาดไฟล์ไม่เกิน 1 MB
  • SegWit เปลี่ยนมาใช้หน่วยใหม่ที่เรียกว่า น้ำหนักบล็อก (Block Weight) กำหนดเพดานไว้ที่ 4 ล้านหน่วย (4,000,000 Weight Units)

โดยมีกติกาการคิดน้ำหนักดังนี้:

  • ข้อมูลธุรกรรมหลัก 1 ไบต์ มีน้ำหนักเท่ากับ 4 หน่วย
  • ข้อมูล Witness (ลายเซ็น) 1 ไบต์ มีน้ำหนักเพียง 1 หน่วย (ได้ส่วนลด 75%)

เพราะข้อมูลลายเซ็นจะถูกใช้งานหนักเฉพาะตอนตรวจยืนยันครั้งแรก การให้ส่วนลดจึงช่วยส่งเสริมให้คนหันมาใช้ธุรกรรมแบบใหม่ ส่งผลให้ในทางปฏิบัติ 1 บล็อกสามารถจุธุรกรรมได้เทียบเท่ากับ 1.8 – 2 MB ขึ้นไป และผู้ใช้ที่ใช้ที่อยู่แบบ SegWit จะจ่ายค่าธรรมเนียมถูกลงอย่างเห็นได้ชัด!

🤔 ทำไมต้องเป็น Soft Fork? (การอัปเกรดโดยเครือข่ายไม่แตกแถว)

ทำไมผู้พัฒนาถึงไม่ขยายขนาดบล็อกเป็น 2 MB ดื้อ ๆ เลยล่ะ?

เพราะหากทำแบบนั้น บล็อกใหม่จะขัดกับกฎของโหนดรุ่นเก่า โหนดเก่าจะไม่ยอมรับและปฏิเสธบล็อกใหม่ ทำให้เครือข่ายแตกแยกเป็น 2 บล็อกเชน หรือที่เรียกว่า Hard Fork

SegWit จึงถูกออกแบบให้เป็นการอัปเกรดแบบ Soft Fork (เข้ากันได้กับระบบเดิมย้อนหลัง):

  • ในสายตาของโหนดรุ่นเก่า บล็อกและธุรกรรม SegWit ยังคงมีขนาดไม่เกิน 1 MB และถูกต้องตามกฎเดิมทุกประการ (โหนดเก่าแค่มองไม่เห็นข้อมูลพยาน Witness)
  • โหนดใหม่เท่านั้นที่จะนำข้อมูล Witness มาตรวจยืนยันเต็มรูปแบบ
  • เครือข่ายจึงยังคงเดินอยู่บนสายโซ่เดียวกันอย่างปลอดภัยและไร้รอยต่อ

🗳️ ใครเป็นคนตัดสินใจเปิดใช้งาน? (การส่งสัญญาณของนักขุด)

บิทคอยน์ไม่มีผู้บริหารคอยกดปุ่มอัปเกรด การเปิดใช้งาน SegWit จึงใช้กระบวนการฉันทามติของเครือข่าย:

  1. ให้นักขุดส่งสัญญาณความพร้อมผ่านรหัสเวอร์ชันในหัวบล็อก (Block Header)
  2. กติกาคือ ในช่วง 2,016 บล็อก (ประมาณ 2 สัปดาห์) ต้องมีนักขุดส่งสัญญาณพร้อมเกิน 95%
  3. ผลปรากฏว่านักขุดส่งสัญญาณพร้อมเต็มที่ จนกระทั่ง SegWit เปิดใช้งานจริงอย่างเป็นทางการเมื่อวันที่ 24 สิงหาคม 2017 (ที่บล็อกหมายเลข 481,824)

🧠 สรุปวันนี้ จำแค่นี้

  • SegWit (Segregated Witness) ย้ายข้อมูลลายเซ็น (Witness) ออกจากธุรกรรมหลักไปไว้ในโครงสร้างแยกต่างหาก
  • TXID มีความแน่นอน: ตัดลายเซ็นออกจากการคำนวณแฮช แก้ปัญหา Transaction Malleability และเปิดทางให้ Lightning Network เกิดขึ้นได้จริง
  • เพิ่มความจุบล็อก & ลดค่าธรรมเนียม: ข้อมูล Witness ได้รับส่วนลดน้ำหนัก 75% ทำให้จุข้อมูลได้เทียบเท่าราว 1.8 – 2 MB ต่อบล็อก
  • Soft Fork: โหนดเก่าและโหนดใหม่ยังทำงานร่วมกันได้บนบล็อกเชนสายโซ่เดียวกันโดยไม่แตกแถว

🔮 ตอนหน้า:

ตอนนี้เราเข้าใจกลไกเชิงลึกของระบบบิทคอยน์ครบถ้วนแล้ว ตั้งแต่เครือข่าย, การขุด, บล็อกเชน, ธุรกรรม, คู่กุญแจ, ลายเซ็น ไปจนถึง SegWit!
ในตอนหน้า เราจะเปลี่ยนโหมดจาก “ระบบทำงานอย่างไร” มาสู่ภาคปฏิบัติจริงสำหรับผู้ใช้งานทั่วไป: กระเป๋าเงินบิทคอยน์ (Wallet) มีกี่แบบ ต่างกันอย่างไร และมือใหม่ควรเริ่มต้นอย่างไร? ห้ามพลาดครับ!

🖼️ สไลด์ทั้งหมดของตอนนี้ (8 รูป)

สไลด์ประกอบบทเรียนตอนที่ 21 รูปที่ 2สไลด์ประกอบบทเรียนตอนที่ 21 รูปที่ 3สไลด์ประกอบบทเรียนตอนที่ 21 รูปที่ 4สไลด์ประกอบบทเรียนตอนที่ 21 รูปที่ 5สไลด์ประกอบบทเรียนตอนที่ 21 รูปที่ 6สไลด์ประกอบบทเรียนตอนที่ 21 รูปที่ 7สไลด์ประกอบบทเรียนตอนที่ 21 รูปที่ 8
ทบทวนความเข้าใจ

แบบทดสอบท้ายบทเรียน

ตอบคำถาม 3 ข้อ เพื่อเช็กความเข้าใจของตัวเองได้เลย

1. SegWit ย่อมาจากอะไร และทำการแยกส่วนใดออกจากข้อมูลหลักของธุรกรรม?

2. SegWit แก้ปัญหาความดัดแปลงได้ของธุรกรรม (Transaction Malleability) ได้อย่างไร?

3. การคำนวณน้ำหนักบล็อก (Block Weight) ใน SegWit ให้ประโยชน์อย่างไรกับผู้ใช้?

✅

อ่านตอนนี้จบแล้วใช่ไหม?

กดบันทึกเพื่อติดตามความก้าวหน้าการเรียนของคุณ