ทำให้ระบบ blockchain จึงมีความปลอดภัยที่สูงมากกกกก (ถ้าคนอยู่ในระบบเยอะนะ 🤣)

Table of contents

Nonthawit
CEO | Engineer | Designer
VIEW
10.2k
CATEGORY
LAST UPDATED
August 29, 2018
สำหรับบล็อกนี้จะอยู่ใน Blockchain Fundamental Series และเป็นการปูทางก่อนเข้าเรื่อง “การคำนวนค่าต่างๆของ Blockchain ในระบบ Proof of work” นั่นเอง ซึ่งเราต้องมาทำความเข้าใจกันก่อนว่า Blockchain ในระบบ Proof of work มีการทำงานอย่างไรก่อนจะเข้าส่วนของการคำนวน
จากบล็อกที่แล้วเราพูดถึง block หรือข้อมูลที่เก็บบน Blockchain หน้าตาเป็นแบบไหนตัวอย่างเป็นอย่างไร ใครยังไม่อ่านแนะนำให้เข้าไปอ่านกันก่อน
งั้นบล็อกเรามาลุยเรื่อง Blockchain กันล้วนๆ 😎

Blockchain คือ database ประเภทหนึ่ง ซึ่งลักษณะของ database นี้คือการนำ block มาต่อกันเป็น chain เราจึงเรียกมันว่า Blockchain โดยใช้เลข hash อ้างอิงตามภาพด้านบน
จริงๆนิยามของ Blockchain ง่ายๆแค่นี้แหละ ส่วนสำคัญคือหัวข้อถัดไปมากกว่า
แรกสุดเมื่อ Blockchain ใดๆเกิดขึ้นบนโลกใบนี้ จะมีต้องมี block หนึ่งเกิดขึ้นเสมอ คือ
「 Genesis block 」
เป็น block แรกสุดที่เกิดขึ้นบนสาย Blockchain สร้างขึ้นเพื่อนำไปอ้างอิงใน block ต่อๆไป

ตัวอย่าง Genesis block เช่น

พอ Blockchain ได้สร้าง Genesis block มาเรียบร้อย
ก็รอ transaction จากผู้ใช้ไหลเข้ามา
ซึ่ง transaction ในที่นี้คือข้อมูลที่วิ่งอยู่บน Blockchain เช่น Bitcoin transaction คือข้อมูลการโอน BTC ของผู้ใช้ เป็นต้น และเมื่อผ่านไประยะเวลาหนึ่งจะมีคนนำ transaction ที่เกิดขึ้น(pending transaction) มารวบเป็น block
โดยระยะเวลาขึ้นอยู่กับแต่ละ Blockchain กำหนด เช่น Bitcoin: บอกเราว่า ทุกๆ 10 นาที(โดยประมาณ) Block จะถูกสร้างขึ้น โดยขนาดจะไม่เกิน 1MB
tx1 (1KB) & tx2 (3KB) & ... & tx10000 (1.3KB) ==> Block (< 1 MB)
NOTE: tx = transaction

คำตอบคือ
Miner ที่ชนะการแข่ง verify transaction กับ Miner คนอื่นๆ
กระบวนการแข่งนั้นเราเรียกบ้านๆว่า “การขุดเหรียญ” นั่นเอง
คำตอบคือ
Miner จะแข่งสุ่มค่า hash ที่ได้จากการเอา data + nonce
โดยการสุ่มค่า nonce ไปเรื่อยๆที่อยู่ใน block จนกว่าจะได้น้อยกว่า “ค่า target” ที่แต่ละ Blockchain กำหนด ใครเจอก่อนก็ชนะไป


วิธีแบบนี้เราเรียกกันว่า
Proof of Work (PoW) นั่นเอง
หรือ
การ verify transaction แบบ PoW ก็ได้
เพราะใช้แรง hardware ค่อนข้างหนักหน่วงในการแข่งกับ miner คนอื่นๆ

