วันพุธที่ 13 กรกฎาคม พ.ศ. 2565

รู้จัก UTXO model … ก่อนจะเข้าใจ DeFi ใน Chia

บทความนี้ post ลง facebook เมื่อวันที่ 23 Jul 2021 =>  link 


ระบบ DeFi ใน Chia มีการปรับปรุงหลายๆ อย่างที่ Bitcoin เคยพัฒนามา แต่ก่อนที่เราจะเข้าใจว่า DeFi ของ Chia ทำงานอย่างไรและดีกว่า Bitcoin ยังไง … เราจำเป็นต้องเข้าใจ UTXO model ที่ถูกใช้ใน bitcoin กันก่อนครับ 

บทความนี้ผมได้สรุปมาจากบทความต้นฉบับที่  https://www.seba.swiss/research/A-Beginner-s-Guide-to-Blockchain-Accounting-Standards ซึ่งอธิบายค่อนข้างชัดเจนครับ 

ก่อนจะเข้าใจถึงวิธีการทำงานของ UTXO เราลองนึกถึงเงินที่อยู่บนโลกจริงๆ ไม่ว่าเราจะมีหมายเลขบัญชีธนาคารกี่หมายเลข …. ทุกครั้ที่มีการโอนเงินเข้าหรือออก เราก็จะอ้างอิงหมายเลขบัญชีนั้นๆ แล้ว update เงินเข้าเงินออกเป็น transaction ของแต่ล่ะรายการ หลังจาก transaction complete บัญชีธนาคารจะ update ว่ามี balance เหลือเท่าไร ลองจินตนาการสมุดบัญชีของธนาคารน่ะครับเวลาเราไป up book bank เมื่อมีเงินเข้าก็จะเป็น 1 transaction แล้ว column สุดท้ายก็จะบอก balance หลังจากเงินเข้า …. เมื่อมีเงินออกก็จะเป็นทำนองเดียวกัน … 

UTXO มาจากคำว่า “upspent transaction output” และถูกใช้ในโลกของสกุลเงินดิจิทัล … หลักการทำงานคือ (นิยาม อ่านแล้วอาจจะ งง ลองอ่านคร่าวๆ แล้วไปทำความเข้าใจที่ตัวอย่างน่ะครับ) … เมื่อใครสักคนได้รับ token (หรือเหรียญดิจิทัล) transaction นั้นจะถูก record ในรูปของ UTXO โดยที่ address ของเจ้าของเหรียญจะถูกบันทึกไว้ใน UTXO เข้าไปด้วย …. ใน network จะมีการ track UTXO ตามจำนวนยอดเงินของผู้ใช้ … การเกิดใหม่ของ transaction ของ UTXO model จะอ้างอิงจาก output ของ transaction ก่อนหน้าแล้วสร้าง output UTXO ตัวใหม่เพื่อให้ transaction ที่จะเกิดในอนาคตนำไปใช้ ….. มี blockchain หลายๆ เหรียญที่ใช้ concept UTXO model เช่น BitCoin Cash, Litecoin, Bitcoin SV... 

อาจจะ งงๆ ในคำนิยาม …. เราลองมาดูตัวอย่างครับ

นาย กอ มีแบง $5 อยู่ 20 ใบ
แบงดอลล่าทั้ง 20 ใบ ในโลกของสกุลเงินดิจิทัลจะเรียกว่า transaction ที่ยังไม่ได้ใช้งาน (unspent transaction) ซึ่งทั้งหมดมีมูลค่า $100 
จากนั้นนาย กอ ต้องการซื้อเสื้อเชิ้ตราคา $70 
นาย กอ จ่ายเงินด้วยแบง $5 ดอลล่าจำนวน 4 ใบ (เท่ากับ $80) 
นาย กอ ได้รับเงินทอน $10 …. ตัวเงินทอนนี้จะเป็นข้อมูลสำหรับการสร้าง UTXO ตัวใหม่ 
สำหรับตัวอย่างนี้ เมื่อ transaction complete (คือมีการจ่ายเงินและได้รับเงินทอน) จะมี 2 UTXO ที่ถูกสร้างขึ้นให้กับ นาย กอ นั้นคือ
UTXO#1 คือ การจ่ายด้วยแบง $5 จำนวน 4 ใบ
UTXO#2 คือ การได้รับเงินทอน $10 

