Longest Chain คืออะไร?

longest-chain-cover-photo
longest-chain

ห่วงโซ่ที่ยาวที่สุด(Longest Chain) จะได้รับการยอมรับจาก Node แต่ละ Node ให้เป็นเวอร์ชั่นที่ถูกต้องของ Blockchain

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

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

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

ห่วงโซ่ที่ยาวที่สุด(Longest Chain) คืออะไร?

Longest Chain คือห่วงโซ่ที่ยาวที่สุดของบล็อกที่ใช้ความพยายามในการขุดบล็อกมากที่สุด 

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

02-block-energy

การเพิ่มบล็อกใหม่จำเป็นต้องใช้พลังงาน

ดังนั้น Blockchain ที่มีบล็อกข้างในมากกว่าจะทำงานมากกว่าในการขุดมากกว่าห่วงโซ่อื่นๆ ที่มีบล็อกอยู่ข้างในน้อยกว่าและตามกฎแล้ว Node มักจะเลือก”ห่วงโซ่ที่ยาวกว่า” มากกว่า “ห่วงโซ่ที่สั้นกว่า” 

ผลก็คือ Node จะเลือกใช้งานห่วงโซ่ที่ใช้พลังงานในการขุดมากที่สุด นี้คือสิ่งที่เรามักจะอ้างถึงเมื่อเรากล่าวว่า “ห่วงโซ่ที่ยาวที่สุด”

การตัดสินใจส่วนใหญ่จะเกิดขึ้นที่ห่วงโซ่ที่ยาวที่สุด ซึ่งมีการลงแรงทำงานในระบบเครือข่ายแบบ Proof of work มากที่สุด – Satoshi Nakamoto

ห่วงโซ่ที่ยาวที่สุดก็คือสายที่มีบล็อกมากที่สุดใช่หรือไม่?

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

ยกตัวอย่างเช่น ภายในช่วงค่าความยาก(Difficulty) เดียวกัน ทุกๆ บล็อกจะต้องการความพยายามที่เท่ากันในการขุด และจากนั้นก็จะเพิ่ม “งาน (Work)” ที่เท่ากันเข้าไปบนห่วงโซ่

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

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

difficulty-adjustment

ตอนนี้ คุณจะเห็นว่าแต่ละ Node จะเลือกห่วงโซ่ที่มีการทำงานมากที่สุด ไม่ใช่ห่วงโซ่ที่มีบล็อกมากกว่าแต่ไม่ได้ต้องการการทำงานมากกว่าในการสร้าง ตัวอย่างเช่น หากเวอร์ชั่นทั้งสองของ Blockchain ยืดช่วงของความยาก (Difficulty) ไปอย่างทวีคูณ Node จะเลือกห่วงโซ่ที่มีการสะสมการทำงานบนเครือข่าย (Chainwork) มากที่สุด ไม่ใช่ห่วงโซ่ที่มีบล็อกมากที่สุด

difficulty-adjustment-chainwork

สรุป  “ห่วงโซ่ที่ยาวที่สุด” จะหมายถึง Blockchain ที่มีการใช้การทำงานในการขุดมากที่มากที่สุด แม้ส่วนใหญ่แล้วจะเป็นห่วงโซ่ที่มีจำนวนบล็อกอยู่ข้างในมากที่สุดก็จริง แต่จะเจาะจงและถูกต้องมากกว่าหากจะกำหนดว่าเป็นห่วงโซ่ที่มีการทำงานในการขุดมากที่สุด 

เราจะคำนวณห่วงโซ่ที่ยาวที่สุดได้อย่างไร?

ห่วงโซ่ที่ยาวที่สุดจะวัดโดยเมตริกที่เรียกว่า “การทำงานของห่วงโซ่ (Chainwork)”

การทำงานของห่วงโซ่ (Chainwork) คือตัวเลขทั้งหมดของ Hash ที่ถูกประมาณการว่ามีความจำเป็นที่จะต้องสร้างห่วงโซ่ที่มีการใช้งานอยู่ปัจจุบัน  – Pieter Wuille

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

ตัวเลขเฉลี่ยค่าประมาณการของเลข Hash สำหรับแต่ละบล็อกขึ้นอยู่กับ ณ ขณะนั้นมีเป้าหมาย (Target) เท่าไหร่

อธิบายการคำนวณการทำงานของห่วงโซ่ (Chainwork)