NOTE: ณ ปัจจุบันมีการ verify transaction อยู่ 4 ตัวหลักๆ คือ Proof of Work (PoW) / Proof of Stake (PoS) / Proof of Importance (PoI) / Proof of Capacity (PoC) แต่เราขอ focus แค่ PoW กันก่อน
พอได้ผู้ชนะของสังเวียนนี้ miner คนนั้นจะได้มีสิทธิ์ตรวจสอบ list ของ transaction นั้นว่ามีที่ไปที่มาถูกต้องทุก transaction หรือไม่ และสร้างเป็น block ในเวลาต่อมา ซึ่งการตรวจสอบความถูกต้องใช้เวลาแค่พริบตาเดียว เป็นที่มาว่าทำไม Blockchain ต้องตั้งโจทย์อะไรซักอย่างขึ้นมาเพื่อให้ miner แข่งกัน ยิ่งมีคนแข่งกันมาก Blockchain นั่นก็ยิ่งปลอดภัยมากเท่านั้น
ใครมีเครื่องที่หาค่า hash ได้เร็วกว่าก็ มีโอกาสมากกว่าที่สุ่มเจอค่า hash ได้เร็วกว่า และสามารถหยิบ list ของ transactions มา verify ได้ เป็นที่มาอีกว่าทำไมพวก miner ถึงซื้อเครื่อง hardware แรงๆมากัน ก็เพื่อประการนี้นี่แหละ
คำตอบ ขอไว้เล่าบล็อกหน้าเนาะเพราะค่อนข้างยาว 😎
เมื่อ verify block เสร็จเรียบร้อย miner จะนำ block ไปต่อท้าย block ก่อนหน้าเรื่อยๆ โดยแนบค่า hash (ที่ได้จากการแข่ง) เป็นค่าอ้างอิงในแต่ละ block แบบนี้

คำตอบคือ reward หรือรางวัลนั่นเอง แต่ในรูปแบบใดก็ต้องแล้วแต่ blockchain นั้นๆ เช่น
Bitcoin บอกว่า
bitcoin_reward = block_reward + (transaction_fee x transaction_count)
block_reward ขึ้นอยู่กับจำนวน bitcoin ที่ยังไม่ถูกปล่อยออกมาด้วย
ตัวระบบจึงจ่ายน้อยลงเรื่อยๆ ณ ปัจจุบันระบบจะจ่าย reward อยู่ที่ 12.5 btc
จากกราฟด้านล้างเส้นสีแดงคือ Bitoin ที่ถูกปล่อยออกมาเวลาผ่านไป 21,000,000 จะค่อยหมดลงจนเข้าใกล้ 0
ส่วนเส้นสีฟ้าคือ block reward ที่จะจ่ายให้ miner จะสังเกตเห็นว่าระบบจะจ่ายน้อยลงเรื่อยๆเพราะ Bitcoin ส่วนกลางเหลือน้อยลงนั่นเอง

ส่วนช่องทางการรับรางวัล miner จะได้รับ รางวัลผ่าน coinbase transaction ซึ่งเป็น transaction แรกสุดของในแต่ละ block

เพราะฉะนั้นทุก block ของ BTC จะมี coinbase transaction เสมอ เพื่อจ่าย reward ให้กับ miner
NOTE: coinbase transaction vs coinbase
คำตอบคือ คือ คอมพิวเตอร์ทุกเครื่องที่ที่รันซอฟแวร์ของ blockchain นั้นๆ (เราจะเรียกมันว่า node)

