Урок 2

เจาะลึกตัวอย่างสัญญา Multisig

ในบทนี้ เราจะเริ่มต้นการสำรวจเชิงลึกเกี่ยวกับโครงสร้างสัญญา Multisig ที่แตกต่างกันสามโครงสร้างที่นำมาใช้ในบทที่ 1: Lambda Contract, MultisigAction Contract และ MultisigView Contract สัญญาเหล่านี้ถือเป็นสิ่งสำคัญที่ต้องทำความเข้าใจเนื่องจากมีบทบาทสำคัญในด้านบล็อกเชนและการเงินแบบกระจายอำนาจ การสำรวจของเราจะเกี่ยวข้องกับการแยกโครงสร้างโค้ดอย่างพิถีพิถัน การอธิบายคุณสมบัติที่เป็นเอกลักษณ์อย่างละเอียด และการอภิปรายเกี่ยวกับการใช้งานจริงและกรณีการใช้งาน

สัญญา Multisig Lambda

Multisig Lambda Contract เป็นการก้าวกระโดดครั้งสำคัญในการเขียนโปรแกรมสัญญาอัจฉริยะเนื่องจากการใช้ประเภท sp.lambda โดยนำเสนอความเป็นไปได้ในการดำเนินการฟังก์ชันตามอำเภอใจที่ไม่ได้กำหนดไว้ล่วงหน้า ณ เวลาที่ปรับใช้สัญญา ต่อไปนี้เป็นภาพรวมโดยละเอียดของส่วนประกอบหลัก:

  1. พารามิเตอร์เริ่มต้น: สัญญาเริ่มต้นแล้ว (__init__) โดยมีรายชื่อสมาชิกที่ได้รับอนุญาตให้เสนอและลงนามข้อเสนอ และจำนวนลายเซ็นขั้นต่ำที่จำเป็นในการดำเนินการข้อเสนอ สิ่งเหล่านี้ถูกเก็บไว้ในที่เก็บข้อมูลของสัญญา (self.data) สร้างบันทึกอ้างอิงสำหรับสัญญาในการดำเนินการ

  2. ฟังก์ชั่นเสนอ: ฟังก์ชั่น propose ทำหน้าที่สร้างข้อเสนอใหม่ สมาชิกสามารถส่งฟังก์ชัน lambda (ประกอบด้วยการดำเนินการตามอำเภอใจ) ที่ต้องการให้ดำเนินการตามสัญญาได้ ข้อเสนอเหล่านี้ถูกจัดเก็บไว้ในโครงสร้างข้อมูล big_map โดยแต่ละข้อเสนอจะมีตัวระบุที่ไม่ซ้ำกัน

  3. ฟังก์ชั่นการลงนาม: ฟังก์ชั่น sign อำนวยความสะดวกในการรับรองข้อเสนอ สมาชิกสามารถลงนามสนับสนุนข้อเสนอได้ ลายเซ็นเหล่านี้ ซึ่งแนบมากับตัวระบุข้อเสนอที่ไม่ซ้ำกัน จะถูกรวบรวมและดูแลรักษาใน big_map ที่แยกต่างหาก

  4. ดำเนินการฟังก์ชัน: ฟังก์ชัน execute การแสดงถึงปมของการดำเนินงานของสัญญา หากข้อเสนอรวบรวมลายเซ็นตามจำนวนที่ต้องการ สมาชิกสามารถเรียกใช้ฟังก์ชันนี้เพื่อดำเนินการฟังก์ชัน lambda ที่เสนอ โดยนำไปใช้กับพื้นที่จัดเก็บของสัญญา
    Multisig Lambda Contract นำเสนอความหลากหลายที่หลากหลาย เหมาะสำหรับสถานการณ์ที่ต้องการโครงสร้างการควบคุมที่ซับซ้อน ยืดหยุ่น และอาจมีไดนามิก เช่น DAO (องค์กรอิสระแบบกระจายอำนาจ) บริการกระเป๋าเงินที่มีเจ้าของหลายราย และโปรโตคอล DeFi ที่ซับซ้อน

สัญญานี้กำหนดให้มีการดำเนินการฟังก์ชัน lambda โดยพลการพร้อมลายเซ็นหลายลายเซ็น โดยจะแนะนำแนวคิดในการส่งและลงนามฟังก์ชัน lambda มาดูฟังก์ชั่นของมันกัน:

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

  2. vote_lambda: ฟังก์ชั่นนี้อนุญาตให้สมาชิกลงคะแนนเสียง (ลายเซ็น) เพื่อสนับสนุนฟังก์ชันแลมบ์ดาที่ส่งมา หลังจากการลงคะแนน ในแผง IDE คุณจะสังเกตเห็นธุรกรรมใหม่จากที่อยู่ของสมาชิกไปยังที่อยู่ของสัญญา

