uxto คืออะไร ?
ผมจะลองสรุป uxto ตามที่ผมเข้าใจ โดยตัดเรื่อง hash, scriptSig และเรื่องอี่นๆออกไป เพื่อให้เข้าใจง่ายขึ้นนะครับ
uxto หรือ unspent transaction output เป็นวิธีในการหา balance ของบัญชี bitcoin โดยที่เราไม่จำเป็นต้องเก็บ balance ของแต่ละบัญชีไว้ใน field ใด field หนึ่ง … เอาละ มาลองดูตัวอย่างกัน
จากภาพด้านบน miner โอนให้ A เป็นจำนวน 5 btc, B โอนให้ A เป็นจำนวน 5 btc … ดังนั้นตอนนี้ A น่าจะมีทั้งหมด 10 btc
แล้วถ้า A ต้องการโอนให้ B เป็นจำนวน 2 btc ทำยังไง ?
ขั้นตอนคือ ให้เอา 5 BTC ที่มีอยู่ แบ่งโอนไป 2 ทางคือ
- โอนไปให้ B เป็นจำนวน 2 BTC
- โอนกลับไปให้ตัวเอง 3 BTC
แล้วตอนนี้ A เหลือ balance อยู่เท่าไหร่ ?
คำตอบคือ 8 BTC นั่นเอง
จากรูปจะเห็นได้ว่า เราจะเลือกเฉพาะกล่องที่ยังไม่ถูกขีดฆ่า มาคิด balance เท่านั้น เราเรียกกล่องเหล่านั้นว่า unspent transaction output หรือ uxto นั่นเอง
ส่วนประกอบของ transaction
transaction ประกอบด้วย 2 ส่วนใหญ่ๆคือ input และ output
แต่ภาพด้านบนก็ไม่ถูกต้องเท่าไหร่นัก เพราะทุกๆ input จะต้องอ้างอิงมาจาก output ของ transaction อื่นๆ เสมอ ดังภาพด้านล่าง
จากภาพจะเห็นได้ว่ามี output อยู่ 2 สี คือสีแดง และสีเขียว
- สีแดง คือ spent transaction output เป็น output ที่ถูก input ของ transaction อื่นชี้อยู่
- สีเขียว คือ unspent transaction output เป็น output ที่ยังไม่ถูกชี้โดย input ของ transaction ใดๆ
ดังนั้น balance ของ A จะเท่ากับผลรวมของ amount ของแต่ละ unspent transaction output ( กล่องสีเขียว ) ที่โอนมายัง A ดังภาพด้านล่าง นั่นเอง
สรุปคร่าวๆ uxto ก็คือวิธีในการหา balance ของแต่ละ Account นั่นเอง … โดยจริงๆแล้วใน transaction ของ bitcoin จะมีรายละเอียดที่ลึกลงไปอีกเช่น
- หนึ่ง transaction มีได้หลาย input
- transaction reward ของ miner ที่ขุดแต่ละ block ได้ จะไม่ได้มี input ชี้ไปยัง output เหมือน transaction ปกติ
- ในการโอนจริงๆ จะมีแบ่งค่า fee ให้กับ miner ด้วย
เราจะยังไม่ลงรายละเอียดพวกนั้นก่อนละกัน … หวังว่าโพสต์นี้คงทำให้เข้าใจ concept คร่าวๆ ของ uxto นะครับ แต่ถ้าผมผิดพลาดตรงไหน บอกได้เลยนะครับ ขอบคุณครับ