Postingan
avatar

Smart contract maxis, Compiler Solidity Anda mungkin telah menghapus secara diam-diam sebuah penyimpanan yang Anda butuhkan, dan Anda tidak akan pernah melihatnya di sumber kode Anda. Solidity 0.8.38 dirilis Kamis lalu. Ini memperbaiki bug pada Yul optimiser yang ada di setiap rilis dari 0.8.19 hingga 0.8.37. Optimiser menyimpan catatan tentang apa yang ada di memori dan penyimpanan. Ia menggunakan catatan tersebut untuk mengganti pemuatan dengan nilai yang sudah diketahuinya, dan melewati penyimpanan yang menulis data yang sudah ada. Untuk menentukan apakah dua alamat dapat tumpang tindih, ia menggambarkan masing-masing sebagai variabel dasar ditambah offset. Basis yang sama, offset berbeda, jadi mereka pasti berada di slot yang berbeda. Deskripsi-deskripsi ini disimpan dalam cache. Kemudian seseorang menetapkan ulang variabel dasar. Optimiser tidak selalu menyadarinya. Sekarang ia membandingkan alamat yang dibangun dari nilai lama dengan alamat yang dibangun dari nilai baru seolah-olah keduanya berbagi basis yang sama. Ia memutuskan bahwa mereka berbeda, tetapi pada runtime keduanya menunjuk ke tempat yang sama. Hasilnya adalah catatan yang usang. Pemuatan selanjutnya dapat mengembalikan nilai lama. Penyimpanan yang Anda butuhkan dapat dihapus. Keccak256 atas lokasi tersebut dapat menghasilkan hash data yang sudah kadaluarsa. Hanya kode yang dikompilasi dengan optimiser aktif yang terpapar. Dengan via-IR, semua kode dapat terkena dampaknya, bahkan tanpa inline assembly. Dengan pipeline legacy default, hanya beberapa inline assembly dan helper yang dihasilkan compiler. Build tanpa optimasi aman. Tim menilai ini sebagai tingkat keparahan rendah, dan mereka melakukan sesuatu yang saya harap semua tim compiler lakukan. Mereka mengompilasi ulang setiap kontrak terverifikasi di database Sourcify dengan dan tanpa perbaikan, dan bytecode-nya identik untuk semuanya. Jadi, ini jarang terjadi. Jarang tidak sama dengan tidak pernah, terutama jika kode Anda baru dan belum dideploy. Bug ini ditemukan melalui bug bounty Ethereum Foundation, dan laporan kedua menunjukkan bahwa Solidity biasa tanpa assembly pun dapat memicunya.

Konten ini hanya untuk tujuan informasi dan edukasi. Konten dapat mencakup wawasan pihak ketiga, konten bersponsor, atau materi promosi yang mana kreatornya mungkin menerima kompensasi. Tidak ada dari umpan ini yang merupakan saran investasi atau jaminan imbal hasil. Anda sepenuhnya bertanggung jawab terhadap keputusan investasi Anda sendiri. Selalu lakukan riset mandiri dan berhati-hati sebelum trading. Kami tidak menjamin keakuratan informasi pihak ketiga dan tidak bertanggung jawab terhadap segala kerugian yang ditimbulkan. Kinerja di masa lalu bukan menunjukkan hasil di masa depan. Silakan lihat Ketentuan Komunitas dan Pernyataan Pengungkapan Risiko untuk detail selengkapnya.

avatarPosting balasan Anda

Komentar