""โอกาส" ก็สำคัญพอกับ "อากาศ" นั่นแหละ"
Blockchain คืออะไร? อธิบายแบบละเอียด แต่เข้าใจง่าย(มั้ง)
21 Dec 2016 23:27   [716219 views]

ปีที่ผ่านมาคำว่า Blockchain เป็นอะไรที่เฟื่องฟูมาก คนพูดถึงเยอะสุดๆว่ามันจะเปลี่ยนโลกโง้นงี้ ตอนไปบรรยายตามงานต่างๆก็มีคนมาถามความเห็นเรื่อง Blockchain อยู่ทุกงาน

ไปๆมาๆ Blockchain ก็เริ่มไม่ได้ถูกพูดถึงเฉพาะในวง Geek/Nerd ละ แต่คนทั่วไปก็เริ่มได้ยินมันบ่อยขึ้นจนตอนนี้เริ่มกลายเป็นศัพท์ Mass เรียบร้อย

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

โดยบล็อกนี้จะพูดใน "ภาษามนุษย์" เป็นหลัก จะหยิบเอาภาษาเทคนิคมาพูดให้น้อยที่สุด (แต่ก็มีบ้าง) ส่วนบล็อกที่จะลงดีเทลด้าน Technical จะไว้เขียนต่อในบล็อกถัดไปครับ ดังนั้นจึงเหมาะกับทุกคนไม่ใช่เฉพาะคนสาย Dev เท่านั้น =)

เริ่มต้นด้วยเรื่องแรกที่ต้องเข้าใจก่อนจะไปต่อ ...

Blockchain เป็น Technical Term ไม่ใช่ศัพท์สำหรับผู้ใช้ทั่วไป

หนึ่งในเหตุผลว่าทำไมคนส่วนใหญ่ถึงไม่เข้าใจว่า Blockchain คืออะไรไม่ว่าจะอ่านไปกี่บทความ นั่นก็เพราะว่า Blockchain แท้จริงแล้วมันเป็น Technical Term หากให้พูดแบบสั้นๆเวอร์ชัน TL;DR เลยว่า Blockchain คืออะไร คงบอกว่า

Blockchain คือรูปแบบการเก็บข้อมูล (Database) แบบหนึ่งของระบบที่ไม่มีศูนย์กลางแต่เชื่อถือได้และโกงยาก

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

หรือถ้าพูดแบบมนุษย์หน่อย ไม่มีเรื่อง Technical เข้ามา

Blockchain คือการให้ทุกคนถือเอกสารชุดเดียวกัน เมื่อมีการอัปเดตก็จะอัปเดตด้วยกัน โดยมั่นใจได้ว่าเอกสารเหล่านั้นเชื่อถือได้แน่นอนไม่มีการปลอมแปลง

ก็ฟังโอเค แต่ก็ยังไม่เข้าใจอยู่ดีว่ามันมีปัญหาอะไรด้วยหรอ ทำไมต้องมาแก้ไขปัญหาด้วย Blockchain

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

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

เอาหละ หลายคนน่าจะได้ยินคำว่า Blockchain จาก Bitcoin จนคิดว่ามันเป็นอย่างเดียวกัน อย่างแรกที่ต้อง Unlearn ก่อนเลยคือ ...

Blockchain ไม่ใช่ Bitcoin

อย่างแรกที่คนจำนวนมากยังเข้าใจผิดอยู่จะต้องลบล้างออกไปจากความคิดก่อนเลยคือ Blockchain กับ Bitcoin มันเป็นคนละอย่างกัน หากยังแยกมันออกจากกันไม่ได้จะไปต่อลำบากครับ ใครยังคิดแบบนั้นอยู่ ลืมเดี๋ยวนี้ !

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

และเพื่อไม่ให้สับสน เราจะขออธิบายคร่าว ๆ ว่า Bitcoin คืออะไรสักเล็กน้อยเพื่อให้แยกออกว่า Bitcoin กับ Blockchain นั้นต่างกันครับ

Bitcoin คือ "สกุลเงิน"

Bitcoin หากจะให้เข้าใจง่ายที่สุด ขอให้คิดว่า Bitcoin นั้นเปรียบเสมือน "เหรียญทองคำ" ครับ

Bitcoin ถือเป็นทรัพย์สินชนิดหนึ่งที่เราสามารถใช้เงินซื้อมาได้ และมีการขึ้นการลงของราคาตามตลาด ยกตัวอย่างเช่น ถ้าในขณะนั้น 1 Bitcoin มีมูลค่าเท่ากับ 28,000 บาท เราก็สามารถกำเงิน 28,000 บาท เข้าไปซื้อ Bitcoin จากเว็บที่เปิดให้เราสามารถซื้อได้ และเราก็จะได้ Bitcoin มาประดับกระเป๋าตังค์(ที่จับต้องไม่ได้)ทันที

และถ้าปล่อยไปสักพักนึงราคา Bitcoin อาจจะขึ้นเป็น 30,000 บาท เราก็สามารถเอา Bitcoin ที่เราถือไว้ไปขายและได้เงินมา 30,000 บาทออกมาใช้ได้

เห็นมะ เหมือนทองคำป่ะ

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

Bitcoin ไม่ได้เหมือนทองแค่เรื่องนี้ ยังมีเรื่องอื่นอีก ไว้เดี๋ยวอธิบายในบทความหน้าแล้วจิเข้าใจคำศัพท์ต่างๆง่ายขึ้นจากเรื่องของทองนี่แหละ

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

คราวนี้ก็น่าจะพอเข้าใจละว่า Bitcoin คืออะไร จริงๆมันก็แค่สินทรัพย์แบบนึงเท่านั้นเอง คำถามต่อไปคือแล้ว Blockchain หละ? มันคืออะไรและเกี่ยวข้องกับ Bitcoin ยังไง?

คำตอบคือ

Blockchain เป็นเทคโนโลยีที่อยู่เบื้องหลังระบบ Bitcoin อีกทีครับ

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

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

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

ก็จะเห็นว่า Bitcoin กับ Blockchain นั้นเป็นสองสิ่งที่แยกขาดจากกัน โดยที่ Bitcoin ถูกสร้างมาโดยใช้เทคโนโลยี Blockchain อีกที และเช่นเดียวกัน เราก็สามารถสร้างระบบต่าง ๆ ที่ไม่เกี่ยวข้องกับ Bitcoin โดยใช้ Blockchain ได้เช่นกัน

ถ้าให้เทียบกับเรื่องปลั๊กไฟด้านบนก็คือ เราสามารถเอาระบบปลั๊กไฟมาขับเคลื่อนเครื่องใช้ไฟฟ้าอื่น ๆ ได้อีกมากมาย เช่น สร้างพัดลมมาเสียบปลั๊กปุ๊บพัดลมก็ใช้งานได้ นี่แหละครับ Blockchain (ปลั๊กไฟ) สามารถใช้ทำอะไรได้หลายอย่าง ไม่จำเป็นต้องเป็นเฉพาะหลอดไฟเท่านั้น

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

แนวคิดพื้นฐานของระบบที่ใช้ Blockchain

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

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

ฟังดูแว้บแรก เฮ้ย นี่มันระบบธนาคารนี่นา ก็นี่ไง แต่ละคนมีบัญชีเงินฝาก คราวนี้เราก็รู้ละว่าใครมีเงินเท่าไหร่ และก็สามารถโอนเงินหากันได้ด้วย

ก็ถูกกกก งั้นขอเริ่มพูดถึงจากระบบธนาคารก่อนว่าหน้าตามันเป็นยังไง

ระบบธนาคาร เมื่อทุกอย่างรวมอยู่ที่เดียว

ธนาคารคือระบบที่ข้อมูลทุกอย่างอยู่ร่วมกันตรงกลาง เห็นมะว่าตอนเราจะเปิดบัญชีเราก็ต้องเดินไปเปิดที่ธนาคาร เวลาเราจะฝากเงินก็ต้องทำกับธนาคารแล้วยอดเงินก็จะขึ้นในบัญชีของเราซึ่งก็อยู่กับธนาคารอีกเช่นกัน ตอนโอนเงินคนที่โยกเงินออกและเข้าให้ก็เป็นธนาคาร ดังนั้นทุกอย่าง 100% จะทำผ่านธนาคารทั้งสิ้น และเราจะเรียกระบบแบบนี้ว่า ระบบรวมศูนย์กลาง (Centralized) หรือระบบที่รวมทุกสิ่งอย่างไว้ในที่ ๆ เดียว

