BITCOIN (1) (1)
neo_cpe

neo_cpe

บิตคอยน์ (Bitcoin) มีจำนวนไม่เกิน 21 ล้านจริงหรือ?

ผมจะพาคุณใช้วิชาคณิตศาสตร์อย่างง่าย ในการหาที่มาของ 21 ล้านบิตคอยน์ และพาคุณสวมบทบาทโปรแกรมเมอร์ เพื่ออ่านโค้ดของบิตคอยน์ว่าซาโตชิ นากาโมโตะกำหนดกฎในการสร้างบิตคอยน์ไว้อย่างไร? และจะมีใครเปลี่ยนแปลงกฎนี้ได้หรือเปล่า?

เมื่อคุณเริ่มเข้ามาศึกษาบิตคอยน์ (Bitcoin) คงน่าจะเคยได้ยินมาว่า “บิตคอยน์จะมีการสร้างออกมาได้มากที่สุดที่ 21 ล้านบิตคอยน์” ซึ่งการที่เรามี 1 บิตคอยน์นั้นจะเท่ากับมี 1 ใน 21 ล้านเสมอ โดยตัวเลขนี้จะไม่มีวันเปลี่ยนแปลง เนื่องจากอัตราการผลิตของบิตคอยน์ที่เกิดขึ้นใหม่จากการสร้างบล็อกทุก ๆ เวลาเฉลี่ยที่ 10 นาทีนั้น จะต้องเป็นไปตามตามกฎที่ถูกเขียนไว้ในโค้ดเสมอ

ในบทความนี้ผมจะพาคุณไปใช้วิชาคณิตศาสตร์อย่างง่าย เพื่อคำนวณว่าตัวเลขที่มาของ 21 ล้านบิตคอยน์นั้นมาจากไหน? และจะพาคุณสวมบทบาทเป็นโปรแกรมเมอร์ในการอ่านโค้ดของบิตคอยน์ เพื่อดูว่าซาโตชิ นากาโมโตะได้กำหนดกฎในการสร้างบิตคอยน์เอาไว้ในโค้ดว่าอย่างไร? และกฎเหล่านี้สามารถแก้ไขเปลี่ยนแปลงให้บิตคอยน์สามารถมีจำนวนมากกว่า 21 ล้านบิตคอยน์ในอนาคตได้หรือไม่?

เอาล่ะ เราลองมาตั้งคำถามและทำความเข้าใจไปพร้อมกันเลยครับ!

เริ่มจากคำถามที่ 1 : เราจะดูซอร์สโค้ด (Source Code) ของโปรแกรมบิตคอยน์ได้จากที่ไหน?

หลายคนคงรู้กันอยู่แล้วว่าบิตคอยน์นั้นเป็น “Open Source Software” ที่มีการเปิดเผยซอร์สโค้ด (Source Code) ให้ใครก็ตามสามารถเข้ามาอ่านและนำไปพัฒนาต่อได้

ซึ่งซอร์สโค้ดหลักของบิตคอยน์อยู่ภายใต้ดูแลโดย https://bitcoincore.org/ ซึ่งมีอาสาสมัครจากทั่วโลกคอยช่วยดูแลรักษาและร่วมกันพัฒนา “ข้อเสนอในการพัฒนาปรับปรุงบิตคอยน์” หรือ “BIP” (Bitcoin Improvement Proposal) ต่าง ๆ รวมถึงการแก้บั๊ก (Bug) ของโปรแกรมอยู่ตลอดเวลา โดยเราสามารถเข้าไปดูซอร์สโค้ดของบิตคอยน์เวอร์ชั่นล่าสุดได้ที่ https://github.com/bitcoin/bitcoin

คำถามที่ 2 : แล้วซอร์สโค้ดส่วนไหนของบิตคอยน์ ที่ระบุไว้ว่าในแต่ละบล็อกนักขุด (Miner) จะสามารถสร้างบิตคอยน์ได้เท่าไหร่?

บิตคอยน์นั้นถูกสร้างขึ้นมาจากการ “ปิดบล็อก” โดยทุก ๆ บล็อกที่นักขุด (Miner) ทำการปิดและเพิ่มบล็อกเข้าไปในบล็อกเชนของบิตคอยน์ นักขุดจะได้รับรางวัลเป็นบิตคอยน์จาก  2 ส่วน ได้แก่ ค่าธรรมเนียมการโอนของธุรกรรมทั้งหมดที่ถูกบันทึกลงในบล็อกนั้น และ บิตคอยน์ที่ถูกสร้างใหม่จาก “Block Subsidy” หรือ เงินสนับสนุนที่เป็นรางวัลพิเศษเพิ่มเติม

โดยระบบมีการเขียนกฎเอาไว้ในโค้ดว่า Block Subsidy จะมีค่าเริ่มต้นที่ 50 บิตคอยน์ในบล็อกแรก

