BTC
ETH
HTX
SOL
BNB
ดูตลาด
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt

ความเข้าใจเชิงลึกเกี่ยวกับกลไกการประมวลผลธุรกรรม Ethereum

บทความนี้มีประมาณ 5380 คำ การอ่านทั้งหมดใช้เวลาประมาณ 8 นาที
จากมุมมองของซอร์สโค้ด จะวิเคราะห์โดยสังเขปการออกแบบเชิงตรรกะของโครงสร้างข้อมูลกลุ่มธุ
สรุปโดย AI
จากมุมมองของซอร์สโค้ด จะวิเคราะห์โดยสังเขปการออกแบบเชิงตรรกะของโครงสร้างข้อมูลกลุ่มธุ

คำนำ

ชื่อระดับแรก"คำนำ"、"บล็อกเชนคือ"กระจายอำนาจ"ความไม่ไว้วางใจ"บัญชีแยกประเภทแบบกระจายรักษาโดยรวมโดยวิธีการ"แจกจ่าย"บัญชีแยกประเภท

บล็อกเชนเป็นสิ่งที่ขาดไม่ได้สำหรับการทำบัญชีโดยธรรมชาติ และการทำธุรกรรมก็กลายเป็นสิ่งที่มีความสำคัญสูงสุด เมื่อทราบว่า Chuangyu Blockchain Security Lab จะวิเคราะห์การออกแบบเชิงตรรกะของโครงสร้างข้อมูลกลุ่มธุรกรรม Ethereum การตั้งค่าค่าธรรมเนียมการทำธุรกรรม การสร้างธุรกรรม การรวมธุรกรรม ลายเซ็นธุรกรรม การยืนยันธุรกรรม ฯลฯ จากมุมมองของซอร์สโค้ด และผ่านธุรกรรม Fang การออกแบบกลไกความปลอดภัยเพื่อศึกษาการออกแบบกลไกความปลอดภัยโซ่สาธารณะ

ชื่อระดับแรก

แนวคิดพื้นฐาน

แผนผังของขั้นตอนการทำธุรกรรมมีดังนี้:
คำอธิบายการไหล:

  • ขั้นแรก ผู้ใช้เริ่มต้นคำขอธุรกรรมผ่านเครือข่าย ลงนามในธุรกรรมด้วยคีย์ส่วนตัวของเขาเอง จากนั้นออกอากาศธุรกรรม และเพิ่มธุรกรรมลงในกลุ่มธุรกรรม นักขุดได้รับข้อมูลธุรกรรมจากกลุ่มธุรกรรม จากนั้น จัดทำแพ็คเกจและสร้าง บล็อกจะถูกสร้างขึ้นผ่านฉันทามติ และสุดท้าย บล็อกการทำธุรกรรมจะถูกส่งไปยังเครือข่ายทั้งหมด
    การไหลของข้อมูล:
    แหล่งข้อมูลของกลุ่มธุรกรรม:

  • การซิงโครไนซ์ระยะไกลผ่านรูปแบบการซิงโครไนซ์แบบกระจายข้อมูลการทำธุรกรรมของโหนด Ethereum อื่น ๆ จะซิงโครไนซ์กับโหนดในเครื่อง

ที่อยู่ของข้อมูลในกลุ่มธุรกรรม: ได้รับและตรวจสอบโดยนักขุด (คนขุดแร่) ใช้สำหรับการขุด เขียนลงในบล็อกหลังจากการขุดและออกอากาศสำเร็จ ธุรกรรมจะถูกลบออกจากกลุ่มธุรกรรมหลังจากเขียนลงใน Canonical ถ้าธุรกรรมถูกเขียนขึ้น หลังจากป้อน fork แล้ว ธุรกรรมในกลุ่มธุรกรรมจะไม่ลดลง จากนั้นรอการบรรจุใหม่

ชื่อระดับแรก

โครงสร้างข้อมูล

การกำหนดค่าเริ่มต้นมีดังนี้:

โครงสร้างข้อมูล TxPool เป็นดังนี้:

ชื่อระดับแรก

เมื่อวิเคราะห์การดำเนินธุรกรรม ก่อนอื่นเราต้องดูการกำหนดค่าพื้นฐานบางอย่าง เช่น: มีขีดจำกัดบน/ล่างสูงสุดสำหรับค่าธรรมเนียมการทำธุรกรรม การกำหนดค่ากลุ่มธุรกรรม จำนวนสูงสุดของการดึงข้อมูลธุรกรรมหรือไม่ เป็นต้น ในที่นี้เราจะดูเฉพาะที่ ประเด็นสำคัญบางประการ:

ชื่อเรื่องรอง

02 การกำหนดค่ากลุ่มการซื้อขาย

ชื่อเรื่องรอง

03 ปริมาณการดึงธุรกรรม

เริ่มต้นสระว่ายน้ำ

การเริ่มต้นของกลุ่มธุรกรรมนั้นรับรู้ผ่าน NewTxPool และรหัสเฉพาะมีดังนี้:

ที่นี่ ฟังก์ชัน sanitize จะถูกเรียกใช้ก่อนเพื่อตรวจสอบพารามิเตอร์การกำหนดค่าเพื่อหลีกเลี่ยงการตั้งราคาก๊าซที่ไม่สมเหตุสมผล

จากนั้นเริ่มต้นกลุ่มธุรกรรม ( txpool ) ด้วยการกำหนดค่าเริ่มต้น:

จากนั้นเริ่มต้นบัญชีท้องถิ่นและเพิ่มที่อยู่บัญชีท้องถิ่นที่กำหนดค่าไว้ในกลุ่มธุรกรรม:

จากนั้นสร้างธุรกรรมที่สั่งซื้อราคาก๊าซเพิ่มเติม:

รหัสการใช้งานเฉพาะมีดังนี้:

จากนั้นโทรรีเซ็ตเพื่ออัปเดตกลุ่มธุรกรรม:

การใช้งานเฉพาะของการรีเซ็ตมีดังนี้:

จากนั้นเริ่ม reorg loop เพื่อให้สามารถจัดการคำขอที่สร้างขึ้นระหว่างการโหลดบันทึก:

รหัสการใช้งานเฉพาะของ scheduleReorgLoop แสดงอยู่ด้านล่าง ฟังก์ชันนี้ส่วนใหญ่ใช้สำหรับแผนการดำเนินการรีเซ็ตและเลื่อนระดับการปฏิบัติการ

จากนั้นสมัครรับข้อมูลธุรกรรมที่เกี่ยวข้องและเริ่มลูปหลัก:

รหัสการใช้งานเฉพาะของลูปหลักมีดังนี้ เป็น goroutine ของ txPool และ main event loop ส่วนใหญ่ใช้เพื่อรอและตอบสนองต่อเหตุการณ์ blockchain ภายนอก รายงานต่างๆ และเหตุการณ์การขับไล่ธุรกรรม:

ชื่อระดับแรก

สร้างธุรกรรม

  • ธุรกรรมเริ่มต้นโดยผู้ใช้ เพื่อให้สินทรัพย์ถูกโอนจากฝ่ายหนึ่งไปยังอีกฝ่ายหนึ่ง ซึ่งเรียกว่าการโอนมูลค่า การสร้างธุรกรรมที่ใช้งานง่ายที่สุดของเราคือการโอนเงินผ่านกระเป๋าเงิน ที่นี่เราใช้ RPC โดยตรงของ eth_sendTransaction เป็นตัวอย่างในการวิเคราะห์ขั้นตอนการสร้างธุรกรรม ตัวอย่างของคำขอ eth_sendTransaction มีดังนี้:

  • ตัวอย่างพารามิเตอร์:

  • จาก: DATA, 20 ไบต์ - ที่อยู่ต้นทางของธุรกรรมการส่ง

  • ถึง: DATA, 20 ไบต์ - ที่อยู่เป้าหมายของธุรกรรม ซึ่งเป็นทางเลือกเมื่อสร้างสัญญาใหม่

  • ก๊าซ: QUANTITY - ปริมาณก๊าซที่มีอยู่สำหรับการดำเนินการธุรกรรม จำนวนเต็มทางเลือก ค่าเริ่มต้น 90000 ก๊าซที่ไม่ได้ใช้จะถูกส่งคืน

  • gasPrice: QUANTITY - ราคาก๊าซ ไม่บังคับ ค่าเริ่มต้น: To-Be-Determined

  • ค่า: QUANTITY - จำนวนเงินที่ส่งโดยการทำธุรกรรม เป็นจำนวนเต็มหรือไม่ก็ได้

ข้อมูล: DATA - พารามิเตอร์ลายเซ็นและการเข้ารหัสของการรวบรวมสัญญาหรือวิธีการที่เรียกว่า