กระบวนการการขุดนี้เกี่ยวข้องกับการ Hash ของหัวบล็อก (Block Header)

ทุกครั้งที่คุณทำการ Hash, Hash Function จะปล่อยเลข 256-Bit ที่สามารถอยู่ตรงไหนก็ได้ระหว่าง 0 และ

0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

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

0x00000000ffff0000000000000000000000000000000000000000000000000000

เพราะฉะนั้นเพื่อจะรู้ว่าคุณต้องใช้เลข Hash เท่าไหร่ (โดยเฉลี่ย) เพื่อที่จะอยู่ต่ำกว่าค่า คุณจะต้องหารตัวเลขที่เยอะที่สุดที่มีอยู่ด้วยตัวเลขที่คุณอยากจะอยู่ต่ำกว่า

0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff /
0x00000000ffff0000000000000000000000000000000000000000000000000000
= 0x0100010001

นี้หมายความว่าคุณจะต้อง hash โดยเฉลี่ยทั้งหมด 0x0100010001 (4295032833) เพื่อที่จะได้ผลลัพธ์ต่ำกว่าค่าเป้าหมาย (Target) และนี่ก็คือการทำงานของห่วงโซ่ (Chainwork) สำหรับบล็อกแรก

ดังนั้นเพื่อที่จะหาการทำงานของห่วงโซ่ (Chainwork) ทั้งหมดในห่วงโซ่ คุณจำเป็นที่จะต้องรู้ค่าประมาณการเลข Hash ของแต่ละบล็อกแต่เพิ่มมันเข้าไปให้หมด

ตัวอย่างที่ง่ายขึ้น

สมมุติว่าคุณสร้างตัวเลขแบบสุ่มขึ้นมาระหว่าง 1 ถึง 100 ขึ้นมา และคุณหวังว่าจะสร้างเลขแบบสุ่มนี้ให้ได้ 5 หรือต่ำกว่านั้น โดยเฉลี่ยแล้ว คุณจะต้องสร้างตัวเลขกี่ตัวเลขก่อนที่คุณจะได้ผลลัพธ์ที่ต่ำกว่าเป้าหมาย(Target)  ตามที่ต้องการ?

100 / 5 = 20

เพราะฉะนั้น เฉลี่ยแล้วคุณจะต้องสร้างตัวเลขประมาณ 20 ตัวเลขเพื่อที่จะได้ตัวเลขที่ต่ำกว่า

นี้คือการคำนวณแบบเดียวกับที่ใช้งานในเครือข่าย Bitcoin แต่ Bitcoin เป็นตัวเลขที่ใหญ่กว่า (และมักจะปรากฏในรูปแบบตัวเลขฐานสิบหก(hexadecimal))

ทำไม Node ต้องเลือกห่วงโซ่ที่ยาวที่สุด?

การที่ให้ Node เลือกห่วงโซ่ที่ยาวที่สุดจะทำให้คอมพิวเตอร์แต่ละเครื่องในเครือข่ายกระจายข้อมูลแบบเดียวกันบน Blockchain 

นี้คือตัวอย่าง 2 ข้อว่าทำไมกฎนี้ถึงมีประโยชน์

1. แก้ปัญหาข้อมูลขัดแย้งกันเมื่อมีบล็อกสองบล็อกถูกขุดในเวลาเดียวกัน

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

แต่ละ Node จะวางบล็อกแรกที่พวกมันได้รับไว้ด้านบนสุดของ Blockchain

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

two-blocks-mined-reorg

Node เต็มใจที่จะทิ้งห่วงโซ่ที่สั้นกว่าเพื่อเลือกห่วงโซ่ที่ยาวกว่า เราเรียกเหตุการณ์นี้ว่าการปรับโครงสร้างของห่วงโซ่ 

เพราะฉะนั้นแม้ว่า Node จะสามารถไม่ยินยอมขึ้นมาในเวลาใดก็ได้ (ขึ้นอยู่กับการขุดที่ไม่สามารถทำนายได้และความรวดเร็วของการกระจายข้อมูลข้ามเครือข่าย) การเลือกทำงานกับห่วงโซ่ที่ยาวที่สุดหมายความว่า Node มักจะยินยอมข้อมูลบน Blockchain เดียวกันในท้ายที่สุด 

