Cointime

Download App
iOS & Android

SlowMist: บทนำการตรวจสอบสัญญา Sui-Move

Validated Project

ในฐานะแพลตฟอร์มบล็อกเชนประสิทธิภาพสูงที่เกิดขึ้นใหม่ Sui มีเทคโนโลยีที่เป็นนวัตกรรมและมีเอกลักษณ์มากมาย ขณะเดียวกันก็มุ่งเน้นไปที่การมอบประสบการณ์การทำธุรกรรมที่รวดเร็วและปลอดภัยสำหรับสถานการณ์การใช้งานต่างๆ ความรู้พื้นฐานเกี่ยวกับ Sui สามารถพบได้ใน Exploring Sui: เทคโนโลยีและความปลอดภัยของสัญญาที่อยู่เบื้องหลังประสิทธิภาพสูง แตกต่างจากภาษาโปรแกรมอื่นๆ ที่ใช้กันทั่วไปในบล็อกเชน (เช่น Solidity) Sui ใช้ภาษา Move ซึ่งสามารถแก้ปัญหาช่องโหว่ที่พบได้ทั่วไปใน Solidity ได้ในระดับหนึ่ง เช่น การโจมตีซ้ำ การล้นจำนวนเต็ม , การใช้จ่ายซ้ำซ้อน, การโจมตี DoS และปัญหาคอมไพเลอร์ แต่ไม่สามารถป้องกันนักพัฒนาจากการแนะนำข้อผิดพลาดในโค้ดได้ ดังนั้น นักพัฒนาจำเป็นต้องเข้าใจและใส่ใจกับฟังก์ชันหรือฟีเจอร์เฉพาะบางอย่างเมื่อใช้งาน เพื่อรับรองความปลอดภัยของสัญญาอัจฉริยะ

ทีมรักษาความปลอดภัย SlowMist ได้บูรณาการและซึมซับแนวปฏิบัติในการพัฒนาความปลอดภัยที่ชุมชน Sui แบ่งปัน รวมกับประสบการณ์การตรวจสอบความปลอดภัยที่สั่งสมมาหลายปี เพื่อเผยแพร่ไพรเมอร์การตรวจสอบสัญญา Sui-Move โดยมีเป้าหมายเพื่อช่วยให้นักพัฒนาเข้าใจความเสี่ยงด้านความปลอดภัยของ สัญญาอัจฉริยะของ Sui และจัดหาโซลูชั่นที่ใช้งานได้จริงเพื่อลดภัยคุกคามด้านความปลอดภัยที่อาจเกิดขึ้น

เนื่องจากข้อจำกัดด้านพื้นที่ บทความนี้จึงแสดงรายการเพียงส่วนหนึ่งของบทนำเกี่ยวกับการตรวจสอบสัญญา Sui-Move คุณสามารถรับชม, Fork และ Star บน GitHub: https://github.com/slowmist/Sui-MOVE-Smart-Contract- การตรวจสอบ-Primer/ blob/main/README_CN.md

1. การประกาศโมดูลและการมองเห็น

1.1 ฟังก์ชั่น "สาธารณะ (เพื่อน)" ("สาธารณะ (เพื่อน)" ถูกแทนที่ด้วย "สาธารณะ (แพ็คเกจ)" ในเวอร์ชันซุยล่าสุด)

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

ตัวอย่าง:

1.2 ฟังก์ชั่น "เข้า"

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

ตัวอย่าง:

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

ตัวอย่าง:

1.3 ฟังก์ชั่น "สาธารณะ"

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

ตัวอย่าง:

2. การจัดการวัตถุ

2.1 เอกลักษณ์ของวัตถุ

คำจำกัดความ: แต่ละวัตถุ Sui มี "objID" ที่ไม่ซ้ำกันซึ่งช่วยให้มั่นใจถึงเอกลักษณ์ของวัตถุในห่วงโซ่

2.2 การบรรจุและการแกะออก

คำนิยาม:

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

2.3 กลยุทธ์การถ่ายโอนแบบกำหนดเอง

คำจำกัดความ: ใช้ "sui::transfer::transfer" เพื่อกำหนดกลยุทธ์การถ่ายโอนแบบกำหนดเอง สำหรับออบเจ็กต์ที่มีความสามารถ "store" คุณสามารถสร้างได้ผ่าน "sui::transfer::public_transfer"

2.4 คุณสมบัติของวัตถุ