ก็ตามภาพ ไม่มีอะไรอยู่ในมือเราเลยนะ ทุกอย่างไปอยู่กับธนาคารหมด สมุดบัญชีที่เรามีมันก็แค่สำเนาที่บอกว่าเราทำอะไรกับบัญชีไปบ้าง แต่เงินไม่ได้อยู่ในสมุดเล่มนั้นนะ มันอยู่ในธนาคาร

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

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

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

เปลี่ยนแนวคิดสู่ระบบที่ไม่มีศูนย์กลาง ทุกอย่างกระจายอยู่ในมือทุกคน

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

ถ้างั้นลองเปลี่ยนแนวคิดมะ ไม่ให้คนกลางถือข้อมูลทุกอย่างไว้ละ ตัดคนกลางทิ้งไปเลย ไม่ต้องมีอีกต่อไป บัยยยยย ต่างคนก็ต่างถือสมุดบัญชีของตัวเองไว้เองเลย ถือไว้ ! เราจะเรียกระบบแบบนี้ว่า ระบบแบบกระจาย (Distributed)

เห็นมะ ไม่มีตัวกลางละ ต่างคนต่างถือ แบคทูเบสิคคคค

และเพื่อให้เข้าใจง่าย เราจะขอคิดว่าระบบสมุดบัญชีนี้เป็นระบบที่เราทำขึ้นมาใช้กันแค่ 6 คนตามภาพด้านบน และทุกคนที่ใช้ระบบนี้เราจะเรียกว่า Node กันครับ

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

ปัญหาที่เจอทันทีจะมีอยู่ 3 อย่าง

1) ถ้าเกิด 1 ใน 6 คนนั้นเป็นโจรขึ้นมาแล้วแก้เลขในสมุดบัญชีตัวเองหละ ก็แย่หละสิ

2) ในเมื่อต่างคนต่างถือสมุดบัญชี แล้วอย่างงี้จะโอนเงินกันยังไง? คนโอนกับคนรับโอนต้องต่างคนต่างแก้เลขในสมุดบัญชีตัวเองสิ แบบนี้ถ้าแก้ผิดหละหรือถ้าจงใจเขียนผิดหละ? ก็พังสิ กลายเป็นเศรษฐีกันได้ง่าย ๆ เลยนะงี้

3) เมื่อต่างคนต่างถือสมุดบัญชีของตัวเอง การโอนเงินก็เป็นปัญหาได้อีกเพราะคนรับโอนไม่รู้เลยว่าคนโอนมีเงินเท่าไหร่ ถ้าจะโอน 1,000 บาท แต่คนโอนดันมีอยู่ 100 บาท มันต้องโอนไม่ได้ แต่เนื่องจากคนรับโอนไม่รู้เลยว่าคนโอนมีเงินเท่าไหร่ มันก็เลยอาจจะเกิดกรณีที่เป็นปัญหาได้

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

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

แก้กันยังไง ? ไว้อ่านกันต่อปายยย

ปรับรูปแบบสมุดบัญชี ไม่เก็บยอดเงินไว้ในสมุดละ

เอ แล้วเราจะแก้ปัญหานี้บนระบบ Distributed กันยังไงดี ๆ ๆ ๆ ๆ ๆ

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

โดยข้อมูลทั้งสองมีคุณสมบัติดังนี้

ลายเซ็น (Owner Key)

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

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

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

เลขบัญชี (Address)

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

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

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

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

และเพื่อให้เข้าใจง่าย เราจะขอแทนเจ้าลายเซ็นด้วยรูปกุญแจแบบต่าง ๆ และแทนเลขบัญชีด้วยชื่อที่อ่านออกนะครับ

ก็จะเห็นว่าแต่ละเล่มไม่ซ้ำกันโนะ

แล้วจำนวนเงินหละ ถ้าไม่อยู่ในสมุดบัญชีแล้ว เราจะเก็บมันไว้ที่ไหน ?

มันไม่มีจำนวนเงิน มันมีแต่ข้อมูลการเดินบัญชี

การที่ John มีเงินอยู่ในบัญชี 1,000 บาท จริง ๆ มันคือผลรวมของรายการเดินบัญชีตั้งแต่เปิดบัญชีมาป่ะ ? เช่น

1) John ฝากเงิน 2,000 บาท

2) John โอนเงินให้ Alice 1,500 บาท (ตอนนี้ John เหลือเงิน 500 บาทละ)

3) Paul โอนเงินให้ John 500 บาท (ตอนนี้ John มีเงิน 1,000 บาทละ)

ดังนั้นถ้าเราเก็บรายการเดินบัญชีตั้งแต่บัญชี John ถูกสร้างขึ้นมาจนถึงปัจจุบัน เราก็รู้แล้วใช่ป่ะว่า John มีเงินอยู่เท่าไหร่ ?

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

เพื่อให้การพิมพ์จากนี้สั้นลง เราจะขอเรียกรายการเดินบัญชีเหล่านี้ว่า Transaction นะครับ (ซึ่งนี่เป็นชื่อเรียกอย่างเป็นทางการในระบบ Blockchain ด้วย)

ทั้งนี้ นี่เป็นเพียงวิธีการออกแบบหนึ่งเท่านั้น ในระบบที่ต่างออกไปก็สามารถออกแบบ Transaction ที่ต่างจากนี้ได้เช่นกัน

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

ย้ำอีกทีนะครับว่า Transaction ไม่จำเป็นต้องเป็นแบบนี้ อันนี้แค่ยกตัวอย่างมาให้ดู =)

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

Public Ledger: รายการเดินบัญชีสาธารณะ

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

และรายการเดินบัญชีทั้งหมดนี้เราจะเก็บไว้ในส่วนที่เรียกว่า Public Ledger ครับ สำหรับคนที่ไม่คุ้นคำนี้ Ledger แปลว่า สมุดจดบัญชี ครับ คำว่า Public Ledger ก็เลยแปลตรง ๆ นี่แหละ สมุดจดบัญชีที่เปิดเผยสู่สาธารณะ

การบันทึกรายการเดินบัญชีใน Public Ledger ก็ตรงไปตรงมาอีกเช่นกัน เขียนต่อกันมาเรื่อย ๆ เลยจร้าาา

ง่ายเนอะ แค่นี้เราก็รู้แล้วว่าบัญชีไหนมียอดเงินรวมอยู่เท่าไหร่ =) ซึ่งแน่นอน ผลที่ตามมาคือ

เราจะรู้หมดว่าใครมีเงินอยู่เท่าไหร่นาจา

ระบบมันถูกออกแบบมาแบบนี้ ทำใจนาจา

คำถามต่อไปคือ ... ใครเป็นคนเก็บ Public Ledger ไว้ในระบบนี้หละ ?

Public Ledger อยู่ใน "มือทุกคน"

เนื่องจากว่าระบบที่เรากำลังอธิบายอยู่นี้เป็นระบบแบบกระจาย ไม่มีคนตรงกลางนะ ระบบทั้งหมดก็มีกันอยู่แค่ 6 คนนั่นแหละ มันก็ไม่มีคนกลางถือ Public Ledger ให้หรอก แล้วจะฝากไว้ที่ไหนได้หละ ? ... ดังนั้นไม่ต้องแปลกใจ จะเป็นแบบไหนไปไม่ได้เลยนอกจาก ทุกคนจะต้องถือไว้คนละก็อปปี้จ้า

คนในระบบเริ่มถือเยอะละ นี่แหละ คนจะใช้ Blockchain ต้องรู้จักแบกข้าวของงงง

หน้าตาของ (Bitcoin) Transaction

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

หัวข้อนี้เลยจะขอยก Transaction ของ Bitcoin มาเป็นตัวอย่างเพราะเรากำลังออกแบบระบบเรื่องการเงินกันอยู่ครับ และเชื่อว่าเกิน 80% ของคนที่จะใช้ Blockchain ก็คงสนใจเกี่ยวกับการเงินหรือ FinTech กันอยู่แล้ว

ก่อนหน้านี้เรายกตัวอย่างแบบง่าย ๆ ให้ดูว่า Alice โอนเงินให้ Bob 100 บาท ซึ่งฟังดู Make Sense สำหรับชีวิตของพวกเราเนอะ ก็เงินในบัญชีเรามีอยู่ เราก็โอนให้คนอื่น 100 บาท

แต่ก่อนหน้านี้เราแอบบอกไปแล้วว่า "มันไม่มีเงินในบัญชี มันมีแต่รายการเดินบัญชี" ดังนั้นหน้าตาของ Transaction ที่แท้จริงในระบบนี้จึงต่างออกไปจากที่ทุกคนคิดครับ มันโอนเงินออกไปไม่ได้ เพราะมันไม่มีเงินอยู่ แล้วเราจะโอนอะไรกันหละ ?

