วิทยาศาสตร์ยอดนิยม: ที่อยู่เครือข่ายใน Ethereum
หมายเหตุบรรณาธิการ: บทความนี้มาจากUnitimes(ID:Uni-times)หมายเหตุบรรณาธิการ: บทความนี้มาจาก
หลังจากพูดคุยกับ Felix Lange ฉันคิดว่าการเขียนบทความนี้เกี่ยวกับที่อยู่เครือข่ายประเภทต่างๆ ที่พบในระบบนิเวศ Ethereum และความแตกต่างนั้นสมเหตุสมผล ฉันยังมีความเข้าใจผิดบางอย่างในความเข้าใจของฉันเกี่ยวกับพวกเขา ดังนั้นฉันคิดว่ามันจะมีประโยชน์ที่จะอธิบายพวกเขา
ชื่อเรื่องรอง
หลายที่อยู่ (Multiaddr)
เริ่มกันที่ multiaddr แรกสุด (Multiaddr[1]) ที่เก็บถาวรหรือตามเวลาที่ส่ง Multiaddress เป็นส่วนหนึ่งของโครงการ Multiformats ของ Protocol Labs หลายรูปแบบเป็นข้อกำหนดต่างๆ ของค่าที่อธิบายตนเองโดยพื้นฐานแล้ว คุณอาจเคยได้ยินเกี่ยวกับพวกเขาแล้ว เนื่องจากมีการใช้อย่างแพร่หลายในโครงการ libp2p, IPFS และ Protocol Labs อื่นๆ
/ip4/127.0.0.1/udp/1234
การแสดงหลายแอดเดรสมีอยู่สองแบบ: หนึ่งคือการแทนไบนารีที่ใช้เมื่อจัดเก็บหรือส่ง อีกแบบหนึ่งคือรูปแบบที่อ่านได้ซึ่งจัดเตรียมให้กับผู้ใช้, }). การแทนเลขฐานสองก็เหมือนกัน - มีอาร์เรย์ไบต์สำหรับคีย์และอีกอันสำหรับค่า คีย์สามารถแมปจากรูปแบบที่มนุษย์อ่านได้ไปเป็นรหัสผ่านตารางโปรโตคอล [2]
enode
ชื่อเรื่องรอง
enode://6f8a80d6ad92a0@10.3.58.6:30303?discport=30301
ระบบโหนดใช้เพื่อแสดง URL enode:// ตามด้วย ID โหนดที่เข้ารหัสเลขฐานสิบหก ถัดไป สัญลักษณ์ @ หมายถึงโฮสต์ ซึ่งต้องเป็นที่อยู่ IP พอร์ต TCP จะแสดงรายการหลังจากโฮสต์ ในกรณีของเราคือ 30303 หากพอร์ตของ UDP และ TCP แตกต่างกัน สามารถระบุพอร์ต UDP ได้โดยการเพิ่มพารามิเตอร์ discport ที่ส่วนท้าย
ENR
ชื่อเรื่องรอง
ในที่สุดเราก็มาถึง ENR[4] (Ethereum Node Record) ENR นั้นน่าสนใจเพราะใช้คุณสมบัติจากทั้งสองประเภทแรก (หลายที่อยู่และอีโหนด URL) ทำให้เป็นแบบทั่วไป แรงจูงใจหลักของ ENR คือการอนุญาตให้มีข้อมูลเพิ่มเติมในระหว่างกระบวนการส่งต่อ ดังนั้นจึงเป็นการแนะนำเรกคอร์ดของโหนด เร็กคอร์ดของโหนดมีการรับรองตนเอง และโหนดสามารถระบุตนเองผ่านลายเซ็น บันทึกเหล่านี้แสดงเป็นรายการ RLP [5] - ฉันจะไม่ลงรายละเอียดที่นี่ แต่ขอกล่าวถึงเล็กน้อยว่า RLP เป็นรูปแบบการทำให้เป็นอนุกรมที่ใช้โดย Ethereum
ระเบียนโหนดประกอบด้วยลายเซ็น หมายเลขซีเรียล และฟิลด์ที่ระบุถึงกลไกการรับรองความถูกต้องที่ใช้ในการสร้างและตรวจสอบลายเซ็น สุดท้าย ส่วนที่เหลือของบันทึกประกอบด้วยคู่ของคีย์-ค่าโดยพลการ ซึ่งสามารถมีสิ่งต่างๆ เช่น ข้อมูลการเชื่อมต่อ EIP กำหนดคีย์บางตัวด้วยความหมายที่กำหนดไว้ล่วงหน้า เช่น ip ซึ่งเป็นที่อยู่ IPv4 ของโหนดที่แสดงด้วย 4 ไบต์
ลายเซ็นใช้เพื่อตรวจสอบบันทึกโดยตรวจสอบให้แน่ใจว่ารหัสสาธารณะที่ส่งผ่านนั้นเป็นรหัสที่ใช้ในการสร้างลายเซ็น
หากข้อมูลประจำตัวเดียวกันออกเรกคอร์ดที่แตกต่างกัน 2 รายการ หมายเลขซีเรียลสามารถใช้เพื่อแก้ไขข้อขัดแย้ง: เรกคอร์ดที่มีหมายเลขซีเรียลสูงกว่าจะถูกระบุ
รูปแบบนี้รองรับอนาคต สามารถเพิ่มคีย์ใหม่ได้แม้ว่าบางไคลเอ็นต์จะแยกวิเคราะห์ไม่ได้ และสามารถเพิ่มกลไกการรับรองความถูกต้องใหม่เพื่อตรวจสอบลายเซ็นได้
Eth 2.0
ชื่อเรื่องรอง
ทีนี้มาดู Eth2.0 กัน ก่อน Eth2.0 ไม่เคยมีที่อยู่ใน Ethereum มากนัก แต่ตอนนี้มีความสำคัญมาก ทำไม เนื่องจาก Eth2.0 ใช้ libp2p และ libp2p ใช้หลายที่อยู่เพื่อระบุโหนด
แล้วเราจะจัดการกับสถานการณ์นี้อย่างไร? ข้อกำหนด P2P [6] ของ Eth2.0 แสดงวิธีแก้ปัญหาสองวิธี:
ที่อยู่หลายแห่งสามารถส่งออกจาก ENR
เนื่องจาก ENR สามารถเพิ่มคีย์ได้ตามอำเภอใจ แอดเดรสหลายรายการจึงรวมอยู่ใน ENR ได้


