Урок 5

การเพิ่มประสิทธิภาพสัญญาอัจฉริยะ ตอนจบ - เคล็ดลับและคำแนะนำขั้นสูง

ในบทเรียนก่อนหน้านี้ เราได้ครอบคลุมแนวคิดพื้นฐานและเครื่องมือที่คุณต้องการเพื่อเพิ่มประสิทธิภาพก๊าซบนสัญญาอัจฉริยะ Ethereum โดยเฉพาะอย่างยิ่งการใช้ Remix IDE เมื่อเราสรุปหลักสูตรนี้ เราจะมาเจาะลึกเทคนิคขั้นสูงและแนวทางปฏิบัติที่ดีที่สุดกัน บทเรียนสุดท้ายนี้จะรวมความรู้ที่เราสั่งสมมา เพื่อให้แน่ใจว่าคุณจะได้ความเข้าใจรอบด้านเกี่ยวกับการเพิ่มประสิทธิภาพก๊าซในสัญญาอัจฉริยะของ Ethereum

การปรับโครงสร้างและลดความซับซ้อนของโค้ด

หนึ่งในวิธีที่ตรงไปตรงมาที่สุดในการประหยัดน้ำมันก็คือการทำให้โค้ดของคุณง่ายขึ้น ยิ่งมีโค้ดให้รันน้อยก็กินแก๊สน้อยลง

ตัวอย่างการปฏิบัติ

พิจารณาฟังก์ชันต่อไปนี้:

ความแข็งแกร่ง 
 ความแข็งแกร่งของแพรกมา ^0.8.9; 

 สัญญาการเพิ่มประสิทธิภาพตัวอย่าง { 
 ที่อยู่ [] ผู้ดูแลระบบสาธารณะ; 

 ฟังก์ชั่น isUserAdmin (ผู้ใช้ที่อยู่) มุมมองสาธารณะส่งคืน (บูล) { 
 สำหรับ (uint i = 0; i < admins.length; i++) {
            if (admins[i] == user) return true;
        }
        คืนค่าเท็จ; 
 } 
 }

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

Solidity 
 สัญญา OptimizationExampleOptimized { 
 การแมป (ที่อยู่ => บูล) ผู้ดูแลระบบสาธารณะ; 

 ฟังก์ชั่น isUserAdmin (ผู้ใช้ที่อยู่) มุมมองสาธารณะส่งคืน (บูล) {
        return admins[user];
    }
}

นำข้อมูลกลับมาใช้ใหม่

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

ใช้ไลบรารี

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

Solidity 
 ไลบรารี SafeMath { 
 ฟังก์ชั่น เพิ่ม (uint a, uint b) ผลตอบแทนบริสุทธิ์ภายใน (uint) {
        uint c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }
    //... ฟังก์ชันทางคณิตศาสตร์อื่นๆ 
 } 

 สัญญา การใช้SafeMath { 
 ใช้ SafeMath สำหรับ uint; 

 ไม่ใช่คุณค่าสาธารณะ; การเพิ่มฟังก์ชัน 

 รายการ (uint _value) สาธารณะ {
        value = value.add(_value);
    }
}

ลบที่เก็บข้อมูลที่ไม่จำเป็น

คีย์เวิร์ด delete ใน Solidity ช่วยให้คุณสามารถลบล้างตัวแปร ซึ่งจะคืนค่าแก๊สบางส่วน หากคุณจัดเก็บพื้นที่บางส่วนเสร็จแล้ว ให้ลบออกเพื่อรับเงินคืน

พิจารณาบันทึกเหตุการณ์

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

หลีกเลี่ยงการใช้การดำเนินการที่มีราคาแพง

การดำเนินการบางอย่างต้องใช้แก๊สมากกว่าการดำเนินการอื่นๆ ตัวอย่างเช่น:

  • การเรียกใช้ฟังก์ชันภายนอกมีราคาแพงกว่าการเรียกใช้ฟังก์ชันภายใน
  • การโต้ตอบกับที่เก็บข้อมูลมีราคาแพงกว่าการโต้ตอบกับหน่วยความจำ
  • บางครั้งอาร์เรย์แบบไดนามิกอาจมีราคาน้ำมันมากกว่าอาร์เรย์ขนาดคงที่

บทสรุป

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

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