อยากให้คิดว่าทุกครั้งที่มีการโอนเงินเข้ามาหาเรา สิ่งที่เราได้จะเป็น "Cheque" ที่เขียนมูลค่านั้นไว้

ยกตัวอย่างเช่น การที่ Alice ได้รับเงินจาก John 2,000 บาท อันนี้ก็เหมือนกับว่า John เขียน Cheque ให้ Alice 2,000 บาท ได้มาเป็นใบ ๆ เดียว และสมมติว่าใบนั้นมีเลขเช็คกำกับว่า 00100

หาก Alice ได้รับเงินโอนจากคนอื่น 10 ครั้ง ก็เหมือนว่า Alice ได้รับ Cheque มา 10 ใบครับ ดังนั้น Alice ไม่ได้มีเงินอยู่ มีแค่ Cheque ที่สามารถเอาไปใช้ได้แค่นั้นเอง

ซึ่งในระบบจริง ถามว่ามันคือการที่ John ส่ง Cheque ให้ Alice จริง ๆ มั้ย? ความจริงไม่ใช่ครับ มันคือการที่ John ป่าวประกาศบอกทุกคนว่า "เฮ้ เราเขียน Cheque ที่ Alice มีสิทธิ์ใช้ไป 2,000 บาทนะ" แล้วทุกคนก็เขียนไว้ใน Public Ledger ที่อยู่ในมือตัวเองครับ รวมถึง John เองด้วย

ดังนั้นทุกคนจะรับรู้ว่า Alice มี Cheque ราคา 2,000 บาทที่ใช้งานได้อยู่นะ และจะมีแค่ Alice คนเดียวที่ใช้งานมันได้เพราะการที่เช็คเขียนว่า "To Alice" นั่นคือการบอกว่า "คนที่ถือกุญแจของสมุด Alice เท่านั้นที่มีสิทธิ์ใช้งาน Cheque ใบนี้ได้" ซึ่งก็มีแค่เจ้าของสมุดบัญชี Alice คนเดียวที่ถือไว้ ก็เป็นไปตามนี้ครับ

ต่อไป ถ้า Alice จะโอนเงินให้ Bob 100 บาท จะทำยังไง ?

ก็ Alice ไม่มีเงินอยู่อ่ะ มีแต่ Cheque ในมือหนิ จะโอน 100 บาทมันโอนไม่ด้ายยยย และนี่คือวิธีที่แท้จริงครับ Alice ต้องเอา Cheque ที่ถืออยู่นี่แหละ เลือกมาใบนึงแล้วเขียนเช็คใบใหม่ก่อนจะโอนให้ Bob ต่อ

สังเกตดูตรง Public Ledger จะเห็นว่าแท้จริงแล้วมันไม่ใช่การโอนเงินจาก Alice ไปให้ Bob แต่มันเป็นการเอาเช็คเลขที่ 00100 มาเขียนเช็คใบใหม่แล้วส่งไปให้ Bob 100 บาท ต่างหาก

แต่ๆๆๆ เช็คเลขที่ 00100 มันมูลค่า 2,000 บาทหนิ แล้วอีก 1,900 บาทหละไปไหน ? ก็ทำยังไงได้หละ เขียนเช็คอีกใบสั่งจ่ายตัวเองโลดดดด อันนี้เราเรียกมันว่า "เงินทอน (Change)" ครับ ซึ่ง Alice ก็สามารถใช้งานมันต่อได้อีกในอนาคต

อาจจะสงสัย เอ๊ะ แล้วรูปแรกทำไม John ถึงโอนเช็ค 2,000 บาทให้ Alice ได้เลย ความจริงภาพนั้นผิดครับ John ก็ต้องเอา Cheque ใบอื่นที่ตัวเองเคยได้รับมามาเขียนใหม่แล้วส่งให้ Alice อีกเช่นกัน =) ดังนั้นภาพสุดท้ายที่ถูกต้องจึงเป็นแบบนี้ John ไม่ได้โอนให้ Alice ละ แต่ John เอาเช็ครหัส 00080 มาเขียนเช็คใบใหม่แล้วส่งให้ Alice 2,000 บาทต่างหาก

และมันก็เป็นแบบนี้ครับ ทุกวันนี้เงินใน Bitcoin ก็ไหลไปไหลมา เทไปเทมาด้วยวิธีแบบนี้แล

นอกจากนั้น แต่ละคนยังสามารถใช้เช็คหลายๆใบพร้อมกันได้ด้วย เช่น ถ้า Paul มีเช็คราคา 10 บาท 20 บาท และ 50 บาท แต่ต้องการโอนเงินจำนวน 75 บาท Paul ก็สามารถใช้เช็คทั้ง 3 ใบพร้อมกันแล้วสั่งจ่ายออกมาเป็นเช็ค 75 บาทที่ส่งให้คนอื่นและอีกใบ 5 บาทเพื่อส่งกลับมาหาตัวเอง น่าจะเข้าใจเนอะ ไม่วาดภาพให้ดูนะ ๆ

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

สังเกตดูวิธีการออกแบบของ Bitcoin Transaction จะเห็นว่าสามารถป้องกันการโกงได้อย่างดีทีเดียว เพราะว่า Cheque ทุกใบจะมีที่มาที่สามารถตรวจสอบย้อนกลับได้หมดเพราะมันถูกจดบันทึกทุกขั้นตอนไว้ใน Public Ledger ถ้าเป็นการเก็บว่าใครมีเงินเท่าไหร่นั่นมันก็แค่ตัวเลขลอยๆในโลกดิจิตอล แบบนั้นโกงกันได้ง่ายๆ แต่แบบนี้นี่เรียกได้ว่าไม่สามารถโกงกันได้เลยหละ

ยังไม่ถึง Blockchain เลย

บอกเฉย ๆ ว่าที่อธิบายมาจนถึงตอนนี้ยังไม่มี Blockchain เลย แต่ใกล้ละ ๆ 555

สองปัญหาที่อาจเกิดขึ้นได้

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

1) รู้ได้ยังไงว่า Transaction นั้น ๆ ถูกต้อง?

ถ้า Alice เกิดคิดไม่ซื่อ มีเช็คราคา 2,000 บาทอยู่ใบนึง แต่ดันจะโอนให้ Johan 2,500 บาท ถามว่า Alice สามารถสร้าง Transaction แบบนี้ได้มั้ย ?

คำตอบคือ Alice มีสิทธิ์สร้างได้นะครับ เพราะคนเขียนเช็คก็เป็น Alice เอง ใครก็ห้าม Alice ไม่ได้

แต่สิ่งที่เกิดขึ้นคือ ตอนที่ Alice ประกาศ Transaction นี้ออกไปให้ทุกคน ทุกคนจะต้องปฏิเสธ Transaction นี้ และโยนทิ้งไป ไม่เอาใส่ไว้ใน Ledger เพราะมันเป็นไปไม่ได้ที่มีอยู่ 2,000 แล้วดันจะโอนออก 2,500 บ้าหรอ !

หรืออีกกรณีก็คือ Alice ไม่มีเช็คแต่พยายามไปใช้เช็คคนอื่นที่ Alice ไม่มีสิทธิ์หรือบางทีอาจจะเป็นเช็คที่มันไม่มีจริง กรณีแบบนั้น Alice ก็พยายามได้ แต่คนอื่นก็ต้องไม่ยอมรับอีกเช่นกัน

สรุปก็คือ สร้างได้แต่จะไม่เป็นที่ยอมรับและไม่สามารถใช้งานได้ครับ

2) Double Spending

ถ้าเกิด Alice หัวใสอีกรอบ มีเงินอยู่ 2,000 บาท แต่ดันจะสั่งซื้อของราคา 2,000 บาททั้งหมด 2 ชิ้นในเวลาเดียวกัน

Alice ก็เขียนเช็คขึ้นมาสองใบเช่น

- เราจะโอนเงิน 2,000 บาทให้ Paul นะ

- เราจะโอนเงิน 2,000 บาทให้ Pig นะ

แล้วประกาศให้ทุกคนทราบ "ในช่วงเวลาเดียวกันเป๊ะๆ"

เกิดอะไรขึ้น? เมื่อประกาศออกไปพร้อมกันเป๊ะๆ คราวนี้แต่ละคนก็อาจจะกระทำการอะไรบางอย่างต่างกันละ เช่น

- John ได้ยินดังนั้นเลยเขียนใส่รายการเดินบัญชีไปไปว่า Alice โอนให้ Paul 2,000 บาท ส่วนที่โอนให้ Pig ถือเป็นโมฆะ