ถ้าในแง่ของ “balance” ก็จะทำงานในลักษณะนี้เหมือนกัน คือค่า balance จะนำจำนวนสุทธิของทั้งรายรับและรายจ่ายทั้งหมดของ UTXO มารวมกัน …. จำนวน balance หรือยอดเงินคงเหลือสามารถเรียกได้อีกอย่างคือ จำนวนเงินที่ยังไม่ได้ถูกใช้ (unspent) 

เราลองมาดูอีก 1 ตัวอย่างที่ใช้สกุลเงิน BTC เพื่อความเข้าใจมากขึ้น

นาย กอ มีเงิน balance หรือ unspent (เงินที่ยังไม่ใช้) จำนวน 4.4BTC ซึ่งในกระเป๋าเงินรวมของ นาย กอ จะมี UTXO ที่ประกอบไปด้วย 3 UTXO ได้แก่  3 BTC, 0.8 BTC และ 0.6 BTC …. ซึ่งไอ้ 3 UTXO ของนาย กอ เกิดจากการทำธุรกรรมก่อนหน้าของเขาเอง … ถ้าใครยัง งง ให้ลองจินตนาการว่า นาย กอ มีถุงใส่เงิน 3 ถุง .. ถุงที่ 1 เรียกว่า UTXO#1 มีเงินในถุง 3 BTC ถุงทีสองเรียกว่า UTXO#2 มีเงินในถุง 0.8BTC และ ถุงทีสามเรียกว่า UTXO#3 มีเงินในถุง 0.6 BTC 

วันหนึ่ง นาย กอ ต้องการโอนเงินให้ นาย ขอ จำนวน 3.7BTC 
การโอนเงินให้นาย ขอ สิ่งแรกที่นาย กอ จำเป็นจะต้องทำคือเลือกถุงเงินให้ถูกต้องก่อน … ก่อนที่จะจ่ายให้นาย ขอ …. เราลองสมมุติการเลือกถุงเงินของ นาย กอ มา 2 แบบ คือ

การเลือกถุงเงินแบบที่ 1 …. ถ้าเลือกการจ่ายเงินให้นาย ขอ โดยใช้ถุงเงินที่ 1 หรือ UTXO#1 ที่มีเงิน 3 BTC รวมกับถุงเงินที่ 2 หรือ UTXO#2 ที่มีเงิน 0.8 BTC …. ถุงเงินทั้ง 2 ถุงรวมกันจะเท่ากับ 3.8 BTC …. ซึ่งมากกว่าจำนวนที่ต้องการโอนคือ 3.7BTC … ดังนั้นการเลือกถุงเงินแบบนี้จะสามารถโอนเงินให้นาย ขอ ได้
 
การเลือกถุงเงินแบบที่ 2 ….  เป็นการรวมเงินระหว่างถุงเงินที่ 1 หรือ UTXO#1 ที่มีเงิน 3 BTC รวมกับถุงเงินที่ 3 หรือ UTXO#3 ที่มีเงิน 0.6 BTC …. ถุงเงินทั้ง 2 ถุงรวมกันจะเท่ากับ 3.6 BTC …. ซึ่งน้อยกว่ายอดเงินที่ต้องการโอนคือ 3.7 BTC ….  ดังนั้นการเลือกถุงเงินแบบนี้จะ “ไม่” สามารถโอนเงินให้นาย ขอ ได้ …. ถ้าเลือกถุงเงินแบบนี้ เราต้องใช้ถุงเงินที่ 2 หรือ UTX#2 มาใช้ด้วยจึงจะมียอดเงินรวมสุทธิที่สามารถโอนเงินได้ แต่ก็เป็นการยุ่งยากเพราะเราต้องจัดการกับถุงเงินถึง 3 ถุง…. 

ดังนั้นการเลือกถุงเงินแบบที่ 1 จึงเป็นวิธีที่ดีที่สุด …. 

