ค่าใช้จ่ายด้านก๊าซของ Ethereum ส่วนใหญ่มุ่งเน้นไปที่การจัดเก็บ การดำเนินการแต่ละครั้งที่เปลี่ยนสถานะ (ที่เก็บข้อมูล) ของเครือข่าย Ethereum โดยทั่วไปแล้วจะมีค่าใช้จ่ายสูง ด้วยเหตุนี้ การมุ่งเน้นที่วิธีการจัดเก็บและเข้าถึงข้อมูลจึงส่งผลให้สามารถลดต้นทุนได้อย่างมาก ในเซสชันนี้ เราจะดูสองสามวิธีในการเพิ่มประสิทธิภาพพื้นที่เก็บข้อมูลด้วย Remix
Ethereum blockchain ให้พื้นที่เก็บข้อมูลถาวร ทุกสิ่งที่บันทึกไว้ในบล็อคเชนจะสามารถใช้ได้ตราบเท่าที่บล็อคเชนยังคงอยู่ แต่ความคงทนนี้ต้องแลกมาด้วยต้นทุน การเพิ่มประสิทธิภาพพื้นที่จัดเก็บข้อมูลไม่เพียงแต่ช่วยลดต้นทุน แต่ยังช่วยให้มั่นใจได้ว่าสถานะทั่วโลกของ Ethereum จะถูกใช้อย่างมีประสิทธิภาพ
Solidity เก็บตัวแปรไว้ในช่อง แต่ละช่องมีขนาด 32 ไบต์ เมื่อตัวแปรสามารถใส่ลงในช่องเดียวได้ ก็สามารถอ่านหรืออัพเดตได้ด้วยการดำเนินการ SLOAD หรือ SSTORE เดียวตามลำดับ
พิจารณาสัญญาสองฉบับ:
ความแข็งแกร่ง
// ไม่มีการเพิ่มประสิทธิภาพ
ความแข็งแกร่งของ pragma ^0.8.9;
สัญญา UnoptimizedStorage {
uint256 public value1;
uint256 public value2;
}
ความแข็งแกร่ง
// ด้วยการเพิ่มประสิทธิภาพ
ความแข็งแกร่งของ pragma ^0.8.9; OptimizedStorage
สัญญา {
uint128 public value1;
uint128 public value2;
}
ปรับใช้สัญญาทั้งสองใน Remix และจดบันทึกความแตกต่างของก๊าซเมื่อโต้ตอบกับตัวแปร
ในเวอร์ชันที่ปรับให้เหมาะสม ทั้ง value1
และ value2
จะใช้ช่องขนาด 32 ไบต์ร่วมกัน
เมื่อคุณใช้ช่องจัดเก็บข้อมูลเสร็จแล้ว โดยเฉพาะการจัดเก็บข้อมูลชั่วคราว คุณสามารถลบหรือลบช่องดังกล่าวออกเพื่อรับค่าน้ำมันคืนได้
ความแข็งแกร่ง
ความแข็งแกร่งของแพรกมา ^0.8.9; ตัวอย่างการคืนเงิน
สัญญา {
uint256 public temporaryData;
ฟังก์ชั่น storeTemporaryData (ข้อมูล uint256) สาธารณะ {
temporaryData = data;
}
ฟังก์ชั่น clearTemporaryData () สาธารณะ {
delete temporaryData;
}
}
ปรับใช้สัญญานี้ใน Remix
เก็บข้อมูลชั่วคราวบางส่วนแล้วล้างข้อมูล
ตรวจสอบค่าน้ำมัน. สังเกตการคืนเงินค่าน้ำมันที่คุณได้รับจากการดำเนินการ delete
หากไม่จำเป็นต้องเข้าถึงข้อมูลแบบออนไลน์ ให้พิจารณาบันทึกเป็นเหตุการณ์แทนที่จะเก็บไว้ กิจกรรมมีราคาถูกกว่าการดำเนินการจัดเก็บข้อมูลมาก
ความแข็งแกร่ง
ความแข็งแกร่งของแพรกมา ^0.8.9;
สัญญา EventExample {
เหตุการณ์ DataStored (ข้อมูล uint256);
ฟังก์ชั่น storeData (ข้อมูล uint256) สาธารณะ {
emit DataStored(data);
}
}
ปรับใช้และโต้ตอบกับสัญญาใน Remix
สังเกตต้นทุนก๊าซที่ถูกกว่าเมื่อเปรียบเทียบกับการจัดเก็บ
สิ่งสำคัญคือต้องฝึกฝนตอนนี้เมื่อคุณเชี่ยวชาญแนวทางการเพิ่มประสิทธิภาพพื้นที่จัดเก็บข้อมูลขั้นพื้นฐานแล้ว มีส่วนร่วมกับตัวอย่างที่นำเสนอและทดลองสร้างตัวอย่างของคุณเอง ในเซสชันต่อไปนี้ เราจะเจาะลึกลงไปอีกในการเพิ่มประสิทธิภาพการมองเห็นฟังก์ชันและการนำโค้ดกลับมาใช้ใหม่กับไลบรารี โปรดทราบว่าการเพิ่มประสิทธิภาพเป็นทั้งศิลปะและวิทยาศาสตร์ ทดลองต่อ!
ค่าใช้จ่ายด้านก๊าซของ Ethereum ส่วนใหญ่มุ่งเน้นไปที่การจัดเก็บ การดำเนินการแต่ละครั้งที่เปลี่ยนสถานะ (ที่เก็บข้อมูล) ของเครือข่าย Ethereum โดยทั่วไปแล้วจะมีค่าใช้จ่ายสูง ด้วยเหตุนี้ การมุ่งเน้นที่วิธีการจัดเก็บและเข้าถึงข้อมูลจึงส่งผลให้สามารถลดต้นทุนได้อย่างมาก ในเซสชันนี้ เราจะดูสองสามวิธีในการเพิ่มประสิทธิภาพพื้นที่เก็บข้อมูลด้วย Remix
Ethereum blockchain ให้พื้นที่เก็บข้อมูลถาวร ทุกสิ่งที่บันทึกไว้ในบล็อคเชนจะสามารถใช้ได้ตราบเท่าที่บล็อคเชนยังคงอยู่ แต่ความคงทนนี้ต้องแลกมาด้วยต้นทุน การเพิ่มประสิทธิภาพพื้นที่จัดเก็บข้อมูลไม่เพียงแต่ช่วยลดต้นทุน แต่ยังช่วยให้มั่นใจได้ว่าสถานะทั่วโลกของ Ethereum จะถูกใช้อย่างมีประสิทธิภาพ
Solidity เก็บตัวแปรไว้ในช่อง แต่ละช่องมีขนาด 32 ไบต์ เมื่อตัวแปรสามารถใส่ลงในช่องเดียวได้ ก็สามารถอ่านหรืออัพเดตได้ด้วยการดำเนินการ SLOAD หรือ SSTORE เดียวตามลำดับ
พิจารณาสัญญาสองฉบับ:
ความแข็งแกร่ง
// ไม่มีการเพิ่มประสิทธิภาพ
ความแข็งแกร่งของ pragma ^0.8.9;
สัญญา UnoptimizedStorage {
uint256 public value1;
uint256 public value2;
}
ความแข็งแกร่ง
// ด้วยการเพิ่มประสิทธิภาพ
ความแข็งแกร่งของ pragma ^0.8.9; OptimizedStorage
สัญญา {
uint128 public value1;
uint128 public value2;
}
ปรับใช้สัญญาทั้งสองใน Remix และจดบันทึกความแตกต่างของก๊าซเมื่อโต้ตอบกับตัวแปร
ในเวอร์ชันที่ปรับให้เหมาะสม ทั้ง value1
และ value2
จะใช้ช่องขนาด 32 ไบต์ร่วมกัน
เมื่อคุณใช้ช่องจัดเก็บข้อมูลเสร็จแล้ว โดยเฉพาะการจัดเก็บข้อมูลชั่วคราว คุณสามารถลบหรือลบช่องดังกล่าวออกเพื่อรับค่าน้ำมันคืนได้
ความแข็งแกร่ง
ความแข็งแกร่งของแพรกมา ^0.8.9; ตัวอย่างการคืนเงิน
สัญญา {
uint256 public temporaryData;
ฟังก์ชั่น storeTemporaryData (ข้อมูล uint256) สาธารณะ {
temporaryData = data;
}
ฟังก์ชั่น clearTemporaryData () สาธารณะ {
delete temporaryData;
}
}
ปรับใช้สัญญานี้ใน Remix
เก็บข้อมูลชั่วคราวบางส่วนแล้วล้างข้อมูล
ตรวจสอบค่าน้ำมัน. สังเกตการคืนเงินค่าน้ำมันที่คุณได้รับจากการดำเนินการ delete
หากไม่จำเป็นต้องเข้าถึงข้อมูลแบบออนไลน์ ให้พิจารณาบันทึกเป็นเหตุการณ์แทนที่จะเก็บไว้ กิจกรรมมีราคาถูกกว่าการดำเนินการจัดเก็บข้อมูลมาก
ความแข็งแกร่ง
ความแข็งแกร่งของแพรกมา ^0.8.9;
สัญญา EventExample {
เหตุการณ์ DataStored (ข้อมูล uint256);
ฟังก์ชั่น storeData (ข้อมูล uint256) สาธารณะ {
emit DataStored(data);
}
}
ปรับใช้และโต้ตอบกับสัญญาใน Remix
สังเกตต้นทุนก๊าซที่ถูกกว่าเมื่อเปรียบเทียบกับการจัดเก็บ
สิ่งสำคัญคือต้องฝึกฝนตอนนี้เมื่อคุณเชี่ยวชาญแนวทางการเพิ่มประสิทธิภาพพื้นที่จัดเก็บข้อมูลขั้นพื้นฐานแล้ว มีส่วนร่วมกับตัวอย่างที่นำเสนอและทดลองสร้างตัวอย่างของคุณเอง ในเซสชันต่อไปนี้ เราจะเจาะลึกลงไปอีกในการเพิ่มประสิทธิภาพการมองเห็นฟังก์ชันและการนำโค้ดกลับมาใช้ใหม่กับไลบรารี โปรดทราบว่าการเพิ่มประสิทธิภาพเป็นทั้งศิลปะและวิทยาศาสตร์ ทดลองต่อ!