- Bob ได้ยินดังนั้นเลยเขียนใส่รายการเดินบัญชีไปว่า Alice โอนให้ Pig 2,000 บาท ส่วนที่โอนให้ Paul ถือเป็นโมฆะ

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

และนี่คือปัญหาที่เรียกว่า Double Spending ครับ คือใช้เงินก้อนเดียวกระทำธุรกรรมสองครั้ง ปัญหานี้จะไม่เกิดในระบบแบบรวมศูนย์กลาง แต่จะเกิดบ่อยมากในระบบกระจาย เป็นเหตุมาจากการที่แต่ละคนได้รับสาส์นมาไม่พร้อมกัน จนทำให้เกิดช่องว่างที่สร้างปัญหาใหญ่ได้ มีธนาคารต่างประเทศเคยเจ๊งเพราะปัญหานี้แล้ว 2 กรณีด้วยกัน

แล้วปัญหาเหล่านี้แก้ได้มั้ย ?

Blockchain เกิดมาเพื่อแก้ปัญหาเหล่านี้เลยก็ว่าได้ ทั้งสองปัญหานี้เกิดจากการที่คนส่ง (Alice) ประกาศบอกทุกคนไปว่าตัวเองจะทำอะไรตรงๆอย่างไร้การตรวจสอบใดๆ ด้วยเหตุนี้ในระบบ Blockchain เราจึงต้องมี "ผู้ยืนยันความถูกต้องของ Transaction" เพื่อให้ทุกอย่างเป็นไปอย่างราบรื่นด้วยครับ

ผู้ยืนยันความถูกต้องของ Transaction

ในระบบรวมศูนย์กลางนั้นยังมีผู้ตรวจสอบอยู่ แต่กับระบบแบบกระจายนี้ ใครหละจะเห็นผู้ตรวจสอบให้เรา?

คำตอบคือ ... ก็หนึ่งใน 6 คนที่ใช้บริการอยู่นั่นแล ต้องมีอย่างน้อยหนึ่งคนตั้งตัวเป็นผู้ตรวจสอบ ยกตัวอย่างเช่น Paul เสนอตัวจะเป็นผู้ตรวจสอบให้ และผู้ตรวจสอบเหล่านี้เราจะเรียกว่า Miner กันครับ

สำหรับศัพท์ว่าทำไมถึงเรียกว่า Miner จริงๆมันค่อนข้าง Make Sense ตอนเป็น Bitcoin แต่พอแยกแค่ Blockchain ออกมาแล้วก็ค่อนข้างน่าสับสนอยู่ ยังไงตอนนี้ขอให้รู้ว่าเราเรียกว่า Miner ก่อนละกันครับ ถ้าอยากทราบจริงๆว่าทำไมถึงเรียกว่า Miner ไว้ไปอ่านต่อตอนเขียนเรื่อง Bitcoin อีกที =)

ลักษณะการประกาศ Transaction ก็เลยเปลี่ยนไป จากเดิมที่ประกาศแล้วให้ต่างคนต่างเขียนลงไปใน Ledger ของตัวเองเลย กลายเป็นว่าตอนประกาศ Transaction ไป Transaction นั้นๆจะอยู่ในสถานะ "ยังไม่ได้รับการยืนยัน (Unconfirmed)" หรือจะเรียกเต็มๆได้ว่า Unconfirmed Transaction ก่อน และจะยังไม่ถูกบันทึกไว้ใน Ledger ของใครทั้งสิ้นครับเพราะ Ledger จะมีไว้สำหรับเขียนสิ่งที่ "ได้รับการยืนยันแล้ว" เท่านั้น

ก็คือทุกคนได้รับหมดนะว่ามี Transaction นี้ ๆ เกิดขึ้น แต่ไม่มีใครสนใจ มีคนกลุ่มเดียวเท่านั้นที่สนใจคือ Miner นั่นเอง

สังเกตดู Paul สนใจ Transaction นี้มาก แต่ก็ยังไม่มีใครเขียนลง Public Ledger ทั้งสิ้น เพราะต้องรอให้ Paul ยืนยันให้เสร็จก่อน

ซึ่งจริงๆการยืนยันมันก็ไม่ได้ยากอะไรเนอะ Paul แค่ตรวจสอบจาก Ledger ในมือว่า

1) John มีสิทธิ์ในเช็คที่ John เรียกใช้มั้ย

2) มูลค่าเช็คขาออกนั้นสูงกว่าเช็คขาเข้ามั้ย (เช่น มีเช็ครวม 2,000 แต่ดันจะโอนออก 2,500)

ถ้าถูกต้อง Paul ก็ประกาศออกไปเลยว่า Transaction นี้ได้รับการยืนยันแล้ว ! ...

สำหรับระบบที่ Paul ไว้ใจได้ อันนี้โอเค จริงๆก็ใช้งานได้แล้วนะ ในระบบที่ใช้งานกันภายในและ Paul ไว้ใจได้จริงๆ (เช่น Paul เป็นผู้ให้บริการระบบ) วิธีนี้ก็พอยอมรับได้ เพราะ Paul ก็เหมือนผู้ยืนยันกลางให้กับทุกคน

แต่ถ้าเราไม่มั่นใจว่า Paul ไว้ใจได้รึเปล่าหละ ? ในกรณีเช่นนี้ การมี Miner เพียงคนเดียวนั้นไม่พอเพราะเท่ากับว่าทุกคนฝากชีวิตไว้กับ Paul คนเดียว ระบบเลยต้องมี Miner มากกว่า 1 คน และให้คนเหล่านั้น "แข่งกันยืนยัน Transaction"

ย้ำอีกทีนะครับว่า "แข่งกันยืนยัน" ไม่ได้ช่วยกันยืนยันนะ ถ้าคนนึงยืนยันสำเร็จ การยืนยันจากคนอื่นก็ไม่มีความจำเป็นสำหรับ Transaction นั้น ๆ อีกต่อไป

โดยระบบ Blockchain มีแนวคิดว่า ยิ่งผู้ยืนยัน (Miner) ต้องใช้พลังในการยืนยันความถูกต้องสูง โอกาสโกงก็จะลดลงตามลำดับ และนี่คือสิ่งที่เราเรียกว่า Proof of Work ครับ ตรงตัวมาก "ตัวพิสูจน์ว่าใช้พลังในการทำงาน" ซึ่งงานที่นี้ก็คือการยืนยัน Transaction นั่นเอง

แล้วจะทำยังไงให้เกิดข้อพิสูจน์ว่าใช้พลังในการยืนยัน Transaction (Proof of Work) ได้?

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

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

วิธีเดียวที่จะหาเข็มเจอคือต้องว่ายไปเรื่อยๆๆๆๆจนกว่าจะเจอ มันก็เลยเหมือนกับการจับฉลากลอตเตอรี่ บางคนอาจจะใช้เวลาเป็นสิบนาทีในการหาเจอ บางคนอาจจะใช้เวลาแค่ 3 นาทีก็เจอแล้ว

แล้วจะทำยังไงให้หาได้เร็วขึ้น ? ก็ต้องซื้อตีนกบเพื่อให้ว่ายเร็วขึ้น จะได้เพิ่มความเร็วในการหาเจอไง

และนี่แหละครับ Proof of Work การให้งานที่ต้องใช้เวลาในการทำและถ้าต้องการให้งานเสร็จเร็วขึ้น ก็ต้องลงทุนเพิ่มขึ้น

แล้ว Proof of Work มีประโยชน์จริงๆหรอ? มีสิ ก็ในเมื่อแต่ละคนมีโอกาสหาเข็มเจอเท่ากัน (ในกรณีนี้คือ Bob และ Paul) ครั้งนี้ Bob อาจจะหาเจอก็คือ Bob ยืนยัน Transaction ได้ แต่ครั้งหน้าคนที่หาเจออาจจะเป็น Paul

ด้วยเหตุนี้ ทั้ง Bob และ Paul จึงไม่สามารถครอบครองระบบทั้งอันได้อีกต่อไป

แล้วถ้า Bob และ Paul เป็นโจรทั้งคู่หละ ? ... หรือว่า Paul ซื้อตีนกบรุ่นติดเทอร์โบทำให้สามารถว่ายเร็วกว่า Bob แบบไม่เห็นฝุ่น จะมีปัญหามั้ย?

อันนี้ไม่ใช่เรื่องตลก เราเรียกปัญหาตรงนี้ว่า 51% Attack ก็คือถ้ามีโจรทำตัวเป็นผู้ยืนยันมากกว่า 51% เป็นต้นไป (คิดตามพลังการประมวลผล เช่น คนมีตีนกบก็จะมีพลังประมวลผลสูงกว่าคนว่ายเท้าเปล่า) ระบบนั้นก็จะถูกครองครองโดยโจรผู้นั้นแต่เพียงผู้เดียวและจะสร้างปัญหาให้เกิดขึ้นได้ เช่น การปฏิเสธทุก Transaction ไม่ให้เกิดขึ้น และทำให้ระบบตายไปได้เลย โอนเงินไม่ไปงี้

