Lição 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 มีขนาดใหญ่และให้ความช่วยเหลือ ดังนั้นอย่ากลัวที่จะขอคำแนะนำหรือแนวปฏิบัติที่ดีที่สุด ขอให้สนุกในการเขียนโค้ด!

Exclusão de responsabilidade
* O investimento em criptomoedas envolve riscos significativos. Prossiga com cuidado. O curso não pretende ser um conselho de investimento.
* O curso é criado pelo autor que se juntou ao Gate Learn. Qualquer opinião partilhada pelo autor não representa o Gate Learn.
Catálogo
Lição 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 มีขนาดใหญ่และให้ความช่วยเหลือ ดังนั้นอย่ากลัวที่จะขอคำแนะนำหรือแนวปฏิบัติที่ดีที่สุด ขอให้สนุกในการเขียนโค้ด!

Exclusão de responsabilidade
* O investimento em criptomoedas envolve riscos significativos. Prossiga com cuidado. O curso não pretende ser um conselho de investimento.
* O curso é criado pelo autor que se juntou ao Gate Learn. Qualquer opinião partilhada pelo autor não representa o Gate Learn.