แนวทางสำหรับการตรวจสอบโปรโตคอลการปักหลัก

แนวทางสำหรับการตรวจสอบโปรโตคอลการปักหลัก

อ่านเวลา: 6 นาที

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

การเดิมพันสภาพคล่องคืออะไร?

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

แนวทางสำหรับการตรวจสอบโปรโตคอลการปักหลัก PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.

ตัวอย่างเช่น คุณมี 100 ETH คุณต้องการเดิมพันกับเครือข่าย Ethereum แทนที่จะล็อค ETH ของคุณเป็นระยะเวลาหนึ่ง คุณสามารถใช้บริการสภาพคล่องเช่น Lido เพื่อเดิมพัน ETH ของคุณและรับโทเค็นของเหลวที่เรียกว่า stETH เป็นการตอบแทน ด้วย stETH คุณยังสามารถแลกเปลี่ยนหรือใช้ ETH ที่เดิมพันของคุณในขณะที่รับรางวัลการเดิมพัน

เริ่มต้นด้วยการตรวจสอบสัญญาการปักหลัก:

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

เมื่อดูเอกสารข้อกำหนดการตรวจสอบสำหรับสัญญาเดิมพัน ให้มองหาประเด็นเหล่านี้:

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

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

จุดอ่อนที่ต้องมองหา?

1. กลไกการถอนรางวัล:

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

  • ตรวจสอบว่าผู้ใช้สามารถถอนเงินได้มากกว่ารางวัล + จำนวนเงินเดิมพันหรือไม่
  • ตรวจสอบ Overflow/Underflow ในการคำนวณจำนวนเงิน
  • ตรวจสอบว่าพารามิเตอร์บางอย่างมีผลเสียต่อรางวัลระหว่างการคำนวณหรือไม่
  • หากใช้ block.timestamp หรือ block.number ในฟังก์ชันนี้ ตรวจสอบว่าสามารถใช้ประโยชน์ในทางใดทางหนึ่งได้หรือไม่

2. ตรรกะค่าธรรมเนียม:

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

3. กลไกการผลิต/เผาของ LP Token:

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

ตรรกะของฟังก์ชัน minting และ burn สามารถตรวจสอบได้ทางคณิตศาสตร์เพื่อเปิดเผยช่องโหว่ที่ซ่อนอยู่ นอกจากนี้ อุปทานทั้งหมดของโทเค็น LP ที่สร้างขึ้นไม่ควรเกินสินทรัพย์ที่เดิมพัน

4. ข้อผิดพลาดในการปัดเศษ:

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

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

5. ระยะเวลาการเดิมพัน:

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

6. การโทรภายนอกและการจัดการโทเค็น:

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

7. การตรวจสอบการเปลี่ยนแปลงราคา:

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

8. การตรวจสอบเพิ่มเติมบางอย่าง:

  • ลูป: หากตรรกะของสัญญาเกี่ยวข้องกับการวนซ้ำบนอาร์เรย์ สิ่งสำคัญคือต้องแน่ใจว่าไม่เกินขีดจำกัดของบล็อกแก๊ส สิ่งนี้สามารถเกิดขึ้นได้เมื่อขนาดอาร์เรย์มีขนาดใหญ่มาก ดังนั้นคุณควรตรวจสอบว่าฟังก์ชันใดที่สามารถเพิ่มขนาดของอาร์เรย์ได้ และผู้ใช้รายใดสามารถใช้ประโยชน์จากมันเพื่อทำให้เกิดการโจมตี DoS ได้หรือไม่ ตรวจสอบสิ่งนี้ รายงาน.
  • โครงสร้าง: สัญญาการเดิมพันใช้ประเภท struct เพื่อเก็บข้อมูลผู้ใช้หรือพูล เมื่อประกาศหรือเข้าถึงโครงสร้างภายในฟังก์ชัน สิ่งสำคัญคือต้องระบุว่าจะใช้ "หน่วยความจำ" หรือ "ที่เก็บข้อมูล" อาจช่วยให้เราประหยัดน้ำมันได้บ้าง สำหรับข้อมูลเพิ่มเติม โปรดดู บทความนี้.
  • วิ่งหน้า: มองหาสถานการณ์ใดๆ ที่ผู้ประสงค์ร้ายสามารถดำเนินการธุรกรรมใด ๆ ล่วงหน้าเพื่อประโยชน์ของพวกเขา
  • การมองเห็นฟังก์ชัน/การตรวจสอบการควบคุมการเข้าถึง: ฟังก์ชั่นใด ๆ ที่ประกาศเป็นภายนอกหรือสาธารณะสามารถเข้าถึงได้โดยทุกคน ดังนั้นจึงเป็นสิ่งสำคัญที่จะต้องแน่ใจว่าไม่มีหน่วยงานสาธารณะใดสามารถดำเนินการที่ละเอียดอ่อนได้ สิ่งสำคัญคือต้องตรวจสอบว่าโปรโตคอลการเดิมพันได้ใช้การควบคุมที่เหมาะสมเพื่อป้องกันการเข้าถึงทั้งเหรียญเดิมพันและโครงสร้างพื้นฐานของระบบโดยไม่ได้รับอนุญาต
  • ความเสี่ยงจากการรวมศูนย์: สิ่งสำคัญคือต้องไม่ให้อำนาจแก่เจ้าของมากเกินไป หากที่อยู่ผู้ดูแลระบบถูกบุกรุก อาจทำให้โปรโตคอลเสียหายอย่างมาก ตรวจสอบว่าสิทธิ์ของเจ้าของหรือผู้ดูแลระบบเหมาะสม และตรวจสอบให้แน่ใจว่าโปรโตคอลมีแผนในการจัดการกับสถานการณ์ที่คีย์ส่วนตัวของผู้ดูแลระบบรั่วไหล
  • การจัดการ ETH / WETH: สัญญามักจะมีตรรกะเฉพาะสำหรับการจัดการ ETH ตัวอย่างเช่น เมื่อ msg.value > 0 สัญญาอาจแปลง ETH เป็น WETH ในขณะที่ยังอนุญาตให้รับ WETH ได้โดยตรง เมื่อผู้ใช้ระบุ WETH เป็นสกุลเงิน แต่ส่ง ETH ไปพร้อมกับการเรียก การดำเนินการนี้อาจทำให้ค่าคงที่บางอย่างเสียหายและนำไปสู่พฤติกรรมที่ไม่ถูกต้อง

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

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


11 เข้าชม

ประทับเวลา:

เพิ่มเติมจาก ควิลแฮช