สัญญา MultisigAction

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

ส่วนประกอบหลักของสัญญานี้คือ:

  1. พารามิเตอร์เริ่มต้น: เช่นเดียวกับในสัญญา Lambda MultisigAction Contract จะนำรายชื่อสมาชิกและจำนวนคะแนนเสียงที่ต้องการในระหว่างการเริ่มต้น

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

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

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

  5. send_proposal: นี่คือกระบวนการเสนอการดำเนินการใหม่ ในบริบทของตัวอย่างของเรา สมาชิกกำลังเสนอให้เพิ่มผู้ลงนามใหม่ในสัญญา

  6. เมื่อดำเนินการนี้บน SmartPy IDE คุณจะเห็นธุรกรรมใหม่ถูกสร้างขึ้นในแผงด้านขวาของ IDE สรุปธุรกรรมจะระบุผู้ส่ง (ที่อยู่ของสมาชิกผู้เสนอ) และผู้รับ (ที่อยู่ของสัญญา) อาจมีลักษณะดังนี้:

ที่นี่ สถานะ 'ตกลง' แสดงว่าส่งข้อเสนอสำเร็จแล้ว

  1. vote_proposal: ขั้นตอนต่อไปคือการโหวตข้อเสนอ ฟังก์ชันนี้ช่วยให้ผู้ลงนามที่มีอยู่สามารถลงคะแนนในข้อเสนอที่ส่งมาในขั้นตอนก่อนหน้าได้

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

ธุรกรรมเหล่านี้บ่งชี้ว่าทั้งผู้ลงนาม 1 และผู้ลงนาม 2 ได้ลงคะแนนเสียงสำหรับข้อเสนอสำเร็จแล้ว

สัญญา MultisigView

MultisigView Contract นำเสนอแนวคิดที่เป็นเอกฉันท์ประชาธิปไตย แต่นำไปใช้กับไบต์ที่กำหนดเองแทนการดำเนินการตามสัญญาที่กำหนดไว้ล่วงหน้า สัญญานี้เปิดช่องทางให้สามารถบรรลุฉันทามติเกี่ยวกับข้อมูลที่แสดงเป็นไบต์ โดยไม่ต้องนำไปสู่การดำเนินการทันที

โครงสร้างหลักของสัญญานี้คือ:

  1. พารามิเตอร์เริ่มต้น: เช่นเดียวกับสัญญาก่อนหน้านี้ สัญญา MultisigView จะเริ่มต้นด้วยรายชื่อสมาชิกและตัวเลขที่ระบุคะแนนโหวตที่ต้องการ

  2. ฟังก์ชั่นส่งข้อเสนอ: ฟังก์ชั่นนี้ช่วยให้สมาชิกแนะนำข้อเสนอใหม่ในรูปแบบของไบต์ที่กำหนดเอง ไบต์จะถูกจัดเก็บไว้ใน big_map ซึ่งจัดทำดัชนีโดยไบต์นั้นเอง ซึ่งแสดงถึงตัวระบุข้อเสนอที่ไม่ซ้ำกัน

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

  4. ฟังก์ชันที่ได้รับการโหวต: ฟังก์ชันนี้ ซึ่งเป็นมุมมองออนไลน์ ตรวจสอบว่าข้อเสนอได้รับการโหวตตามที่ต้องการหรือไม่ โดยจะส่งกลับค่าบูลีนที่ระบุสถานะการลงคะแนนเสียงของข้อเสนอ
    MultisigView Contract มีประโยชน์อย่างยิ่งในกรณีที่ Smart Contract จำเป็นต้องเก็บรักษาบันทึกข้อเสนอที่ได้รับอนุมัติ เช่น ในแอปพลิเคชันการเข้ารหัสที่ไบต์สามารถแสดงถึงข้อตกลงที่แฮช หลักฐาน หรือข้อมูลรูปแบบอื่นใดที่ต้องได้รับการอนุมัติโดยรวม

Відмова від відповідальності
* Криптоінвестиції пов'язані зі значними ризиками. Дійте обережно. Курс не є інвестиційною консультацією.
* Курс створений автором, який приєднався до Gate Learn. Будь-яка думка, висловлена автором, не є позицією Gate Learn.
Каталог
Урок 2