เมื่อเลือกถุงเงินได้แล้วสิ่งที่ blockchain ทำคือ 
1) ทำการโอนเงินจากถุงเงินที่ 1 (UTXO#1) จำนวน 3 BTC แล้วจบถุงเงินที่ 1 (UTXO#1)  
2) ทำการโอนเงินจากถุงเงินที่ 2 (UTXO#2) จำนวน 0.8 BTC แล้วจบถุเงินที่ 2 (UTXO#2) … แม้ว่ายอดเงินเกินก็จบถุงเงินเหมือนกัน  
3) เนื่องจากจ่ายเงินเกิน 0.1 BTC ดังนั้นจะมีการสร้างถุงเงินที่ 4 หรือ UTXO#4 ที่เป็นเงินทอนจำนวน 0.1 BTC 

หลังจากการโอนเงินสำเร็จ นาย กอ จึงมีถุงเงินเหลือทั้งหมด 2 ถุงคือ
ถุงเงินที่ 2 หรือ UTXO#2 ที่มีเงินจำนวน 0.6 BTC
ถุงเงินที่ 4 หรือ UTXO#4 ที่มีเงินจำนวน 0.1 BTC 
balance ของ นาย กอ ก็จะเท่ากับ 0.7 BTC

และฝั่งของ นาย ขอ ก็จะมี UTXO เกิดใหม่ 1 รายการที่มียอดเงินจำนวน 3.7 BTC … จุดสังเกตุคือ แม้ว่า UTXO ของนาย กอ จะหายไป 2 UTXO …. แต่มี UTXO ของนาย ขอ ที่เกิดใหม่เพียง 1 UTXO เท่าน้ันที่เป็นยอดเงินรวมสุทธิที่ได้รับจาก นาย กอ 

จากตัวอย่างจะเห็นได้ว่า transaction ของ UTXO ต่างจาก transaction ของโลกบัญชีจริงๆ … และนี้คือข้อดีของการทำ transaction แบบ UTXO
- ขนาดของ transaction จะมีขนาดเล็ก
- ใน 1 transaction สามารถ process ได้หลาย UTXO หลายรายการในเวลาเดียวกัน
- สามารถทำหลายๆ transaction ได้ในเวลาเดียวกัน
- ลดภาระในการคำนวณของ network
- transaction แต่ล่ะรายการมีความเป็นส่วนตัวสูงเพราะมันมีความซับซ้อนในการที่จะ track transaction เพราะ UTXO ถูกสร้างใหม่ทุกครั้งที่มีการสร้าง transaction
- ความปลอดภัยสูงเพราะยอดเงินเข้าและยอดเงินออกมีการ link ไปกับ transaction “โดยไม่มีข้อยกเว้น” จึงเป็นการง่ายในการตรวจสอบธุรกรรมย้อนหลังเพื่อป้องกัน ปัญหา double-spending 

แต่ แต่ แต่ … ก็มีข้อเสียเหมือนกันที่มีการทำ transaction แบบนี้ 
- ระบบมีความซับซ้อนเพราะการโอนเงิน 1 ครั้งจำเป็นต้องพิจารณาหลายๆ อย่าง โดยเฉพาะการเลือกถุงเงิน … โดยเฉพาะถุงเงินที่มีมีแต่ย่อยๆ จำนวนมากและมีการทำ transaction ที่มีขนาดใหญ่ (โอนเงินจำนวนมาก) 
- UTXO มีความเป็นตัวของตัวเองสูงมากไป (ฝรั่งใช้คำว่า stateless)  หมายถึง transaction แต่ล่ะ transaction จะมี UTXO เป็นของตัวเองและจะไม่มีการยุ่งกับ STXO ข้าม transaction ทำให้อาจจะมีความยุ่งยากกับ application บางตัวเช่น smart contracts 

และนี้คือ concept ของ UTXO ที่ bitcoin ออกแบบมา …. ตัว concept ค่อนข้างจะซับซ้อนแต่ผมพยายามจะยกตัวอย่างให้เห็นชัดมากขึ้น … หวังว่าคงไม่ยากเกินไปน่ะครับ … หรือหลังจากอ่านแล้ว งง กว่าเดิม 5555 .... ถ้าใครมีคำถามสามารถทิ้งใต้ comment เลยครับ … 

ขอบคุณทุกคนที่ติดตาม …. happy farming ครับ 

ไม่มีความคิดเห็น:

แสดงความคิดเห็น