คำจำกัดความ: คุณสมบัติของวัตถุ Sui ได้แก่ "copy", "drop", "store" และ "key" ซึ่งกำหนดวิธีการทำงานของวัตถุ

2.5 การตรวจสอบการอนุญาตวัตถุ

  • วัตถุที่เป็นที่อยู่

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

  • วัตถุที่ไม่เปลี่ยนรูป

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

  • วัตถุที่ใช้ร่วมกัน

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

  • วัตถุที่ถูกห่อ

คำจำกัดความ: การห่อวัตถุเป็นการฝังวัตถุหนึ่งเข้าไปในวัตถุอื่น วัตถุที่ถูกห่อไม่มีอยู่อีกต่อไปและจะต้องเข้าถึงได้ผ่านวัตถุที่ห่อ

3. การตรวจสอบความปลอดภัย

3.1 การตรวจสอบล้นตัวเลข

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

3. การตรวจสอบความปลอดภัย

3.1 การตรวจสอบล้นตัวเลข

สัญญาอัจฉริยะของ Sui ทำการตรวจสอบการโอเวอร์โฟลว์เชิงตัวเลขตามค่าเริ่มต้น

3.2 การตรวจสอบการกลับเข้าใหม่

สิ่งที่เรียกว่าการโจมตีซ้ำคือการแทรกการโทรที่ไม่คาดคิด (ภายนอก) ลงในธุรกรรมการโทรตามสัญญาปกติ ซึ่งจะเปลี่ยนแปลงกระบวนการโทรทางธุรกิจโดยรวมและบรรลุผลกำไรที่ผิดกฎหมาย เมื่อใดก็ตามที่เกี่ยวข้องกับการเรียกสัญญาภายนอก อาจมีความเสี่ยงในการกลับเข้าใหม่ เราสามารถแบ่งปัญหาการกลับเข้าใหม่ในปัจจุบันออกเป็นสามประเภท: การกลับเข้าใหม่ด้วยฟังก์ชันเดียว การกลับเข้าใหม่ข้ามฟังก์ชัน และการกลับเข้าใหม่ระหว่างสัญญา คุณสมบัติบางอย่างของภาษา Move ให้การป้องกันตามธรรมชาติต่อการโจมตีกลับคืนมา:

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

1. การตรวจสอบน้ำล้น

หมายเหตุ: การย้ายจะทำการตรวจสอบโอเวอร์โฟลว์เมื่อดำเนินการทางคณิตศาสตร์ หากการดำเนินการโอเวอร์โฟลว์ ธุรกรรมจะล้มเหลว แต่ควรสังเกตว่า Move จะไม่ทำการตรวจสอบโอเวอร์โฟลว์สำหรับการดำเนินการบิต

การระบุตำแหน่ง: ค้นหาตำแหน่งในโค้ดที่มีการดำเนินการบิต และตรวจสอบว่ามีความเสี่ยงที่จะเกิดการโอเวอร์โฟลว์หรือไม่

2. การตรวจสอบข้อผิดพลาดความแม่นยำทางคณิตศาสตร์

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

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

3. การตรวจสอบการแข่งขันแบบมีเงื่อนไข

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

ตำแหน่ง:

  • มีการจัดการสถานะข้อมูลของสัญญาก่อนที่จะเรียกใช้ฟังก์ชันที่คาดหวังหรือไม่
  • มีการจัดการสถานะข้อมูลสัญญาที่คาดหวังระหว่างการดำเนินการฟังก์ชันหรือไม่
  • มีการจัดการสถานะข้อมูลสัญญาที่คาดหวังหลังจากการเรียกใช้ฟังก์ชันหรือไม่

4. การตรวจสอบการควบคุมการเข้าถึง

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

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

5. การตรวจสอบการจัดการวัตถุ

หมายเหตุ: ใน Sui วัตถุสามารถแปลงเป็นวัตถุที่ใช้ร่วมกัน (Shared Object) ซึ่งหมายความว่าสิทธิ์การเข้าถึงของวัตถุอาจเปลี่ยนจากส่วนตัวเป็นสาธารณะ ดังนั้นออบเจ็กต์ทั้งหมดที่ใช้จึงต้องได้รับการตรวจสอบอย่างละเอียดเพื่อพิจารณาว่าแต่ละออบเจ็กต์เป็นแบบคงที่หรือแชร์ ให้ความสนใจเป็นพิเศษว่าวัตถุใดๆ ถูกแปลงจากวัตถุส่วนตัวไปเป็นวัตถุที่ใช้ร่วมกันโดยไม่ตั้งใจหรือไม่ ซึ่งอาจส่งผลให้ผู้ใช้ที่ไม่ได้รับอนุญาตเข้าถึงวัตถุเหล่านี้ ซึ่งอาจก่อให้เกิดความเสี่ยงด้านความปลอดภัย

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