2. ปกป้องบล็อกที่ถูกขุดมาแล้วบน Blockchain

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

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

คุณจะต้องใช้พลังงานจากนักขุด (Miner) ส่วนใหญ่ทั้งหมดในการเปลี่ยนสิ่งที่นักขุดทั้งหมดกำลังทำอยู่และสร้างห่วงโซ่ที่ยาวที่สุดขึ้นมาใหม่ (รู้จักกันใน การโจมตี 51%)

ผลก็คือ ความพยายามทั้งหมดของนักขุด (Miner) รวมกันเพื่อที่จะขยายห่วงโซ่เดียวกันและปกป้องบล็อกที่ถูกขุดขึ้นมาเรียบร้อนแล้วจากการถูกแทนที่โดยนักขุด(Miner) เพียงหน่วยเดียว 

คิดซะว่าเป็นความพยายามร่วมกันในการสร้างห่วงโซ่ขึ้นมา – Satoshi Nakamoto 

ทำไมนักขุด (Miner) ต้องทำงานกับห่วงโซ่ที่ยาวที่สุด?

เพราะว่านักขุดจะได้รับรางวัลจากการขุดบล็อก(Block Reward) หากพวกเขาสามารถขุดบล็อกได้ 

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

รางวัลจากการขุดบล็อก(Block Reward) สามารถนำมาใช้ได้เมื่อมาจากห่วงโซ่ที่ยาวที่สุดเท่านั้น 

จะเป็นอย่างไรหากรายการธุรกรรมนั้นไม่ได้อยู่บนห่วงโซ่ที่ยาวที่สุด?

รายการธุรกรรมภายในบล็อกที่ไม่ได้อยู่บนห่วงโซ่ที่ยาวที่สุดจะไม่ได้รับการยอมรับ

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

invalid-transaction

Bitcoin ในรายการธุรกรรมที่ไม่ได้เป็นส่วนหนึ่งของห่วงโซ่ที่ยาวที่สุดจะไม่อาจนำมาใช้งานได้

เพราะฉะนั้น มีเพียงแค่รายการธุรกรรมที่อยู่ในห่วงโซ่ที่ยาวที่สุดเท่านั้นจะถูกพิจารณาให้อยู่ในประวัติรายการธุรกรรมที่ถูกต้อง และรายการธุรกรรมใดๆ ก็ตามที่อยู่ภายนอกก็จะไม่ถูกนำมาพิจารณา 

สรุป

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

ห่วงโซ่ที่ยาวที่สุด(Longest Chain) มักจะหมายถึงห่วงโซ่ที่มีบล็อกต่อเนื่องกันในจำนวนมากที่สุด แต่จริงๆ แล้วจะหมายถึงห่วงโซ่ที่มีการทำงานมากที่สุดตามระดับความยาก(Difficulty) ในการขุดบล็อกแต่ละบล็อก

Commands

คุณสามารถดูค่าการทำงานบนเครือข่าย (Chainwork) ด้วยตัวเองโดยการใช้คำสั่ง bitcoin-cli

bitcoin-cli getblockchaininfo

ดูการทำงานบนเครือข่าย (Chainwork) ทั้งหมดสำหรับห่วงโซ่ที่ยาวที่สุดปัจจุบัน

$ bitcoin-cli getblockchaininfo                                                         
{
  "chain": "main",
  "blocks": 599501,
  "headers": 599767,
  "bestblockhash": "0000000000000000000cb6141c8076e24f3a1799eef37201634ef392197668f3",
  "difficulty": 13008091666971.9,
  ...
  "chainwork": "0000000000000000000000000000000000000000094b1874d991d4e1fc51005a",
  ...
}
bitcoin-cli getblock [blockhash]

ดูการทำงานบนเครือข่าย (Chainwork) สำหรับบล็อกไหนก็ตามบนห่วงโซ่ 

$ bitcoin-cli getblock 00000000b8980ec1fe96bc1b4425788ddc88dd36699521a448ebca2020b38699
{
  "hash": "00000000b8980ec1fe96bc1b4425788ddc88dd36699521a448ebca2020b38699",
  ...
  "height": 12345,
  ...
  "bits": "1d00ffff",
  "difficulty": 1,
  "chainwork": "0000000000000000000000000000000000000000000000000000303a303a303a",
  ...
}

Source: learnmeabitcoin.com/technical/longest-chain