ดังนั้นจึงสรุปเรื่องจำนวน Miner ได้ดังนี้

- ในระบบที่ Miner ไว้ใจได้ : ยกตัวอย่างเช่นระบบที่ใช้กันภายในบริษัท มี Miner แค่คนเดียวก็พอแล้ว

- ในระบบที่ Miner ไว้ใจไม่ได้ : ยกตัวอย่างเช่นระบบที่ใช้กันทั่วโลกโดยไม่รู้ว่าใครเป็นใคร เช่น Bitcoin อันนี้ยิ่งมี Miner เยอะยิ่งดี ให้แข่งกัน จะได้ไม่มีใครครอบครองระบบได้แต่เพียงผู้เดียว

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

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

แล้ว Miner ได้อะไร?

ก็จะเห็นว่า Miner จะต้องทำงานหนักสาหัสสากรรจ์เพื่อให้ยืนยันสำเร็จ ว่ายน้ำกันหอบแฮ่กๆเพื่ออะไรกัน แถมต้องซื้อตีนกบเพิ่มอีก ทำไปเพื่ออะร๊ายยยย

ดังนั้น Miner จึงควรได้รับผลตอบแทนอย่างสาสม เอ้ย อย่างเหมาะสมครับ ไม่งั้นก็ไม่มีคนยืนยันให้เรานะ ต้องจ่ายให้เค้านิดนึง โดยเราจะเรียกผลตอบแทนว่า Reward ซึ่งในระบบทั่วไปเราจะให้รางวัล Miner เป็น Transaction fee ครับ ก็คือคนโอนจะต้องรับผิดชอบค่าธรรมเนียมการโอนเพิ่มเติม โดยแล้วแต่เลยว่าจะคิดค่าธรรมเนียมกันยังไง เช่น Fix ไปเลยว่าต้องจ่ายเท่าไหร่จนไปถึงคิดเป็น % จากยอดโอน แล้วเงินเหล่านี้จะถูกสร้างเป็นเช็คอีกใบนึงส่งให้กับ Miner ผู้ที่ยืนยันสำเร็จครับ

ส่วน Miner ที่ยืนยันไม่สำเร็จหาเข็มเจอช้ากว่าคนอื่นเค้าก็ ... เหนื่อยฟรีไปจ่ะ

สำหรับเรื่อง Reward นี้ก็แล้วแต่ว่าระบบไหนอยากจะทำให้รางวัลเป็นอะไรครับ ไม่มีตายตัว บางระบบจะไม่ให้รางวัลก็ได้นะถ้าคิดว่ามันเหมาะสมแล้ว

รวบ Transaction ในช่วงเวลานั้นให้เป็น "Block" อันเดียว

กลับมาต่อเรื่อง Transaction กัน

จะเห็นว่าการยืนยัน Transaction นั้นใช้เวลานานพอสมควรเพราะ Proof of Work นั่นเอง โดยอาจจะใช้เวลาถึง 5-10 นาทีเลยทีเดียว

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

มาละ คำว่า Block มาละเฮ้ยยย

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

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

และพอหาเข็มเล่มนั้นเจอก็จับใส่ไว้ในกล่องเลย ถือเป็นกล่องที่สมบูรณ์แล้ว เย้ !

และเพื่อให้เห็นว่ากล่องนี้หน้าตาเป็นยังไง เราเลยจะขอถ่ายรูปของในกล่องไว้หน่อยเพื่อแปะไว้หน้ากล่องแล้วก็ปิดกล่องเลยจร้าา

จบ ได้กล่องที่สมบูรณ์แล้ว และนี่แหละที่เราเรียกมันว่า "Block" ครับ

แล้วจะทำยังไงกับมันต่อหละ ? เฮ้ย อย่าเพิ่งพักเหนื่อย หาเข็มแข่งกับคนอื่นมาแทบตาย ป่าวประกาศให้ทุกคนรับรู้เลยว่าเจอเข็มแล้วเฟร้ยยยยยยย เช่นสมมติ Paul เจอก่อนก็ส่งไปบอกทุกคนเลย เอา Block ปายยยย

คราวนี้จะเห็นว่าเวลาส่ง Transaction ที่ยืนยันแล้วเราจะไม่ได้ส่งเป็น Transaction ละ แต่จะส่งเป็น Block แทน ดังนั้นรายการเดินบัญชีที่เก็บไว้ในมือของแต่ละคนจะไม่ได้อยู่ในรูปแบบง่ายๆที่เรียง Transaction ต่อกันมาเรื่อยๆตรงๆอีกต่อไป แต่จะกลายเป็นการเอา Block มาเรียงต่อกันเรื่อยๆแทน

ใช่ครับ ... มันคือสิ่งที่เรียกว่า ... Blockchain

คราวนี้ตอนที่แต่ละคนได้รับ Block จาก Paul ทุกคนก็จะมาตรวจสอบกับรายการเดินบัญชีที่อยู่ในมือตัวเอง (ซึ่งอยู่ในรูปแบบ Blockchain) อีกครั้งว่า Transaction ที่อยู่ใน Block นั้นถูกต้องทุกอันมั้ย รวมถึงเข็มที่งมมานั้นถูกต้องมั้ย (ถึงจะใช้เวลางมนาน แต่การตรวจสอบความถูกต้องนั้นทำได้อย่างรวดเร็วมาก)

หากคนไหนเห็นว่า Block ถูกต้องแล้ว ก็จะยอมรับพยักหน้าหงึกๆและจับเอา Block มาต่อท้าย Blockchain ที่อยู่ในมือของตัวเองทันที

เป็นไง สนุกมั้ย แฮ่~~

แต่จริง ๆ Block ด้านบนที่ยกมาให้ดูยังไม่สมบูรณ์ 100% นะ แต่ก็เกือบละ ความจริงแล้ว Block ใน Blockchain จะต้องใส่อะไรเพิ่มไปอีกอย่างนึงด้วยถึงจะสมบูรณ์แบบ สิ่งนั้นคือ "รูปของ Block ก่อน"

ทุก Block ต้องอ้างอิง Block ก่อนหน้า

อาจจะสงสัยว่าภาพที่ถ่ายแปะไว้หน้ากล่องมีไว้ทำอะไร

ความจริงแล้ว Block แต่ละ Block จะต้องมีการอ้างอิงถึง Block ก่อนหน้าด้วยเสมอ มันถึงเรียกว่า Blockchain เพราะมันคือการเรียงต่อกันมาประหนึ่งโซ่ทองคล้องใจนั่นเอง ซึ่งจะทำให้เรารู้ได้ว่า Block แต่ละอันเรียงตัวกันยังไง อันไหนมาก่อน อันไหนมาหลัง ... ก็ Make Sense เนอะ

แล้วเราจะอ้างอิงกันยังไง ?

ง่ายมากกกก ก็เอารูปของ Block ก่อนหน้า ใส่เข้าไปใน Block นี้ด้วยสิ ! (ตอนนี้นึกไม่ออก ใส่รูปหมาแมวเพิ่มเข้าไปแทนละกันนะ)

ก็จะเห็นจากที่วงว่า ของในกล่องไม่ได้มีแค่ Transaction ทั้งหลายกับเข็มอีกต่อไป แต่จะมีรูปของสิ่งที่อยู่ในกล่องก่อนหน้าใส่ไว้ในกล่องด้วย !

แล้วทำแบบนี้ไปมีประโยชน์อะไร ?

ประโยชน์ของการอ้างอิงหน้าตาของ Block ก่อนหน้า

เมื่อ Blockchain เป็นแค่การเก็บข้อมูลที่อยู่ในมือแต่ละคน หากมีโจรอยากจะแงะจะเกิดอะไรขึ้น ?

อ่ะ ลองไปแงะกล่องหมากัน โดยสมมติว่าโจรอยู่ในระบบที่มีคนใช้งานแค่ 6 คน และโจรสามารถงัดบ้านเข้าไปแก้ไข Blockchain ของแต่ละคนได้ (โจรนี่มันโจรจริงๆ)

โจรก็เริ่มแอบไปเปลี่ยนข้อมูลในกล่อง จากเดิมที่บอกว่าโจรจะโอนเงินไปให้เหยื่อ 1,000 บาท แต่พอได้รับการยืนยันแล้ว (ก็คืออยู่ในบล็อคแล้ว) อยู่ดี ๆ โจรก็แอบเปลี่ยนเลยนี้เป็น 100 บาท