และค่านี้จะลดลงครึ่งหนึ่งจากการ “ฮาล์ฟวิ่ง” (Halving) ซึ่งคำนวณด้วยวิธีการที่เรียกว่า “Right Shift” (ชื่อเดียวกับเว็บไซต์ rightshift.to นั่นเอง!) ในทุก ๆ 210,000 บล็อก (หรือประมาณ 4 ปีโดยเฉลี่ย) โดยเราสามารถดูโค้ดส่วนนี้ได้จาก https://github.com/bitcoin/bitcoi/blob/master/src/validation.cpp

ในโค้ดจะมีฟังก์ชันที่เรียกว่า “GetBlockSubsidy” คือจำนวนบิตคอยน์ที่เป็นรางวัลสำหรับการปิดบล็อกของนักขุด โดยใช้ข้อมูล “nHeight” คือความสูงของบล็อกปัจจุบันเข้าไปคำนวณ

โค้ดกำหนดการฮาล์ฟวิ่ง (Halving) ด้วยวิธี Right Shift

ซึ่งจากรูปข้างบน คุณจะเห็นว่าในบรรทัดที่ 1503 จะเป็นการคำนวณค่า “Halvings” โดยเอาค่า “ความสูงของบล็อก” หารด้วย “concensusParams.nSubsidyHalvingInterval” ซึ่งมีค่าเท่ากับ 210,000 บล็อก โดยที่มีการเขียนดักไว้ว่าถ้าค่าที่หารแล้วมีค่ามากกว่า 64 จะให้มีการ “Return” ค่ากลับเป็น 0 เนื่องจากค่าตัวแปรที่ใช้ในการเก็บบิตคอยน์มีการตั้งชนิดของการเก็บข้อมูลเป็น “int_64” ซึ่งมีค่าสูงสุดคือ 64 บิต (bit) จึงมีการแก้ไขโค้ดเพื่อป้องกันปัญหา “OverFlow” หลังจากมีการ Right Shift เกิน 64 ครั้ง

คุณสามารถศึกษาเรื่องนี้เพิ่มเติมได้ที่ https://github.com/bitcoin/bips/blob/master/bip-0042.mediawiki หรือ https://ericscrivner.me/2018/07/bip-42-and-bitcoins-fixed-monetary-supply/ (ซึ่งบั๊กนี้มีการแก้ไขไปแล้วใน BIP42)

โดยค่าเริ่มต้นที่เป็น “Block Subsidy” คือ 50*COIN ซึ่งเท่ากับ 50 คูณ100,000,000 ซาโตชิ (1 บิตคอยน์แบ่งย่อยได้เป็น 100,000,000 ซาโตชิ) หรือเท่ากับ 50 บิตคอยน์นั่นเอง จากนั้นในบรรทัดต่อมาเขียนว่า :

nSubsidy >>= halvings;

ซึ่งเป็นการทำ Right Shift ตามค่าตัวแปร Halvings ยกตัวอย่างเช่น ถ้า Halvings = 2 ก็จะทำการ Right Shift จำนวน 2 ครั้ง

ก่อนอื่นขออธิบายก่อนว่า Right Shift เป็นวิธีการคำนวณทางคณิตศาสตร์แบบหนึ่งที่ จะคำนวณด้วยวิธีการขยับตำแหน่ง (Shift Bit) ของค่าตัวเลขแบบฐาน 2 (ค่าตัวเลขที่มีแค่ 0 กับ 1) ไปทางขวามือ เช่น ถ้าในโปรแกรมเขียนไว้ว่า nSubsidy >>= 3; หมายความว่าให้เอาเลข nSubsidy แบบเลขฐาน 2 ทำการ Right Shift ไป 3 ครั้ง

ดังนั้นเมื่อ nSubsidy = 50*COIN ซึ่งมีค่า 5,000,000,000 หรือ 100101010000001011111001000000000 ในเลขฐาน 2 ดังนั้นถ้าทำการ Right Shift ไป 3 ครั้ง ค่าที่ได้จะเป็น 00000101010000001011111001000000 ในเลขฐาน 2 หรือมีค่าเท่ากับ 625,000,000 ในเลขฐาน 10 ซึ่งมีค่าเท่ากับอ 6.25 บิตคอยน์นั่นเอง

ถ้าคุณอยากทดลองแปลงตัวเลขฐานต่าง ๆ สามารถไปลองเล่นได้ที่ https://www.rapidtables.com/convert/number/decimal-to-binary.html

คำถามที่ 3 : แล้วจำนวน 21 ล้านบิตคอยน์มาจากไหน?