6. การตรวจสอบการใช้โทเค็น

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

6. การตรวจสอบการใช้โทเค็น

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

ตำแหน่ง:

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

7. การตรวจสอบการโจมตีสินเชื่อแฟลช

หมายเหตุ: Sui's Move ยังมีการใช้ flash Loan (Hot Potato) ด้วย ผู้ใช้สามารถยืมเงินจำนวนมากในธุรกรรมเดียวและใช้งานได้ตามต้องการ และเพียงต้องคืนเงินภายในธุรกรรมเท่านั้น ผู้ใช้ที่เป็นอันตรายมักจะใช้สินเชื่อแฟลชเพื่อขยายเงินทุนของตนเองเพื่อดำเนินการโจมตีทางการเงินขนาดใหญ่ เช่น การปั่นราคา

การวางตำแหน่ง: วิเคราะห์ว่าอัลกอริทึมของโปรโตคอลเอง (รางวัล อัตราดอกเบี้ย ฯลฯ) และการพึ่งพาเครื่อง Oracle นั้นสมเหตุสมผลหรือไม่

8. การตรวจสอบช่องโหว่การอนุญาต

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

ตำแหน่ง:

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

9. การตรวจสอบความปลอดภัยของการอัพเกรดสัญญา

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

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

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

10. การตรวจสอบความปลอดภัยการโทรภายนอก

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

การวางตำแหน่ง: จำเป็นต้องตรวจสอบไลบรารีที่นำเข้าจากภายนอก

11. การตรวจสอบค่าส่งคืน

หมายเหตุ: เช่นเดียวกับภาษาสัญญาอัจฉริยะอื่นๆ ในสัญญา Move จำเป็นต้องตรวจสอบค่าที่ส่งคืนของฟังก์ชันบางอย่าง หากละเว้นการประมวลผลค่าที่ส่งคืนเหล่านี้ ตรรกะของคีย์อาจดำเนินการไม่ถูกต้อง ซึ่งอาจนำไปสู่ปัญหาด้านความปลอดภัย

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

12. การตรวจสอบการปฏิเสธการให้บริการ

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

12. การตรวจสอบการปฏิเสธการให้บริการ

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

ตำแหน่ง:

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

13. การตรวจสอบการเพิ่มประสิทธิภาพก๊าซ

หมายเหตุ: เช่นเดียวกับ Ethereum Sui ก็มีกลไกของ Gas และการเรียกสคริปต์โมดูลใด ๆ ก็ตามจะใช้ Gas ดังนั้นจึงจำเป็นต้องปรับโค้ดที่มีความยาวและซับซ้อนสูงให้เหมาะสม

ตำแหน่ง:

  • มันเกี่ยวข้องกับการเรียกที่ซับซ้อนเพื่อดูว่าสามารถแยกออกได้หรือไม่
  • มันเกี่ยวข้องกับการเรียกความถี่สูงเพื่อดูว่าสามารถเพิ่มประสิทธิภาพการดำเนินการภายในของฟังก์ชันได้หรือไม่

14. การตรวจสอบตรรกะการออกแบบ

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

ตำแหน่ง:

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

15. อื่นๆ

เนื้อหาไม่สะท้อนให้เห็นในสำนวนข้างต้น

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

อ้างถึง:

[1] https://intro.sui-book.com/

[2] https://docs.sui.io/

[3] https://move-dao.github.io/move-book-zh/introduction.html

ผู้เขียน |. ชัยชนะ!

บรรณาธิการ |. ลิซ่า, ลิซ

ความคิดเห็น

ความคิดเห็นทั้งหมด