พอเปลี่ยนแล้วเกิดอะไรขึ้น ?

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

นี่คือประโยชน์หนึ่งของ Proof of Work คือกล่องไม่ได้สร้างใหม่ได้เลยทันที โจรจะต้องนั่งงมเข็มจนกว่าจะเจอ กล่องนี้ถึงจะถือว่าถูกต้อง

อ่ะ สมมติผ่านไป 10 นาที โจรเจอเข็มสำหรับกล่องหมาละ แล้วไงต่อ ? ภาพของในกล่องหมาก็เปลี่ยนไปไง

กล่องแมวพัง ! เพราะกล่องแมวมีเก็บรูปของกล่องหมาไว้ด้วย แต่พอกล่องหมาเปลี่ยนไป ก็แปลว่ารูปที่อยู่ในกล่องแมวขณะนั้นเป็นรูปมั่ว กล่องแมวก็เลยเข้าสู่สถานะ "กล่องพัง" ทันที

ทำยังไงให้ไม่พัง ? ก็เอารูปกล่องหมาใหม่มาใส่ ซึ่งแน่นอน แปลว่ากล่องแมวของข้างในเปลี่ยนเรียบร้อย งมเข็มกล่องแมวต่อเลยจ้าาา อีก 10 นาที งมไป

จากนั้นก็ต้องทำแบบนี้ไปเรื่อยๆจนถึงกล่องสุดท้าย (ก็คือจนจบ Chain)

ซึ่งถามว่ามันจะจบเมื่อไหร่? คำตอบคืออาจจะไม่มีวันจบเลย เพราะว่าในขณะที่โจรกำลังงมเข็มกล่องหมากล่องแมวอยู่นั้น มันก็อาจจะมีกล่องใหม่ต่อท้ายลงมาเรื่อยๆๆๆๆๆอีกก็ได้ ก็คือแก้ไปได้ 1 Block ก็มี Block เพิ่มขึ้นมาให้แก้อีก 1 Block เป็นแบบนี้เรื่อยไป และกล่องเหล่านั้นจะอยู่ในสถานะกล่องพังทั้งหมด เป็น Blockchain ที่ไม่สามารถใช้งานอีกด้วย

และนี่คือเหตุผลว่าทำไม Blockchain ถึงปลอดภัยและทำไม Proof of Work ถึงสำคัญครับ โอกาสที่จะกลับไปแก้ไขของที่อยู่ใน Blockchain ได้นั้นเรียกได้ว่าแทบไม่มีเลยก็ว่าได้

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

สรุปแล้ว Blockchain คือ

จริง ๆ นี่คือจบแล้วนะ ทุกคนน่าจะเห็นภาพเรียบร้อยว่า Blockchain คืออะไร อาจจะยากนิดหน่อยแต่เชื่อว่าอธิบายด้วยภาษาที่ง่ายที่สุดที่จะทำได้แล้ว -0-

สรุปแล้ว

Blockchain คือ ฐานข้อมูล (Database) ที่เก็บไว้ในเครื่องของทุกคนแต่ไว้ใจและเชื่อถือได้แม้ในระบบที่ไม่มีใครเป็นผู้ดูแลกลาง

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

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

ยกเว้นอุกกาบาตพุ่งชนโลก อันนั้นไม่ต้องแคร์แล้วมั้ง บล็อคชงบล็อคเชนอ่ะ ...

Blockchain เป็นแค่ฐานข้อมูล มันเลยไม่จำเป็นต้องเกี่ยวกับเรื่องเงินเท่านั้น

เนื่องจาก Blockchain เกิดมาพร้อม Bitcoin และทุกวันนี้ก็ได้ยินคำว่า Blockchain เกี่ยวกับ FinTech มาโดยตลอด ทำให้หลายๆคิดว่า Blockchain ต้องเกี่ยวกับเรื่องการเงินเท่านั้น

อันนี้ไม่จริงครับ อย่างที่ได้สรุปไว้ว่าแท้จริงแล้ว Blockchain ก็คือฐานข้อมูลแบบหนึ่งเท่านั้น (For Geek: ก็เหมือน MySQL อะไรพวกนี้) ดังนั้นมันเลยใช้เก็บข้อมูลได้ทุกอย่างแล้วแต่ศรัทธาเลย

วิธีก็แค่ออกแบบ Transaction ให้เหมาะสมกับงานนั้นๆเท่านั้นเอง

เช่นที่มีคนทำแล้วก็คือระบบ Electronic Vote (การโหวต การเลือกตั้งแบบอิเลคทรอนิกส์) โดยใช้ Blockchain ก็แค่ออกแบบ Transaction เป็นว่าใครโหวตอะไร เห็นมะว่ามันไม่จำเป็นต้องเกี่ยวกับเงินเลย ก็สามารถใช้งานได้

ถ้าคุณคิดตามทันได้ทันทีว่า เราสามารถใช้ Blockchain ทำระบบ Electronic Vote ได้ แปลว่าคุณเข้าใจ Blockchain แล้ว

หรือระบบเก็บคะแนนสอบของนักเรียนก็ทำได้เช่นกัน

Transaction ก็จะเป็นคะแนนสอบของนักเรียนในการสอบครั้งต่าง ๆ

เห็นมะ Blockchain มันก็แค่ฐานข้อมูลเท่านั้นเอง

แต่ทำไมเราถึงได้ยินคำว่า Blockchain กับเรื่องเงินเยอะเหลือเกิน? ความจริงก็เป็นเพราะว่า

1) ฐานข้อมูล Blockchain มันเป็นอะไรที่ไว้ใจได้เป็นอย่างมาก ดังนั้นงานที่ซีเรียสๆอย่างเรื่องการเงินก็เลยเลือกใช้ Blockchain กันมากขึ้นเรื่อยๆนั่นเอง (ซึ่งถ้ามองมุมกลับ ขนาดงานซีเรียสอย่างเรื่องการเงินยังใช้ จริงๆก็ควรจะใช้กับงานอะไรก็ได้แล้ว)

2) คนที่เข้าใจ Blockchain แบบลึกๆจนประยุกต์สร้าง Blockchain เองสำหรับใช้ในงานอื่นๆได้ยังมีจำนวนจำกัด แต่ก็ค่อยๆเยอะขึ้นเรื่อยๆ โดยเฉพาะ Startup ในต่างประเทศ

ซึ่งหวังเป็นอย่างยิ่งว่าพอจบบทความนี้ไป น่าจะมีหลายๆท่านมองเห็นภาพรวมและสามารถประยุกต์เอา Blockchain ไปใช้ทำสิ่งต่างๆได้ครับ =)

สรุปคำศัพท์ใน Blockchain

เขียนไว้ยาวจัด ขอจัดคำศัพท์ให้หน่อยละกัน

- Node : ผู้ใช้ในระบบไม่ว่าจะเป็นแค่คนที่ใช้งานธรรมดาหรือ Miner ล้วนแล้วแต่เป็น Node ทั้งสิ้น

- Network : การที่ Node เชื่อมต่อกัน เราเรียกว่า Network

- Transaction : รายการเดินบัญชีในระบบแต่ละรายการ

- Ledger : สมุดบันทึกรายการเดินบัญชีในระบบ

- Miner : ผู้ยืนยันความถูกต้องของ Transaction และสร้างเป็น Block ออกมา

- Block : กลุ่มของ Transaction (มีจำนวนได้ตั้งแต่ 0 เป็นต้นไป) ที่ได้รับการยืนยันแล้ว

- Blockchain : ฐานข้อมูลของ Transaction ที่อยู่ในรูปแบบของ Block ที่เรียงต่อลงมาเรื่อยๆ

- Proof of Work : กระบวนการพิสูจน์ว่าต้องใช้พลังสูงมากในการยืนยันความถูกต้อง Block

- Block Reward : รางวัลที่จะมอบให้ Miner ที่สร้าง Block พร้อมเข็มที่ถูกต้องออกมาสำเร็จเป็นคนแรก

- Confirmation : จำนวนที่ได้รับการยืนยันใน Blockchain ว่า Transaction นั้นถูกต้อง ซึ่งมีค่าเท่ากับจำนวนบล็อคที่ต่อท้ายบล็อคนั้น ๆ บวกด้วย 1 ... เช่น หากไม่มีบล็อคไหนมาต่อเลย ทุก Transaction ในนั้นจะถือว่าได้รับ 1 Confirmation พอมีบล็อคอื่นมาต่อท้าย ทุก Transaction ในบล็อคเดิมนั้นจะถือว่าได้รับ 2 Confirmations เป็นแบบนี้เรื่อยไป ยิ่งมีบล็อคมาต่อท้ายมาก็ยิ่งมีจำนวน Confirmation สูงมาก

ตามเน้ !
แถม: Blockchain ที่ไม่ได้มีคนใช้แค่ 6 คน

ในระบบด้านบนเราอธิบายให้ดูง่ายๆว่าเรามีใช้กันแค่ 6 คน แต่ระบบจริงอย่างเช่น Bitcoin มีผู้ใช้เป็นร้อยล้านคนนะ หรือต่อให้เป็นระบบที่เราทำขึ้นมาเพื่อใช้ในบริษัทเอง ก็อาจจะมีผู้ใช้เป็นพันๆคน

แต่นั่นไม่ใช่ปัญหา ถ้าทุกคนเข้าใจตามที่เราอธิบายว่าระบบที่มี 6 คนทำงานยังไง คุณก็จะเข้าใจว่าระบบที่มีคนใช้งานเป็นร้อยล้านคนทำงานยังไงครับ

สำหรับคนที่สงสัยว่าแล้วทั้งร้อยล้านคนจะคุยกันยังไง?

อันนี้เป็นภาษาเทคนิคหน่อยละกัน เราเรียกมันว่า Peer-to-Peer ครับ ก็คือการที่เครื่องแต่ละเครื่องของผู้ใช้ในระบบ (เราขอเรียกว่า Network) สามารถคุยกันเองได้

ไม่ลงเทคนิคเบื้องหลังเพราะว่าจริงๆเราไม่จำเป็นต้องรู้ รู้แค่ว่าเค้าวางระบบมาให้แต่ละเครื่องคุยกันได้เอง กระบวนการต่างๆที่เราอธิบายมาก่อนหน้านี้เช่น พอสร้าง Transaction แล้วจะส่งไปบอก Miner อันนี้ก็กระทำผ่านการคุยแบบ Peer-to-Peer ตรงนี้ครับ เดี๋ยว Transaction ที่สร้างจะถึงมือ Miner เองในเวลาอันสั้น

สำหรับคนที่ไม่คุ้นกับ Peer-to-Peer ... เนยว่าอย่างน้อยก็น่าจะคุ้นกับการโหลดบิตแหละ มันเหมือนกันครับ การโหลดบิตคือการโหลดไฟล์จากเครื่องชาวบ้าน ไม่ได้วางไว้บน Server ที่ไหน ซึ่งนี่คือการคุยกันโดยตรงครับ เราไปโหลดไฟล์จากคอมพ์อีกเครื่องนึง เรียกว่า Peer-to-Peer เช่นกัน

แถม: ถ้า Node ไม่ต่อเนต จะทำงานยังไง

มันก็คงมีจังหวะที่บาง Node ตัดเนตทิ้งไป เช่น Alice หนีไปนอน ... แล้ว Node นั้นจะทำงานยังไง ?

คำตอบคือ Node นั้นจะถูกแช่แข็งสถานะไว้เป็นล่าสุดก่อนเนตจะถูกตัดทิ้งครับ

สาเหตุเบื้องหลังก็ไม่มีอะไรมาก Blockchain (ฐานข้อมูล) ยังไม่ได้ถูกอัปเดตเป็นล่าสุดนั่นเอง แต่นั่นก็ไม่ใช่ปัญหา ตอนที่ต่อเนตกลับมา ระบบก็จะอัปเดต Blockchain ให้เป็นล่าสุดเองด้วย Peer-to-Peer Network ที่พูดถึงด้านบน

ดังนั้นไม่มีอะไรซับซ้อนครับ ต่อเนตก็หลุดออกจาก Network ไม่ได้รับข้อมูลล่าสุด พอต่อกลับมาก็ใช้งานต่อได้

แถม: จะเกิดอะไรขึ้นถ้ามีคนยืนยัน Block ได้พร้อมกันหลายคน

แถมต่ออีกหน่อยละกัน

จะเห็นว่าตอนที่ Block ถูกสร้างขึ้นมาโดยสมบูรณ์แล้ว (ก็คือหาเข็มเจอแล้ว) Miner จะต้องป่าวประกาศบอกทุกคนใน Network ว่า ชั้นสร้างบล็อคสำเร็จแล้วนะเฟร้ยยยยยยยย

แต่การประกาศตรงนี้ทางปฏิบัติมันอาจจะถึงบางเครื่องช้าถึงบางเครื่องเร็ว หากมี Miner อีกคนหาบล็อคเจอในเวลาไล่เลี่ยกันจะเกิดอะไรขึ้นหละ ?

แน่นอนว่า Miner คนนั้นก็ยูเรก้าตะโกนบอกทุกคนเหมือนกันว่า ชั้นสร้างบล็อคแล้วเฟร้ยยยย โดยไม่สนใจ Miner อีกคนที่เจอเช่นกันเลย

คราวนี้จะมี Block ที่ถูกต้องอยู่สองอันล่องลอยอยู่ใน Network และเนื่องจากว่ามันถูกต้องทั้งคู่ จะโยนอันไหนทิ้งก็คงไม่ได้ ดังนั้น Block ทั้งคู่จะถูกต่อท้ายใน Blockchain ครับ หน้าตาแบบนี้

อ้าว อย่างงี้ก็ได้เหรอออออ

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

เราทำอะไรไม่ได้นอกจาก "รอ" ครับ

รอว่าจะมีบล็อคใหม่มาต่อท้ายฝั่งไหนมากกว่ากัน

เช่น รออีก 10 นาที ปรากฎว่า Miner สร้าง Block ถัดไปได้สำเร็จแล้วปรากฎว่า Block นั้นเป็น Block ที่สร้างมาต่อท้ายบล็อคคัพเค้ก ก็จะกลายเป็นแบบนี้

ในกรณีนี้ Blockchain จะเลือกใช้สายฝั่งซ้ายในการทำงาน (สายคัพเค้ก-ต้นคริสมาสต์) ส่วนสายแคนดี้เคนจะไม่ถูกนำมาใช้

อย่างไรก็ตาม ถ้ารออีกแป๊บนึง ดันมีบล็อคมาต่อท้ายฝั่งขวาและมีบล็อคมาต่อท้ายบล็อคนั้นอีก จนสายฝั่งขวายาวกว่า ระบบก็จะสลับไปใช้ฝั่งขวา(แคนดี้เคน)โดยอัตโนมัติ

อ้าว เฮ้ยยยย ฟังดูงงๆแปลกๆ

ไม่ต้องงงครับ อันนี้เป็นธรรมชาติของ Blockchain มันมีโอกาสเกิดขึ้นได้อยู่ แต่ระบบก็มีเขียนไว้ชัดเจนว่า "จะเลือกฝั่งที่ยาวกว่า (Longest Chain)" และพอผ่านไปสักระยะนึง ฝั่งที่สั้นกว่าจะไม่มี Miner รายไหนสร้างบล็อคมาต่ออีกต่อไปครับ และบล็อคฝั่งที่ไม่ถูกนำมาใช้นั้น เราจะเรียกมันว่า Orphan Block

ศัพท์เยอะดีมะ

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

ที่มาพูดเรื่องนี้จะบอกอะไร ?

จะบอกว่าถึง Block จะถูกรวมเข้ามาใน Blockchain แล้ว มันก็อาจจะถูกยกเลิกได้อยู่นะครับ

อย่างเช่นในกรณีนี้ ตอนแรก Transaction ในบล็อคฝั่งขวา(แคนดี้เคน)โอนเงินสำเร็จอยู่ดีๆ แต่อีก 10 นาทีถัดไปการโอนเงินนั้นกลับกลายเป็นโมฆะซะงั้น ! และนี่คือเหตุผลว่าทำไมเลขจำนวน Confirmation ถึงสำคัญครับ

แถม: จำนวน Confirmation ที่ใช้งานได้ปลอดภัย

เลขจำนวน Confirmation คือเลขจำนวนบล็อคที่ต่อท้ายบล็อคนั้น ๆ บวกด้วย 1

เช่นหากไม่มีบล็อคไหนต่อท้ายเลย Transaction ในบล็อคนั้นๆจะมีค่า Confirmation อยู่ที่ 1 ถ้ามีมาต่อท้ายบล็อคนึงจะมีค่า Confirmation อยู่ที่ 2

และจากตัวอย่างด้านบนเราจะเห็นแล้วว่าการที่ Block ไปอยู่ใน Blockchain ไม่ได้แปลว่ามันจะเป็นแบบนั้นตลอดไป มันอาจจะถูกยกเลิกในชั่วโมงข้างหน้าก็ได้