nonce: QUANTITY - nonce ไม่บังคับ สามารถใช้ nonce เดียวกันเพื่อเขียนธุรกรรมที่รอดำเนินการใหม่ได้

ตัวอย่างการตอบสนอง:"มาติดตามกระบวนการดำเนินการของ eth_sendTransaction ซึ่งเป็น RPC กัน ที่นี่ ขั้นแรกให้ตรวจสอบว่ามีบัญชีอยู่หรือไม่ จากนั้นตรวจสอบว่า Nonce ว่างเปล่าหรือไม่ จากนั้นเรียก SingTx เพื่อดำเนินการลงนาม จากนั้นเรียก SubmitTransaction เพื่อส่งธุรกรรม:"รหัสการใช้งานของ SignTx มีดังนี้ โดยที่ SignTx จะถูกเรียกใช้สำหรับการดำเนินการลายเซ็นต่อไป ดังนั้นฉันจะไม่ลงรายละเอียดที่นี่ และการติดตามผล

ลายเซ็นการทำธุรกรรม

การวิเคราะห์แบบละเอียดจะดำเนินการ:"หลังจากการเซ็นชื่อ ให้กลับไปที่ SendTransaction เพื่อเรียก SubmitTransaction เพื่อส่งลายเซ็น ที่นี่ ก่อนอื่นจะตรวจสอบว่าค่าธรรมเนียมการทำธุรกรรมเพียงพอหรือไม่ แล้วจึงโทรหา SendTx เพื่อส่งธุรกรรม:"การใช้งานเฉพาะของ SendTx มีดังต่อไปนี้ ที่นี่ AddLocal จะถูกเรียกเพื่อเพิ่มธุรกรรมไปยังกลุ่มธุรกรรม จะไม่มีรายละเอียดเพิ่มเติมที่นี่

โมดูลหน่วยวิเคราะห์หนึ่งเดียวนี้:

จากนั้นตรวจสอบว่าที่อยู่รับว่างเปล่าหรือไม่ หากว่างเปล่า ให้สร้างที่อยู่ (โดยปกติจะปรากฏเมื่อมีการสร้างสัญญา) จากนั้นพิมพ์บันทึกรายละเอียด TX ที่สมบูรณ์สำหรับการตรวจสอบและวิเคราะห์ด้วยตนเองในภายหลัง จากนั้นส่งคืนค่าแฮชของ ธุรกรรม:

ชื่อระดับแรก

เทรดลงสระ

เรารู้ว่ามีแหล่งที่มาของธุรกรรมสองแหล่ง: แหล่งหนึ่งส่งภายในเครื่องและอีกแหล่งหนึ่งส่งจากระยะไกล รหัสการใช้งานเฉพาะของทั้งสองนี้คือ AddLocals และ AddRemotes ตามลำดับ ฟังก์ชันทั้งสองนี้ใช้เมื่อเพิ่มธุรกรรมลงในกลุ่มธุรกรรม นี่คือ ทำได้โดยการเรียก addTxs:

รหัส addTxs มีลักษณะดังนี้:

ขั้นแรก ธุรกรรมจะถูกกรองเพื่อตรวจสอบว่าเป็นธุรกรรมที่รู้จักหรือไม่ (นั่นคือ เพิ่มหรือเผยแพร่) จากนั้นเรียกใช้ฟังก์ชันส่งเพื่อตรวจสอบที่อยู่ที่ได้รับจากลายเซ็น (v, r, s) ผ่านเส้นโค้งวงรี secp256k1 ถ้าได้รับ หากล้มเหลวหรือเซ็นชื่อไม่ถูกต้อง จะส่งกลับข้อผิดพลาด:

จากนั้นเพิ่มธุรกรรมลงในกลุ่มธุรกรรม (หมายเหตุ: มีการล็อกธุรกรรมที่นี่)

การดำเนินการเฉพาะของ addTxsLocked มีดังนี้ มันจะจัดคิวธุรกรรมที่ถูกต้อง และเรียกฟังก์ชัน pool.add เพื่อเพิ่มธุรกรรมในคิวธุรกรรม:

การใช้งานเฉพาะของฟังก์ชันเพิ่มมีดังนี้:

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

จากนั้นระบุว่ามีการส่งธุรกรรมแบบโลคัลหรือรีโมต และเรียกฟังก์ชัน validateTx เพื่อตรวจสอบธุรกรรม หากการยืนยันล้มเหลว ธุรกรรมนั้นจะถูกยกเลิกโดยตรง:

จากนั้นตรวจสอบว่ากลุ่มธุรกรรมเต็มหรือไม่ และถ้าเต็ม ให้ยกเลิกธุรกรรมที่มีราคาต่ำกว่าในคิวธุรกรรม GlobalSlots และ GlobalQueue เป็นความจุสูงสุดของคิวและรอดำเนินการ:

จากนั้นตัดสินว่ามีธุรกรรมที่มีค่า nonce เดียวกันในคิวที่รอดำเนินการของธุรกรรมปัจจุบันหรือไม่ หากมีอยู่ ให้ตัดสินว่าราคาก๊าซที่กำหนดโดยการแลกเปลี่ยนปัจจุบันเกินเปอร์เซ็นต์ PriceBump ที่ตั้งไว้ หากเกิน ให้แทนที่และเขียนทับธุรกรรมที่มีอยู่ มิฉะนั้น ข้อผิดพลาดจะถูกส่งกลับและ Gasprice ของธุรกรรมการแทนที่ต่ำเกินไป , และโยนลงในคิว ( enqueueTx ):

หลังจากเรียก enqueueTx แล้ว ระบบจะเพิ่มลงในคิวธุรกรรม และในเวลาเดียวกัน ให้ตรวจสอบว่าบัญชีผู้ส่งเป็นที่อยู่ในท้องถิ่นหรือไม่ และถ้าใช่ ให้เพิ่มลงในที่อยู่ในท้องถิ่นของกลุ่มธุรกรรม:

รหัส enqueueTx เป็นดังนี้ ฟังก์ชันนี้จะแทรกธุรกรรมใหม่ลงในคิวธุรกรรมเป็นหลัก:

สุดท้าย มันจะไปที่ฟังก์ชัน addTx ซึ่งฟังก์ชัน requestPromoteExecutables จะถูกเรียกใช้เพื่อดำเนินการขอเลื่อนระดับธุรกรรม ซึ่งโดยหลักแล้วจะทำให้ธุรกรรมจากคิวอยู่ในสถานะรอดำเนินการ:


ลายเซ็นการทำธุรกรรม

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

รหัสการใช้งานเฉพาะของ SignTx มีดังนี้:

ใช้ ECDSA (อัลกอริทึมการเข้ารหัสเส้นโค้งวงรี) เพื่อลงชื่อเข้าใช้ จากนั้นส่งคืนผลลัพธ์ที่เซ็นชื่อ:

การตรวจสอบธุรกรรม

ชื่อระดับแรก

  • การตรวจสอบธุรกรรม

  • การตรวจสอบธุรกรรมเป็นส่วนที่สำคัญที่สุดของลิงก์ธุรกรรมทั้งหมด สำหรับผู้ใช้ การตรวจสอบธุรกรรมเป็นวิธีการที่สำคัญในการรับรองความปลอดภัยของทรัพย์สินของผู้ใช้ สำหรับ Ethereum ทั้งหมด การตรวจสอบธุรกรรมเป็นวิธีการสำคัญเพื่อให้มั่นใจถึงการดำเนินงานที่มั่นคงและการพัฒนาที่ยั่งยืน ของ Ethereum การตรวจสอบการทำธุรกรรมส่วนใหญ่เกิดขึ้นในสถานการณ์ต่อไปนี้:

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

  • เมื่อโหนดได้รับการเผยแพร่ธุรกรรมโดยโหนดอื่น โหนดจำเป็นต้องตรวจสอบว่าธุรกรรมนั้นถูกกฎหมายหรือไม่ และธุรกรรมที่ถูกกฎหมายจะถูกเพิ่มลงในกลุ่มธุรกรรมของโหนด

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

การตรวจสอบธุรกรรมเสร็จสิ้นโดยฟังก์ชัน validateTx และโค้ดตรรกะเป็นดังนี้ ที่นี่ จะตรวจสอบว่าเปิดใช้งาน eip2718 และประเภทของธุรกรรมหรือไม่ จากนั้น ตรวจสอบขนาดของธุรกรรม จำนวนธุรกรรม การถ่ายโอน ก๊าซ ของการทำธุรกรรม, ความถูกต้องของลายเซ็นการทำธุรกรรม, และตรวจสอบให้แน่ใจว่าการทำธุรกรรมเป็นไปตามคำสั่งของ Nonce, ไม่ว่าสินทรัพย์ของเทรดเดอร์จะเพียงพอหรือไม่, และตรวจสอบราคาก๊าซของการทำธุรกรรม ค่าธรรมเนียมการทำธุรกรรมขั้นพื้นฐานสูง:

