Siaran
avatar

Maxis kontrak pintar, Pembilik Solidity anda mungkin telah menghapus secara senyap satu simpanan yang anda perlukan, dan anda tidak akan pernah melihatnya dalam sumber anda. Solidity 0.8.38 dikeluarkan pada hari Kamis lepas. Ia memperbaiki satu ralat dalam pengoptimum Yul yang wujud dalam semua versi dari 0.8.19 hingga 0.8.37. Pengoptimum menyimpan catatan mengenai apa yang berada dalam memori dan simpanan. Ia menggunakan catatan itu untuk menggantikan satu beban dengan nilai yang sudah diketahui, dan untuk melepaskan satu simpanan yang menulis data yang sudah ada. Untuk menentukan sama ada dua alamat boleh bertindih, ia menggambarkan setiap alamat sebagai pemboleh ubah asas ditambah dengan sela. Asas yang sama, sela yang berbeza, jadi mereka mesti berada dalam slot yang berbeza. Penggambaran ini disimpan dalam cache. Kemudian seseorang mengganti semula pemboleh ubah asas. Pengoptimum tidak selalu menyedari perkara ini. Sekarang, ia membandingkan alamat yang dibina daripada nilai lama dengan alamat yang dibina daripada nilai baru seolah-olah keduanya berkongsi asas yang sama. Ia memutuskan bahawa mereka berbeza, tetapi pada masa pelaksanaan, kedua-duanya menunjuk ke tempat yang sama. Hasilnya ialah catatan usang. Satu beban kemudian boleh mengembalikan nilai lama. Satu simpanan yang anda perlukan boleh dihapuskan. Satu keccak256 atas lokasi itu boleh menghakis data yang sudah usang. Hanya kod yang dikompilasi dengan pengoptimum dihidupkan yang terjejas. Dengan via-IR, mana-mana kod boleh terjejas, walaupun tanpa assembly dalam baris. Dengan paip warisan lalai, hanya beberapa assembly dalam baris dan pembantu yang dihasilkan oleh kompilator. Build tanpa pengoptimum adalah selamat. Pasukan menilainya sebagai keparahan rendah, dan mereka melakukan sesuatu yang saya harap setiap pasukan kompilator lakukan. Mereka mengompilasi semula setiap kontrak yang disahkan dalam pangkalan data Sourcify dengan dan tanpa pembaikan, dan bytecode untuk semua kontrak tersebut adalah identik. Jadi, ia jarang berlaku. Jarang bukan bermakna tidak pernah berlaku, terutamanya jika kod anda baru dan belum dideploy. Ralat ini ditemui melalui bounty ralat Ethereum Foundation, dan laporan kedua menunjukkan bahawa Solidity biasa tanpa assembly juga boleh memicunya.

Kandungan ini adalah bagi tujuan maklumat dan pendidikan sahaja. Ia mungkin termasuk pandangan pihak ketiga, kandungan tajaan, atau bahan promosi yang mana pencipta mungkin menerima pampasan. Tiada apa-apa dalam suapan ini yang merupakan nasihat pelaburan atau jaminan pulangan. Anda bertanggungjawab sepenuhnya ke atas keputusan pelaburan anda sendiri. Sentiasa jalankan penyelidikan anda sendiri dan berhati-hati sebelum berdagang. Kami tidak menjamin ketepatan maklumat pihak ketiga dan tidak bertanggungjawab ke atas sebarang kerugian yang ditanggung. Prestasi masa lalu tidak menunjukkan hasil masa hadapan. Sila rujuk Terma Komuniti dan Penyata Pendedahan Risiko kami untuk mendapatkan butiran.

avatarSiarkan balasan anda

Komen