ห่วงโซ่ที่ยาวที่สุด(Longest Chain) คืออะไร?
ห่วงโซ่ที่ยาวที่สุดก็คือสายที่มีบล็อกมากที่สุดใช่หรือไม่?
เราจะคำนวณห่วงโซ่ที่ยาวที่สุดได้อย่างไร?
ทำไม Node ต้องเลือกห่วงโซ่ที่ยาวที่สุด?
ทำไมนักขุด (Miner) ต้องทำงานกับห่วงโซ่ที่ยาวที่สุด?
จะเป็นอย่างไรหากรายการธุรกรรมนั้นไม่ได้อยู่บนห่วงโซ่ที่ยาวที่สุด?
ห่วงโซ่ที่ยาวที่สุด(Longest Chain) จะได้รับการยอมรับจาก Node แต่ละ Node ให้เป็นเวอร์ชั่นที่ถูกต้องของ Blockchain
กฎที่ Node เลือกใช้ห่วงโซ่ที่ยาวที่สุดของบล็อกจะทำให้ทุก Node บนเครือข่ายยอมรับว่า Blockchain เป็นอย่างไรและจากนั้นก็จะยอมรับประวัติรายการธุรกรรมที่เคยเกิดขึ้น
ในทางกลับกัน ก็หมายความว่าคอมพิวเตอร์แต่ละเครื่องที่มีการตัดสินใจด้วยตัวเองจะสามารถมีไฟล์ข้อมูลเดียวกันเสมอแม้ว่าจะอยู่คนละซีกโลก
เครือข่ายที่ทำงานแบบ Proof of work จะช่วยแก้ไขปัญหาข้อมูลซ้ำเมื่อข้อมูลเล่านั้นเกิดขึ้นในเวลาเดียวกัน และรับรู้ข้อมูลระหว่างเครือข่ายทั่วโลกโดยไม่จำเป็นต้องเชื่อใจใคร – Satoshi Nakamoto
ห่วงโซ่ที่ยาวที่สุด(Longest Chain) คืออะไร?
Longest Chain คือห่วงโซ่ที่ยาวที่สุดของบล็อกที่ใช้ความพยายามในการขุดบล็อกมากที่สุด
สรุปสั้นๆ ก็คือ ในการเพิ่มบล็อกเข้าไปบน Blockchain คุณจำเป็นจำต้องใช้กำลังประมวลผลซึ่งหมายความว่าทุกๆ บล็อกบน Blockchain จะต้องใช้พลังงานมากพอเพื่อที่จะไปถึงตรงนั้น
การเพิ่มบล็อกใหม่จำเป็นต้องใช้พลังงาน
ดังนั้น Blockchain ที่มีบล็อกข้างในมากกว่าจะทำงานมากกว่าในการขุดมากกว่าห่วงโซ่อื่นๆ ที่มีบล็อกอยู่ข้างในน้อยกว่าและตามกฎแล้ว Node มักจะเลือก”ห่วงโซ่ที่ยาวกว่า” มากกว่า “ห่วงโซ่ที่สั้นกว่า”
ผลก็คือ Node จะเลือกใช้งานห่วงโซ่ที่ใช้พลังงานในการขุดมากที่สุด นี้คือสิ่งที่เรามักจะอ้างถึงเมื่อเรากล่าวว่า “ห่วงโซ่ที่ยาวที่สุด”
การตัดสินใจส่วนใหญ่จะเกิดขึ้นที่ห่วงโซ่ที่ยาวที่สุด ซึ่งมีการลงแรงทำงานในระบบเครือข่ายแบบ Proof of work มากที่สุด – Satoshi Nakamoto
ห่วงโซ่ที่ยาวที่สุดก็คือสายที่มีบล็อกมากที่สุดใช่หรือไม่?
ดูเหมือนว่าจะเป็นเช่นนั้น แต่จริงๆ แล้วสิ่งที่ต้องการมากที่สุดก็คือการทำงานในการขุดที่มากที่สุด ซึ่งไม่จำเป็นต้องมีบล็อกมากที่สุดเสมอไป คุณจะเห็นว่าค่าความยาก (Difficulty) เปลี่ยนแปลงไป หมายความว่าบล็อกบางบล็อกอาจจะมีการทำงานในการขุดมากกว่าบล็อกอื่นๆ
ยกตัวอย่างเช่น ภายในช่วงค่าความยาก(Difficulty) เดียวกัน ทุกๆ บล็อกจะต้องการความพยายามที่เท่ากันในการขุด และจากนั้นก็จะเพิ่ม “งาน (Work)” ที่เท่ากันเข้าไปบนห่วงโซ่
แต่ละบล็อกจะต้องลงไปต่ำกว่าค่าเดิมที่ตั้งเป้า (Target) ไว้เพื่อที่จะถูกเพิ่มเข้าไปในห่วงโซ่
อย่างไรก็ตาม หากความยากเพิ่มขึ้น (เพราะว่าบล็อกถูกขุดขึ้นมาเร็วกว่าค่าเฉลี่ยๆ 10 นาที) บล็อกหลังจากที่ปรับค่าความยาก(Difficulty) ใหม่จะต้องใช้การทำงานมากกว่าในการขุด Blockchain นั่นเอง
ตอนนี้ คุณจะเห็นว่าแต่ละ Node จะเลือกห่วงโซ่ที่มีการทำงานมากที่สุด ไม่ใช่ห่วงโซ่ที่มีบล็อกมากกว่าแต่ไม่ได้ต้องการการทำงานมากกว่าในการสร้าง ตัวอย่างเช่น หากเวอร์ชั่นทั้งสองของ Blockchain ยืดช่วงของความยาก (Difficulty) ไปอย่างทวีคูณ Node จะเลือกห่วงโซ่ที่มีการสะสมการทำงานบนเครือข่าย (Chainwork) มากที่สุด ไม่ใช่ห่วงโซ่ที่มีบล็อกมากที่สุด
สรุป “ห่วงโซ่ที่ยาวที่สุด” จะหมายถึง Blockchain ที่มีการใช้การทำงานในการขุดมากที่มากที่สุด แม้ส่วนใหญ่แล้วจะเป็นห่วงโซ่ที่มีจำนวนบล็อกอยู่ข้างในมากที่สุดก็จริง แต่จะเจาะจงและถูกต้องมากกว่าหากจะกำหนดว่าเป็นห่วงโซ่ที่มีการทำงานในการขุดมากที่สุด
เราจะคำนวณห่วงโซ่ที่ยาวที่สุดได้อย่างไร?
ห่วงโซ่ที่ยาวที่สุดจะวัดโดยเมตริกที่เรียกว่า “การทำงานของห่วงโซ่ (Chainwork)”
การทำงานของห่วงโซ่ (Chainwork) คือตัวเลขทั้งหมดของ Hash ที่ถูกประมาณการว่ามีความจำเป็นที่จะต้องสร้างห่วงโซ่ที่มีการใช้งานอยู่ปัจจุบัน – Pieter Wuille
เพื่อที่จะให้การทำงานของห่วงโซ่ (Chainwork) สามารถดำเนินการต่อไปได้ คุณเพียงแค่ต้องรู้ตัวเลข Hash ที่คุณต้องใช้ในการขุดแต่ละบล็อกในห่วงโซ่ จากนั้นก็เพิ่มพวกมันเข้าไป
ตัวเลขเฉลี่ยค่าประมาณการของเลข Hash สำหรับแต่ละบล็อกขึ้นอยู่กับ ณ ขณะนั้นมีเป้าหมาย (Target) เท่าไหร่
กระบวนการการขุดนี้เกี่ยวข้องกับการ 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 ตัวเลขเพื่อที่จะได้ตัวเลขที่ต่ำกว่า 5
นี้คือการคำนวณแบบเดียวกับที่ใช้งานในเครือข่าย Bitcoin แต่ Bitcoin เป็นตัวเลขที่ใหญ่กว่า (และมักจะปรากฏในรูปแบบตัวเลขฐานสิบหก(hexadecimal))
ทำไม Node ต้องเลือกห่วงโซ่ที่ยาวที่สุด?
การที่ให้ Node เลือกห่วงโซ่ที่ยาวที่สุดจะทำให้คอมพิวเตอร์แต่ละเครื่องในเครือข่ายกระจายข้อมูลแบบเดียวกันบน Blockchain
นี้คือตัวอย่าง 2 ข้อว่าทำไมกฎนี้ถึงมีประโยชน์
1. แก้ปัญหาข้อมูลขัดแย้งกันเมื่อมีบล็อกสองบล็อกถูกขุดในเวลาเดียวกัน
ตามข้อเท็จจริงที่ว่า Bitcoin ทำงานบนเครือข่ายดังกล่าว ก็มีความเป็นไปได้ว่าคอมพิวเตอร์ที่ทำงานแยกกันทั้งสองเครื่องอาจจะขุดบล็อกในเวลาเดียวกัน ในสถานการณ์นี้ ท้ายที่สุดแล้ว Node อื่นๆ ที่อยู่ในเครือข่ายจะไม่ยินยอมว่าบล็อกใดในสองบล็อกนี้จะอยู่บนสุดของ Blockchain
แต่ละ Node จะวางบล็อกแรกที่พวกมันได้รับไว้ด้านบนสุดของ Blockchain
อย่างไรก็ตาม สถานการณ์นี้สามารถแก้ไขได้โดยให้ Node ทำงานกับห่วงโซ่ที่ยาวที่สุด เพราะว่าบล็อกต่อไปที่จะถูกขุดขึ้นมาจะสร้างบนหนึ่งในสองบล็อกนี้ สร้างห่วงโซ่ที่ยาวที่สุดที่ Node ทุก Node จะมาทำงานด้วยอย่างมีความสุข
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 จะพิจารณาห่วงโซ่ที่เต็มไปด้วยประวัติรายการธุรกรรมที่ยาวที่สุดว่าถูกต้องเท่านั้น นอกจากนั้นจะถือว่าเป็นรายการธุรกรรมที่ไม่ถูกต้องทั้งหมด
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",
...
}