ชื่อระดับแรก

อัพเกรดการทำธุรกรรม

การอัปเกรดธุรกรรมส่วนใหญ่หมายถึงการใส่ธุรกรรมลงในรายการที่รอดำเนินการ ข้อแตกต่างระหว่างวิธีนี้กับวิธีการเพิ่มคือ ฟังก์ชันเพิ่มจะแทรกธุรกรรมใหม่ที่ได้รับลงในรายการที่รอดำเนินการ ในขณะที่ PromoteExecutables ใส่ปฏิบัติการในรายการที่อยู่บัญชีที่กำหนด ถูกแทรกลงในรายการคิวที่ค้างอยู่และมีการตรวจสอบธุรกรรมที่ไม่ถูกต้องจากนั้นจึงส่งเหตุการณ์อัพเดตกลุ่มธุรกรรมรหัสการใช้งานมีดังนี้:

ที่นี่ ใช้ for loop เพื่อวนซ้ำบัญชีทั้งหมดและอัปเกรดธุรกรรม ขั้นแรก ธุรกรรมทั้งหมดในคิวซึ่ง nonce ต่ำกว่า nonce ของบัญชีปัจจุบันจะถูกลบ:

จากนั้นลบธุรกรรมทั้งหมดในคิวที่มีการบริโภคมากกว่ายอดคงเหลือในบัญชีหรือมีก๊าซมากกว่าขีดจำกัดก๊าซสูงสุด:

จากนั้นเพิ่มธุรกรรมที่ดำเนินการได้ทั้งหมดจากคิวไปที่รอดำเนินการ ซึ่งเมธอด PromotionTx จะถูกเรียกเพื่อทำให้ธุรกรรม ( Txs ) ในคิวอยู่ในสถานะรอดำเนินการ:

รหัสการใช้งานของ promotionTx มีดังนี้ ฟังก์ชันนี้จะแทรกธุรกรรมลงในคิวที่รอดำเนินการก่อน หากธุรกรรมเก่าดีกว่า (ธุรกรรม Gasprice มากกว่าหรือเท่ากับ 110% ของมูลค่าธุรกรรมเดิม มาตรฐานจะเกี่ยวข้องกับ pricebump) แล้วลบอันปัจจุบัน ธุรกรรมนี้ ถ้าธุรกรรมปัจจุบันดีกว่าธุรกรรมเก่า ลบธุรกรรมเก่า แล้วปรับปรุงรายการ:

จากนั้นกลับไปที่ฟังก์ชัน PromoteExecutables และถ้าคิวบัญชีที่ไม่ใช่ในเครื่องน้อยกว่าขีดจำกัด ( AccountQueue ) ให้ลบออก:

สุดท้าย บันทึกรายการที่ลบออกและอัปเดตคิวเกจ หากธุรกรรมของบัญชีนี้ในคิวว่างเปล่า ให้ลบบัญชีนี้:


  • ปรับลดการทำธุรกรรม

  • การดาวน์เกรดของธุรกรรมหมายความว่าเมื่อบล็อกใหม่ปรากฏขึ้น ธุรกรรมที่บรรจุจะถูกลดระดับจากช่องว่างภายในไปยังคิว หรือเมื่อราคาก๊าซของธุรกรรมอื่นสูงขึ้น ธุรกรรมนั้นจะถูกลดระดับจากช่องว่างภายในไปยังคิว การดำเนินการดาวน์เกรดคีย์ ฟังก์ชันการใช้งานคือ demoteUnexecutables และการดาวน์เกรดของธุรกรรมส่วนใหญ่เกิดขึ้นในสามสถานการณ์ต่อไปนี้:

  • การ fork นำไปสู่การลดลงของมูลค่า Nonce ของบัญชี: หากหมายเลขธุรกรรม m ในเชนบัญญัติดั้งเดิม A มีราคา 20 และอยู่ในเชนนั้นแล้ว แต่หมายเลขธุรกรรม m บนเชนบัญญัติใหม่ไม่ได้อยู่ในเชนหลังจาก ส้อม ส่งผลให้หมายเลขธุรกรรม m ที่บันทึกไว้ในสายโซ่มาตรฐาน The Nonce ของบัญชีลดลง ดังนั้นธุรกรรม m จะต้องย้อนกลับไปที่กลุ่มธุรกรรมและวางในคิว

การ fork ทำให้ค่า nonce ของธุรกรรมที่รอดำเนินการแตกต่างจากค่า nonce ของรัฐ

