Rust akıllı sözleşmeler tamsayı taşma koruma ipuçları

robot
Abstract generation in progress

Tam sayı taşma açığı ve korunması

Tam sayı taşması, programlamada yaygın bir sorundur. Çoğu programlama dilinde, tam sayı değerleri sabit uzunluktaki bellek içinde depolanır. Tam sayılar, işaretsiz ve işaretli olarak ikiye ayrılır; fark, en yüksek bitin pozitif veya negatif sayıyı göstermek için işaret biti olarak kullanılıp kullanılmadığıdır. Örneğin, 32 bit bellek, 0 ile 4,294,967,295 arasında bir işaretsiz tam sayıyı (uint32) depolayabilir veya -2,147,483,648 ile 2,147,483,647 arasında bir işaretli tam sayıyı (int32) depolayabilir.

Tam sayı türünün temsil edebileceği aralığın dışına çıktığında taşma (overflow) meydana gelir. Çoğu programlama dili bu hatayı kontrol etmez, bunun yerine basit bir mod işlemi yapar veya tanımsız bir davranış sergiler. Bu, programın çalışma sonuçlarının beklenmedik olmasına neden olabilir. Blok zinciri akıllı sözleşmelerinde, özellikle DeFi alanında, tam sayı hesaplamaları oldukça yaygındır, bu nedenle tam sayı taşma açıklarına özel dikkat gösterilmelidir.

Tam Sayı Taşması Tanımı

Tam sayı taşması, iki durumdan oluşur: üst taşma ( overflow ) ve alt taşma ( underflow ).

  1. Taşma: Sonuç, tamsayı türünün maksimum değerini aşar. Örneğin, uint32'nin 0xFFFFFFFF değerine 1 eklenirse 0x00000000 olur.

  2. Aşağı taşma: Sonuç, tam sayı türünün minimum değerinden daha küçük olduğunda meydana gelir. Örneğin, uint32'nin 0'dan 1 çıkarılması 0xFFFFFFFF'a dönüşür.

Koruma Teknolojisi

Rust'ta tam sayı taşmasını önlemek için aşağıdaki önlemler alınabilir:

  1. Cargo.toml dosyasını yapılandırın, release modunda tam sayı taşmalarını da kontrol edin:

toml [profile.release] overflow-checks = true panic = 'abort'

  1. Daha büyük tam sayılar için uint crate kullanın:

pas uint::construct_uint kullanın;

construct_uint! { pub struct U1024(16); }

  1. checked_* gibi güvenli matematik fonksiyonlarını kullanın:

pas let result = x.checked_add(y).expect("Toplama taşması");

  1. as_u128() gibi tür dönüştürme fonksiyonlarını kullanarak taşmayı kontrol etme:

pas let amount_u256 = U256::from(u128::MAX) + 1; let amount_u128 = amount_u256.as_u128(); // panik tetikleyecek

Bu yöntemlerle, Rust akıllı sözleşmelerinde tamsayı taşma açıklarını etkili bir şekilde önleyebilir ve sözleşmenin güvenliğini artırabiliriz. Matematiksel hesaplamalar içeren akıllı sözleşmeler yazarken, tamsayı işlemlerini dikkatlice ele almak ve uygun koruma önlemleri almak şarttır.

View Original
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
  • Reward
  • 4
  • Share
Comment
0/400
GasDevourervip
· 07-20 17:20
Dikkat, dolandırıcılık projelerine dikkat edin!
View OriginalReply0
SchrodingerAirdropvip
· 07-19 14:45
Ev sahibi haklı, neden birlikte Rust öğrenmiyoruz?
View OriginalReply0
liquiditea_sippervip
· 07-17 23:42
Vay, taşma kontrolü yapılmalı!
View OriginalReply0
TokenCreatorOPvip
· 07-17 23:24
Eh, bu taşma olayında kimse çukura düşmedi ki~
View OriginalReply0
Trade Crypto Anywhere Anytime
qrCode
Scan to download Gate app
Community
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)