#100DaysOfSolidity Değişmez değişkenler nedir, nasıl kullanılır ve neden önemlidir?
#100GündeSolidity bülteninin 6.gün konusu “Immutable” yani değişmez değişkenler. Değişmez değişkenler sabitler gibidir. Değişmez değişkenlerin değerleri yapıcı içinde ayarlanabilir ancak daha sonra değiştirilemez. Hadi şimdi konunun detaylarına geçelim ve ve örneklerle konuyu anlatalım.
Immutable (değişmez) değişkenler, Solidity dilinde kullanılan bir özel tür değişkenlerdir. Bu değişkenlerin değerleri yapıcı fonksiyonu içinde tanımlanır ve daha sonra değiştirilemez. Yapıcı fonksiyonu, bir sözleşmenin ilk kez yüklenirken çağrılan fonksiyondur ve bu fonksiyon sadece bir kez çalıştırılabilir. Bu nedenle, immutable değişkenlerin değerleri yalnızca yapıcı içinde tanımlanabilir ve daha sonra hiçbir koşulda değiştirilemez.
Örneğin, bir sözleşmede bir immutable değişken oluşturabilir ve bu değişkenin değerini yapıcı içinde tanımlayabilirsiniz:
pragma solidity ^0.8.0;
contract MyContract {
// immutable değişken
uint256 public immutableNumber;
Copy code
// yapıcı fonksiyon
constructor() public {
// immutable değişkenin değerini tanımla
immutableNumber = 5;
}
// bir fonksiyon oluştur
function setNumber(uint256 _newNumber) public {
// immutable değişkenin değerini değiştirmeyi denemek istediğimizde hata alırız
immutableNumber = _newNumber;
}
}
Eğer setNumber fonksiyonunu çağırdığımızda, “immutable değişken değiştirilemez” hatası alırız. Bu, immutable değişkenlerin değerlerinin yapıcı içinde tanımlandıktan sonra değiştirilemeyeceğini gösterir.
Immutable değişkenler, sözleşme içinde değişmeyen değerleri tutmak için kullanışlıdır. Örneğin, bir sözleşme içinde bir vergi oranını tutabilir ve bu vergi oranı değişmez olarak tanımlanır. Bu sayede, vergi oranının değiştirilmesine izin verilmez ve sözleşme içinde herhangi bir değişikliğe neden olunmaz.
Sonuç olarak, immutable değişkenler Solidity dilinde kullanılan özel tür değişkenlerdir ve yapıcı fonksiyonu içinde tanımlanır. Bu değişkenlerin değerleri daha sonra hiçbir koşulda değiştirilemez. Immutable değişkenler, sözleşme içinde değişmeyen değerleri tutmak için kullanışlıdır ve bu sayede sözleşme içinde herhangi bir değişikliğe neden olunmaz.
Variables, Constants, Immutable Karşılaştırması
Değişkenler: Değişkenler, programlama dilinde bellekte belirli bir adresle tutulan ve bu adreste saklanan verilerin değerlerini tutan ifadelerdir. Bu verilerin değerleri çalışma sırasında değişebilir. Örneğin, bir değişkende tutulan bir sayının değeri çalışma sırasında arttırılabilir veya azaltılabilir.
Sabitler: Sabitler, programlama dilinde bellekte belirli bir adresle tutulan ve bu adreste saklanan verilerin değerlerini tutan ifadelerdir. Ancak bu verilerin değerleri çalışma sırasında değiştirilemez. Örneğin, bir sabitte tutulan bir sayının değeri çalışma sırasında arttırılamaz veya azaltılamaz.
Değişmez Değişkenler: Değişmez değişkenler, programlama dilinde bellekte belirli bir adresle tutulan ve bu adreste saklanan verilerin değerlerini tutan ifadelerdir. Ancak bu verilerin değerleri yapıcı fonksiyonu içinde tanımlanır ve daha sonra hiçbir koşulda değiştirilemez. Örneğin, bir değişmez değişkende tutulan bir sayının değeri yapıcı fonksiyonu içinde tanımlanır ve daha sonra hiçbir koşulda arttırılamaz veya azaltılamaz.
Akıllı Sözleşme Örneği İncelemesi
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract Immutable {
// coding convention to uppercase constant variables
address public immutable MY_ADDRESS;
uint public immutable MY_UINT;
constructor(uint _myUint) {
MY_ADDRESS = msg.sender;
MY_UINT = _myUint;
}
}
Bu Solidity sözleşmesinde, MY_ADDRESS
ve MY_UINT
adlı iki immutable değişken tanımlanmıştır. Bu değişkenlerin değerleri, yapıcı fonksiyonu içinde atanmıştır. MY_ADDRESS
değişkeni, gönderen adresini (msg.sender
) tutarken, MY_UINT
değişkeni ise yapıcı fonksiyonunun parametresi olarak verilen _myUint
değerini tutar.
Dikkat edilecek bir nokta, MY_ADDRESS
ve MY_UINT
değişkenlerinin türlerinin “public” olarak tanımlanmasıdır. Bu, bu değişkenlerin dışarıdan okunabilir olacağı anlamına gelir ve bu değişkenlerin değerleri dışarıdan sorgulanabilir.
Örneğin, bu sözleşmenin bir örneği oluşturulduğunda, MY_ADDRESS
ve MY_UINT
değişkenlerinin değerleri dışarıdan sorgulanabilir:
contractInstance.MY_ADDRESS(); // gönderen adresini döndürür
contractInstance.MY_UINT(); // yapıcı fonksiyonunda tanımlanan uint değerini döndürür
Bu sözleşme içinde, MY_ADDRESS
ve MY_UINT
değişkenlerinin değerleri değiştirilemez çünkü bu değişkenler immutable türündedir. Eğer bu değişkenlerin değerlerini değiştirmeyi denerseniz, “immutable değişken değiştirilemez” hatası alırsınız.
Akıllı Sözleşme Güvenliği İncelemesi
Bu kod parçasında bir güvenlik açığı görmüyorum. Ancak, dikkat edilmesi gereken bir nokta vardır: MY_ADDRESS
değişkeni, gönderen adresini tutar ve bu adres dışarıdan sorgulanabilir. Bu, sözleşmenin çalıştırıldığı adresi açığa çıkarmaya yol açabilir. Bu nedenle, bu değişkenin değeri gizlenmişse daha iyi olurdu.
Ayrıca, MY_UINT
değişkeninin değeri yapıcı fonksiyonunun parametresi olarak verilir ve bu değer dışarıdan sorgulanabilir. Bu nedenle, bu değişkenin değeri gizlenmişse daha iyi olurdu. Bu sayede, sözleşmenin içinde tutulan değerler dışarıdan sorgulanamaz ve açığa çıkarılamaz.
Akıllı Sözleşme Güvenliği Karşılaştırması
Sözleşme 1:
- İşlev: Bu sözleşme, bir immutable değişken oluşturur ve bu değişkenin değerini yapıcı fonksiyonu içinde tanımlar. Ayrıca, bir fonksiyon oluşturur ve bu fonksiyonun amacı immutable değişkenin değerini değiştirmektir. Ancak, immutable değişkenlerin değerleri değiştirilemez olduğundan, bu fonksiyon çalıştırıldığında hata verir.
- Güvenlik: Bu sözleşme içinde bir güvenlik açığı görmüyorum.
- Kullanım: Bu sözleşme, immutable değişkenleri tutmak ve dışarıdan okunabilir olmasını sağlamak için kullanılabilir.
Sözleşme 2:
- İşlev: Bu sözleşme, iki immutable değişken oluşturur ve bu değişkenlerin değerlerini yapıcı fonksiyonu içinde tanımlar.
MY_ADDRESS
değişkeni, gönderen adresini tutarken,MY_UINT
değişkeni ise yapıcı fonksiyonunun parametresi olarak verilen_myUint
değerini tutar. - Güvenlik: Bu sözleşme içinde,
MY_ADDRESS
veMY_UINT
değişkenlerinin değerleri dışarıdan sorgulanabilir. Bu nedenle, bu değişkenlerin değerleri gizlenmişse daha iyi olurdu. Bu sayede, sözleşmenin içinde tutulan değerler dışarıdan sorgulanamaz ve açığa çıkarılamaz. - Kullanım: Bu sözleşme, immutable değişkenleri tutmak ve dışarıdan okunabilir olmasını sağlamak için kullanılabilir. Ayrıca, bu sözleşme gönderen adresini ve bir
uint
değerini tutmak için de kullanılabilir.
Sonuç Bağlamı : Solidity dilinde immutable değişkenler
Solidity dilinde, immutable değişkenler yapıcı fonksiyonu içinde tanımlanan ve daha sonra hiçbir koşulda değiştirilemeyen değişkenlerdir. Bu değişkenler, sözleşme içinde değişmeyen değerleri tutmak için kullanışlıdır ve bu sayede sözleşme içinde herhangi bir değişikliğe neden olunmaz. Ancak, dikkat edilmesi gereken bir nokta vardır: immutable değişkenlerin değerleri dışarıdan sorgulanabilir olabilir ve bu nedenle bu değişkenlerin değerleri gizlenmişse daha iyi olur. Bu sayede, sözleşmenin içinde tutulan değerler dışarıdan sorgulanamaz ve açığa çıkarılamaz.
Solidity Programlama Dili Öğrenme yolculuğunuz hakkında daha iyi rehberlik almak için Solidity nedir? Ethereum Akıllı Sözleşmelerinin Dili Rehberi içeriğimize göz atın. Dilerseniz Yeni Başlayanlar için Solidity – Akıllı Sözleşme Geliştirme Hızlandırılmış Kursuna katılın.
Çalışmaya nereden başlayacağım diyenler için Blockchain Developer Olmak İçin Yol Haritası içeriğine de muhakkak bakın.
Gelin aklınızdaki soruları SUPERPEER sohbetinde cevaplayalım.
Bu makaleyi okuduğunuz için teşekkürler! Bana destek olmak isterseniz;
Beni Twitter, Linkedin ve YouTube‘da takip edin.
Kısa bir yorum bırakmayı UNUTMAYIN!