#100GündeSolidity Durum Değişkenini Okuma ve Yazma
Bir durum değişkeni yazmak veya güncellemek için bir işlem göndermeniz gerekir. Öte yandan, durum değişkenlerini herhangi bir işlem ücreti ödemeden ücretsiz olarak okuyabilirsiniz.
Durum değişkenleri, Ethereum blok zincirinde depolanan verilerdir. Bu verileri okuma ve yazma işlemleri için bir işlem göndermeniz gerekmektedir. Okuma işlemleri ücretsizdir, ancak yazma işlemleri bir işlem ücreti gerektirir.
İşlem ücreti, bir işlemin Ethereum ağında gerçekleştirilmesi için ödenen bir miktardır. İşlem ücreti, işlemin gerçekleştirileceği blok zincirinin işlem hacmi, rekabet gibi faktörlere göre değişebilir.
Durum değişkenleri, bir smart contract’ın (akıllı sözleşme) veri depolama yapısıdır. Akıllı sözleşmeler, Ethereum blok zincirinde çalışan kod parçacıklarıdır ve birçok farklı işlevi yerine getirebilirler. Örneğin, bir akıllı sözleşme, bir para transferi işlemini gerçekleştirebilir veya bir oyun oynatabilir. Durum değişkenleri, bu akıllı sözleşmelerin çalışma sırasında depoladıkları verilerdir.
Durum değişkenlerini okumak için, öncelikle o durum değişkeninin tanımlanmış olduğu smart contract’ta bir fonksiyon oluşturmalısınız. Bu fonksiyon, durum değişkeninin okunmasını sağlar. Örneğin:
pragma solidity ^0.6.0;
contract MyContract {
uint public myVariable;
function readMyVariable() public view returns (uint) {
return myVariable;
}
}
Bu kod parçacığında, myVariable
adında bir durum değişkeni tanımlanmış ve readMyVariable
adında bir fonksiyon oluşturulmuştur. readMyVariable
fonksiyonu, myVariable
durum değişkenini okumak için kullanılır ve okunan değeri döndürür. view
anahtar kelimesi, bu fonksiyonun bir işlem ücreti ödemeye gerek duymadan çalıştırılabileceğini belirtir.
Durum değişkenlerini yazmak için, aynı şekilde bir fonksiyon oluşturmalısınız. Bu fonksiyon, durum değişkenine yeni bir değer atamak için kullanılır. Örneğin:
pragma solidity ^0.6.0;
contract MyContract {
uint public myVariable;
function writeMyVariable(uint newValue) public {
myVariable = newValue;
}
}
Bu kod parçacığında, writeMyVariable
adında bir fonksiyon oluşturulmuştur. Bu fonksiyon, myVariable
durum değişkenine yeni bir değer atamak için kullanılır. Bu fonksiyon bir işlem ücreti gerektirir, çünkü durum değişkenlerini yazmak bir işlemdir.
Bu örneklerde, myVariable
durum değişkeni public
olarak tanımlanmıştır. Bu, bu değişkenin herhangi bir işlem ücreti ödemeden okunabileceğini belirtir. Eğer private
olarak tanımlanmış olsaydı, bu değişken sadece smart contract içerisinde kullanılabilecek ve okunamayacaktı.
Akıllı Sözleşme Örneği İnceleme
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract SimpleStorage {
// State variable to store a number
uint public num;
// You need to send a transaction to write to a state variable.
function set(uint _num) public {
num = _num;
}
// You can read from a state variable without sending a transaction.
function get() public view returns (uint) {
return num;
}
}
Bu Solidity kod parçacığında, bir smart contract oluşturulmuştur. Bu smart contract, num
adında bir durum değişkeni içerir ve bu değişkeni okuma ve yazma işlemlerini yapabilen iki fonksiyon içerir.
set
fonksiyonu, bir işlem ücreti gerektirir ve num
durum değişkenine bir değer atamak için kullanılır. Bu fonksiyon, _num
adında bir girdi parametresi alır ve bu parametre değerini num
değişkenine atar.
get
fonksiyonu ise, bir işlem ücreti gerektirmez ve num
değişkeninin değerini okumak için kullanılır. Bu fonksiyon, view
anahtar kelimesi ile işaretlenmiştir ve bu anahtar kelime, fonksiyonun bir işlem ücreti gerektirmeyeceğini belirtir. Bu fonksiyon, num
değişkeninin değerini döndürür.
Bu smart contract, num
değişkeninin değerini okumak ve yazmak için kullanılabilir. Örneğin, bir işlem gönderilerek set
fonksiyonu çağrılarak num
değişkenine yeni bir değer atanabilir ve get
fonksiyonu çağrılarak num
değişkeninin değeri okunabilir.
Akıllı Sözleşme Güvenliği Değerlendirmesi
Bu smart contract’ın güvenlik açısından bakıldığında, birkaç nokta dikkate alınabilir:
set
fonksiyonu ilenum
değişkenine yeni bir değer atanabilir. Bu fonksiyonun işlem ücreti gerektirdiği dikkate alındığında, saldırganların bu fonksiyonu çok fazla çağırıp ağı yavaşlatma riski vardır. Bu riski azaltmak için, fonksiyonun içerisine bir Gas sınırlaması eklenebilir.num
değişkenipublic
olarak tanımlanmıştır. Bu, bu değişkenin herhangi bir işlem ücreti ödemeden okunabileceğini belirtir. Bu, saldırganların bu değişkenin değerini takip ederek smart contract’ın nasıl çalıştığını anlamaya çalışmalarını kolaylaştırabilir. Bu riski azaltmak için,num
değişkenininprivate
olarak tanımlanması düşünülebilir.- Smart contract’ın kaynak kodu açıkça paylaşılmıştır. Bu, saldırganların smart contract’ı inceleme ve güvenlik açıklarını keşfetme riskini artırabilir. Bu riski azaltmak için, smart contract’ın kaynak kodunu gizleyerek sadece binler (derlenmiş kod) paylaşılması düşünülebilir.
Bu öneriler sadece genel olarak düşünülebilecek güvenlik önlemleridir ve smart contract’ın güvenliği için daha fazla önlem alınması gerekebilir. Örneğin, smart contract’ın içerisinde kullanılan diğer değişkenler ve fonksiyonlar da güvenlik açısından incelenmelidir.
Sonuç Bağlamı : Durum Değişkenini Okuma ve Yazma
Durum değişkenleri, Ethereum blok zincirinde depolanan verilerdir ve bu verileri okuma ve yazma işlemleri için bir işlem göndermeniz gerekmektedir. Okuma işlemleri ücretsizdir, ancak yazma işlemleri bir işlem ücreti gerektirir. Solidity dilinde, durum değişkenlerini okuma ve yazma işlemlerini yapabilmek için fonksiyonlar oluşturulur ve bu fonksiyonların içerisine ilgili kodlar yazılır. Smart contract’ların güvenlik açısından incelenmesi gerekir ve güvenlik açıklarını azaltmak için önlemler alınabilir.
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!