ดังนั้นโดยปกติหลังจากที่ Transaction ถูกยืนยันแล้ว (a.k.a. ถูกบรรจุลง Block และใส่เข้าใน Blockchain แล้ว) เราจะยังไม่ถือว่าธุรกรรมนั้นสำเร็จทันที แต่เราจะรอจนกระทั่งได้รับ 6 Confirmations เสียก่อน ก็คือต้องมีบล็อคมาต่อท้าย 5 บล็อค เราถึงจะมั่นใจได้ว่าสาย Block ฝั่งนั้นจะไม่ถูกยกเลิกแน่นอน

หากคุณมีการซื้อขายอะไรด้วยเงินใน Blockchain ก็คงต้องรอเลข Confirmation ให้สูงๆก่อนถึงจะปล่อยสินค้าได้ครับ ไม่งั้นส่งของไปแล้วแต่ Transaction ถูกยกเลิกขึ้นมานี่เรื่องใหญ่เลยนะ

ก็ตามนี้คร้าบผม =)

แถม: Full Node vs Lightweight Client

หมายเหตุ: หัวข้อนี้อาจจะมีภาษาต่างดาวโผล่มาบ้าง

สำหรับ Node ที่เราอธิบายไปทั้งหมดในบทความนี้เราเรียกว่า Full Node ครับ

Full Node คือ Node ที่มีการโหลด Blockchain มาครบทั้งก้อน ซึ่งแน่นอนว่ามันจะใหญ่ขึ้นตามเวลาเพราะว่า Blockchain มันมีแต่จะยาวขึ้นเรื่อย ๆ และไม่สามารถลบทิ้งได้ แต่ถ้าต้องการจะทำอะไรแบบเต็ม ๆ เช่น ถ้าต้องการเป็น Miner ด้วย ก็จำเป็นจะต้องโหลด Blockchain มาทั้งก้อน ไม่งั้นทำไม่ได้ครับ

แต่สำหรับการใช้งานแบบทั่วไป เช่น ต้องการโอนเงินออกหรือตรวจเช็คว่าตนมีเงินเท่าไหร่ อันนี้เราก็ไม่จำเป็นต้องโหลด Blockchain มาทั้งก้อนก็ได้เนอะ เพราะลองคิดดูดี ๆ ถ้าเราจะใช้ Bitcoin บนมือถือ แล้วปรากฏว่า Blockchain มันดันขนาด 95GB ไปแล้ว มือถือจะพอใส่ Blockchain ทั้งหมดมั้ย ?

มันก็เหมือนกับว่าเช่าห้อง 20 ตารางเมตรอยู่ แต่ดันมีเอกสารต้องเก็บไว้ 1 พันล้านฉบับ แล้วจะที่ให้เก็บมั้ยหละ

นั่นแล มันก็เลยมีวิธีการใช้งานอีกแบบครับที่เรียกว่า Lightweight Client (หรือ Thin Client) ซึ่งแอปฯบนมือถือจะเป็นพวกนี้ทั้งหมด รวมถึงแอปฯบนคอมพิวเตอร์ส่วนใหญ่ด้วย

การทำงานของ Lightweight Client คือ มันจะเชื่อมต่อไปยัง Network ผ่าน Peer-to-Peer อีกเช่นกัน แต่มันจะไม่โหลด Blockchain ทั้งก้อนมาเก็บไว้ แต่จะเลือกโหลดแค่บางส่วนของแต่ละ Block มาเก็บไว้เท่านั้น (For Geek: มันคือส่วนของ Block Header) ซึ่งส่วนที่ว่านี้มีขนาดแค่ 80 ไบต์ต่อ Block เท่านั้นเอง

ก็คือยังโหลดทุก Block มาเก็บไว้อยู่นะ แต่ไม่ได้เอาเอกสารข้างในกล่องมาด้วย เอามาแค่หน้าตากล่องแบบคร่าวๆเท่านั้น ซึ่งโดยรวมแล้วเล็กกว่ากล่องเต็มๆมากเป็นหมื่นเท่าตัว

และถ้า Lightweight Client ต้องการข้อมูลอะไร มันก็จะส่งไปถาม Network (ซึ่งมี Full Node ล่องลอยอยู่) ว่า เราอยากรู้จังเลยว่ามี Block ไหนที่เกี่ยวข้องกับเราบ้าง Network ก็จะตอบกลับมา มีอันนี้ ๆ ๆ ๆ ๆ ๆ สุดท้าย Lightweight Client ก็จะดึงข้อมูลเฉพาะส่วนที่ต้องใช้มาเท่านั้น ซึ่งมีขนาดไม่ได้ใหญ่มาก หรือเรียกได้ว่าเล็กเลยหละ

ก็จะเห็นว่า Lightweight Client ไม่ได้เข้าถึงข้อมูลครบทั้ง Blockchain ดังนั้นสิ่งที่มันทำได้ก็เลยค่อนข้างจำกัด เช่น สามารถสร้าง Transaction เพื่อโอนเงินออกได้ รวมถึงสามารถดูได้ว่าเรามีเงินอยู่เท่าไหร่

ในขณะเดียวกัน มันก็ไม่สามารถทำงานหลายๆอย่างได้ เช่น เป็น Miner ไม่ได้ (เพราะจะเป็น Miner ได้ต้องสามารถยืนยัน Transaction ทั้งหมดได้) รวมถึงไม่สามารถยืนยัน Block ใหม่ที่เข้ามาว่าถูกต้องหรือไม่ได้ มันทำได้อย่างเดียวคือร้องขอข้อมูลจากใน Network มาใช้งาน ก็แบบ Network ว่าไงก็ว่าตามกันละกันงี้

นี่คือเหตุผลว่าเราเลยไม่เรียกมันว่า Lightweight Node ถึงแม้จะมีเว็บเมืองนอกบางเว็บใช้คำว่า Node บ้าง แต่สำหรับเรา เราว่ามันไม่ควรใช้คำว่า Node เพราะมันไม่ได้มีหน้าที่ทำอะไรแบบที่ Node ทำได้เลย เราเลยขอเรียกมันว่า Lightweight Client ครับ

จะเกิดอะไรขึ้นหากมีคนสั่งลบของใน Blockchain?

ปิดบริการครับ เพราะ Blockchain ถูกออกแบบมาให้พอใส่ Block เข้า Chain แล้วไม่อาจแก้ไขได้อีก เหตุผลก็ตามที่อธิบายในหัวข้อด้านบนฮับบบ


ก็จบกันไปเรียบร้อยสำหรับ Blockchain เบื้องต้นฉบับภาษามนุษย์ แต่ก็อย่างที่เห็น มันเป็นเรื่องของการวางระบบซะเป็นส่วนใหญ่ แต่ถ้ามีความสนุกกับการเรียนรู้เรื่องพวกนี้ก็น่าจะอ่านเข้าใจได้ไม่ยากขอรับกระผม =)

สำหรับเรื่องที่ลงเทคนิคก็จะมียาวกว่านี้อีก เช่นว่า สมุดบัญชีแต่ละเล่มที่มี Address กับ Owner Key นั้น แท้จริงแล้วมันคืออะไรในโลกคอมพิวเตอร์ ไว้มาต่อกันอีกทีตอนที่ต่อยอดเป็นระบบแล้วสำหรับผู้ที่เป็น Geek ครับ เพราะอันนั้นจะพ่นภาษาคอมพ์ออกมารัวๆ ไว้เจอกันบล็อกหน้าาาาา ... มั้ง

ก็หวังว่าบล็อกนี้จะปูพื้นฐานความเข้าใจเรื่อง Blockchain ให้ทุกคนได้ บนสนทนาหลังจากนี้ในงานสัมมนาต่างๆควรจะเป็นว่า "Blockchain ใช้ทำอะไรต่อได้บ้าง" มากกว่า Blockchain คืออะไรแล้ว แล้ววงการจะพุ่งไปข้างหน้าอย่างไวแน่นอนครับ

บล็อกนี้ลาไปก่อน ขอให้ทุกท่านมีความสุขจ่ะ ^__^

บทความที่เกี่ยวข้อง

Nov 6, 2016, 20:44
87175 views
ต่อยอดบล็อกพี่ปุ๋ย Somkiat.cc "ทำไม ​Dev เก่งๆในไทยไม่ค่อยเป็นที่รู้จักในระดับโลก?"
Nov 4, 2016, 09:50
163162 views
รู้จักกับ Cloudflare พร้อมวิธีติดตั้ง HTTPS ให้กับเว็บแบบฟรี ๆ ไม่มีค่าใช้จ่าย
0 Comment(s)
Loading