ถ้าเข้าใจคำตอบของคำถามที่ 2 แล้ว เราสามารถคำนวณเพื่อตอบคำถามนี้ได้ไม่ยาก เนื่องจากเครือข่ายบิตคอยน์นั้นปิดบล็อกโดยเฉลี่ยทุก ๆ 10 นาที ดังนั้นจะมีบิตคอยน์ที่ถูกผลิตขึ้นใหม่เกิดขึ้นตามกฎที่เขียนไว้ และมีอัตราการผลิตที่ลดลงจากการ Right Shift ทุก 210,000 บล็อก

ซึ่งจากค่า nSubsidy ตั้งต้น จะเห็นว่าจำนวน 50 บิตคอยน์นั้นเขียนเป็นเลขฐาน 2 ได้เป็น 100101010000001011111001000000000 ซึ่งหลังจาก Right Shift ไปทั้งหมด 32 ครั้ง ค่าของ nSubsidy จะมีค่าเป็น 0 หรือจะไม่มีบิตคอยน์ถูกผลิตขึ้นมาใหม่แล้วนั่นเอง

ดังนั้นเมื่อเอาข้อมูลทั้งหมดมาคำนวณใส่ตาราง Excel จะได้ว่าในทุก ๆ 210,000 บล็อก จะมีบิตคอยน์ถูกผลิต (ถูกขุด) ออกมาดังนี้ :

เมื่อรวมจำนวนบิตคอยน์ทั้งหมดที่ถูกผลิตขึ้นมาจะได้เท่ากับ 21 ล้านบิตคอยน์นั่นเอง

ณ เวลาที่ผมเขียนบทความนี้ พวกเรากำลังอยู่ในการ Halving ครั้งที่ 3 ซึ่งหากนับจากวันที่บิตคอยน์เริ่มทำงานจนถึงเวลานี้ อุปทานหรือปริมาณของบิตคอยน์กว่า 90% ได้ถูกผลิตขึ้นมาแล้ว ระบบจะเหลือกระบวนการ Halving อีก 29 ครั้งจนถึงปี 2140 หรืออีกประมาณ 116 ปีต่อจากนี้จะไม่มีบิตคอยน์ถูกผลิตขึ้นแล้วมาใหม่อีกแล้วครับ

คำถามที่ 4 : แล้วนักขุด (Miner) ผลิตบิตคอยน์ให้ตัวเองเกินกว่าค่า “Block Subsidy” ได้ไหม?

คำตอบคือ นักขุดทำได้!!

อ้าว!! ถ้านักขุดผลิตบิตคอยน์เกินค่า Block Subsidy ได้ก็แปลว่าอุปทานของบิตคอยน์ก็มีโอกาสเกิน 21 ล้านได้น่ะสิ!

คำตอบคือ ไม่ใช่ครับ เพราะธุรกรรมนั้นของนักขุดรายนั้นจะถูกปฎิเสธจากโหนดของบิตคอยน์ (Bitcoin Node) และจะไม่ถูกบันทึกลงบล็อกเชนของบิตคอยน์ เนื่องจากก่อนที่โหนดของบิตคอยน์จะยอมรับบล็อกใหม่เข้าไปในบล็อกเชน โหนดจำเป็นที่จะต้องตรวจสอบว่า “บล็อก” ดังกล่าวเป็นไปตามกฎฉันทามติของบิตคอยน์ (Bitcoin Consensus Rule) ตามถูกโปรแกรมไว้ในโค้ดหรือไม่

โดยกฎของการสร้าง “บล็อกใหม่” จะต้องมีเงื่อนไขที่ถูกต้องครบถ้วนทุกข้อดังนี้ :

  1. พรูฟ-ออฟ-เวิร์ก (Proof of Work) : โหนดของบิตคอยน์จะทำการตรวจสอบว่าค่าแฮช (Hash) ที่สร้างขึ้นมีค่าที่ถูกต้องเหมาะสมตรงกับความยากที่กำหนดไว้หรือไม่
  2. โครงสร้างของบล็อก (Block Structure) : โหนดของบิตคอยน์จะตรวจสอบว่าบล็อกเป็นไปตามโครงสร้างที่กำหนดไว้หรือไม่ เช่น ขนาดของบล็อก จำนวนธุรกรรมรวม และรูปแบบของธุรกรรม
  3. ความถูกต้องของธุรกรรม (Transaction Validity) : โหนดของบิตคอยน์จะตรวจสอบว่าธุรกรรมแต่ละรายการที่รวมอยู่ในบล็อกนั้นถูกต้อง และเป็นไปตามกฎของเครือข่าย เช่น ค่าอินพุตและเอาต์พุต การตรวจสอบลายเซ็น และเอาต์พุตที่ใช้จ่ายได้
  4. ความสูงของบล็อก (Block Height) : โหนดของบิตคอยน์จะตรวจสอบว่าความสูงของบล็อกว่าตรงกับค่าความสูงปัจจุบันของบล็อกเชนบิตคอยน์หรือไม่
  5. แฮชของบล็อกก่อนหน้า (Previous Block Hash) : โหนดของบิตคอยน์จะตรวจสอบว่าค่าแฮชของบล็อกก่อนหน้านั้นถูกต้องและตรงกับการอ้างอิงในบล็อกปัจจุบันหรือไม่