การเพิ่มประสิทธิภาพสัญญาอัจฉริยะ ตอนจบ - เคล็ดลับและคำแนะนำขั้นสูง

ในบทเรียนก่อนหน้านี้ เราได้ครอบคลุมแนวคิดพื้นฐานและเครื่องมือที่คุณต้องการเพื่อเพิ่มประสิทธิภาพก๊าซบนสัญญาอัจฉริยะ Ethereum โดยเฉพาะอย่างยิ่งการใช้ Remix IDE เมื่อเราสรุปหลักสูตรนี้ เราจะมาเจาะลึกเทคนิคขั้นสูงและแนวทางปฏิบัติที่ดีที่สุดกัน บทเรียนสุดท้ายนี้จะรวมความรู้ที่เราสั่งสมมา เพื่อให้แน่ใจว่าคุณจะได้ความเข้าใจรอบด้านเกี่ยวกับการเพิ่มประสิทธิภาพก๊าซในสัญญาอัจฉริยะของ Ethereum

การปรับโครงสร้างและลดความซับซ้อนของโค้ด

หนึ่งในวิธีที่ตรงไปตรงมาที่สุดในการประหยัดน้ำมันก็คือการทำให้โค้ดของคุณง่ายขึ้น ยิ่งมีโค้ดให้รันน้อยก็กินแก๊สน้อยลง

ตัวอย่างการปฏิบัติ

พิจารณาฟังก์ชันต่อไปนี้:

ความแข็งแกร่ง 
 ความแข็งแกร่งของแพรกมา ^0.8.9; 

 สัญญาการเพิ่มประสิทธิภาพตัวอย่าง { 
 ที่อยู่ [] ผู้ดูแลระบบสาธารณะ; 

 ฟังก์ชั่น isUserAdmin (ผู้ใช้ที่อยู่) มุมมองสาธารณะส่งคืน (บูล) { 
 สำหรับ (uint i = 0; i < admins.length; i++) {
            if (admins[i] == user) return true;
        }
        คืนค่าเท็จ; 
 } 
 }

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

Solidity 
 สัญญา OptimizationExampleOptimized { 
 การแมป (ที่อยู่ => บูล) ผู้ดูแลระบบสาธารณะ; 

 ฟังก์ชั่น isUserAdmin (ผู้ใช้ที่อยู่) มุมมองสาธารณะส่งคืน (บูล) {
        return admins[user];
    }
}

นำข้อมูลกลับมาใช้ใหม่

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

ใช้ไลบรารี

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

Solidity 
 ไลบรารี SafeMath { 
 ฟังก์ชั่น เพิ่ม (uint a, uint b) ผลตอบแทนบริสุทธิ์ภายใน (uint) {
        uint c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }
    //... ฟังก์ชันทางคณิตศาสตร์อื่นๆ 
 } 

 สัญญา การใช้SafeMath { 
 ใช้ SafeMath สำหรับ uint; 

 ไม่ใช่คุณค่าสาธารณะ; การเพิ่มฟังก์ชัน 

 รายการ (uint _value) สาธารณะ {
        value = value.add(_value);
    }
}

ลบที่เก็บข้อมูลที่ไม่จำเป็น

คีย์เวิร์ด delete ใน Solidity ช่วยให้คุณสามารถลบล้างตัวแปร ซึ่งจะคืนค่าแก๊สบางส่วน หากคุณจัดเก็บพื้นที่บางส่วนเสร็จแล้ว ให้ลบออกเพื่อรับเงินคืน

พิจารณาบันทึกเหตุการณ์

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

หลีกเลี่ยงการใช้การดำเนินการที่มีราคาแพง

การดำเนินการบางอย่างต้องใช้แก๊สมากกว่าการดำเนินการอื่นๆ ตัวอย่างเช่น:

  • การเรียกใช้ฟังก์ชันภายนอกมีราคาแพงกว่าการเรียกใช้ฟังก์ชันภายใน
  • การโต้ตอบกับที่เก็บข้อมูลมีราคาแพงกว่าการโต้ตอบกับหน่วยความจำ
  • บางครั้งอาร์เรย์แบบไดนามิกอาจมีราคาน้ำมันมากกว่าอาร์เรย์ขนาดคงที่

บทสรุป

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

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