1. Anasayfa
  2. 100 Günde Solidity

🧵 #100GündeSolidity 006 : Değişmez Değişkenler

🧵 #100GündeSolidity 006 : Değişmez Değişkenler
Değişmez Değişkenler
0

#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 ve MY_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 TwitterLinkedin ve YouTube‘da takip edin.

Kısa bir yorum bırakmayı UNUTMAYIN!

solidity101 - Solidity, 2015 yılında Christian Reitwiessner liderliğinde piyasaya sürülen, büyük harf kullanımına göre ikinci en büyük kripto para piyasası olan Ethereum tarafından oluşturulan yepyeni bir programlama dilidir.

Yazarın Profili

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir