Blockchain EP.0 : Core Concept

Anonymous
Nextzy
Published in
4 min readApr 17, 2018

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

Blockchain != Bitcoin

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

ใน Blog นี้ผมจะพยายามอธิบายใหม่เป็น Flow เพื่อให้เห็นภาพตั้งแต่ส่วนที่เล็กที่สุดประกอบกับส่วนอื่นๆจนออกมาเป็นระบบ Blockchain เพื่อให้เข้าใจจนสามารถไปลอง Implement ตามได้ใน EP ถัดไป แต่อาจจะไม่ลงละเอียดถึงในทางเทคนิคบางอย่างแบบตัวที่ ฺBitcoin ใช้จริงๆ เนื่องจากเราจะมาดูแค่ในส่วนของพื้นฐานง่ายๆเท่านั้นนะครับ เพื่อทำความเข้าใจในระบบ Blockchain ในรูปแบบของการ Implement นั่นเอง

What is Blockchain?

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

การระบุสายเชื่อมต่อนั้นใน Blockchain จะใช้การ Hash ข้อมูลที่อยู่ใน Block ออกมาเป็นลักษณะของ ID และใน Block ถัดไปก็จะระบุว่าเชื่อมต่อกับ Block ก่อนหน้านั้นด้วย Hash

Transactions in Blockchain

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

Transaction ใน Blockchain นั้นจะเก็บหลักๆอยู่ 2 อย่างคือ ข้อมูลรายการก่อนหน้านี้ที่เรารับเงินจำนวนนี้มา ( Input ) และผลลัพธ์เมื่อย้ายเงินจำนวนนี้ออกจาก Wallet ของเราไปยัง Wallet Address อื่นๆ (Output) ซึ่งจะเห็นการทำแบบนี้เป็นสายโซ่ต่อกันในระบบ Transaction อีกที

เช่น เราจะทำการโอนเงินจาก Wallet A ไปให้ B 5 BTC อันดับแรกต้องไปดึง Output ของ A ที่ยังไม่ถูกใช้งานจาก Transaction ก่อนๆมาก่อน อันไหนที่ถูกดึงใช้ไปแล้วจะไม่สามารถเรียกใช้ได้อีกครั้งใน Transaction ถัดๆไป หากดึงมาแล้วแล้วมีเงินรวมกันเกิน 5 BTC ถึงจะสามารถดำเนินการต่อได้ โดยนำ Output ที่ดึงมาได้ มาเป็น Input ของ Transaction ใหม่ จากนั้นก็สรุปผลลัพธ์ที่จะเกิดขึ้นเป็น Output ออกมาว่า A จะเหลือเงินใน Transaction นี้เท่าไหร่ และ B ได้ไป 5 BTC ดังรูป ผลรวมของการทำ Transaction นั้น A ก็จะเหลือเงินทอนจากการทำรายการ 2 BTC นั่นเอง

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

Digital Wallet

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

Digital Wallet ใช้เทคนิคจากการเข้ารหัสแบบ 2 ทางหรือ Asymmetric Cryptography เข้ามาเป็นกุญแจในการยืนยันความเป็นเจ้าของ โดยจะทำการ Generate กุญแจขึ้นมา 1 ชุด ประกอบไปด้วย

  1. Private Key เปรียบเสมือนสมุดบัญชีตัวจริง ที่เราสามารถนำไปธนาคารเพื่อทำธุรกรรมต่างๆได้ ดังนั้น Private Key เราจึงจำเป็นต้องเก็บไว้อย่างดี!! ห้ามหายเป็นอันขาด
  2. Public Key เปรียบเสมือนเลขบัญชี ที่เราสามารถบอกคนอื่นได้ ให้บุคคลอื่นสามารถโอนเงินเข้ามายังบัญชีนี้ได้
เปรียบเทียบ Wallet กับบัญชีธนาคาร

ซึ่ง Public Key ที่ได้จากการ Generate นั้นจะเป็นข้อมูลที่มีความยาวค่อนข้างมากที่จะนำมาใช้ เวลาจะนำไปใช้จริง เราจึงนำมาผ่านขั้นตอนการ Hash เพื่อลดความยาวลง และสร้างออกออกมาเป็นสิ่งที่เราเรียกว่า Wallet Address นั้นเอง

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

Transaction with Wallet

จากที่เรายกตัวอย่างก่อนหน้าที่เราสร้าง Transaction บน Blockchain ที่บันทึกว่า A โอนให้ B มูลค่า 5 BTC นั้น เมื่อนำระบบ Wallet เข้ามาใช้งานด้วย ตัว Transaction เองจะเปลี่ยนมาบันทึกเป็น Wallet Address แทน โดยบันทึกว่า Address ไหนโอนไปให้ Address ไหน

และเมื่อเราจะทำรายการโอน ระบบจะใช้วิธีการสร้าง Transaction ส่งเข้าไปที่ระบบ โดยใช้ Private Key ของเราเป็นตัวยืนยันการสร้างรายการนั้น ว่าเราเป็นเจ้าของ Wallet Address นั้นจริงๆ สามารถทำรายการได้จริงๆนะ ไม่ใช่ใครก็สั่งโอนได้ โดยระบบจะทำการ ตรวจสอบ ว่าเราเป็นเจ้าของบัญชีนั้นจริงหรือเปล่าจากลายเซ็นดิจิตอล ( Digital Signature ) ที่ถูกส่งเข้ามา จากนั้นระบบหจะใช้ Public Key ที่เจ้าของรายการส่งมาให้ตรวจสอบข้อมูลที่แนบมาว่า Signature ที่ส่งมานั้นถูกต้องและตรงกันหรือไม่ หากตรงกัน รายการของเราถึงจะสามารถบันทึกลงระบบ Blockchain ได้

เช่น มีการส่งคำสั่งให้โอนจากบัญชี A > B แต่ใช้ PrivateKey ของ C ในการสร้าง Transaction เมื่อถึงขั้นตอนการตรวจสอบความเป็นเจ้าของ ระบบก็จะใช้ PublicKey ของ A มาเข้ากระบวนการตรวจสอบโดนทำการเช็คจาก Signature ที่ส่งมา หากไม่ตรงกันก็จะไม่สามารถทำรายการได้

Proof Of Work

สิ่งที่ทำให้ระบบ Blockchain มีความน่าเชื่อถือนั้นคือความยากของการสร้าง Block ใหม่ เพราะไม่ใช่ใครก็ได้ที่สามารถสร้าง Block ใหม่ขึ้นมาได้ แต่ต้องผ่านการพิสูจน์เงื่อนไขอะไรบางอย่างก่อน เช่น ตัว Bitcoin นั้นใช้ระบบ Proof Of Work ซึ่งเป็นการนำข้อมูลที่จะสร้าง Block ใหม่นั้นมาผ่านการคำนวน Hash โดยใช้การ Brute Force วนหาค่าไปเรื่อยๆ จนกว่าจะได้คำตอบที่ต้องการ ซึ่งต้องใช้พลังในการประมวลผลค่อนข้างมาก และคนที่ประมวลผลได้ก็จะได้รางวัลในการคำนวนไป ซึ่งเราเรียกกันทั่วไปว่าการขุด (Mining) นั่นเอง

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

ดังนั้น ตัว Proof of Work จึงใช้หลักการเมื่อข้อมูลเปลี่ยน ค่า Hash ที่ได้ก็จะเปลี่ยนตาม มาทำเป็นระบบในการยืนยันข้อมูลของ Block ใหม่ โดยเมื่อเรากำหนดค่า Target ของการ Hash ที่ได้มาต้องมีค่าน้อยกว่าเลขจำนวนหนึ่ง ค่า Hash นั้นถึงจะถูกมองว่าเป็น Hash ที่ถูกต้อง และนำไปใช้เป็น ID ของ Block ต่อไป เช่น ในตัวอย่าง ต้องได้ค่า Hash ที่คำนวนออกมาเป็น BigInteger แล้วมีค่าน้อยกว่าค่าเป้าหมาย คือ 1E+61 (หรือ 1 แล้วตามด้วย 0 61 ตัว) ดังนั้น ขั้นตอนก่อนการบันทึก Block จึงจำเป็นต้อง Brute Force หาค่า Hash นั้นไปเรื่อยๆจนกว่าจะเจอค่า Hash ที่ถูกต้องนั่นเอง

ความยากในการหาค่า Hash ใน PoW ถูกกำหนดด้วยค่าเป้าหมาย ซึ่งถ้าเรากำหนดให้เป้าหมายมีค่าน้อย การ Brute Force เพื่อหาค่า Hash ก็จะใช้เวลามากขึ้นและใช้เวลาในการทำแต่ละ Block นานขึ้นตามไปด้วย ทั้งนี้ การกำหนดความยากในการขุดอาจจะขึ้นอยู่กับการออกแบบระบบที่เราจะนำไปใช้งานด้วย อย่างหลายระบบ เช่น Private Blockchain มีการกำหนดโหนดที่สามารถขุดได้อยู่แล้ว อาจจะใช้ค่า Target ที่สามารถคำนวนออกมาได้รวดเร็วหน่อย เพื่อความรวดเร็วในการประมวล Block นั่นเอง

แต่เนื่องจาก PoW นั้นใช้พลังงานคำนวนค่อนข้างมาก และส่งผลให้การยืนยันข้อมูลในแต่ละ Block นั้นช้าไปด้วย ปัจจุบันจึงเริ่มมีแนวคิดและระบบยืนยันข้อมูลขึ้นมาอีกหลายแบบ เพื่อแก้ปัญหาความช้าของ PoW เช่น Proof Of Stake เป็นต้น

Distribution System with Blockchain

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

ซึ่งตัว Blockchain Network นั้นมีทั้งระบบที่ทำแบบ Public ไปเลย เช่น Bitcoin / Etheruem ซึ่งทุกคนสามารถเข้ามาตั้ง Node เพื่อบันทึกข้อมูลในระบบได้ และยังมี Blockchain อีกแบบที่คนสร้างเลือกที่จะทำเป็นระบบภายใน เช่น ระบบ Blockchain ที่ใช้กันระหว่างธนาคาร เป็นต้น

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

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

References

--

--