คำเตือนความเสี่ยง: ระวังความเสี่ยงจากการระดมทุนที่ผิดกฎหมายในนาม 'สกุลเงินเสมือน' 'บล็อกเชน' — จากห้าหน่วยงานรวมถึงคณะกรรมการกำกับดูแลการธนาคารและการประกันภัย
ข่าวสาร
ค้นพบ
ค้นหา
เข้าสู่ระบบ
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt
BTC
ETH
HTX
SOL
BNB
ดูตลาด
ไดอารี่การพัฒนาสัญญาสมาร์ทสนิม (10-2)
BlockSec
特邀专栏作者
2022-04-03 04:13
บทความนี้มีประมาณ 4501 คำ การอ่านทั้งหมดใช้เวลาประมาณ 7 นาที
บทความนี้นำเสนอการตีความสัญญาของ Sputnik_DAOv2::Factory Contract

คำนำ1. สัญญาโรงงาน Sputnik-DAO

Sputnik-DAO ใช้รูปแบบการออกแบบโรงงานเชิงสร้างสรรค์ (Factory Pattern) เพื่อตระหนักถึงการสร้างและการจัดการแบบรวมศูนย์ขององค์กรปกครองตนเองแบบกระจายอำนาจ (DAO) ของแพลตฟอร์ม

บทความนี้จะแนะนำการออกแบบและการใช้งานรูปแบบโรงงานแพลตฟอร์ม Sputnik-DAO (sputnikdao-factory) โดยละเอียด

คลังซอร์สโค้ดของสัญญาที่เกี่ยวข้องอยู่ที่: https://github.com/near-daos/sputnik-dao-contract/tree/518ad1d97614fff4b945aba75b6c8bd2483187a2

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

2. การแนะนำฟังก์ชันโมดูล DAPP

เปิดหน้า DAPP ของแพลตฟอร์ม Sputnik DAO จะเห็นได้ว่าองค์กรอิสระแบบกระจายอำนาจจำนวนมากได้สร้างและปรับแต่งวัตถุอินสแตนซ์ DAO ของตนเอง (สัญญา Sputnikdaov2) บนแพลตฟอร์ม

ในเดือนมีนาคม 2022 DAO ที่มีการใช้งานมากที่สุดที่สร้างขึ้นภายใต้แพลตฟอร์มนี้คือ news.sputnik-dao.near ซึ่งมีข้อเสนอ 3051 รายการ (ข้อเสนอ) อยู่ในการลงคะแนนสาธารณะหรือสถานะถูกปิด

📄เพื่อความสะดวกของผู้อ่าน แผนภาพโครงสร้างของสัญญามีไว้ด้านบนเพื่อเป็นข้อมูลอ้างอิง

นั่นคือ สัญญาอินสแตนซ์ DAO ทั้งหมดที่สร้างขึ้นบนแพลตฟอร์ม Sputnik DAO จะถูกปรับใช้ภายใต้บัญชีย่อยของบัญชี NEAR ตัวอย่างเช่น:

สำหรับคำจำกัดความของบัญชีย่อยใน NEAR Protocol คุณสามารถดูข้อมูลอ้างอิงได้ที่ https://docs.near.org/docs/concepts/account#subaccounts 🔗

ดังที่แสดงในรูปด้านล่าง องค์กรที่กระจายอำนาจสามารถเริ่มต้นการทำธุรกรรมอย่างเปิดเผยบนเครือข่ายหลัก NEAR และสร้างอินสแตนซ์ DAO ใหม่โดยเรียกเมธอด create() ที่ให้ไว้ในสัญญา sputnikdao-factory

3. การตีความรหัสสัญญาโรงงานสปุตนิกดาว

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

3.1 การสร้าง DAO

สถานะสัญญาโรงงานสปุตนิกดาวส่วนใหญ่ประกอบด้วยสองส่วนต่อไปนี้:

เนื้อหาเฉพาะของพารามิเตอร์ args หลังจากถอดรหัส Base64 คือ:

เนื้อหานี้เป็นข้อมูลการกำหนดค่าสัญญาที่จำเป็นเมื่อดำเนินการวิธีการเริ่มต้นสัญญาใหม่ () เมื่อปรับใช้สัญญา multicall.sputnik-dao.near

บทความต่อไปนี้จะวิเคราะห์การใช้งานเฉพาะของ factory_manager.create_contract อย่างละเอียด:

พารามิเตอร์ของฟังก์ชันนี้ระบุไว้ดังนี้:

ข้อมูลพื้นฐานของ DAO ที่จัดทำโดยองค์กรปกครองตนเองแบบกระจายอำนาจ: Config

5. callback_method: ระบุฟังก์ชันการเรียกกลับหลังจากดำเนินการเมธอด create_contract() ซึ่งใช้เพื่อรักษาและประมวลผลข้อมูลของสัญญาอินสแตนซ์ DAO ใหม่ในสัญญาโรงงานนี้

6. callback_args: พารามิเตอร์ฟังก์ชันของฟังก์ชันการโทรกลับ

