Gönderi
avatar

Akıllı sözleşme uzmanları, Solidity derleyiciniz, ihtiyaç duyduğunuz bir depolama alanını sessizce silebilir ve kaynak kodunuzda bunu asla göremezsiniz. Solidity 0.8.38, geçen Perşembe günü yayınlandı. Bu sürüm, 0.8.19 ile 0.8.37 arasındaki tüm sürümlerde bulunan bir Yul optimizasyon hatasını düzeltiyor. Optimizatör, bellekte ve depolamada ne olduğunu not eder. Bu notları, zaten bildiği bir değeri yüklemek için kullanır ve zaten var olan veriyi yazan bir depolama işlemini atlar. İki adresin çakışıp çakışmadığını belirlemek için, her birini bir temel değişken artı bir ofset olarak tanımlar. Aynı temel, farklı ofset — bu nedenle farklı slotlar olmalı. Bu tanımlar önbelleğe alınmıştı. Sonra biri temel değişkeni yeniden atadı. Optimizatör her zaman bunu fark etmezdi. Şimdi eski değerden oluşturulan bir adresle yeni değerden oluşturulan bir adresi, aynı temele sahipmiş gibi karşılaştırıyor. İkisinin farklı olduğunu kararlaştırıyor, ancak çalışma zamanında aynı yeri işaret ediyorlar. Sonuç olarak, eski bir not kalıyor. Sonraki bir yüklemeyi eski bir değer döndürebilir. İhtiyacınız olan bir depolama işlemi kaldırılabilir. Bu konum üzerindeki keccak256, güncel olmayan verileri hashleyebilir. Yalnızca optimizasyon etkinleştirilmiş şekilde derlenmiş kodlar etkilenir. via-IR ile, inline assembly kullanmasanız bile tüm kodlar etkilenebilir. Varsayılan eski işlem hattıyla, yalnızca bazı inline assembly ve derleyici tarafından oluşturulan yardımcı fonksiyonlar etkilenebilir. Optimizasyonsuz derlemeler güvendedir. Takım, bu hatayı düşük ciddiyette değerlendiriyor ve ben her derleyici ekibinin yapmasını dilediği bir şey yaptılar: Sourcify veritabanındaki tüm doğrulanmış sözleşmeleri, düzeltme ile ve düzeltme olmadan yeniden derlediler ve tümünün bayt kodu aynı çıktı. Yani nadirdir. Nadir, asla olmadığı anlamına gelmez, özellikle kodunuz yeni ise ve henüz dağıtılmamışsa. Hata, Ethereum Vakfı'nın hata ödül programı aracılığıyla geldi ve ikinci bir rapor, assembly kullanmadan basit Solidity kodunun da bu hatayı tetikleyebileceğini gösterdi.

Bu içerik yalnızca bilgilendirme ve eğitim amaçlıdır. Üçüncü taraf görüşlerini, sponsorlu içeriği veya içerik oluşturucunun ücret alabileceği promosyon materyallerini içerebilir. Bu yayındaki hiçbir şey yatırım tavsiyesi veya getiri garantisi teşkil etmez. Kendi yatırım kararlarınızdan yalnızca siz sorumlusunuz. Yatırım yapmadan önce her zaman kendi araştırmanızı yapın ve dikkatli olun. Üçüncü taraf bilgilerinin doğruluğunu garantilemiyoruz ve kayıplardan sorumlu değiliz. Geçmiş performans gelecekteki sonuçların göstergesi değildir. Ayrıntılar için lütfen Topluluk Şartlarına ve Risk Açıklama Beyanına bakınız.

avatarYanıtınızı gönderin

Yorum