Mayoritas pengeluaran gas Ethereum terkonsentrasi pada penyimpanan. Setiap operasi yang mengubah status (penyimpanan) jaringan Ethereum biasanya memakan biaya. Oleh karena itu, memusatkan perhatian pada cara data disimpan dan diakses dapat menghasilkan pengurangan biaya yang signifikan. Dalam sesi ini, kita akan melihat beberapa cara untuk mengoptimalkan penyimpanan dengan Remix.
Blockchain Ethereum menyediakan penyimpanan permanen. Segala sesuatu yang disimpan di blockchain akan tersedia selama blockchain tersebut masih ada, namun keabadian ini harus dibayar mahal. Mengoptimalkan penyimpanan tidak hanya menurunkan biaya tetapi juga memastikan bahwa status global Ethereum digunakan secara efisien.
Soliditas menyimpan variabel dalam slot. Setiap slot berukuran 32 byte. Ketika variabel dapat ditampung dalam satu slot, variabel tersebut dapat dibaca atau diperbarui masing-masing dengan satu operasi SLOAD atau SSTORE.
Pertimbangkan dua kontrak:
Soliditas
// Tanpa Optimasi
pragma soliditas ^0.8.9;
kontrak Penyimpanan Tidak Dioptimalkan {
uint256 public value1;
uint256 public value2;
}
Soliditas
// Dengan Optimasi
pragma soliditas ^0.8.9;
kontrak Penyimpanan yang Dioptimalkan {
uint128 public value1;
uint128 public value2;
}
Terapkan kedua kontrak di Remix dan catat perbedaan gas saat berinteraksi dengan variabelnya.
Dalam versi yang dioptimalkan, value1
dan value2
berbagi satu slot 32-byte.
Ketika Anda sudah selesai dengan slot penyimpanan, terutama penyimpanan data sementara, Anda dapat menghapus atau menghilangkan slot tersebut untuk mendapatkan pengembalian bahan bakar.
Soliditas
pragma soliditas ^0.8.9;
Contoh Pengembalian Dana kontrak {
uint256 data sementara publik;
fungsi storeTemporaryData(uint256 data) publik {
temporaryData = data;
}
fungsi clearTemporaryData() publik {
delete temporaryData;
}
}
Terapkan kontrak ini di Remix.
Simpan beberapa data sementara lalu hapus.
Periksa biaya bahan bakar. Perhatikan pengembalian dana bahan bakar yang Anda dapatkan untuk operasi delete
.
Jika data tidak perlu diakses secara on-chain, pertimbangkan untuk mencatatnya sebagai peristiwa daripada menyimpannya. Acara jauh lebih murah daripada operasi penyimpanan.
Soliditas
pragma soliditas ^0.8.9;
kontrak EventExample {
event DataStored(uint256 data);
fungsi storeData(uint256 data) publik {
emit DataStored(data);
}
}
Menyebarkan dan berinteraksi dengan kontrak di Remix.
Perhatikan biaya gas yang lebih murah jika dibandingkan dengan penyimpanan.
Penting untuk berlatih sekarang setelah Anda menguasai beberapa pendekatan optimasi penyimpanan dasar. Terlibatlah dengan contoh-contoh yang ditawarkan dan bereksperimenlah dengan membuat contoh Anda sendiri. Pada sesi berikutnya, kita akan mempelajari lebih dalam tentang mengoptimalkan visibilitas fungsi dan menggunakan kembali kode dengan pustaka. Ingatlah bahwa pengoptimalan adalah seni sekaligus sains. Lanjutkan bereksperimen!
Mayoritas pengeluaran gas Ethereum terkonsentrasi pada penyimpanan. Setiap operasi yang mengubah status (penyimpanan) jaringan Ethereum biasanya memakan biaya. Oleh karena itu, memusatkan perhatian pada cara data disimpan dan diakses dapat menghasilkan pengurangan biaya yang signifikan. Dalam sesi ini, kita akan melihat beberapa cara untuk mengoptimalkan penyimpanan dengan Remix.
Blockchain Ethereum menyediakan penyimpanan permanen. Segala sesuatu yang disimpan di blockchain akan tersedia selama blockchain tersebut masih ada, namun keabadian ini harus dibayar mahal. Mengoptimalkan penyimpanan tidak hanya menurunkan biaya tetapi juga memastikan bahwa status global Ethereum digunakan secara efisien.
Soliditas menyimpan variabel dalam slot. Setiap slot berukuran 32 byte. Ketika variabel dapat ditampung dalam satu slot, variabel tersebut dapat dibaca atau diperbarui masing-masing dengan satu operasi SLOAD atau SSTORE.
Pertimbangkan dua kontrak:
Soliditas
// Tanpa Optimasi
pragma soliditas ^0.8.9;
kontrak Penyimpanan Tidak Dioptimalkan {
uint256 public value1;
uint256 public value2;
}
Soliditas
// Dengan Optimasi
pragma soliditas ^0.8.9;
kontrak Penyimpanan yang Dioptimalkan {
uint128 public value1;
uint128 public value2;
}
Terapkan kedua kontrak di Remix dan catat perbedaan gas saat berinteraksi dengan variabelnya.
Dalam versi yang dioptimalkan, value1
dan value2
berbagi satu slot 32-byte.
Ketika Anda sudah selesai dengan slot penyimpanan, terutama penyimpanan data sementara, Anda dapat menghapus atau menghilangkan slot tersebut untuk mendapatkan pengembalian bahan bakar.
Soliditas
pragma soliditas ^0.8.9;
Contoh Pengembalian Dana kontrak {
uint256 data sementara publik;
fungsi storeTemporaryData(uint256 data) publik {
temporaryData = data;
}
fungsi clearTemporaryData() publik {
delete temporaryData;
}
}
Terapkan kontrak ini di Remix.
Simpan beberapa data sementara lalu hapus.
Periksa biaya bahan bakar. Perhatikan pengembalian dana bahan bakar yang Anda dapatkan untuk operasi delete
.
Jika data tidak perlu diakses secara on-chain, pertimbangkan untuk mencatatnya sebagai peristiwa daripada menyimpannya. Acara jauh lebih murah daripada operasi penyimpanan.
Soliditas
pragma soliditas ^0.8.9;
kontrak EventExample {
event DataStored(uint256 data);
fungsi storeData(uint256 data) publik {
emit DataStored(data);
}
}
Menyebarkan dan berinteraksi dengan kontrak di Remix.
Perhatikan biaya gas yang lebih murah jika dibandingkan dengan penyimpanan.
Penting untuk berlatih sekarang setelah Anda menguasai beberapa pendekatan optimasi penyimpanan dasar. Terlibatlah dengan contoh-contoh yang ditawarkan dan bereksperimenlah dengan membuat contoh Anda sendiri. Pada sesi berikutnya, kita akan mempelajari lebih dalam tentang mengoptimalkan visibilitas fungsi dan menggunakan kembali kode dengan pustaka. Ingatlah bahwa pengoptimalan adalah seni sekaligus sains. Lanjutkan bereksperimen!