ซึ่งถ้านักขุดจงใจที่จะจ่ายบิตคอยน์ให้ตัวเองเกินกว่าที่กำหนดไว้ในโค้ด ก็จะทำให้ผิดกฎในส่วนของ “ความถูกต้องของธุรกรรม” (Transaction Validity) ส่งผลให้โหนดต่าง ๆ ไม่ยอมรับในบล็อกใหม่ที่นักขุดสร้างขึ้น ซึ่งจะทำให้กระบวนการพรูฟ-ออฟ-เวิร์กที่นักขุดทำมาทั้งหมดนั้นเสียเปล่า

นักขุดจึงไม่ได้รับประโยชน์ใด ๆ จากการสร้างบล็อกที่ไม่เป็นไปตามกฎฉันทามติของเครือข่ายบิตคอยน์

คำถามสุดท้าย : แล้วเราสามารถเปลี่ยนกฎในการผลิตบิตคอยน์ได้หรือไม่?

ยกตัวอย่างเช่น ปรับให้ระบบทำการ Halving ได้สูงสุด 20 ครั้ง แล้วหลังจากนั้นให้บิตคอยน์ถูกผลิตออกมาในอัตราคงที่ตลอดไป

คำตอบของคำถามนี้คือ “เป็นไปได้ครับ”

แต่การแก้ไขกฎดังกล่าวจะทำให้เกิดการฮาร์ดฟอร์ก (Hardfork) บล็อกเชนของบิตคอยน์ เนื่องจากการเปลี่ยนแปลงนี้ไม่สามารถทำให้โหนดใหม่ที่ใช้งานซอฟต์แวร์เวอร์ชั่นนี้ทำงานร่วมกับโหนดที่รันซอฟต์แวร์เวอร์ชั่นก่อนหน้าได้

การอัปเกรดซอฟต์แวร์ของบิตคอยน์ที่ทำกันอยู่ในปัจจุบันตามข้อเสนอ BIP ต่าง ๆ นั้น จะเป็นการทำในลักษณะของการซอฟต์ฟอร์ก (Softfork) กล่าวคือโหนดของบิตคอยน์ไม่จำเป็นที่จะต้องอัปเกรดซอฟต์แวร์ไปเป็นเวอร์ชันใหม่ก็สามารถที่จะทำงานตรวจสอบธุรกรรมในเครือข่ายบิตคอยน์ได้เป็นปกติ เพียงแต่จะไม่รองรับความสามารถบางอย่างที่เพิ่มเติมเข้ามาเท่านั้น

แต่กับการแก้ไขฉันทามติของบิตคอยน์นั้น จะส่งผลให้โหนดต้องอัปเกรดซอฟต์แวร์ใหม่ ไม่เช่นนั้นจะไม่สามารถตรวจสอบบล็อกได้

โดยเหตุการณ์ลักษณะนี้เคยเกิดขึ้นมาแล้วในช่วงของ “สงครามขนาดบล็อก” (The Block Size War) ซึ่งทำให้เกิดการฮาร์ดฟอร์กบล็อกเชนของบิตคอยน์ ออกไปเป็น Bitcoin Cash (BCH) และ Bitcoin SV (BSV) ซึ่งถือว่าเป็นคนละบล็อกเชนกับบล็อกเชนของบิตคอยน์ดั้งเดิม

บิตคอยน์เป็นระบบการเงินที่เสรี ไร้ศูนย์กลาง และไม่มีใครควบคุมได้ มูลค่าของระบบเกิดจากผู้ใช้งานบิตคอยน์ทั้งหมด ซึ่งก็คือโหนด นักขุด และผู้ใช้งานบิตคอยน์ โดยเขาเหล่านั้นจะสามารถเลือกได้เองว่าบิตคอยน์ที่เขาต้องการใช้งานจะอยู่ในรูปแบบใด

และทั้งหมดนี้คือเหตุผลว่าทำไม 1 บิตคอยน์ของคุณ จะเป็น 1 ใน 21 ล้านเสมอไม่มีวันเปลี่ยนแปลงครับ

neo_cpe

** ทุกบาทหรือทุกซาโตชิที่ donate จะถูกส่งเข้ากระเป๋าของผู้เขียนโดยตรงครับ :) **

Share this post

Leave a Reply

Connect with

Your email address will not be published. Required fields are marked *


Related Posts