Bitcoin ทำงานอย่างไร?

· 10 min read

Bitcoin คือแนวคิดสกุลเงินดิจิทัลที่ Satoshi Nakamoto บุคคลปริศนาในตำนานเสนอขึ้นในปี 2009 โดยใช้เทคโนโลยีบล็อกเชนเป็นโครงสร้างพื้นฐาน และทำงานแบบกระจายศูนย์ส่งตรงจากคนถึงคน ไวต์เปเปอร์ที่ Nakamoto เขียนเพื่ออธิบายแนวคิดนี้เป็นเอกสารที่ทุกคนที่อยากเข้าใจบิทคอยน์และคริปโตโดยรวมควรอ่าน เพราะมันไม่ได้อธิบายแค่ตัวบิทคอยน์ในฐานะแนวคิด แต่ยังอธิบายว่าระบบที่ทนต่อความผิดพลาดแบบไบแซนไทน์ (Byzantine fault tolerance) จะทำงานในสภาพแวดล้อมกระจายศูนย์ได้อย่างไร

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

บล็อกเชนคืออะไร?

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

Pointer

Pointer คือตัวแปรที่ชี้ว่าตัวแปรอีกตัวหนึ่งอยู่ตรงไหน ในสถานการณ์ทั่วไป ตัวแปรในการเขียนโปรแกรมจะเก็บข้อมูลไว้ในตัวเอง (เช่นในตัวอย่าง int a = 10 ตัวแปรจำนวนเต็ม a มีค่าเท่ากับ 10) แต่ pointer ไม่ได้เก็บค่าเป็นข้อมูล มันเก็บตำแหน่งของตัวแปรที่ถือข้อมูลนั้นอยู่แทน

Linked List

Linked list เป็นหนึ่งในหน่วยที่สำคัญที่สุดของโครงสร้างข้อมูล และหน้าตาคร่าว ๆ เป็นแบบนี้

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

จุดสำคัญตรงนี้คือ pointer แต่ละตัวเก็บที่อยู่ของบล็อกถัดไป แล้ว pointer ที่ชี้ไปยังบล็อกแรกอยู่ที่ไหน? บล็อกแรกเรียกว่า genesis block และ pointer ของมันฝังอยู่ในระบบตั้งแต่ต้น

Hash pointer คือ pointer ที่บรรจุค่า hash ของบล็อกก่อนหน้าเอาไว้ด้วย

Hash คือกระบวนการที่รับข้อมูลความยาวเท่าไหร่ก็ได้เข้าไป แล้วให้ผลลัพธ์ที่มีความยาวคงที่ออกมาผ่านฟังก์ชันหนึ่ง ในกรณีของ Bitcoin ข้อมูลการโอนจะถูกนำไปผ่านอัลกอริทึม SHA-256 เพื่อสร้างผลลัพธ์ความยาวคงที่ ไม่ว่าข้อมูลที่ป้อนเข้าไปจะยาวแค่ไหน SHA-256 ก็ให้ผลลัพธ์ยาว 256 บิตเสมอ

บล็อกเชนในรูปแบบที่ง่ายที่สุดก็คือ linked list ตามที่แสดงด้านล่างนี้

บล็อกเชนคือ linked list ที่แต่ละบล็อกบรรจุข้อมูลกับ hash pointer ที่ชี้ไปยังบล็อกก่อนหน้า แล้ว hash pointer คืออะไร? มันคล้าย pointer ธรรมดามาก แต่แทนที่จะเก็บแค่ที่อยู่ของบล็อกก่อนหน้า มันยังเก็บค่า hash ของข้อมูลในบล็อกนั้นด้วย ความต่างเล็ก ๆ ตรงนี้แหละที่ทำให้เทคโนโลยีบล็อกเชนปลอดภัยขนาดนั้น

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

การขุด (Mining) คืออะไร?

การขุดคือกระบวนการที่จำเป็นต่อการสร้างบิทคอยน์ใหม่ การขุดบิทคอยน์ทำงานบนหลักการ Proof of Work (POW) พูดง่าย ๆ คือการแก้โจทย์ต้องยากมาก แต่เมื่อแก้ได้แล้ว คนอื่นต้องตรวจสอบได้ง่ายมากว่าคำตอบนั้นถูกต้อง

ก่อนจะไปถึงเหตุผลที่ Bitcoin เลือกใช้ POW ลองทำความเข้าใจกันก่อนว่าทำไมคริปโตถึงต้องมีระบบแบบนี้

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

ปัญหาแม่ทัพไบแซนไทน์ (Byzantine Generals Problem)

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

แม่ทัพแต่ละคนอยู่ห่างกันมาก จึงไม่มีทางสั่งการล้อมเมืองจากศูนย์กลางได้

ศัตรูก็มีกองทัพที่แข็งแกร่ง การบุกจึงต้องเกิดขึ้นพร้อมกันทุกด้านเท่านั้นถึงจะสำเร็จ

ระหว่างที่กองทัพล้อมเมืองอยู่ แต่ละกองจะส่งต่อคำสั่งจากกองทางขวาไปยังกองทางซ้าย ต่อกันไปเรื่อย ๆ แต่ปัญหาคือเมื่อคำสั่งว่า "บุกวันพุธ" ถูกส่งมา อาจมีกองทัพหนึ่งยังไม่พร้อมแล้วส่งข้อความกลับไปว่าให้บุกวันศุกร์แทน หรือทหารที่ถือสารอาจถูกศัตรูจับตัวและเนื้อความถูกแก้ ในสภาพแวดล้อมที่ไว้ใจกันไม่ได้แบบนี้ ถ้าประสานงานกันไม่ครบ การบุกก็ล้มเหลวแน่นอน

ปัญหาเชิงตรรกะแบบเดียวกันนี้เกิดกับเครือข่ายบล็อกเชนที่เป็นโครงสร้างพื้นฐานของคริปโตอย่างบิทคอยน์ด้วย เครือข่ายเหล่านี้ใหญ่มหาศาล แล้วเราจะไว้ใจทุกคนบนเครือข่ายได้อย่างไร? สมมติเราอยากส่ง 4 ether ให้ใครสักคน เราจะมั่นใจได้ยังไงว่าจะไม่มีคนไม่หวังดีมาแก้ตัวเลขนั้นเป็น 40 ether

Satoshi Nakamoto แก้โจทย์นี้ได้ด้วยการเสนอโปรโตคอล proof-of-work มาดูกันว่ามันทำงานยังไง

เมื่อกองทัพที่ล้อมเมืองอยู่ต้องการส่งข้อความ "เราจะบุกวันจันทร์" ไปยังกองทางซ้าย มันต้องทำตามขั้นตอนนี้

ขั้นแรก ข้อความต้นฉบับจะถูกใส่ค่าสุ่มที่ใช้ครั้งเดียวเรียกว่า "nonce" ค่านี้เป็นเลขฐานสิบหกค่าใดก็ได้

จากนั้นนำข้อความที่ผนวก nonce แล้วไปผ่านฟังก์ชัน hash เพื่อให้ได้ผลลัพธ์ออกมา ในสถานการณ์สมมตินี้ ให้ถือว่าเหล่าแม่ทัพตกลงกันว่าจะยอมรับเฉพาะผลลัพธ์ hash ที่ขึ้นต้นด้วยเลขศูนย์ 5 ตัวเท่านั้น

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

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

อย่างไรก็ตาม แม้โอกาสจะน้อยมาก แต่ฟังก์ชัน hash ทุกตัวก็มีสิทธิ์ให้ผลลัพธ์ชนกันได้ ในทางทฤษฎี เมื่อ A กับ B เป็นข้อมูลนำเข้าคนละชุด H(A) กับ H(B) ไม่ควรมีโอกาสเท่ากันเลย แต่ในการใช้งานจริง ไม่มีฟังก์ชัน hash ตัวไหนกันการชนได้ร้อยเปอร์เซ็นต์

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

ปัญหานี้แก้ได้ด้วยการให้แม่ทัพสามคนส่งข้อความไปทางซ้ายพร้อมกัน แทนที่จะให้คนเดียวส่งต่อกันเป็นทอด ๆ เมื่อแม่ทัพที่สร้างข้อความของตัวเองรวมข้อความเข้าด้วยกัน แล้วส่งผ่านฟังก์ชัน hash ใส่ค่า nonce ให้ผลลัพธ์ แล้วส่งเข้าฟังก์ชัน hash อีกรอบ คราวนี้ผลลัพธ์ต้องขึ้นต้นด้วยเลขศูนย์หกตัว

