เมื่อวานมีสมาชิกท่านหนึ่งในดิสคอร์ด Local Bitcoin Thailand ถามคำถามในทำนองว่า…
ทำไมโอนบิตคอยน์ต้องมีเงินทอน ทำไมไม่โอนให้พอดีไปเลย
สำหรับคนที่รู้อยู่แล้ว คือเป็นเพราะบิตคอยน์เป็นระบบแบบ UTXO based ไม่ใช่ระบบแบบ account based (เหมือนอย่างอัลท์คอยน์จำพวกอีเธอเรียม หรือ บัญชีธนาคาร) จึงไม่สามารถสั่งโอนแค่เท่าที่จะโอน และตัดยอดจาก account ของตัวเองแค่ที่พอดีกับที่จะใช้ได้
แต่สำหรับคนที่ไม่เคยได้ยินคำว่า UTXO มาก่อน หรือว่าอาจจะเคยได้ยินแล้วแต่ก็ไม่เข้าใจ โพสต์นี้ผมมีการเปรียบเทียบมาประกอบ เผื่อจะให้ความเข้าใจได้มากขึ้น หรือนำไปใช้อธิบายเพื่อนที่ยังไม่เข้าใจให้เขาเข้าใจขึ้นมาได้
(1)
จินตนาการถึงห้องโล่งๆ ห้องหนึ่ง ห้องนี้มีขนาดใหญ่มาก มีกำแพงล้อมทุกด้าน และที่บนกำแพงมีกระดาษคูปองแปะอยู่เต็มไปหมด (อันที่จริงในภาพประกอบคือกระดาษโพสต์อิท แต่ผมจะขอเรียกสิ่งนี้ว่าคูปองละกัน)
— คูปองแต่ละใบ คือ 1 UTXO ในระบบของบิตคอยน์ —
บนคูปองมีข้อมูลสำคัญอยู่ 2 บรรทัด คือ
1.รหัสล็อคคูปอง
2.มูลค่าของคูปอง
ประโยชน์ของคูปองมีแค่อย่างเดียว คือ ถ้าคุณทำตามเงื่อนไขบนรหัสล็อคคูปองได้ คุณจะมีสิทธิ์ฉีกมัน และเมื่อฉีกมันแล้ว คุณจะมีสิทธิ์เขียนคูปองใหม่ได้ — โดยที่ในหนึ่งครั้ง คุณจะฉีกคูปองพร้อมกันกี่ใบก็ได้ และเขียนคูปองใหม่เพิ่มกี่ใบก็ได้ แต่มูลค่ารวมของคูปองที่คุณเขียนใหม่จะต้องไม่มากกว่ามูลค่ารวมของคูปองที่คุณฉีกไป
[รหัสล็อคคูปองในที่นี้คือ Bitcoin Address ถ้าอยากรู้รายละเอียดเพิ่ม ผมเคยเขียนไว้แล้ว ที่นี่ ]
(2)
สมมุติ ผมเป็นลูกค้าของกระดานเทรด FTX (อันที่จริงไม่ต้องสมมุติก็ได้) ผมมีบิตคอยน์อยู่ในบัญชี FTX 1 BTC (อันนี้สมมุติจริงๆ) แล้วผมอยากถอนออกมาเข้า hardware wallet
ผมก็เดินไปบอกนายแซมเพื่อนผมว่า…
“แซมๆ เราถอนบิตคอยน์จาก exchange ของนายหน่อย เอาบิตคอยน์นึง”
แซมก็จะหันขวับมาแล้วบอกว่า “เอา address มาสิ” แล้วผมก็ยื่นกระดาษใบหนึ่งที่เขียน Bitcoin address ของผมที่คัดลอกมาจาก hardware wallet ให้เขาไป
ทีนี้ แซมก็เดินเข้าไปในห้องที่เต็มไปด้วยคูปอง แล้วไปเด็ดคูปองใบนึงมาจากผนัง สมมุติว่าคูปองใบนี้มีมูลค่า 1,000 BTC แล้วแซมก็จัดแจงสำแดงหลักฐานว่าเขามี private key ที่เป็นคู่ของรหัสล็อคที่เขียนอยู่บนคูปองใบนั้น เพื่อให้เขามีสิทธิ์ฉีกคูปองใบนั้นได้
แล้วแซมก็ฉีกคูปองมูลค่า 1000 BTC นั้นทิ้ง
ทีนี้เขาก็เขียนคูปองใหม่ใบหนึ่งสำหรับผม ก็คือเขียนมูลค่าคูปอง 1 BTC แล้วในช่องรหัสล็อคคูปองแซมก็ลอกรหัสจากกระดาษที่ผมยื่นให้เมื่อสักครู่นี้ใส่ลงไป
แต่เนื่องจากเขายังเหลือสิทธิ์เขียนคูปองได้อีก 999 BTC ถ้าเขาไม่ทำอะไรอีก 999 BTC ที่เหลือนั้นก็จะหายไป ดังนั้น แซมจึงเขียนคูปองอีกใบให้ตัวเอง โดยเอารหัสของตัวเองล็อคคูปองใบนั้นไว้ แล้วก็ใส่มูลค่าคูปองเป็น 999 BTC
(ซึ่งในความเป็นจริงแล้ว มูลค่าของคูปองที่แซมเขียนทอนให้ตัวเองควรจะเป็น 998.9999xxxx BTC ส่วนต่างเล็กน้อยที่หายไปคือค่า fee สำหรับจ่ายให้นักขุดบิตคอยน์เพื่อให้พวกเขายืนยันธุรกรรมนี้ แต่อย่าเพิ่งพูดถึงเรื่องนี้ในตอนนี้จะดีกว่า)
แล้วเมื่อแซมแปะคูปองใหม่ทั้งสองใบขึ้นผนังไปแล้ว การโอนบิตคอยน์ก็เสร็จสิ้น อีกชั่วโมงหนึ่งอาจจะมีลูกค้าอีกคนมาขอถอนบิตคอยน์กับแซมอีก แล้วแซมก็อาจจะฉีกคูปอง 999 BTC ที่เพิ่งเขียนไปเมื่อกี้เพื่อโอนบิตคอยน์ให้ลูกค้าอีกคนนั้น… นั่นเป็นเรื่องของแซม
แต่สำหรับผม รู้ว่าคูปอง 1 BTC ที่แซมแปะไว้บนผนังเป็นของผม เพราะผมมีรหัสที่สามารถให้สิทธิ์ผมในการฉีกมันได้ นั่นคือในวันใดวันหนึ่งข้างหน้า ผมสามารถเข้ามาที่ห้องนี้พร้อมกับ hardware wallet ของผมเพื่อใช้งานคูปองใบนั้นเมื่อไรก็ได้
ข้อสังเกต
– คูปองเหล่านี้ไม่มีชื่อเขียนกำกับไว้เลยว่าใบไหนเป็นของใคร ขอแค่ทำตามเงื่อนไขในคูปองได้ ก็สามารถใช้งานมันได้ ใครๆ ก็สามารถเห็นคูปอง 1 BTC ของผมบนผนังได้ แต่ไม่มีใครรู้ว่าผมมีรหัสของคูปองนั้นนอกจากผม (แซมรู้ว่าผมเป็นคนที่สั่งถอนและทำให้เกิดคูปองใบนั้นขึ้นมา แต่เค้าไม่รู้อย่างแน่ชัดว่าผมเอา address ของใครมาให้เค้า อาจจะเป็น address ของแฟนผมก็ได้)
– เพราะอย่างนั้น ใครที่ขโมย private key ของผมไป ก็สามารถเดินไปฉีกคูปองบนผนังได้ เพราะได้ทำตามเงื่อนไขถูกต้อง หรือตัวผมเองหากทำ private key หายก็จะไม่สามารถใช้งานคูปองใบนั้นได้อีกเลย — อันที่จริงคูปอง “ไม่ได้เป็นของผม” แต่การมี private key ทำให้ผม “มีสิทธิ์ที่จะใช้งานมันได้”
– คุณไม่สามารถฉีกใช้คูปองทีละนิดได้ ในทำนองเดียวกันกับที่คุณไม่สามารถฉีก 1 ใน 4 ส่วนของธนบัตร 20 บาทจ่ายให้ร้านสะดวกซื้อแทนเหรียญ 5 บาทได้ — คูปอง 1 ใบ ต้องใช้ให้หมดในทีเดียว ถ้าใช้ไม่หมด วิธีแก้คือเขียนคูปองทอนให้ตัวเอง
– แซมฉีกคูปอง 1 ใบ มีสิทธิ์เขียนคูปอง 1000 BTC แต่ถ้าผมฉีกคูปอง 10 ใบ ใบละ 1 BTC ผมได้สิทธิ์เขียนคูปองแค่ 10 BTC เมื่อเปรียบเทียบกันแล้วแม้ว่ามูลค่าธุรกรรมของแซมจะสูงกว่าผมถึง 100 เท่า แต่กลับเป็นผมที่ยุ่งวุ่นวายกับคูปองจำนวนมากกว่า — สำหรับระบบของบิตคอยน์แล้วการกระทำของผมสิ้นเปลืองพื้นที่บันทึกข้อมูลในบล็อกมากกว่าแซม ดังนั้นผมจึงต้องจ่ายค่าธรรมเนียมแพงกว่าแซมสำหรับการทำธุรกรรมนี้
Disclaimer
ตัวอย่างเปรียบเทียบนี้ถูกตัดทอนให้ง่ายขึ้นเพื่อเน้นทำความเข้าใจเฉพาะเรื่องของ UTXO เท่านั้น หากจะสร้างตัวอย่างเพื่อการเปรียบเทียบสำหรับทุกกลไกที่เกี่ยวข้องเราอาจจะต้องมีเจ้าหน้าที่ประจำห้อง (node) มีแบบฟอร์มสำหรับยื่นให้เจ้าหน้าที่ (transaction) มีกล่องใส่แบบฟอร์มรอดำเนินการ (mempool) แล้วก็มีอะไรอีกสารพัด… พอก่อน เดี๋ยวบทความนี้มันจะยาวเกินไป
บทความนี้เผยแพร่ครั้งแรกเมื่อวันที่ 1 กันยายน 2022 ทางกลุ่มเฟซบุ๊ค Siamese Bitcoiner
ปรับปรุงแก้ไขครั้งที่ 1 วันที่ 4 พฤศจิกายน 2022 สำหรับเผยแพร่ทางเว็บไซต์ rightshift.to
2 Comments
เอาเรื่องเข้าใจยากมาอธิบายให้เห็นภาพแบบนี้ได้ เก่งมาก ๆ เลยครับ คารวะ
ตอนนี้นายยังเป็นเพื่อนกับแซมอยู่มั้ยครับ อิอิ