การดำเนินการของฟังก์ชันนี้แบ่งออกเป็นขั้นตอนต่อไปนี้เป็นหลัก:

หลังจากปรับใช้สัญญาอินสแตนซ์ DAO ขั้นสุดท้ายแล้ว ฟังก์ชัน on_create() จะถูกเรียกกลับเมื่อสิ้นสุดโค้ดการดำเนินการของ

ต่อไปนี้คือการใช้โค้ดภายในของฟังก์ชันการเรียกกลับ on_create:

ตรรกะการประมวลผลเฉพาะของฟังก์ชันนี้คือ:

ข้อความ

ข้อความ

ข้อความ

รหัสตั้งอยู่ที่: sputnikdao-factory2/src/lib.rs # Line136-149

รายละเอียดการประมวลผลของ factory_manager.update_contract() มีดังนี้: อินเทอร์เฟซนี้สามารถรับรู้การเรียกใช้ฟังก์ชัน update() ในสัญญาอินสแตนซ์ DAO ที่สอดคล้องกัน

เป็นมูลค่าการกล่าวขวัญว่า:

ในระหว่างการวิเคราะห์รหัส Sputnik-DAO BlockSec พบปัญหาด้านความปลอดภัยที่ร้ายแรงในสัญญาโรงงาน ซึ่งจะส่งผลต่อสัญญาทั้งหมดที่ใช้ Sputnik-DAO หลังจากติดต่อฝ่ายโครงการ ในที่สุดปัญหาก็ได้รับการยืนยันและแก้ไขได้ทันเวลา

💡ช่องโหว่ด้านความปลอดภัยได้รับการอธิบายไว้โดยเฉพาะดังนี้:

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

บังเอิญ สัญญาอินสแตนซ์ DAO (สัญญา Sputnikdaov2) อนุญาตให้อัปเกรดสัญญานี้โดย Sputnik-DAO Factory ผ่านการเรียกข้ามสัญญาโดยค่าเริ่มต้น

วิธี update() ที่ใช้ในสัญญาอินสแตนซ์ DAO มีดังต่อไปนี้ รหัสอยู่ใน sputnikdao2/src/upgrade.rs # บรรทัดที่ 62

ในบรรทัดที่ 9 ของโค้ดข้างต้น ค่าของ factory_info.auto_update จะถูกตั้งค่าเป็น True โดยค่าเริ่มต้นเมื่อสัญญาอินสแตนซ์ DAO ปรับใช้และเรียกเมธอด new() สำหรับการเริ่มต้น

วิธีการใหม่ () ของสัญญาอินสแตนซ์ DAO ถูกนำมาใช้ดังนี้: รหัสอยู่ใน sputnikdao2/src/lib.rs # บรรทัดที่ 83-104

โดยสรุป ผู้ใช้ทั่วไป (ไม่ใช่สัญญาโรงงานและสัญญา DAO เอง) สามารถอัปเกรด (แก้ไข) รหัสของสัญญา DAO ใดๆ ผ่านวิธีการ pub fn update() ที่จัดทำโดยสัญญาโรงงาน ซึ่งจะให้แพลตฟอร์ม Sputnik-DAO และ โครงการสัญญาทั้งหมดที่ใช้แพลตฟอร์ม Sputnik-DAO มีความเสี่ยงด้านความปลอดภัยสูง

🪴 โชคดีที่เมื่อพบปัญหานี้ รหัสของเวอร์ชันนี้ยังไม่ได้เปิดใช้งานบน NEAR mainnet ดังนั้นจึงไม่มีการสูญเสีย

เนื่องจากการตอบสนองอย่างรวดเร็วของฝ่ายโครงการ ช่องโหว่จึงได้รับการแก้ไขอย่างถูกต้องโดยการเพิ่มกลไกการตรวจสอบรายการที่อนุญาตพิเศษที่สมเหตุสมผล😊

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

ข้อความ

นอกจากช่องโหว่ที่ค้นพบและแก้ไขแล้วข้างต้น ความปลอดภัยของสัญญา Sputnik-DAO Factory ยังรับประกันได้จากประเด็นต่อไปนี้เป็นหลัก:

ไม่มีฟังก์ชันใดต่อไปนี้แก้ไขตัวแปรสถานะ:

เนื่องจากการตอบสนองอย่างรวดเร็วของฝ่ายโครงการ ช่องโหว่จึงได้รับการแก้ไขอย่างถูกต้องโดยการเพิ่มกลไกการตรวจสอบรายการที่อนุญาตพิเศษที่สมเหตุสมผล😊

ดูข้อตกลงการแก้ไขนี้: 518ad1d97614fff4b945aba75b6c8bd2483187a2🔗

สรุปโดย AI
กลับไปด้านบน
บทความนี้นำเสนอการตีความสัญญาของ Sputnik_DAOv2::Factory Contract
ดาวน์โหลดแอพ Odaily พลาเน็ตเดลี่
ให้คนบางกลุ่มเข้าใจ Web3.0 ก่อน
IOS
Android