อย่างที่เคยเขียนไปแล้วว่ากำลังเรียนคอร์ส Blockchain and Money ของ Gary Gensler อยู่ (What is Money and Finance และ Money Flower เงินสี่ด้าน) แม้ว่าเรียนได้อย่างเชื่องช้ามากก็ตาม เพราะคอร์สมีความเข้มข้นสูงมาก ต้องอ่านเปเปอร์เตรียมตัวไปล่วงหน้าก่อนการบรรยายแต่ละคลาส
หนึ่งใน reading assignment ที่น่าตื่นตาตื่นใจมากคือ Bitcoin’s Academic Pedigree ของ Arvind Narayanan and Jeremy Clark เป็นงานวิจัยที่ตีพิมพ์ในวารสาร ACM เมื่อปี 2017 ว่าด้วยการสืบสาแหรก (ทางความคิด) ของ Bitcoin
การกำเนิดขึ้นของ Bitcoin นั้น บุคคลที่ใช้นามแฝงว่า Satoshi Nakamoto ไม่ได้คิดทุกอย่างขึ้นมาเองจากสุญญตา แต่เป็นการหยิบจับเอาแนวคิดที่มีคนคิดไว้ก่อนหน้านั้นแล้วหลายอย่าง มาผสมผสานกันจนกลายเป็น Bitcoin ได้สำเร็จ (standing on the shoulder of giants)
ความเจ๋งของ Nakamoto จึงไม่ใช่เรื่องการคิดของใหม่ แต่เป็นการนำของที่มีอยู่แล้ว ต่างกรรมต่างวาระกัน มาหลอมรวมกันได้อย่างลงตัว
เปเปอร์ชิ้นนี้จึงเป็นการตามหาว่า Nakamoto ไปหาส่วนผสมอะไรมาบ้าง และมันร้อยเรียงกันเป็น Bitcoin ได้อย่างไร
ก่อนอื่นต้องเข้าใจเรื่องคุณสมบัติทางเทคนิคของ Bitcoin ก่อน ในสไลด์ของ Gensler ลิสต์มาทั้งหมด 11 ข้อตามภาพ แบ่งได้เป็น 3 หมวดใหญ่ๆ คือ
- การวาง data structure ที่อิงอยู่บนหลักการเข้ารหัสลับ cryptography + การเขียนล็อกไฟล์แบบแปะเวลา timestamped logs
- การกระจายศูนย์ และหาข้อยุติ (consensus) ของโหนดที่ไม่เชื่อใจกัน รวมถึงระบบ incentive ที่ให้รางวัลเป็นเงินเพื่อให้โหนดมาร่วมทำงาน (อันนี้ผมว่าคือสิ่งที่จีเนียสที่สุดของ Bitcoin)
- การทำธุรกรรมแลกเปลี่ยน ที่ใช้หลัก UTXO
ส่วนในเปเปอร์ของ Narayanan and Clark ได้ตามหารากเหง้าของ Bitcoin โดยแบ่งไอเดียหลักออกเป็น 6 เรื่องคือ
Linked Timestamping, Verifiable Logs
“Chain”
ตัว data structure ของ Bitcoin เป็นการหยิบยืมมาจากระบบ backward pointers ที่คิดค้นโดย Stuart Haber and Scott Stornetta เมื่อปี 1990 (Nakamoto เป็นคนยอมรับเรื่องนี้เองในเปเปอร์)
แนวคิดของ Haber & Stornetta เป็นการออกเอกสารชุดที่ต่อๆ กัน โดยเอกสารชิ้นถัดมาจะ sign รับรองเอกสารชิ้นก่อนหน้า เพื่อยืนยันความถูกต้อง (integrity) ของเอกสาร การแก้ไขเอกสารใดๆ จะต้องแก้หมดทั้งเชน
ไอเดียของ Haber & Stornetta สร้างขึ้นเพื่อใช้กับงานเอกสารทั่วๆ ไป เน้นการตรวจสอบเอกสารย้อนกลับว่าไม่ถูกแก้ไข
“Block”
แนวคิดของ Haber & Stornetta เป็นการสร้างเอกสารที่เชื่อมต่อๆ กัน แต่ Bitcoin ไม่ได้ใช้มันเก็บเอกสารทั่วไป เพราะใช้เก็บธุรกรรม (transaction) แทน ซึ่งแนวคิดของ Nakamoto จึงเป็นการสร้าง “บล็อค” ที่ภายในประกอบด้วยธุรกรรมย่อยๆ ที่เรียงต่อกันเป็น tree แล้วแต่ละชั้นของ tree จะแฮชซ้อนกันไปเรื่อยๆ อีกที
แนวคิดนี้เรียกว่า Merkel Trees หรือ Hash Trees สร้างโดย Ralph Merkle นักวิชาการด้านการเข้ารหัสลับในปี 1980 และถูกนำไปใช้ในงานหลายรูปแบบ ไม่ใช่เฉพาะ Bitcoin อย่างเดียว ตัวอย่างอื่นเช่น Git หรือ Mercurial ก็ใช้งาน
เมื่อนำส่วน “block” มาบวกกับส่วน “chain” ก็จะได้ data structure ออกมาดังภาพ
Byzantine Fault Tolerance (BFT)
ในโลกของการประมวลผลแบบกระจายศูนย์ มีแนวคิดที่เรียกว่า Byzantine Generals Problem หรือ Byzantine Faults มานานแล้ว
แนวคิดนี้มองว่าการประมวลผลที่ต้องอาศัยโหนดหลายๆ ตัวทำงานร่วมกัน อาจมีโหนดที่ทำงานผิดพลาด (ทั้งที่ไม่ตั้งใจ เช่น เน็ตพัง และตั้งใจ เช่น ทรยศ) จนอาจทำให้ระบบโดยรวมทำงานไม่ได้ผลอย่างที่ต้องการ
ชื่อของปัญหานี้หยิบยืมมาจากสงครามครูเสด ที่ว่านายพลของยุโรปชาติต่างๆ ไปล้อมเมืองคอนสแตนติโนเปิลไว้ ถ้าทุกคนนำกำลังเข้าตีพร้อมกันก็จะชนะ แต่ถ้ามีนายพลบางคนไม่ให้ความร่วมมือ ก็จะทำให้ผลของสงครามเปลี่ยนไป (เป็น game theory แบบหนึ่ง)
วงการวิจัยด้านคอมพิวเตอร์พยายามแก้ปัญหานี้มายาวนาน เปเปอร์แรกออกมาในปี 1982 และพัฒนาโซลูชันมาเรื่อยๆ เช่น แนวคิด Paxos ของ Leslie Lamport (1989) และ PBFT (practical Byzantine fault tolerance) ของ Miguel Castro and Barbara Liskov (1999)
Nakamoto ไม่ได้บอกว่าหยิบเรื่องนี้มาจากเปเปอร์ไหน เอามาแต่คอนเซปต์และพัฒนาเป็นแนวคิด consensus ของ Bitcoin
Proof of Work
เป็นสิ่งที่ต่อเนื่องมาจาก fault tolerant ที่เดิมใช้หลักการว่าเสียงข้างมาก (1/2) หรือ (2/3) ของเครือข่ายต้องเชื่อถือได้ แต่ในแนวคิด Bitcoin ที่เราไว้ใจสักโหนดไม่ได้เลย เราจะรู้ได้อย่างไรว่าโหนดนั้น “มีความตั้งใจจริง” ในการมาช่วยทำงาน (ประมวลผล) ร่วมกัน
แนวคิดเรื่อง Proof of Work การลงแรงทำงานเพื่อพิสูจน์ให้เห็นว่าฉันมาดีจริงๆ นะ จึงเข้ามาแก้ปัญหานี้ ต้นแบบแนวคิดนี้มาจากงานของ Cynthia Dwork and Moni Naor (1992) ที่ต้องการแก้ปัญหาอีเมลสแปม โดยเสนอว่าคนส่งอีเมลควรต้องมี challenge บางอย่าง (เช่น แก้พัซเซิลหรือ Captcha ในยุคปัจจุบัน) ที่ใช้พลังประมวลผลไม่เยอะหากส่งอีเมลไม่กี่ฉบับ แต่ถ้าเป็นการส่งเมลสแปมจำนวนมากๆ ก็จะเปลืองพลังประมวลผลมากเกินไป
นอกจากนี้ยังมีแนวคิด Hashcash ของ Adam Back (1997) ที่พัฒนาต่อจากแนวคิดการสร้าง challenge เพื่อต้านสแปม โดยลดความซับซ้อนของปัญหาลง (แต่ทำยากขึ้น) คือคำนวณหาอินพุตของค่าแฮชหนึ่งๆ ที่ต้องลองเปลี่ยนอินพุตไปเรื่อยๆ จนกว่าจะได้แฮชที่ค่าตรงกัน
Nakamoto หยิบเอาแนวคิด Proof of Work มาใช้กับการยืนยัน consensus ของโหนดในเชน โดยให้โหนดคำนวณหาค่าอินพุตของแฮช
อย่างไรก็ตาม ในโลกยุคถัดมา ก็มีแนวคิดแบบอื่นๆ ในการจัดการเรื่อง consensus อย่างที่เราเคยได้ยินบ่อยๆ คือ Proof of Stake หรือที่ไม่ดังเท่าคือ Proof of Activity, Proof of Burn, Proof of Capacity เป็นต้น
Digital Cash
แนวคิดเรื่องการสร้าง Bitcoin ให้เป็น “เงินดิจิทัล” ก็ไม่ใช่เรื่องใหม่อีกเช่นกัน เคยมีคนคิดเรื่องนี้มาแล้ว เช่น DigiCash ของ David Chaum ช่วงราวปี 1990 แต่ก็ไม่ประสบความสำเร็จ เพราะโครงสร้างพื้นฐานหลายอย่างยังไม่พร้อม รวมถึงยังเป็นแนวคิดแบบ centralized ด้วย
ในบางแง่มุม Hashcash เองก็พัฒนาต่อมาจาก DigiCash ในแง่การเป็นเสมือนเงินดิจิทัลที่ถ่ายโอนกันได้ระหว่างผู้ใช้ อย่างไรก็ตาม เนื่องจากมันถูกออกแบบมาสำหรับงานจำพวก anti-spam หรือ anti-dos เป็นหลัก จึงขาดคุณสมบัติหลายๆ อย่างของเงินไป เช่น double spending
แนวคิดอีกอย่างที่เริ่มมาก่อน Bitcoin เล็กน้อย คือ Bit gold ที่ออกแบบโดย Nick Szabo (ซึ่งเป็นหนึ่งในแคนดิเดตที่เป็น Sakamoto ตัวจริง) มีแนวคิดหลายอย่างคล้ายกัน เช่น timestamping logs, proof of work แต่ยังขาดแนวคิดเรื่อง consensus
Public Keys as Identities
แนวคิดเรื่องที่อยู่ (address) ของ Bitcoin ที่ใช้บอกว่าใครเป็นเจ้าของเหรียญตรงไหน (identity) เป็นการนำ public key จากระบบ PKI มาใช้งาน
ในโลกของ Bitcoin ผู้ใช้จึงสามารถสร้าง identity ได้เองผ่าน public/private key โดยไม่ต้องลงทะเบียน username กับตัวกลาง (decentralized identity management) เราไม่รู้ว่าคู่ธุรกรรมอีกฝ่ายของเราคือใคร รู้แค่ว่ามีที่อยู่หมายเลขอะไร
แนวคิดนี้ริเริ่มโดย David Chaum (DigiCash) อีกเช่นกัน เขาคิดเรื่องนี้มาตั้งแต่ปี 1981 และพัฒนาต่อมาเรื่อยๆ โดยเงินดิจิทัลอื่นๆ ที่เกิดขึ้นทีหลัง เช่น b-money และ Bit Gold ก็ใช้แนวคิดนี้ด้วยเช่นกัน
Smart Contracts
สุดท้ายเป็นแนวคิด Smart Contracts การเขียนโปรแกรมให้ทำงานอัตโนมัติตามเงื่อนไขที่กำหนด ผู้คิดเรื่องนี้คนแรกคือ Nick Szabo ที่ทำ Bit Gold มาตั้งแต่ปี 1994
แนวคิดของ Szabo เลือกใช้คำว่า contract เหมือนสัญญากฎหมายแบบดั้งเดิม แต่บังคับใช้อัตโนมัติ (automated enforcement)
ถึงแม้ Bitcoin ไม่ได้ใส่ฟีเจอร์ด้าน Smart Contracts มาโดยตรง แต่ในระบบเงินดิจิทัลยุคถัดมาคือ Ethereum (2015) ก็มีแนวคิดนี้เข้ามาแล้ว
ถ้าเรามองพัฒนาการของเงินดิจิทัลเป็นความต่อเนื่อง (continuity) จะเห็นว่า Bitcoin หยิบยืมแนวคิดหลายๆ อย่างในอดีตมาประยุกต์ใช้งาน (ความเก่งคือเอามารวมกันแล้วดันลงตัว) แต่ทุกอย่างก็ไม่ได้จบที่ Bitcoin เพราะมีพัฒนาการต่อเนื่องขึ้นมาใน Ethereum หรือเหรียญใหม่ๆ ที่นำแนวคิดอื่นๆ มาแก้ปัญหาของ Bitcoin หรือมองปัญหาในแนวทางที่ต่างออกไป (เช่น UTXO vs Account Based) ซึ่งถ้ามีโอกาสก็คงจะเขียนถึงในคราวถัดๆ ไป
ภาพประกอบจากสไลด์ของ Gensler บทที่ 4-6