วันจันทร์ที่ 28 ตุลาคม พ.ศ. 2562

Blockchain คืออะไร



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


ระบบรวมศูนย์ (Centralized) 




Credit Pic: Nuuneol

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

ข้อเสีย
1. การวางระบบศูนย์กลางนี้มีค่าใช้จ่ายสูง 
2. ในแง่ความปลอดภัย ต้องเชื่อใจคนกลาง 
3. ถ้าคนกลาง หรือ ศูนย์รวม มีปัญหาก็ต้องรอให้กลับมาทำงานตามปกติอย่างเดียว


ระบบแบบกระจาย (Distributed)




Credit Pic: Nuuneol

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

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

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


Blockchain 

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


1. สมุดบัญชีจะมีแค่ เลขบัญชี กับ Owner Key 



Credit Pic: Nuuneol

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

          - John ฝากเงิน 2,000 บาท
          - John โอนเงินให้ Alice 1,500 บาท (John เหลือ 500)
          - Paul โอนเงินให้ John 500 บาท (John เหลือ 1000)

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



Credit Pic: Nuuneol

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

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

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



Credit Pic: Nuuneol


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

      ในระบบรวมศูนย์กลางนั้นยังมีผู้ตรวจสอบ ก็คือ ธนาคาร แต่กับระบบแบบกระจายนี้ ผู้ตรวจสอบก็คือหนึ่งใน 6 คนที่ใช้บริการอยู่ ต้องมีอย่างน้อยหนึ่งเป็นผู้ตรวจสอบ และผู้ตรวจสอบเหล่านี้เราจะเรียกว่า Miner 
      ดังนั้น ลักษณะการประกาศ Transaction จะเปลี่ยนไป จากเดิมที่ประกาศแล้วให้ต่างคนต่างเขียนลงไปใน Ledger ของตัวเองเลย กลายเป็นว่าตอนประกาศ Transaction ไป Transaction นั้นๆจะอยู่ในสถานะ "ยังไม่ได้รับการยืนยัน (Unconfirmed) ก่อน และจะยังไม่ถูกบันทึกไว้ใน Ledger ของใครเพราะ Ledger จะมีไว้สำหรับเขียนสิ่งที่ "ได้รับการยืนยันแล้ว" เท่านั้น ซึ่งการตรวจสอบก็ไม่ยากแค่ ตรวจสอบว่า สิ่งที่ทำอยู่นั้น ตรงกับ Ledger ของ miner เช่น John โอนให้ Alice 2000 miner ก็จะตรวจสอบว่า John มียอดถึง 2000 ไหม 
     แต่ถ้าเราไม่มั่นใจว่า Miner ไว้ใจได้รึเปล่า ในกรณีนี้ การมี Miner เพียงคนเดียวนั้นจึงไม่ดีพอ ระบบเลยต้องมี Miner มากกว่า 1 คน และให้คนเหล่านั้น "แข่งกันยืนยัน Transaction"


แข่งกันยืนยัน Transaction

      การแข่งยืนยัน Transaction นั้น เมื่อ Miner ทำการตรวจสอบ Transaction แล้วจะต้องแก้โจทย์ของระบบ Blockchain ซึ่ง ระบบ Blockchain จะตั้งโจทย์พิเศษขึ้นมาให้แก้หนึ่งตัว เป็นโจทย์ที่แก้ไขไม่ได้ด้วยสมการทางคณิตศาสตร์ วิธีเดียวที่จะทำได้คือ "ทำไปเรื่อยๆจนกว่าจะเจอคำตอบ"
(เช่น เอาข้อมูลไปผ่าน hash function แล้วให้ชุดตัวเลขที่ได้มีเลข 00 นำหน้า) 
จะเห็นว่าการยืนยัน Transaction นั้นใช้เวลานานพอสมควรเพราะ Proof of Work นั่นเอง โดยอาจจะใช้เวลาถึง 5-10 นาทีเลยทีเดียว

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



Credit Pic: Nuuneol

ถามว่า miner ได้อะไร 

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



Bitcoin (บิทคอยน์) กับ Blockchain (บล็อกเชน) เกี่ยวข้องกันอย่างไร

  •  Blockchain : เทคโนโลยี ด้านความปลอดภัยของข้อมูล 
  •  Bitcoin: สกุลเงินบนโลกดิจิตอล

      จะเห็นได้ว่า Blockchain  ไม่ใช่ Bitcoin และ Bitcoin ก็ไม่ใช่ Blockchain  แต่ Bitcoin มีความต้องการนำ Blockchain มาใช้ เพื่อให้การซื้อขาย มีความปลอดภัย 

ก็ขอจบ post Blockchain คืออะไร เพียงเท่านี้นะครับ ต่อไปจะเป็นเรื่องของ Smart contact บน Blockchain นะครับ ขอบคุณครับ

ไม่มีความคิดเห็น:

แสดงความคิดเห็น

Code Client Smart Contract auto transfer

ในครั้งนี้เราจะมาทำให้ Smart Contract ของเรา transfer auto กันครับ โดยเริ่มจากส่วนของ Smart contract ของเราก่อน เราได้เพิ่มฟังก์ชั่น ...