จัดทำขึ้นเพื่อการศึกษาเท่านั้น ไม่ใช่คำแนะนำการลงทุน การลงทุนอาจทำให้สูญเสียเงินลงทุนได้
คำตอบโดยตรง
สัญญาที่อัปเกรดได้ไม่ได้ใช้ตัวสร้างเพื่อตั้งค่าสถานะของตัวแทน แต่อาศัยตัวเริ่มต้น บทความนี้จะอธิบายเอเจนต์ที่ไม่ได้เตรียมใช้งาน การล็อคการใช้งาน และการตรวจสอบการปรับใช้
เมื่อมีการปรับใช้ที่อยู่พร็อกซีใหม่ แต่ธุรกรรมการเริ่มต้นยังไม่ได้รับการยืนยัน ใครก็ตามอาจลองใช้ เรียกใช้ ตัวเริ่มต้นสาธารณะก่อนและกลายเป็นเจ้าของ
เมื่อเอเจนต์ถูกปรับใช้ ตัวสร้างจะไม่ดำเนินการตรรกะการเริ่มต้นของสัญญาในที่เก็บข้อมูลของตัวแทน ดังนั้น ระบบที่อัปเกรดได้มักจะใช้ตัวเริ่มต้นที่สามารถเรียกได้เพียงครั้งเดียวเพื่อตั้งค่าเจ้าของ พารามิเตอร์โทเค็น และโมดูล หากฟังก์ชันไม่ได้รับการป้องกันอย่างเหมาะสม หรือหากการปรับใช้และการกำหนดค่าเริ่มต้นถูกแบ่งออกเป็นสองธุรกรรม ผู้โจมตีอาจ เรียกใช้ ไว้ก่อน
วิธีการทำงาน
กระบวนการรักษาความปลอดภัยจะวางข้อมูลการโทรการปรับใช้และการเริ่มต้นไว้ในธุรกรรมอะตอมมิกเดียวกัน และปิดใช้งานการเริ่มต้นเมื่อใช้การสร้างสัญญาเพื่อป้องกันไม่ให้การดำเนินการนั้นถูกยึดครอง ตัวเริ่มต้นใหม่ใช้เพื่อเพิ่มสถานะใหม่ให้กับเวอร์ชันใหม่ และยังต้องจำกัดเวอร์ชันและการอนุญาตการโทรด้วย การตรวจสอบเจ้าของตัวแทนโดยไม่ตรวจสอบสถานะการเริ่มต้นการใช้งานเท่านั้นจึงอาจยังมีความเสี่ยงอยู่
การดำเนินการ on-chain แบ่งออกเป็นสี่ชั้น: กระเป๋าสินทรัพย์ดิจิทัล รับผิดชอบในการแสดงผลและลายเซ็น RPC รับผิดชอบในการอ่านและการออกอากาศ รหัสสัญญาจะกำหนดการเปลี่ยนแปลงสถานะ และฉันทามติบล็อกจะกำหนดว่าธุรกรรมจะได้รับการยืนยันในที่สุดหรือไม่ การแสดง “ความสำเร็จ” ในระดับใดๆ ไม่สามารถแทนที่การยืนยันในระดับอื่นได้
ตัวอย่าง
โปรเจ็กต์ปรับใช้เอเจนต์ก่อนและวางแผนที่จะ เรียกใช้ เตรียมใช้งาน (ทีม) ต่อไป ผู้โจมตีตรวจสอบพูลหน่วยความจำและเริ่มต้น เรียกใช้ เป็นครั้งแรก (ผู้โจมตี) ด้วยค่าธรรมเนียมที่สูงกว่า กลายเป็นผู้ดูแลระบบ จากนั้นอัปเกรดเป็นการใช้งานที่เป็นอันตรายและโอนเงิน ธุรกรรมการเริ่มต้นของทีมจะย้อนกลับ แต่ ณ จุดนี้การควบคุมจะสูญเสียไป
เวลาของแก๊ส การเลื่อนหลุด และบล็อกในกรณีนี้ใช้เพื่อสาธิตวิธีการคำนวณ ก่อนการดำเนินการจริง ควรอ่านราคา สภาพคล่อง การอนุญาต และสถานะสัญญาของเชนปัจจุบันและบล็อกปัจจุบัน จำนวนเงินจะบันทึกจำนวนโทเค็น ค่าดอลลาร์ และจำนวนเต็มดิบบนเชนไปพร้อมๆ กัน
ความเสี่ยง
ผลตอบแทนจะต้องคำนวณตามมูลค่าที่ออกจริง:
มูลค่าทางออกสุทธิ = มูลค่าตลาดของสินทรัพย์ - ราคาตกตะลึง - ค่าธรรมเนียมโปรโตคอล - ภาษีการโอน - Gas - ส่วนลดความเสี่ยงในการรอ
สร้างสถานการณ์ความเครียดสามสถานการณ์ของความแออัดของเครือข่าย ข้อยกเว้นของ Oracle และการอัปเกรดผู้ดูแลระบบ สมมติว่าแก๊สขยายห้าครั้ง ความลึกของพูลลดลง 50% สเตเบิลคอยน์ ลดราคา 5% และคุณไม่สามารถออกได้เป็นเวลาหนึ่งวัน หากรายได้หนึ่งเดือนไม่สามารถชดเชยแรงกดดันได้ รายได้ที่สูงไม่ได้ให้ค่าตอบแทนที่เพียงพอ
โปรโตคอลเดี่ยว เชนเดี่ยว บริดจ์เดี่ยว และสกุลเงินที่มีเสถียรภาพเดียวจะกำหนดขีดจำกัดสูงสุดตามลำดับ ตำแหน่งใดๆ ที่จำเป็นต้องมีผู้ดูแลระบบ oracles บริดจ์ ส่วนหน้า และ RPC เดียวให้เป็นปกติในเวลาเดียวกันจึงจะออก ควรแคบลง และการขึ้นต่อกันที่เกี่ยวข้องหลายรายการต้องไม่เข้าใจผิดว่าเป็นการกระจาย
ความเข้าใจผิดที่พบบ่อย
-
เรื่องที่ 1: ความสมดุลของส่วนหน้าคือข้อเท็จจริงในเชน ส่วนหน้าอาจถูกแคช จัดทำดัชนีล่าช้า หรือเชื่อมต่อกับเครือข่ายที่ไม่ถูกต้อง และต้องได้รับการตรวจสอบความถูกต้องข้ามกับการอ่านสัญญา
-
เรื่องที่ 2: การเพิ่มขึ้นของ Gas หรือความคลาดเคลื่อนสามารถแก้ไขความล้มเหลวได้ Gas ส่งผลต่อการคัดแยกเท่านั้น และการเลื่อนไหลทำให้ราคาผ่อนคลายเท่านั้น ข้อผิดพลาดในการอนุญาต Nonce และเงื่อนไขสัญญาจะไม่ได้รับการซ่อมแซมโดยอัตโนมัติ
-
เรื่องที่ 3: การทดสอบในจำนวนเล็กน้อยที่ประสบความสำเร็จหมายถึงความปลอดภัยถาวร การอัปเกรดผู้ดูแลระบบ พารามิเตอร์แบบไดนามิก และการเปลี่ยนแปลงสภาพคล่องจะเปลี่ยนผลลัพธ์และควรได้รับการตรวจสอบก่อนการขยายแต่ละตำแหน่ง
หัวข้อที่เกี่ยวข้อง
- ERC-4626 การโจมตีเงินเฟ้อครั้งแรก: เหตุใดส่วนแบ่งของ Vault จึงอาจถูกปัดเศษ
- สัญญาเอเจนซี่
- สัญญาอัจฉริยะ
- สัญญาที่อัปเกรดได้
- หลักฐานความถูกต้อง
แหล่งที่มา
- API ของ Proxy และ Initializable - OpenZeppelin (เข้าถึง: 2026-08-20)
- การเขียนสัญญาที่อัปเกรดได้ - OpenZeppelin (เข้าถึง: 2026-08-20)
- การอัปเกรดสัญญาอัจฉริยะ - Ethereum.org (เข้าถึง: 2026-08-20)