Recommended for you

  • Maya Parbhoe ผู้สมัครชิงตำแหน่งประธานาธิบดีซูรินาเม: หากได้รับเลือกเป็นประธานาธิบดี Bitcoin จะถูกกำหนดให้เป็นเงินที่ชำระได้ตามกฎหมาย

    Maya Parbhoe ผู้สมัครชิงตำแหน่งประธานาธิบดีในประเทศซูรินาเมในอเมริกาใต้ มีวิสัยทัศน์ที่ทะเยอทะยานในการสร้างประเทศ Bitcoin ที่หยั่งรากลึกใน cryptocurrencies มากกว่าเอลซัลวาดอร์ Parbhoe ซึ่งเป็น CEO ของ Daedalus Labs ซึ่งเป็นบริษัทผู้ให้บริการที่ใช้ Bitcoin และ NOSTR ได้วางแผนการที่กล้าหาญในการต่อสู้กับการทุจริตและให้ผลประโยชน์ที่แท้จริงแก่ประชาชนโดยการนำมาตรฐาน Bitcoin มาใช้ หากเธอชนะการเลือกตั้งที่กำลังจะมาถึงในปี 2568 สิ่งสำคัญอันดับแรกของเธอคือการสร้าง Bitcoin (BTC) ให้เป็นเงินที่ถูกต้องตามกฎหมายเมื่อเธอเข้ารับตำแหน่ง ภายในปีแรก เธอวางแผนที่จะค่อยๆ แทนที่ดอลลาร์ซูรินาเมด้วย satoshi ซึ่งเป็นหน่วยที่เล็กที่สุดของ Bitcoin และรับรองว่าเงินเดือนทั้งหมดจะจ่ายเป็น BTC

  • OpenTrade ประกาศเสร็จสิ้นการขยายเมล็ดพันธุ์มูลค่า 4 ล้านเหรียญสหรัฐ ซึ่งนำโดย AlbionVC

    OpenTrade ได้ประกาศปิดการขยายเมล็ดพันธุ์มูลค่า 4 ล้านเหรียญสหรัฐ เพื่อสร้างผลิตภัณฑ์การให้กู้ยืมที่ได้รับการสนับสนุนจาก RWA และผลิตภัณฑ์ผลตอบแทนที่มั่นคง การจัดหาเงินทุนรอบนี้นำโดย AlbionVC โดยมีส่วนร่วมจาก a16z Crypto และ CMCC Global OpenTrade ตั้งใจที่จะใช้เงินทุนเพื่อขยายการดำเนินงานและเพิ่มขีดความสามารถของผลิตภัณฑ์

  • VanEck ขยายค่าธรรมเนียม HODL เป็นศูนย์จนถึงเดือนมกราคม 2569

    VanEck ได้ประกาศขยายเวลาค่าธรรมเนียมเป็นศูนย์สำหรับ VanEck Bitcoin ETF (HODL) จนถึงเดือนมกราคม 2569

  • ผู้ก่อตั้ง DEXX: หากแฮกเกอร์เริ่มติดต่อคุณภายใน 48 ชั่วโมง เขาก็ยังเต็มใจที่จะสื่อสาร ไม่เช่นนั้นเขาจะติดตามมันไปจนจบ

    ตามข่าวเมื่อวันที่ 25 พฤศจิกายน รอย ผู้ก่อตั้ง DEXX โพสต์บนโซเชียลมีเดียว่า DEXX ยังไม่ได้เลิกจ้างสมาชิกคนใดในทีมจนถึงทุกวันนี้ และยังคงรักษาต้นทุนการดำเนินงานที่สูงเป็นพิเศษทุกวัน คนที่เชื่อว่าตลาดได้เผยแพร่ข่าวไปแล้ว ค่าใช้จ่ายของทีมตลอดจนค่าใช้จ่ายของผู้ให้บริการโหนดต่างๆ และองค์ประกอบต้นทุนเงินทุนนั้นสูงมากจริงๆ นอกจากนี้ เรายังจ่ายต้นทุนเงินทุนจำนวนมหาศาลในสัปดาห์นี้เพื่อกู้คืนเงินทุนของแฮ็กเกอร์ เราจะรับผิดชอบจนถึงที่สุดและรับรองว่าคำพูดและการกระทำของเราสอดคล้องกัน และเราหวังว่าจะนำ DEXX ไปสู่นิพพานต่อไป 1. เรากำลังทำงานร่วมกับหน่วยงานบังคับใช้กฎหมายและบริษัทรักษาความปลอดภัยหลายแห่งเพื่อตรวจสอบและกำหนดเป้าหมายแฮกเกอร์ และมุ่งมั่นที่จะกู้คืนเงินที่ถูกขโมยไป 2. เรารู้สึกขอบคุณเป็นอย่างยิ่งต่อพันธมิตรของเราที่ได้ร่วมแบ่งปันความทุกข์ยากและไม่เคยทิ้ง DEXX ไว้ในวันที่ยากลำบากที่สุด จนถึงขณะนี้แพลตฟอร์มยังคงสร้างธุรกรรมและผลกำไร ปริมาณการซื้อขายประมาณเกือบ 2 ล้านดอลลาร์ถูกสร้างขึ้นในช่วงสัปดาห์ที่ผ่านมา โดยมีกำไรเกือบ 20,000 ดอลลาร์ 3. ทีมงานกำลังทำงานร่วมกับผู้เชี่ยวชาญด้านความปลอดภัยจำนวนหนึ่งเพื่อสร้างและอัปเกรดโซลูชันการรักษาความปลอดภัยของสินทรัพย์ เพื่อให้มั่นใจในความปลอดภัยของสินทรัพย์ที่ตามมาของผู้ใช้ 4. ขณะนี้ทีมงานกำลังจัดทำแผนการชดเชยสำหรับผู้ใช้ที่เสียหาย เราจะตรวจสอบทุกที่อยู่และทุกกองทุนที่โอนอย่างระมัดระวัง หากแฮกเกอร์ติดต่อเราในเชิงรุกภายใน 48 ชั่วโมง เรายินดีที่จะสื่อสารด้วยทัศนคติในการแก้ปัญหา ไม่เช่นนั้นเราจะดำเนินการเรื่องนี้ให้ถึงที่สุด

  • Morgan Stanley: เงินดอลลาร์สหรัฐจะถึงจุดสูงสุดก่อนสิ้นปีและเข้าสู่ "รูปแบบตลาดหมี" ในปี 2568

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

  • Equation News เรียก Binance ว่าเป็น “โกดังหนู”: คุณกำลังทำลายความเชื่อมั่นของตลาดการซื้อขาย

    ตามข่าวเมื่อวันที่ 25 พฤศจิกายน Equation News ได้ออกบทความว่าถึงผู้ค้าภายในที่เข้าร่วมในรายชื่อสัญญาถาวรของ Binance โปรดขายชิปของคุณอย่างช้าๆ ในครั้งต่อไป การล่มสลายของ WHY และ CHEEMS ที่คุณก่อขึ้นนี้เป็นผลลบ 100% สำหรับทุกคนที่เกี่ยวข้องกับการซื้อขาย และคุณกำลังทำลายความรู้สึกในการซื้อขาย ก่อนหน้านี้ Binance ประกาศว่าจะเปิดตัวสัญญาแบบไม่จำกัดระยะเวลา 1,000WHYUSDT และ 1,000CHEEMSUSDT ซึ่งต่อมาได้กระตุ้นให้เกิดการเปลี่ยนแปลงในระยะสั้นใน WHY และ CHEEMS ทำให้เกิดการอภิปรายอย่างดุเดือดในชุมชน

  • หัวหน้าฝ่ายกลยุทธ์สินทรัพย์ดิจิทัลที่ Fundstrat: กิมจิพรีเมียมในปัจจุบันอยู่ที่ประมาณ 0% ซึ่งอาจบ่งชี้ว่า BTC ยังมีช่องว่างที่จะเพิ่มขึ้น

    Sean หัวหน้าฝ่ายกลยุทธ์สินทรัพย์ดิจิทัลที่ Fundstra Farrell กล่าวในบันทึกของลูกค้าล่าสุดว่า "เพื่อนและครอบครัว" กำลังเริ่มถามเกี่ยวกับสกุลเงินดิจิทัลอีกครั้ง และจากตัวชี้วัดตลาดเชิงปริมาณ สถานการณ์ปัจจุบันดูเหมือนจะไม่เป็นฟองสบู่เหมือนการชุมนุมในเดือนมีนาคมหรือจุดสูงสุดของวัฏจักรในช่วงปลายปี 2021 เช่น ข้อมูลตัวบ่งชี้พรีเมียมกิมจิในตลาดเกาหลีในปัจจุบันอยู่ที่ประมาณ 0% บ่งชี้ว่าผู้ค้าชาวเกาหลีขาดความตื่นเต้นมากเกินไป โดยปกติหากตลาดถึงจุดสูงสุด กิมจิพรีเมียมจะพุ่งขึ้นมากกว่า 10% และจะเพิ่มขึ้น สัปดาห์ที่ผ่านมาไม่ควรถือเป็นการเก็งกำไรทางเพศอย่างแท้จริง Bitcoin อาจยังมีพื้นที่เพิ่มขึ้น

  • Solana Lianchuang กล่าวว่า Solana เร็วกว่า ZK เสมอ CEO ของ Matter Labs ปฏิเสธ

    Toly ผู้ร่วมก่อตั้ง Solana กล่าวในการตอบกลับชาวเน็ตที่ตอบกลับ: "ZK ดีกว่า Solana เสมอ เร็วกว่าเพราะได้รับการรักษาความปลอดภัยด้วยคณิตศาสตร์แทนที่จะเป็นเครื่องมือตรวจสอบความถูกต้อง ซึ่งหมายความว่าเครื่องมือตรวจสอบความถูกต้องหนึ่งหรือสองสามตัว (สำหรับความซ้ำซ้อน) ก็เพียงพอแล้ว และคุณไม่จำเป็นต้องรอฉันทามติจากโหนดหลายพันโหนด”

  • Mike Flood ผู้แทนสหรัฐฯ: รอคอยที่จะทำงานร่วมกับประธาน ก.ล.ต. คนต่อไปเพื่อเพิกถอนนโยบายต่อต้านการเข้ารหัสลับของธนาคาร SAB 121

    ผู้แทนไมค์ ฟลัด แห่งสภาผู้แทนราษฎรแห่งสหรัฐอเมริกากล่าวเมื่อเร็วๆ นี้ว่า "แม้จะมีการต่อต้านอย่างกว้างขวาง แต่ SAB 121 ยังคงดำเนินการอย่างมีประสิทธิผลในฐานะที่เป็นกฎเกณฑ์ แม้ว่าจะไม่เคยผ่านกระบวนการพระราชบัญญัติวิธีพิจารณาคดีปกครองตามปกติก็ตาม" Flood กล่าวว่า "ฉันหวังว่าจะได้ร่วมงานด้วย" เขาจะร่วมมือกับประธาน SEC คนต่อไปเพื่อยกเลิก SAB 121 ไม่ว่าประธาน Gary Gensler จะลาออกตามความคิดริเริ่มของเขาเองหรือประธานาธิบดี Trump จะปฏิบัติตามคำสัญญาของเขา (ที่จะไล่ Gensler ออก) ฝ่ายบริหารชุดใหม่ก็มีโอกาสที่ดีเยี่ยมในการเริ่มต้นยุคใหม่หลังจากนั้น เกนส์เลอร์ลาออกจากตำแหน่ง” กล่าวเสริม: “ไม่น่าแปลกใจเลยที่ Gensler คัดค้านกรอบการกำกับดูแลสินทรัพย์ดิจิทัลที่ผ่านสภาเมื่อต้นปีนี้ พรรคเดโมแครต 71 คนเข้าร่วมสภาผู้แทนราษฎรในการผ่านกรอบสามัญสำนึกนี้ แม้ว่าวุฒิสภาจะปฏิเสธก็ตาม ยอมรับมัน แต่มันแสดงถึงช่วงเวลาแห่งการฝ่าวงล้อมสำหรับ crypto และอาจแจ้งการทำงานของฝ่ายบริหารของพรรครีพับลิกันแบบครบวงจรเมื่อสภาคองเกรสครั้งต่อไปจะเริ่มในเดือนมกราคมปีหน้า”

  • มหาเศรษฐีชาวอินเดีย Adani ถูก SEC เรียกตัวเพื่ออธิบายจุดยืนในคดีติดสินบน

    มหาเศรษฐีชาวอินเดีย Gautam Adani และหลานชายของเขา Sagar Adani ถูกหมายเรียกโดยสำนักงานคณะกรรมการกำกับหลักทรัพย์และตลาดหลักทรัพย์ของสหรัฐอเมริกา (SEC) เพื่ออธิบายข้อกล่าวหาที่ว่าพวกเขาจ่ายเงินสินบนมากกว่า 250 ล้านดอลลาร์เพื่อชนะสัญญาพลังงานแสงอาทิตย์ ตามรายงานของ Press Trust of India (PTI) ระบุว่า มีการส่งหมายเรียกไปยังบ้านพักของครอบครัวอาดานีในเมืองอาห์เมดาบัด เมืองทางตะวันตกของอินเดีย โดยกำหนดให้ต้องตอบกลับภายใน 21 วัน PTI อ้างคำบอกกล่าวที่ออกผ่านศาลแขวงตะวันออกของนิวยอร์กเมื่อวันที่ 21 พฤศจิกายน โดยระบุว่า หากครอบครัว Adani ไม่ตอบกลับตรงเวลา จะมีการตัดสินผิดนัดต่อพวกเขา