UTXO คืออะไร ทำไม Bitcoin ไม่มี Balance จริง ๆ

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

Similar Posts

  • Private Key คืออะไร? ทำไมคนที่ถือ Key ถึงควบคุม Bitcoin ได้?

    “แล้วใครมีสิทธิ Spend UTXO ก้อนนั้น?” นี่คือคำถามที่เรียกได้ว่าเด็ดดวงที่สุดในปฐพี Private Key คืออะไร? ถ้าผมตอบแบบสั้นที่สุด… มันคือ ความลับ ที่ทำให้คุณสามารถสร้างหลักฐานทางคณิตศาสตร์ เพื่ออนุญาตให้ Bitcoin ของคุณเอาไป Spend ได้ แต่เดี๋ยวก่อน… ประโยคนี้มีอะไรแปลก ๆ อยู่หนึ่งอย่าง ผมไม่ได้พูดว่า : Private Key คือรหัสผ่านของ Bitcoin และผมก็ไม่ได้พูดว่า : Private Key คือที่เก็บ Bitcoin เพราะจริง ๆ แล้ว… Bitcoin ไม่ได้สิงอยู่ใน Private Key ของคุณ มันไม่ได้อยู่ใน Hardware Wallet ด้วยนะ ไม่ได้อยู่ในมือถือด้วยนะ ไม่ได้อยู่ใน Trezor ด้วยนะ และไม่ได้อยู่ในกระดาษที่คุณเขียน Seed Phrase เก็บเอาไว้นะ Bitcoin อยู่บน…

  • Bitcoin Transaction คืออะไร? วิธีสร้างด้วยมือเปล่าใน 8 ขั้นตอน

    เคยสงสัยไหมว่า ตอนที่เรากด Send Bitcoin ใน Wallet จริง ๆ แล้วเบื้องหลังมันกำลังทำอะไรอยู่? ถ้าวันหนึ่งไม่มี Wallet ให้ใช้ไม่มีปุ่ม Send ให้กดไม่มีหน้าจอสวย ๆ มาคอยจัดการทุกอย่างให้เรา… เรายังสามารถสร้าง Bitcoin Transaction ขึ้นมาเองได้ไหม? คำตอบคือ ได้ บทความนี้เราจะลองถอด Wallet ออกทีละชั้น แล้วสร้าง Bitcoin Transaction “ด้วยมือเปล่า” ตั้งแต่การเลือก Tools ที่เราจะใช้, กำหนดว่าจะส่งมันไปที่ไหน, สร้าง Transaction ขึ้นมา ไปจนถึงการเซ็น Transaction ก่อนส่งออกไปยัง Bitcoin Network เป้าหมายไม่ใช่การทรมานตัวเองด้วยการทำสิ่งที่ Wallet ทำให้เราได้ภายในไม่กี่วินาที 😆 แต่คือการเปิดฝากระโปรงดูว่า Bitcoin ทำงานอย่างไรจริง ๆ เพราะเมื่อคุณสร้าง Transaction เองได้สักครั้ง คำว่า UTXO, Input,…

  • Digital Signature คืออะไร? Bitcoin พิสูจน์ว่าเป็นเจ้าของได้อย่างไร โดยไม่เปิดเผย Private Key

    Digital Signature คืออะไร? ถ้าผมบอกคุณว่า… ผมสามารถพิสูจน์กับคนทั้งโลกได้ว่า “ผมมี Private Key ของแท้” โดยที่… ผมไม่ต้องเอา Private Key ให้ใครดูเลยแม้แต่นิดเดียว คุณจะเชื่อมั้ย? หรือคุณอาจถามว่า : “แล้วกูจะรู้ได้ยังไงว่ามึงมีของจริง?” 😂 นี่แหละครับคือหนึ่งในความมหัศจรรย์ของ Cryptography ที่ Bitcoin ใช้ ในบทความก่อนหน้าเรื่อง Private Key คืออะไร? ทำไมคนที่ถือ Key ถึงควบคุม Bitcoin ได้? เรารู้แล้วว่า Private Key ไม่ใช่ Password และ Bitcoin ก็ไม่ได้ถูกเก็บอยู่ใน Private Key Private Key คือ Secret ที่สามารถนำมาใช้สร้างหลักฐานทาง Cryptography เพื่ออนุญาตให้เราทำการ Spend Bitcoin ตามเงื่อนไขที่กำหนดไว้ได้อย่างสบายใจ ซึ่งอีหลักฐานที่ว่านี้คือสิ่งที่เรียกว่า :…