เจาะลึกตัวอย่างสัญญา Multisig

ในบทนี้ เราจะเริ่มต้นการสำรวจเชิงลึกเกี่ยวกับโครงสร้างสัญญา Multisig ที่แตกต่างกันสามโครงสร้างที่นำมาใช้ในบทที่ 1: Lambda Contract, MultisigAction Contract และ MultisigView Contract สัญญาเหล่านี้ถือเป็นสิ่งสำคัญที่ต้องทำความเข้าใจเนื่องจากมีบทบาทสำคัญในด้านบล็อกเชนและการเงินแบบกระจายอำนาจ การสำรวจของเราจะเกี่ยวข้องกับการแยกโครงสร้างโค้ดอย่างพิถีพิถัน การอธิบายคุณสมบัติที่เป็นเอกลักษณ์อย่างละเอียด และการอภิปรายเกี่ยวกับการใช้งานจริงและกรณีการใช้งาน

สัญญา Multisig Lambda

Multisig Lambda Contract เป็นการก้าวกระโดดครั้งสำคัญในการเขียนโปรแกรมสัญญาอัจฉริยะเนื่องจากการใช้ประเภท sp.lambda โดยนำเสนอความเป็นไปได้ในการดำเนินการฟังก์ชันตามอำเภอใจที่ไม่ได้กำหนดไว้ล่วงหน้า ณ เวลาที่ปรับใช้สัญญา ต่อไปนี้เป็นภาพรวมโดยละเอียดของส่วนประกอบหลัก:

  1. พารามิเตอร์เริ่มต้น: สัญญาเริ่มต้นแล้ว (__init__) โดยมีรายชื่อสมาชิกที่ได้รับอนุญาตให้เสนอและลงนามข้อเสนอ และจำนวนลายเซ็นขั้นต่ำที่จำเป็นในการดำเนินการข้อเสนอ สิ่งเหล่านี้ถูกเก็บไว้ในที่เก็บข้อมูลของสัญญา (self.data) สร้างบันทึกอ้างอิงสำหรับสัญญาในการดำเนินการ

  2. ฟังก์ชั่นเสนอ: ฟังก์ชั่น propose ทำหน้าที่สร้างข้อเสนอใหม่ สมาชิกสามารถส่งฟังก์ชัน lambda (ประกอบด้วยการดำเนินการตามอำเภอใจ) ที่ต้องการให้ดำเนินการตามสัญญาได้ ข้อเสนอเหล่านี้ถูกจัดเก็บไว้ในโครงสร้างข้อมูล big_map โดยแต่ละข้อเสนอจะมีตัวระบุที่ไม่ซ้ำกัน

  3. ฟังก์ชั่นการลงนาม: ฟังก์ชั่น sign อำนวยความสะดวกในการรับรองข้อเสนอ สมาชิกสามารถลงนามสนับสนุนข้อเสนอได้ ลายเซ็นเหล่านี้ ซึ่งแนบมากับตัวระบุข้อเสนอที่ไม่ซ้ำกัน จะถูกรวบรวมและดูแลรักษาใน big_map ที่แยกต่างหาก

  4. ดำเนินการฟังก์ชัน: ฟังก์ชัน execute การแสดงถึงปมของการดำเนินงานของสัญญา หากข้อเสนอรวบรวมลายเซ็นตามจำนวนที่ต้องการ สมาชิกสามารถเรียกใช้ฟังก์ชันนี้เพื่อดำเนินการฟังก์ชัน lambda ที่เสนอ โดยนำไปใช้กับพื้นที่จัดเก็บของสัญญา
    Multisig Lambda Contract นำเสนอความหลากหลายที่หลากหลาย เหมาะสำหรับสถานการณ์ที่ต้องการโครงสร้างการควบคุมที่ซับซ้อน ยืดหยุ่น และอาจมีไดนามิก เช่น DAO (องค์กรอิสระแบบกระจายอำนาจ) บริการกระเป๋าเงินที่มีเจ้าของหลายราย และโปรโตคอล DeFi ที่ซับซ้อน

สัญญานี้กำหนดให้มีการดำเนินการฟังก์ชัน lambda โดยพลการพร้อมลายเซ็นหลายลายเซ็น โดยจะแนะนำแนวคิดในการส่งและลงนามฟังก์ชัน lambda มาดูฟังก์ชั่นของมันกัน:

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

  2. vote_lambda: ฟังก์ชั่นนี้อนุญาตให้สมาชิกลงคะแนนเสียง (ลายเซ็น) เพื่อสนับสนุนฟังก์ชันแลมบ์ดาที่ส่งมา หลังจากการลงคะแนน ในแผง IDE คุณจะสังเกตเห็นธุรกรรมใหม่จากที่อยู่ของสมาชิกไปยังที่อยู่ของสัญญา

