เมื่อคุณเริ่มเข้ามาศึกษาบิตคอยน์ (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) ตามถูกโปรแกรมไว้ในโค้ดหรือไม่
โดยกฎของการสร้าง “บล็อกใหม่” จะต้องมีเงื่อนไขที่ถูกต้องครบถ้วนทุกข้อดังนี้ :
- พรูฟ-ออฟ-เวิร์ก (Proof of Work) : โหนดของบิตคอยน์จะทำการตรวจสอบว่าค่าแฮช (Hash) ที่สร้างขึ้นมีค่าที่ถูกต้องเหมาะสมตรงกับความยากที่กำหนดไว้หรือไม่
- โครงสร้างของบล็อก (Block Structure) : โหนดของบิตคอยน์จะตรวจสอบว่าบล็อกเป็นไปตามโครงสร้างที่กำหนดไว้หรือไม่ เช่น ขนาดของบล็อก จำนวนธุรกรรมรวม และรูปแบบของธุรกรรม
- ความถูกต้องของธุรกรรม (Transaction Validity) : โหนดของบิตคอยน์จะตรวจสอบว่าธุรกรรมแต่ละรายการที่รวมอยู่ในบล็อกนั้นถูกต้อง และเป็นไปตามกฎของเครือข่าย เช่น ค่าอินพุตและเอาต์พุต การตรวจสอบลายเซ็น และเอาต์พุตที่ใช้จ่ายได้
- ความสูงของบล็อก (Block Height) : โหนดของบิตคอยน์จะตรวจสอบว่าความสูงของบล็อกว่าตรงกับค่าความสูงปัจจุบันของบล็อกเชนบิตคอยน์หรือไม่
- แฮชของบล็อกก่อนหน้า (Previous Block Hash) : โหนดของบิตคอยน์จะตรวจสอบว่าค่าแฮชของบล็อกก่อนหน้านั้นถูกต้องและตรงกับการอ้างอิงในบล็อกปัจจุบันหรือไม่
ซึ่งถ้านักขุดจงใจที่จะจ่ายบิตคอยน์ให้ตัวเองเกินกว่าที่กำหนดไว้ในโค้ด ก็จะทำให้ผิดกฎในส่วนของ “ความถูกต้องของธุรกรรม” (Transaction Validity) ส่งผลให้โหนดต่าง ๆ ไม่ยอมรับในบล็อกใหม่ที่นักขุดสร้างขึ้น ซึ่งจะทำให้กระบวนการพรูฟ-ออฟ-เวิร์กที่นักขุดทำมาทั้งหมดนั้นเสียเปล่า
นักขุดจึงไม่ได้รับประโยชน์ใด ๆ จากการสร้างบล็อกที่ไม่เป็นไปตามกฎฉันทามติของเครือข่ายบิตคอยน์
คำถามสุดท้าย : แล้วเราสามารถเปลี่ยนกฎในการผลิตบิตคอยน์ได้หรือไม่?
ยกตัวอย่างเช่น ปรับให้ระบบทำการ Halving ได้สูงสุด 20 ครั้ง แล้วหลังจากนั้นให้บิตคอยน์ถูกผลิตออกมาในอัตราคงที่ตลอดไป
คำตอบของคำถามนี้คือ “เป็นไปได้ครับ”
แต่การแก้ไขกฎดังกล่าวจะทำให้เกิดการฮาร์ดฟอร์ก (Hardfork) บล็อกเชนของบิตคอยน์ เนื่องจากการเปลี่ยนแปลงนี้ไม่สามารถทำให้โหนดใหม่ที่ใช้งานซอฟต์แวร์เวอร์ชั่นนี้ทำงานร่วมกับโหนดที่รันซอฟต์แวร์เวอร์ชั่นก่อนหน้าได้
การอัปเกรดซอฟต์แวร์ของบิตคอยน์ที่ทำกันอยู่ในปัจจุบันตามข้อเสนอ BIP ต่าง ๆ นั้น จะเป็นการทำในลักษณะของการซอฟต์ฟอร์ก (Softfork) กล่าวคือโหนดของบิตคอยน์ไม่จำเป็นที่จะต้องอัปเกรดซอฟต์แวร์ไปเป็นเวอร์ชันใหม่ก็สามารถที่จะทำงานตรวจสอบธุรกรรมในเครือข่ายบิตคอยน์ได้เป็นปกติ เพียงแต่จะไม่รองรับความสามารถบางอย่างที่เพิ่มเติมเข้ามาเท่านั้น
แต่กับการแก้ไขฉันทามติของบิตคอยน์นั้น จะส่งผลให้โหนดต้องอัปเกรดซอฟต์แวร์ใหม่ ไม่เช่นนั้นจะไม่สามารถตรวจสอบบล็อกได้
โดยเหตุการณ์ลักษณะนี้เคยเกิดขึ้นมาแล้วในช่วงของ “สงครามขนาดบล็อก” (The Block Size War) ซึ่งทำให้เกิดการฮาร์ดฟอร์กบล็อกเชนของบิตคอยน์ ออกไปเป็น Bitcoin Cash (BCH) และ Bitcoin SV (BSV) ซึ่งถือว่าเป็นคนละบล็อกเชนกับบล็อกเชนของบิตคอยน์ดั้งเดิม
บิตคอยน์เป็นระบบการเงินที่เสรี ไร้ศูนย์กลาง และไม่มีใครควบคุมได้ มูลค่าของระบบเกิดจากผู้ใช้งานบิตคอยน์ทั้งหมด ซึ่งก็คือโหนด นักขุด และผู้ใช้งานบิตคอยน์ โดยเขาเหล่านั้นจะสามารถเลือกได้เองว่าบิตคอยน์ที่เขาต้องการใช้งานจะอยู่ในรูปแบบใด
และทั้งหมดนี้คือเหตุผลว่าทำไม 1 บิตคอยน์ของคุณ จะเป็น 1 ใน 21 ล้านเสมอไม่มีวันเปลี่ยนแปลงครับ