ทุกครั้งที่มี transaction เกิดขึ้นบน node ใดๆบนโลก node นั้นจะทำการ broadcast transaction ไปให้ทุกๆ node ที่อยู่ใน network เป็น chain ไปเรื่อยๆในลักษณะของ peer-to-peer network
ซึ่ง node ที่ทำตัวเป็น miner จะทำการเก็บ transaction ลงใน transactions pool เพื่อรอการการ verify สถานะของ transaction จึงเป็น unconfirmed ที่เราเห็นกันบ่อยๆในเว็บ exchange ต่างๆ
เมื่อ miner เริ่มทำการแข่งกัน verify… จะมี miner ที่สามารถทำสำเร็จก่อน และมีสิทธิ์นำ transaction ใน transactions pool ไปสร้างเป็น block ใหม่พร้อมกับแปะ hash แนบไปด้วย (ตามที่เล่าให้ฟังข้างบน) และ broadcast block ไปหาทุก node อีกครั้งเพื่อให้แต่ละ node ตรวจสอบ transaction ทั้งหมดที่อยู่ใน block อีกครั้ง เพื่อกัน miner แก้ไขข้อมูล
ถ้าทุกอย่างเรียบร้อย block นั้นก็จะถูกนำไปใส่ไว้ในlocal blockchain ทุกๆ node ต่อเป็น chain จนเสร็จ
สถานะของ transaction ที่อยู่ใน block จะถูกเปลี่ยนเป็น confirmed แค่นี้ทุกอย่างก็เป็นอันจบการทำงานของ Blockchain
NOTE: ดังนั้นหน้าที่ของ miner จะมีอยู่ 2 หน้าที่ด้วยกันคือ
1. ฟัง transaction ใหม่แล้วนำมาใส่ไว้ใน transactions pool
2. แข่ง verify transaction และนำ transaction มาสร้าง block
คำตอบคือ จริงทำได้นะ แต่ค่า hash ของ block จะเปลี่ยนไปทันทีและ block ถัดๆไปก็จะโดนไปด้วยเช่นกัน ทำให้ block ทั้งหมดต้องถูก verify ใหม่ แต่กว่าจะถึงขั้นตอนการ verify ใหม่ได้ก็ต้องโดน node อื่น reject ก่อนแน่นอนตามรูป

สรุปคือ ข้อมูลใน Blockchain จะไม่สามารถูกแก้ไขได้ (ยกเว้นโดน 51% attack)
NOTE: ระบบจะไม่มีความปลอดภัยก็ต่อเมื่อคุณสามารถถือครองระบบได้มากว่า 51% (เราเรียกการโจมตีแบบนี้ว่า 51 % Attack) ก็สามารถจะเปลี่ยนข้อมูลใน transaction ได้ แต่ในความเป็นจริงยากมากๆๆๆๆ
ยกตัวอย่างเช่น ถ้าระบบ Blockchain หนึ่งมีอยู่ 1000 node คุณต้องเข้าไป hack node อย่างน้อย 501 node และเปลี่ยนข้อมูลใน transaction พร้อมๆกัน
เพราะ node อื่นอีกเป็นล้านๆ ที่อยู่บน blockchain
ถือ copy ของ blockchain ที่เดียวกันอยู่
ถ้าอยู่ๆ node อื่นได้รับ block ที่มีการแก้ไขมาก็สามารถไล่เช็คและ reject block นั้นได้แบบสบายๆเลย

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

อย่าลืม share ให้มนุษย์ Blockchain คนอื่นด้วยหละ 😎
KNOWLEDGE


Nonthawit
CEO | Engineer | Designer
เข้าใจการทำ Selector แบบ Ripple effect


Nonthawit
CEO | Engineer | Designer
20 สิ่ง ที่ได้หลังจากเป็น Android developer ที่ Nextzy 3 เดือน
บทความนี้แชร์ประสบการณ์ 3 เดือนแรกของการทำงานเป็น Android Developer ที่ Nextzy ครอบคลุมทั้งด้าน technical เช่น MVP architecture, Android Lifecycle, ProGuard, Git workflow และการเขียน Unit Test รวมถึงด้าน soft skill อย่างการสื่อสารกับทีม, การแชร์ความรู้, และการเขียนโค้ดให้ readable และยืดหยุ่น นอกจากนี้ยังสะท้อนวัฒนธรรมองค์กรที่เน้นทีมเวิร์ค การ review โค้ด และบรรยากาศการทำงานที่สนุกสนาน ซึ่งล้วนช่วยลด learning curve และพัฒนาทักษะได้เร็วกว่าการเรียนรู้คนเดียว
![[Tip/Trick] วิธีติดต่อกับ WebView ผ่าน JavascriptInterface มันเท่มาก](https://image.nextzy.tech/1_Aleix_TFC_7yz_Qh_Q_Sx_GV_Rqxw_a29e28219a.png)

Nonthawit
CEO | Engineer | Designer
[Tip/Trick] วิธีติดต่อกับ WebView ผ่าน JavascriptInterface มันเท่มาก