สัญญา MultisigAction

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

ส่วนประกอบหลักของสัญญานี้คือ:

  1. พารามิเตอร์เริ่มต้น: เช่นเดียวกับในสัญญา Lambda MultisigAction Contract จะนำรายชื่อสมาชิกและจำนวนคะแนนเสียงที่ต้องการในระหว่างการเริ่มต้น

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

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

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

  5. send_proposal: นี่คือกระบวนการเสนอการดำเนินการใหม่ ในบริบทของตัวอย่างของเรา สมาชิกกำลังเสนอให้เพิ่มผู้ลงนามใหม่ในสัญญา

  6. เมื่อดำเนินการนี้บน SmartPy IDE คุณจะเห็นธุรกรรมใหม่ถูกสร้างขึ้นในแผงด้านขวาของ IDE สรุปธุรกรรมจะระบุผู้ส่ง (ที่อยู่ของสมาชิกผู้เสนอ) และผู้รับ (ที่อยู่ของสัญญา) อาจมีลักษณะดังนี้:

ที่นี่ สถานะ 'ตกลง' แสดงว่าส่งข้อเสนอสำเร็จแล้ว

  1. vote_proposal: ขั้นตอนต่อไปคือการโหวตข้อเสนอ ฟังก์ชันนี้ช่วยให้ผู้ลงนามที่มีอยู่สามารถลงคะแนนในข้อเสนอที่ส่งมาในขั้นตอนก่อนหน้าได้

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

ธุรกรรมเหล่านี้บ่งชี้ว่าทั้งผู้ลงนาม 1 และผู้ลงนาม 2 ได้ลงคะแนนเสียงสำหรับข้อเสนอสำเร็จแล้ว

สัญญา MultisigView

MultisigView Contract นำเสนอแนวคิดที่เป็นเอกฉันท์ประชาธิปไตย แต่นำไปใช้กับไบต์ที่กำหนดเองแทนการดำเนินการตามสัญญาที่กำหนดไว้ล่วงหน้า สัญญานี้เปิดช่องทางให้สามารถบรรลุฉันทามติเกี่ยวกับข้อมูลที่แสดงเป็นไบต์ โดยไม่ต้องนำไปสู่การดำเนินการทันที

โครงสร้างหลักของสัญญานี้คือ:

  1. พารามิเตอร์เริ่มต้น: เช่นเดียวกับสัญญาก่อนหน้านี้ สัญญา MultisigView จะเริ่มต้นด้วยรายชื่อสมาชิกและตัวเลขที่ระบุคะแนนโหวตที่ต้องการ

  2. ฟังก์ชั่นส่งข้อเสนอ: ฟังก์ชั่นนี้ช่วยให้สมาชิกแนะนำข้อเสนอใหม่ในรูปแบบของไบต์ที่กำหนดเอง ไบต์จะถูกจัดเก็บไว้ใน big_map ซึ่งจัดทำดัชนีโดยไบต์นั้นเอง ซึ่งแสดงถึงตัวระบุข้อเสนอที่ไม่ซ้ำกัน

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

  4. ฟังก์ชันที่ได้รับการโหวต: ฟังก์ชันนี้ ซึ่งเป็นมุมมองออนไลน์ ตรวจสอบว่าข้อเสนอได้รับการโหวตตามที่ต้องการหรือไม่ โดยจะส่งกลับค่าบูลีนที่ระบุสถานะการลงคะแนนเสียงของข้อเสนอ
    MultisigView Contract มีประโยชน์อย่างยิ่งในกรณีที่ Smart Contract จำเป็นต้องเก็บรักษาบันทึกข้อเสนอที่ได้รับอนุมัติ เช่น ในแอปพลิเคชันการเข้ารหัสที่ไบต์สามารถแสดงถึงข้อตกลงที่แฮช หลักฐาน หรือข้อมูลรูปแบบอื่นใดที่ต้องได้รับการอนุมัติโดยรวม

Відмова від відповідальності
* Криптоінвестиції пов'язані зі значними ризиками. Дійте обережно. Курс не є інвестиційною консультацією.
* Курс створений автором, який приєднався до Gate Learn. Будь-яка думка, висловлена автором, не є позицією Gate Learn.