ณ จุดนี้ การจะไปหาค่า nonce ของข้อความนี้และแก้เนื้อความให้ผ่านเงื่อนไข กลายเป็นการเสียเวลาอย่างมหาศาล

แต่หน้าที่ของแม่ทัพที่รับข้อความกลับง่ายมาก เพียงนำค่า nonce ที่ได้รับมาต่อกับข้อความแล้วเทียบผลลัพธ์ hash ดู ขั้นตอนนี้เร็วและง่ายอย่างยิ่ง แนวคิดนี้แหละคือกลไกการทำงานของหลักการ proof-of-work

การหาค่า nonce ที่ให้ผลลัพธ์ hash ตามเงื่อนไขต้องใช้พลังประมวลผลและเวลามหาศาล

แต่การตรวจผลลัพธ์เพื่อดูว่ามีเจตนาไม่ดีแฝงอยู่หรือไม่นั้นใช้เวลาน้อยมาก

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

การโอนบนเครือข่าย Bitcoin เกิดขึ้นอย่างไร?

สมมติว่า John อยากส่งบิทคอยน์ให้ Dave การโอนนี้เกิดขึ้นอย่างไร? การโอนบิทคอยน์ทำงานต่างจากการโอนเงินกระดาษมาก ถ้า John อยากให้เงิน 10 ดอลลาร์กับ Dave เขาก็แค่หยิบธนบัตรออกจากกระเป๋าแล้วยื่นให้ จบ แต่กับบิทคอยน์มันไม่ใช่แบบนั้น เพราะมันไม่ใช่สิ่งที่เราถือครองทางกายภาพ สิ่งที่เรามีคือหลักฐานว่าเราเป็นเจ้าของบิทคอยน์นั้น

มีสองเรื่องที่เราต้องรู้และใส่ใจ

นักขุดคือคนที่ยืนยันและคุ้มครองธุรกรรมการโอนด้วยข้อมูลที่พวกเขาบรรจุลงในบล็อกที่สร้างขึ้น และพวกเขาก็เก็บค่าธรรมเนียมจากบริการนี้

เมื่อมองที่เงินกระดาษ เราไม่รู้และไม่ได้ตามรอยธนบัตรใบไหนที่เคยผ่านมือเรา เพราะในทางปฏิบัติมันทำไม่ได้ แต่การโอนบิทคอยน์ทุกครั้งถูกบันทึกไว้บนเครือข่ายทั้งหมด

จากข้อมูลนี้ มาดูการโอนระหว่าง John กับ Dave กัน การโอนนี้มีสองส่วน คือ input และ output

การที่ John จะโอนได้ เขาต้องมีบิทคอยน์ที่ได้รับมาจากการโอนครั้งก่อน ๆ ก่อน อย่างที่บอกไปว่าการโอนทุกครั้งถูกบันทึกไว้บนเครือข่ายบิทคอยน์

John ต้องรวบรวมบิทคอยน์จากธุรกรรมที่เขาเคยได้รับ ซึ่งเรียกว่า TR(0), TR(1) และ TR(2) มาสร้างเป็นธุรกรรมใหม่ชื่อ TR(INPUT) แล้วส่งไปให้ Dave ตรงนี้ TR(INPUT) จึงกลายเป็นข้อมูลนำเข้าของธุรกรรมใหม่

หน้าตาของการโอนบิทคอยน์ฝั่ง input คร่าว ๆ ก็เป็นแบบนี้

ส่วนข้อมูล output จะระบุจำนวนบิทคอยน์ที่ Dave ควรได้รับหลังการโอนครั้งนี้ พร้อมกับเงินทอนที่เหลือ ซึ่งจะถูกส่งกลับไปหา John และกลายเป็นค่า TR(INPUT) ในการโอนครั้งถัดไปของเขา

กระบวนการนี้มีผลลัพธ์ output เดียวถ้าไม่นับส่วนเงินทอน แต่การโอนที่มีหลาย output ก็เกิดขึ้นได้เช่นกัน คำอธิบายนี้แสดงให้เห็นภาพคร่าว ๆ ว่าการโอนบนเครือข่ายบิทคอยน์เกิดขึ้นอย่างไร แต่การจะให้มันสำเร็จได้ ต้องมีเงื่อนไขบางอย่างครบด้วย

เงื่อนไขที่การโอนต้องเป็นไปตาม:

TR(INPUT) > TR(OUTPUT) ค่าฝั่ง input ต้องมากกว่าฝั่ง output เสมอ ในทุกการโอน ส่วนต่างระหว่าง input กับ output (output + เงินทอน) จะถูกจ่ายให้นักขุดเป็นค่าธรรมเนียม นั่นคือ ค่าธรรมเนียมนักขุด = TR(INPUT) − (TR(OUTPUT) + เงินทอน)

ฝั่ง input ต้องเป็น TR(0)+TR(1)+TR(2)=TR(INPUT) พูดอีกอย่างคือ John ต้องมีบิทคอยน์มากพอที่จะส่งให้ Dave ถ้าเขามีไม่พอสำหรับธุรกรรมนั้น การโอนจะถูกนักขุดปฏิเสธ

ทีนี้ Dave ต้องพิสูจน์ว่าเขาคือเจ้าของบิทคอยน์ที่ถูกส่งมา John เข้ารหัสการโอนไว้ด้วย public key ของ Dave ซึ่ง Dave เปิดได้ด้วย private key ของตัวเองเท่านั้น

ขณะเดียวกัน John ก็ต้องพิสูจน์ว่าเขามีบิทคอยน์พอที่จะส่งให้ Dave จริง เขาทำได้ด้วยการเซ็นธุรกรรมที่ต้องการส่งด้วย private key ของตัวเอง ใครก็ตามสามารถใช้ public key ของ John ตรวจสอบได้ว่าเขามีจำนวนบิทคอยน์ตามที่อ้างจริง หลักฐานชิ้นนี้เรียกว่าข้อมูลลายเซ็น (signature data)

ข้อมูลฝั่ง input (รวมข้อมูลลายเซ็น) และข้อมูลฝั่ง output จะถูกนำมารวมกันแล้วผ่านอัลกอริทึม hash แบบ SHA-256 ผลลัพธ์ที่ได้ก็คือตัวธุรกรรมนั่นเอง

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

จากตรงนี้จึงเกิดหลักการ replace-by-fee ขึ้นมา มันทำงานง่าย ๆ แบบนี้: สมมติ John ส่ง 5 BTC ไปให้ Dave แต่ธุรกรรมนั้นไม่เคยถูกใส่เข้าบล็อกและค้างอยู่ เพราะตั้งค่าธรรมเนียมไว้ต่ำเกินไป ธุรกรรมที่ส่งบิทคอยน์ออกไปแล้วนั้นย้อนกลับหรือยกเลิกไม่ได้ แต่ถ้า John สร้างธุรกรรมใหม่ไปยังที่อยู่เดิมด้วยจำนวน BTC เท่าเดิม แล้วตั้งค่าธรรมเนียมให้สูงขึ้น ธุรกรรมเก่าจะถือว่าใช้ไม่ได้ และธุรกรรมใหม่จะเข้าคิวรอแทน

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

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

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

Satoshi ไม่ลืมที่จะซ่อนข้อความไว้ในบล็อกแรกสุด (genesis block) ซึ่งเขาขุดขึ้นเองและเขียนฝังไว้เป็นฮาร์ดโค้ด โดยระบุวันที่ 3 มกราคม 2009 พร้อมพาดหัวข่าวจากหนังสือพิมพ์ The Times ของอังกฤษในวันนั้น ว่าด้วยธนาคารที่เป็นต้นเหตุของวิกฤตเศรษฐกิจโลก: "Chancellor on brink of second bailout for banks" เขาน่าจะกำลังเสียดสีระบบธนาคารกลางด้วยถ้อยคำเหล่านั้น ไม่มีใครรู้ว่าทำไม Satoshi ถึงสร้างที่อยู่ที่ใช้จ่ายออกไม่ได้นี้ไว้ในบล็อกแรก จนถึงตอนนี้มีคนส่ง BTC ไปยังที่อยู่นั้นแบบไม่ระบุตัวตนแล้วราว 16 BTC ซึ่งแปลว่าอุปทานรวม 21 ล้านบิทคอยน์จะไม่มีวันเกิดขึ้นจริง

Bitcoin ใช้เวลาเพียง 9 ปีในการไปถึงระดับที่ทำให้ธนาคารกลางทั่วโลกต้องหวั่นใจ และเส้นทางข้างหน้าของมันยังอีกยาวไกล

bitcoin ทำงานอย่างไร บล็อกเชนคืออะไร proof of work การขุดบิทคอยน์ satoshi nakamoto