โค้ดของ demoteUnexecutables มีดังนี้ ประการแรก ค่า Nonce ล่าสุดของแต่ละ addr ได้มาจากการข้ามผ่านรายการที่รอดำเนินการ จากนั้นธุรกรรมที่ Nonce มีขนาดเล็กกว่าค่า Nonce ที่ได้รับจากการสืบค้นก่อนหน้านี้จะถูกลบออก จากนั้น ยอดเงินในบัญชีไม่เพียงพอที่จะชำระค่าธรรมเนียมการทำธุรกรรมและธุรกรรมที่ไม่ถูกต้องชั่วคราวบางส่วนถูกส่งคืน ธุรกรรม และนำธุรกรรมที่ไม่ถูกต้องชั่วคราวไปไว้ในคิว หากมีช่องว่างในขณะนี้ ให้ย้ายธุรกรรมต่อไปนี้ไปยังรายการคิว หาก ดำเนินการดาวน์เกรดข้างต้น หากไม่มีธุรกรรมใน addr บางตัวที่รอดำเนินการ ธุรกรรมจะถูกลบ บัญชีที่จะลบ:

ชื่อระดับแรก

พูลรีเซ็ต

เราสามารถรีเซ็ตกลุ่มธุรกรรมผ่านการรีเซ็ต รหัสเฉพาะของวิธีนี้มีดังนี้:

หากส่วนหัวเก่าไม่เป็น null การปรับโครงสร้างองค์กรจะเริ่มต้นขึ้น ในเวลานี้ หากบล็อกส่วนหัวของเชนเก่าสูงกว่าความสูงของบล็อกส่วนหัวของเชนใหม่ เชนเก่าจะย้อนกลับและรีไซเคิลธุรกรรมที่ย้อนกลับทั้งหมด ถ้า head block ของ chain ใหม่ ถ้ามีขนาดใหญ่กว่า head block ของ chain เก่า chain ใหม่จะถอยกลับและรีไซเคิลธุรกรรม เมื่อ chain ใหม่และ chain เก่ามีความสูงเท่ากัน ก็จะถอยกลับ ในเวลาเดียวกันจนกว่าจะพบโหนดพาเรนต์ทั่วไป จากนั้น ค้นหาธุรกรรมทั้งหมดที่จัดเก็บในละทิ้งแต่ไม่รวมอยู่ มูลค่า จากนั้นแทรกธุรกรรมเหล่านี้อีกครั้งในกลุ่ม:

จากนั้นตั้งค่าสถานะโลกล่าสุด ตั้งค่าสถานะของบล็อกส่วนหัวของห่วงโซ่ใหม่ จากนั้นใส่ธุรกรรมที่สนับสนุนโดยห่วงโซ่เก่าลงในกลุ่มธุรกรรม:

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

บทความนี้วิเคราะห์โมดูลการทำงาน เช่น โครงสร้างข้อมูลกลุ่มธุรกรรม Ethereum, การตั้งค่าค่าธรรมเนียมธุรกรรม, การสร้างธุรกรรม, ลายเซ็นธุรกรรม, รายการกลุ่มธุรกรรม, การตรวจสอบธุรกรรม, การอัปเกรดธุรกรรม, การดาวน์เกรดธุรกรรม, การรีเซ็ตกลุ่มธุรกรรม ฯลฯ จากมุมมองของซอร์สโค้ด มีการสำรวจกระบวนการและการออกแบบความปลอดภัยของการประมวลผลธุรกรรม Ethereum แต่การสร้างระบบความปลอดภัยเชนสาธารณะยังคงมีหนทางอีกยาวไกลและจำเป็นต้องสำรวจเพิ่มเติม

ลิงค์อ้างอิง:

https://blog.csdn.net/lj900911/article/details/84825739 

https://blog.csdn.net/pulong074


ETH
ความปลอดภัย
ยินดีต้อนรับเข้าร่วมชุมชนทางการของ Odaily
กลุ่มสมาชิก:
https://t.me/Odaily_News
กลุ่มสนทนา:
https://t.me/Odaily_GoldenApe
บัญชีทางการ:
https://twitter.com/OdailyChina
สารบัญบทความ
อันดับบทความร้อน
Daily
Weekly
ดาวน์โหลดแอพ Odaily พลาเน็ตเดลี่
ให้คนบางกลุ่มเข้าใจ Web3.0 ก่อน
IOS
Android