UTXO คืออะไร? ทำไม Bitcoin ถึงไม่มี Balance อยู่จริง
UTXO คืออะไร? ถ้าคุณเพิ่งเริ่มศึกษา Bitcoin คำนี้อาจฟังดูเหมือนศัพท์เทคนิคที่เข้าใจยาก แต่จริง ๆ แล้ว UTXO คือหนึ่งในแนวคิดพื้นฐานที่สุดของ Bitcoin และถ้าคุณเข้าใจมัน คุณจะเริ่มเห็นทันทีว่า Bitcoin ทำงานแตกต่างจากบัญชีธนาคารที่เราใช้กันทุกวันอย่างไร
ถ้าผมถามคุณว่า…
“ตอนนี้คุณมีเงินอยู่ในบัญชีธนาคารเท่าไหร่?”
คุณอาจเปิด Mobile Banking ขึ้นมา แล้วตอบว่า
ฉันมีเงินอยู่ 50,000 บาท
ก็โอเค๊ นั่นมันง่ายมาก
เพราะระบบธนาคารทำให้เราคุ้นเคยกับสิ่งที่เรียกว่า Account Base Balance
แน่นอนว่าธนาคารมีบัญชีของคุณที่เป็นระบบฐานข้อมูล Database
และในบัญชีนั้นมีตัวเลขเขียนเอาไว้ว่า
นาย A มีเงิน = 50,000 บาท
ถ้าคุณโอนให้ Bob 10,000 บาท
ระบบก็ทำหน้าที่หักลบตัวเลขออกประมาณว่า:
นาย A เหลือยอดเงินในบัญชีคือ : 50,000 → 40,000 บาท
และนาย Bob ก็จะมียอดเงินเพิ่มขึ้นเป็น : 20,000 → 30,000 บาท
จบข่าวในพระราชสำนัก…
มนุษย์เราใช้ระบบแบบนี้มาตลอดชีวิต ซึ่งแน่นอนว่าเวลาที่เราเปิด Bitcoin Wallet แล้วเห็นยอด
Balance: 0.015 BTC
สมองของเราจึงคิดโดยอัตโนมัติว่า…
“อ๋อ…แสดงว่าในบัญชี Bitcoin ของฉันมีอยู่ 0.015 BTC”
แต่ปัญหาคือ…
Bitcoin ไม่มีระบบ “บัญชี” ของคุณอยู่เลย
และคำถามที่น่าสนใจกว่านั้นคือ
บน Bitcoin Blockchain ไม่มีช่องไหนเขียนเอาไว้ว่า
DJ Tar มีเงิน = 0.015 BTC
ระบบของ Bitcoin มันไม่มี Account Number
ระบบของ Bitcoin มันไม่มี Book Bank
ระบบของ Bitcoin มันไม่มี Database Row ที่เขียนชื่อคุณแล้วตามด้วยยอดเงิน
แล้วตัวเลข 0.015 BTC ที่ Wallet แสดงขึ้นมานั้น…
มันมาจากไหนวะ? 😂
คำตอบก็อยู่ในสิ่งที่เรียกว่า
UTXO
หรือชื่อเต็มว่า
Unspent Transaction Output
ถ้าคุณเข้าใจ UTXO จริง ๆ
คุณจะเริ่มเข้าใจทันทีว่า ทำไม Bitcoin Transaction ถึงต้องมี Input และ Output ?
ทำไมเวลาส่ง Bitcoin ถึงต้องมี เงินทอน ?
ทำไม Transaction เดียวสามารถมีได้หลาย Input ?
ทำไมการโอนเงินผ่าน Bitcoin Wallet บางครั้งมันเลือก UTXO หลายๆ “ก้อน” มารวมกัน
และที่สำคัญ…
คุณจะเริ่มมอง Bitcoin ไม่เหมือนกับบัญชีธนาคารอีกต่อไป หากคุณเข้าใจสิ่งที่ผมจะเล่าต่อไปนี้
ผมอยากให้คุณลืมคำว่า Balance ไปก่อนเลย
สมมุติว่าใน Bitcoin Wallet ของคุณแสดงยอด :
Balance = 1.5 BTC
ในสมองของคนที่เป็นมือใหม่มักจินตนาการว่า :
บัญชีของฉัน
มี Balance = 1.5 BTC
แต่ลองจินตนาการอีกแบบหนึ่งดูสิ
ว่า Bitcoin Wallet ของคุณอาจประกอบด้วย:
UTXO อันที่ #1 = 0.3 BTC
UTXO อันที่ #2 = 0.7 BTC
UTXO อันที่ #3 = 0.5 BTC
รวมกันได้ :
0.3 + 0.7 + 0.5 = 1.5 BTC
จากนั้น Bitcoin Wallet ของคุณจึงแสดงตัวเลขออกมาว่า :
Balance = 1.5 BTC
แต่ตัวเลข 1.5 BTC นั้นเป็นเพียง ผลรวมที่ Wallet คำนวณให้เฉย
สิ่งที่ Bitcoin กำลังติดตามจริง ๆ คือ Output แต่ละก้อนที่ ยังไม่ถูกใช้
หรือ…
Unspent Transaction Outputs
นี่แหละ UTXO
มันจะมีฟีลลิ่งคล้ายๆกับเป็นใบ แคชเชียร์เช็ค (Cashier’s Cheque) หลายๆใบนอนแน่นิ่งอยู่ใน Bitcoin Wallet ก็แค่นั้นเอง และแน่นอนว่ามันไม่เคยรวมกัน มันแยกกันเป็นใบๆ และเวลาที่เราจะใช้งานมันเราต้องระบุด้วยว่าจะเอาใบไหนมาโอน
แล้วคำว่า UTXO แปลว่าอะไรกันแน่?
ลองแยกทีละคำ
U = Unspent
แปลว่า ยังไม่ถูกใช้
TX = Transaction
หมายถึง Bitcoin Transaction
O = Output
หมายถึง Output ที่ Transaction ก่อนหน้าสร้างขึ้นมา
รวมกันจึงกลายเป็น :
Unspent Transaction Output
หรือพูดแบบภาษาคน :
Output จาก Bitcoin Transaction ก่อนหน้าที่ยังไม่มีใครนำไปใช้
ตรงนี้สำคัญมาก
เพราะ Bitcoin ที่คุณกำลังจะใช้ใน Transaction ใหม่…
ก็คือ Output ที่ Transaction เก่าสร้างทิ้งเอาไว้
Bitcoin Transaction คือเครื่องจักรที่แดก UTXO ใบเก่าแล้วสร้าง UTXO ใบใหม่ขึ้นเสมอ
นี่คือ Mental Model ที่ผมอยากให้คุณจำเอาไว้ให้แม่นๆ
Bitcoin Transaction ไม่ได้ทำแบบธนาคารว่า:
Balance A – 10,000
Balance B + 10,000
แต่มันทำประมาณนี้:
INPUT
เอา UTXO เก่าที่สามารถใช้ได้เข้ามา
↓
TRANSACTION
ตรวจสอบเงื่อนไขว่าเรามีสิทธิใช้มันหรือไม่ ?
↓
OUTPUT
สร้าง Output ใหม่ขึ้นมา
และถ้า Output ใหม่นั้นยังไม่ถูกใช้…
มันก็กลายเป็น
UTXO ใหม่
ดังนั้น Bitcoin จึงมีวงจรประมาณว่า:
UTXO → Input → Transaction → Output → UTXO → Input → Transaction → Output…
วนต่อไปเรื่อย ๆ ไม่มีที่สิ้นสุด
นี่คือเหตุผลที่ในบทความก่อนหน้า “วิธีการสร้าง Bitcoin Transaction ด้วยมือเปล่า” เราต้องเริ่มต้นจากการหา UTXO ที่เป็นของตัวเองมาให้ได้ก่อน
เพราะถ้าไม่มี Output เก่าให้ใช้…
เราก็ไม่มี Input สำหรับ Transaction ใหม่ นั่นเอง
ลองใช้ธนบัตรจริงๆเป็นตัวอย่างให้เห็นภาพ ดังต่อไปนี้
สมมุติผมมีธนบัตรอยู่สามใบ:
20 บาท
50 บาท
100 บาท
รวมแล้วผมมี:
170 บาท
แต่ในกระเป๋าของผมไม่ได้มีสิ่งที่เรียกว่า
“ก้อนเงิน 170 บาท”
สิ่งที่มีจริง ๆ คือ:
แบงค์ 20 + แบงค์ 50 + แบงค์ 100
ซึ่ง Wallet ของ Bitcoin ก็มีแนวคิดคล้ายกัน
มันอาจบอกคุณว่า:
170,000 sats
แต่ข้างหลังอาจประกอบด้วย:
UTXO อันที่ #1 → 20,000 sats
UTXO อันที่ #2 → 50,000 sats
UTXO อันที่ #3 → 100,000 sats
ซึ่ง Bitcoin Wallet Application เพียงแค่…
นั่งนับให้คุณเท่านั้นเอง
และตรงนี้นำเราไปสู่คำถามที่สนุกกว่าเดิม
ถ้าคุณมี UTXO 100,000 sats
แต่ต้องการซื้อกาแฟราคา 30,000 sats…
คุณจะ “เจียด” UTXO ก้อนนั้นเอาออกมาแค่ 30,000 sats ได้ไหม?
ไม่ได้
แล้ว Bitcoin ทำยังไง?
ตรงนี้เราจะเจอกับหนึ่งในเรื่องที่มือใหม่งงมากที่สุด:
Change Output — ระบบเงินทอนของ Bitcoin
และนี่คืออีกหนึ่งตัวอย่างที่จะช่วยให้เราเข้าใจว่า UTXO คืออะไร และทำไม Bitcoin ถึงต้องมี Change Output ?
กลับมาที่กาแฟแก้วเมื่อกี้กัน
สมมุติว่าเรามี :
UTXO อันนึง = 100,000 sats
และเราต้องการซื้อกาแฟจาก Bob ราคา:
30,000 sats
สิ่งที่ Bitcoin ไม่ได้ทำ คือ…
เอา 30,000 sats ออกจาก UTXO แล้วเหลือก้อนเดิมไว้ 70,000 sats
กฏของ Bitcoin ก็คือ UTXO ก้อนเดิมจะต้องถูก Spend ทั้งก้อน
แล้ว Transaction จะสร้าง Output ใหม่ขึ้นมาแทน
ลองสมมุติว่า Transaction Fee ของ Miner หรือพวกเหมืองขุด Bitcoin คือ 500 sats
จากนั้น Transaction ของเราก็อาจมีหน้าตาประมาณนี้:
INPUT
UTXO เดิม → 100,000 sats
↓
OUTPUT #1
Bob → 30,000 sats
OUTPUT #2
กลับมาหาเรา → 69,500 sats
FEE สำหรับพวกเหมืองขุด Bitcoin จะเท่ากับ
500 sats
ลองบวกดู:
30,000 + 69,500 + 500 = 100,000 sats
ครบพอดี
Output จำนวน 69,500 sats ที่ส่งกลับมาหาเรานี่แหละที่เรียกว่า:
Change Output
หรือพูดภาษาบ้าน ๆ ก็คือ…
เงินทอนของระบบ Bitcoin
หลักการนี้เป็นเรื่องปกติของ Bitcoin Transaction เพราะ UTXO ที่ถูกเลือกมาเป็น Input จะถูกใช้ทั้งก้อน และส่วนเกินที่ไม่ต้องการส่งให้ผู้รับมักถูกสร้างเป็น Change Output กลับมาหาผู้ส่ง
มันก็เหมือนคุณซื้อกาแฟด้วยแบงก์ 100
ลองลืมเรื่องราวของ Bitcoin ไปสัก 30 วินาทีดิ๊
คุณเดินเข้าไปซื้อกาแฟในราคา :
30 บาท
คุณเปิดกระเป๋าออกมาแล้วพบว่ามีแต่แบงค์ :
100 บาท
คุณจะทำยังไง ?
คุณไม่ได้ฉีกแบงก์ 100 ออกประมาณ 30% แล้วส่งให้ร้านกาแฟใช่ป๊ะ ? 😂
คุณส่ง:
100 บาท → ร้านกาแฟ
แล้วร้านส่งกลับ:
70 บาท → คุณ
Bitcoin ก็มี Mental Model คล้าย ๆ กัน นี่แหละ
เพียงแต่แทนที่จะเป็น :
ธนบัตร
เรามี:
UTXO
และแทนที่จะเป็น:
เงินทอน
เรามี:
Change Output
ต่างกันตรงที่ใน Bitcoin…
เงินทอนนั้นก็คือ Output ใหม่
และเมื่อ Output ใหม่นั้นยังไม่ถูกใช้…
มันก็กลายเป็น :
UTXO ก้อนใหม่ของคุณโดยปริยาย
เห็นวงจรแล้วใช่ไหม?
UTXO เก่า
↓
ถูกใช้เป็น Input
↓
สร้าง Output ใหม่
↓
Output ที่ยังไม่ถูกใช้
↓
กลายเป็น UTXO ใหม่
นี่คือหัวใจสำคัญมากของคำถามว่า UTXO คืออะไร
แล้วถ้า UTXO ใบเดียวมันไม่พอล่ะ?
ทีนี้มาลองอีกสถานการณ์หนึ่ง
สมมุติ Wallet ของเรามี Bitcoin รวม :
170,000 sats
แต่ไม่ได้อยู่เป็นก้อนเดียว
เรามี:
UTXO อันที่ #1 → 20,000 sats
UTXO อันที่ #2 → 50,000 sats
UTXO อันที่ #3 → 100,000 sats
แล้วเราต้องการส่งให้ Bob :
120,000 sats
ปัญหาคือ…
UTXO ก้อนใหญ่ที่สุดของเรามีแค่:
100,000 sats
ซึ่งแน่นอนว่ามันไม่พอ
ทีนี้ระบบ Bitcoin ทำอย่างไร?
คำตอบคือ…
ใช้ UTXO หลายก้อนเป็น Input พร้อมกันได้
Wallet อาจเลือก :
UTXO ก้อนที่ #2 → 50,000 sats
UTXO ก้อนที่ #3 → 100,000 sats
รวมกันเป็น :
Input = 150,000 sats
จากนั้นสมมุติว่า Fee ของพวก Miner = 500 sats
Transaction ก็จะสามารถสร้างได้ดังนี้ :
Bob → 120,000 sats
Change → 29,500 sats
Fee ของ Miner → 500 sats
รวมกันเป็น :
120,000 + 29,500 + 500 = 150,000 sats
จบข่าวในพระราชสำนัก…
และนี่คือเหตุผลที่ Bitcoin Transaction เดียวนั้นสามารถมีได้ หลาย Inputs และแต่ละ Input ก็สามารถอ้างอิง Output จาก Transaction ก่อนหน้าได้ ซึ่ง Bitcoin Developer Guide อธิบายว่า input ของ Bitcoin Transaction จะระบุ output ที่ต้องการใช้ด้วย TXID และ output index ของมันนั่นเอง
แล้ว Wallet รู้ได้ยังไงว่าจะเลือก UTXO ก้อนไหน?
อ้าว…
ตอนนี้เริ่มสนุกแล้วสิ 😂
เรามี:
UTXO ใบนึง 20,000 sats
UTXO ใบนึง 50,000 sats
UTXO ใบนึง 100,000 sats
แล้วต้องการใช้ 60,000 sats
Wallet จะเลือกอะไร?
แน่นอนว่ามันอาจเลือก :
100,000 sats
แล้วสร้างเงินทอน
หรือมันอาจเลือก :
20,000 + 50,000 sats
แล้วสร้างเงินทอนน้อยกว่า
หรือถ้าเรามี UTXO เป็นสิบ ๆ ร้อย ๆ ก้อน…
มันจะเลือกก้อนไหน?
สิ่งนี้มีชื่อเรียกว่า :
Coin Selection
เมื่อเข้าใจว่า UTXO คืออะไร แล้ว Coin Selection ก็จะเริ่มเข้าใจง่ายขึ้น เพราะ Wallet กำลังเลือกว่าควรนำ UTXO ก้อนไหนมาเป็น Input ?
Coin Selection คือกระบวนการที่ Wallet Application จะทำการเลือกว่า UTXO ก้อนไหนบ้างจะถูกนำมาใช้เป็น Input ของ Transaction
ซึ่งแน่นอนว่า Wallet แต่ละตัวสามารถมีกลยุทธ์ในการเลือกต่างกัน และการเลือก UTXO ส่งผลได้ทั้งต่อขนาด Transaction, ค่าธรรมเนียม, Change Output และ Privacy ของผู้ใช้งานเองด้วย
นี่คืออีกสิ่งหนึ่งที่ Wallet ทำหน้าที่อยู่เบื้องหลัง…
โดยที่เวลาคุณกด Send
คุณอาจไม่เคยเห็นมันเลยด้วยซ้ำว่า Wallet Application มันเลือก UTXO อันไหนให้เราบ้าง
แล้ว Bitcoin รู้ได้ยังไงว่า UTXO ก้อนไหนคือก้อนไหน?
ถ้าอยากเข้าใจว่า UTXO คืออะไร ในระดับ Protocol เราต้องรู้ต่อว่า Bitcoin ระบุ UTXO แต่ละก้อนได้อย่างไร ?
นี่คือคำถามสำคัญอีกข้อนึงเลย
สมมุติว่าบน Bitcoin Network มี UTXO อยู่มหาศาล (ไม่ต้องสมมุติหลอก มันมีมหาศาลจริงๆนะมึง ^_^)
แล้วเราบอก Node Server ว่า :
“ผมจะใช้ก้อนนั้นครับ”
Node คงตอบว่า:
“ก้อนไหนวะ?” 😂
เราจึงต้องมีวิธีระบุ UTXO อย่างเฉพาะเจาะจง
โดยพื้นฐานแล้ว Input จะชี้ไปยัง Output ที่ต้องการใช้ด้วยข้อมูลสำคัญสองอย่าง:
1. TXID
หรือ:
Transaction ID
เป็นตัวระบุ Transaction ก่อนหน้าที่สร้าง Output นั้นขึ้นมา
และ…
2. VOUT
คือ Output Index
เพราะ Bitcoin Transaction หนึ่งรายการสามารถสร้าง Output ได้หลายตัว
เช่น:
Output อันที่ #0
Output อันที่ #1
Output อันที่ #2
ดังนั้นการพูดแค่:
TXID นี้
ยังไม่พอ
เราต้องบอกด้วยว่า :
Output ตัวที่เท่าไหร่?
จึงกลายเป็นแนวคิดประมาณ :
TXID + VOUT
ตัวอย่าง :
TXID: abc123...
VOUT: 1
แปลเป็นภาษาคนก็คือ :
เอา Output หมายเลข 1 ที่ Transaction abc123… เคยสร้างเอาไว้มาใช้
Bitcoin documentation ระบุว่า output นั้นมี index ตามตำแหน่งของมัน โดย output แรกมี index เป็น 0 และ output อื่นๆก็จะมีลำดับถัดมาเป็น 1 เป็น 2 เป็น 3 ก็ว่ากันไป
เมื่อ UTXO ถูกใช้แล้ว จะเกิดอะไรขึ้น?
ผมสมมุติว่า :
UTXO อันที่ A = 100,000 sats
เรานำมันมาเป็น Input ให้กับ Transaction นึง
และ Transaction ได้รับการยืนยันเรียบร้อยแล้ว
UTXO A จะไม่สามารถถูกใช้ซ้ำได้อีก
มันเปลี่ยนสถานะจาก :
Unspent
เป็น :
Spent
และ Output ที่ Transaction นั้นสร้างขึ้นมาใหม่…
ก็จะกลายเป็น UTXO ใหม่แทน
Bitcoin จึงสามารถแบ่ง Output ออกในเชิงแนวคิดได้เป็น:
Spent Transaction Output
กับ
Unspent Transaction Output
และเจ้าตัว Bitcoin Wallet Application จะนับยอดแค่ Unspent Transaction เท่านั้น ส่วนอันไหนที่ถูก Spent ไปแล้วจะไม่ถูกนับรวมยอด
แล้วถ้าผมพยายามใช้ UTXO เดิมสองครั้งล่ะ?
เช่นผมมี:
UTXO อันนึง = 100,000 sats
แล้วผมสร้าง:
Transaction A
ส่ง 100,000 sats → Alice
พร้อมกันนั้นผมพยายามสร้างอีกอันนึงเป็น :
Transaction B
ส่ง UTXO ก้อนเดียวกัน → Bob
เท่ากับผมกำลังพยายามใช้เงินก้อนเดียวกันสองครั้ง แม่นบ่อ ?
นี่คือสิ่งที่เราเรียกว่า :
Double Spend
แต่ Output หนึ่งก้อนสามารถถูก Spend ได้เพียงครั้งเดียวเท่านั้น ซึ่งเป็นกฏที่ Blockchain ของ Bitcoin ยอมรับร่วมกัน การอ้างถึง Output เดิมซ้ำหลังจากมันถูกใช้แล้วจึงไม่สามารถกลายเป็น Transaction ที่ valid ซ้ำอีกครั้งได้
นี่คืออีกเหตุผลหนึ่งว่าทำไมแนวคิด UTXO จึงสำคัญมากกับ Bitcoin
UTXO เยอะ ๆ มีผลต่อ Transaction Fee หรือไม่?
แน่นอนว่า มี!!!
และตรงนี้หลายคนเริ่มเจอปัญหาจริงตอนใช้งาน Bitcoin 😂
สมมุติมีคนสองคน :
Alice
มี 1 UTXO = 1,000,000 sats
Bob
มี 100 UTXOs × 10,000 sats
รวมแล้วทั้งคู่มี:
1,000,000 sats เท่ากัน
แต่โครงสร้าง Bitcoin ของทั้งสองคน…
ไม่เหมือนกันเลย
แน่นอนว่ากรณีของ Bob นั้นต้องใช้ UTXO จำนวนมากเป็น Inputs เพื่อสร้าง Transaction และมันจะทำให้ Transaction ของ Bob นั้นมีขนาดที่ใหญ่ชิบหายวายป่วง
ซึ่งการที่มีข้อมูลมากขึ้นใน Transaction นั้นย่อมหมายถึง :
Transaction ใหญ่ขึ้น
ซึ่งนั่นจึงเป็นผลทำให้ :
ค่า Fee ที่ต้องจ่ายให้พวก Miner นั้นสูงขึ้น
ดังนั้นคำว่า :
“ผมมี 1,000,000 sats”
เพียงอย่างเดียว…
ยังไม่ได้บอกทุกอย่างเกี่ยวกับ Bitcoin Wallet ของคุณ
คำถามอีกข้อคือ :
1,000,000 sats นั้นแตกออกเป็น UTXO กี่ก้อน?
นี่ต่างหากที่เป็นคำถามสำคัญ ว่าคุณนั้นบริหารจัดการ Data ใน Wallet ของคุณได้ดีแค่ไหน ^_^
UTXO Consolidation คืออะไร?
เมื่อเราเข้าใจว่า UTXO คืออะไร เราก็จะเห็นว่าการมี Bitcoin จำนวนเท่ากัน ไม่ได้หมายความว่าโครงสร้างของ Wallet จะเหมือนกันนะจ๊ะ
สมมุติคุณรับ Bitcoin Lightning หรือ On-chain เข้ามาเรื่อย ๆ ยิบ ๆ ย่อย ๆ จนสุดท้าย Wallet ของคุณมี UTXO เล็ก ๆ น้อย ๆ จำนวนมาก
วันหนึ่งคุณอาจต้องการรวม UTXO หลายก้อนเหล่านั้นเข้าด้วยกัน
เช่น:
UTXO อันนึงมี 10,000
UTXO อันนึงมี 20,000
UTXO อันนึงมี 30,000
UTXO อันนึงมี 40,000
↓
จากนั้นคุณก็สร้าง Transaction ใหม่
↓
กลายเป็น UTXO ที่มีขนาดใหญ่ขึ้นหลาย Sat แต่รวบยอดให้กลายเป็นใบเดียว
แนวคิดนี้มักเรียกว่า :
UTXO Consolidation
แต่ตรงนี้มีเรื่องต้องคิดทั้ง Fee ที่ต้องจ่ายให้ Miner และ Privacy ของ Wallet คุณเอง
เพราะการนำ UTXO หลายก้อนมาใช้เป็น Inputs ใน Transaction เดียวกันนั้นสามารถสร้างความเชื่อมโยงมาที่ตัวตนของคุณใน Public Blockchain ซึ่งจะเป็นผลให้พวก Chain Analysis Tool ทั้งหลายเดาความสัมพันธ์ระหว่าง Address ต่าง ๆ ได้ เพราะการ Consolidate รวมไปถึงการใช้ Coin Selection จึงไม่ใช่เรื่องค่าธรรมเนียมอย่างเดียว แต่มันมีมิติด้าน privacy มาเกี่ยวข้องด้วย
ดังนั้น…
อย่าเห็น Fee ถูกแล้วรีบรวมทุก UTXO แบบไม่คิดอะไร
เดี๋ยวเราจะมีบทความแยกเรื่องนี้อีกที ค่อยว่ากัน
UTXO กับ Privacy เกี่ยวกันอย่างไร?
นี่เป็นเรื่องที่ผมอยากเขียนแยกอีกบทความหนึ่งเลย
เพราะ Blockchain ของ Bitcoin นั้นเป็น Public Ledger
คนอื่นอาจไม่รู้ทันทีว่า :
Address นี้เป็นของ DJ Tar
แต่เขาสามารถเห็น Transaction Graph ได้
มันต้องมีคนเห็นว่า Output ไหนถูกสร้างขึ้นเมื่อไร ?
มันต้องมีคนเห็นว่า Output ไหนถูกใช้ไปเมื่อไร ?
มันต้องมีคนเห็น UTXO หลายก้อนถูกนำมาใช้เป็น Inputs ร่วมกัน
และมันต้องมีคนเห็น Output ใหม่ที่ Transaction สร้างขึ้นมา
ดังนั้นวิธีที่ Wallet เลือก UTXO…
อาจเปิดเผยข้อมูลบางอย่างเกี่ยวกับพฤติกรรมทางการเงินของคุณได้
นี่คือเหตุผลที่คำว่า :
Coin Control
จะเริ่มสำคัญมากขึ้น เมื่อคุณเข้าใจ Bitcoin ลึกขึ้น
แต่เราจะเก็บ Rabbit Hole นี้ไว้ก่อน เดี๋ยวค่อยว่ากัน 😂
สรุปแล้ว UTXO คืออะไร?
ดังนั้นคำถามว่า UTXO คืออะไร จึงไม่ได้จบแค่คำแปลว่า Unspent Transaction Output นะจ๊ะ
ถ้าคุณอ่านมาถึงตรงนี้…
ผมอยากให้ลืมภาพนี้ :
Bitcoin Wallet = บัญชีธนาคาร
แล้วเปลี่ยน Mental Model ใหม่เป็น :
Bitcoin Wallet
มันไม่ได้มีเลข Wallet Balance ก้อนเดียวให้คุณในแบบที่เราคุ้นเคยจากบัญชีธนาคารหรือใน Book Bank
แต่มันค้นหาและติดตาม :
UTXO ที่คุณสามารถ Spend ได้
จากนั้นเอามูลค่าของ UTXO เหล่านั้นมารวมกัน
แล้วแสดงผลให้คุณเห็นเป็น :
ยอดรวมของตัวเลข Balance
ดังนั้นเวลา Wallet Application บอกว่า :
คุณมี Balance = 1.5 BTC
สิ่งที่อยู่เบื้องหลังอาจเป็น :
UTXO ใบนึง 0.3 BTC
UTXO ใบนึง 0.7 BTC
UTXO ใบนึง 0.5 BTC
และเมื่อคุณกด Send…
Wallet ก็ต้องตัดสินใจว่า :
จะเลือก UTXO ก้อนไหนดีน้า ?
จะใช้กี่ก้อนดีน้า ?
จะสร้าง Output อะไรบ้างดีน้า ?
เงินทอนเท่าไหร่ดีน้า ?
ค่า Fee ของ Miner เท่าไหร่ดีน้า ?
แล้วจึงสร้าง Bitcoin Transaction ขึ้นมา
นี่คือเหตุผลที่ผมพูดในบทความก่อนหน้าว่า…
Wallet กำลังซ่อนความซับซ้อนมหาศาลไว้หลังปุ่ม Send เพียงปุ่มเดียว
เมื่อคุณเข้าใจ UTXO คืออะไร ?
คุณไม่ได้แค่จำศัพท์ Bitcoin เพิ่มขึ้นอีกหนึ่งคำ
แต่คุณเริ่มเปลี่ยน Mental Model จาก :
“Bitcoin คือเงินในบัญชี”
ไปเป็น :
“Bitcoin คือสิทธิในการ Spend UTXO ตามกฎของ Protocol”
และจากตรงนี้…
เรื่อง Private Key จะเริ่มสนุกขึ้นทันที (สนุกอีกแล้วหรอ ? ^_^)
เพราะคำถามต่อไปคือ :
ถ้า Bitcoin ไม่รู้ชื่อเรา และไม่มีบัญชีของเรา…
แล้ว Bitcoin รู้ได้ยังไงว่า UTXO ก้อนนี้เป็น “ของเรา”?
คำตอบไม่ได้อยู่ที่ชื่อบัญชีนะเฟ้ย!!!
ไม่ได้อยู่ที่บัตรประชาชน!!!
ไม่ได้อยู่ที่พนักงานธนาคาร!!!
และไม่ได้อยู่ที่ Password ของเว็บไซต์ไหน!!!
คำตอบอยู่ที่…
Private Key นั่นเอง
แล้วเราจะเปิดฝากระโปรงเรื่องนั้นกันในบทความต่อไป แล้วพบกันครับ
คำถามที่พบบ่อยเกี่ยวกับ UTXO
UTXO คืออะไร?
UTXO (Unspent Transaction Output) คือ Output จาก Bitcoin Transaction ที่ยังไม่ถูก Spend และสามารถถูกนำมาอ้างอิงเป็น Input ของ Transaction ใหม่ได้
Bitcoin Wallet มี Balance จริงหรือไม่?
Wallet Application สามารถแสดง Balance ให้ผู้ใช้เห็นได้ แต่ในโมเดล UTXO ยอดดังกล่าวเกิดจากการรวมมูลค่าของ UTXO ที่ Wallet สามารถ Spend ได้ ซึ่งมันไม่ใช่ Account Balance แบบบัญชีธนาคารพานิชย์
UTXO สามารถใช้บางส่วนได้หรือไม่?
เมื่อ UTXO ถูกเลือกเป็น Input มูลค่าของมันจะถูกนำเข้าสู่ Transaction ทั้งก้อน หากไม่ต้องการส่งทั้งหมดให้ผู้รับ ส่วนที่เหลือสามารถถูกสร้างเป็น Change Output กลับมาหาผู้ส่ง โดยส่วนต่างระหว่าง Inputs และ Outputs เป็นค่าธรรมเนียมที่ miner สามารถรับได้ ซึ่ง Keyword สำคัญคือ มันจะต้องถูกใช้ทั้งก้อน ไม่สามารถเด็ดไปใช้แบบครึ่งๆกลางๆได้
Bitcoin Transaction สามารถใช้หลาย UTXO ได้หรือไม่?
ได้ Transaction สามารถมีหลาย Inputs และแต่ละ Input สามารถอ้างอิง UTXO จาก Transaction ก่อนหน้าได้หลายๆอัน
TXID และ VOUT เกี่ยวข้องกับ UTXO อย่างไร?
TXID ระบุ Transaction ที่สร้าง Output
ส่วน VOUT หรือ Output Index ระบุว่าเราหมายถึง Output ตัวไหนภายใน Transaction นั้น
ทั้งสองอย่างจึงใช้ร่วมกันเพื่อระบุ Output ที่ Input ต้องการ Spend
ทำไมการมี UTXO จำนวนมากจึงสำคัญ?
เพราะจำนวนและขนาดของ UTXO สามารถส่งผลต่อ Coin Selection, ขนาด Transaction, Fee และ Privacy เมื่อคุณต้องการ Spend Bitcoin