1. Anasayfa
  2. 100 Günde Solidity

🧵 #100GündeSolidity 002 : Güvenli ve Performanslı Kod Oluşturma Kılavuzu

#100GündeSolidity Öğrenme Serisi 2. Bölüm : Güvenli ve Performanslı Kod Oluşturma Kılavuzu

🧵 #100GündeSolidity 002 : Güvenli ve Performanslı Kod Oluşturma Kılavuzu
Performanslı Kod Oluşturma Kılavuzu
0

Solidity Dilinde “Counter” Smart Contract: Güvenli ve Performanslı Kod Oluşturma Kılavuzu

Güvenlik ve Performans Önemine Dikkat: “Counter” Smart Contract’ı İçin İlk Yazılış Şekli ve Önerilen Alternatif Yazılış Şekli

Bu bültende, #100GündeSolidity serisinin 2. içeriği olarak, Solidity dilinde yazılmış “Counter” smart contract’ının ilk yazılış şekli ve alternatif bir şekilde yazılış şekline yer verilmiştir. Öncelikle, smart contract’ın ilk yazılış şekli açıklanmış ve bu kod bloğu için güvenlik analizi yapılmıştır. Daha sonra, aynı işlev ve amaçla farklı bir şekilde yazılış şeklinin önerilmesi ile birlikte, bu alternatif yazılış şekli hakkında da güvenlik analizi yapılmıştır. Bu makalede, smart contract’ların güvenliği ve performansı önemli bir konu olarak ele alınmıştır ve bu konulara yönelik öneriler sunulmuştur. #100daysofSolidity serisi kapsamında, bu konuların yanı sıra, Solidity diline ilişkin diğer önemli konular da ele alınacaktır.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

contract Counter {
    uint public count;

    // Function to get the current count
    function get() public view returns (uint) {
        return count;
    }

    // Function to increment count by 1
    function inc() public {
        count += 1;
    }

    // Function to decrement count by 1
    function dec() public {
        // This function will fail if count = 0
        count -= 1;
    }
}

Bu kod, Solidity dilinde yazılmış bir Ethereum smart contract’ıdır ve bu smart contract, “Counter” adında bir smart contract oluşturur.

Smart contract, “pragma” komutu ile başlar ve bu komut, smart contract’ın hangi Solidity sürümü ile yazıldığını belirtir. Daha sonra, “contract” anahtar kelimesiyle bir smart contract tanımlanır ve smart contract’ın adı “Counter” olarak belirtilir.

Smart contract içinde, “count” adında bir değişken bulunur. Bu değişken, “uint” (unsigned integer) türündedir ve “public” özniteliği ile işaretlenmiştir. Bu nedenle dışarıdan okunabilir ve değiştirilebilir. Bu değişken, smart contract içinde sayımı tutar.

Smart contract içinde, üç fonksiyon bulunur. “get” adlı fonksiyon, smart contract içindeki sayımı döndürür. Bu fonksiyon, “public” ve “view” öznitelikleri ile işaretlenmiştir. “public” özniteliği, bu fonksiyonun dışarıdan çağrılabilir olduğunu belirtir. “view” özniteliği ise, bu fonksiyon içinde hiçbir değişken değiştirilmez ve sadece bir değer döndürür. Bu fonksiyon, “uint” türünde bir değer döndürür ve bu değer, smart contract içindeki sayımı temsil eder.

“inc” adlı fonksiyon ise, smart contract içindeki sayımı bir artırır. Bu fonksiyon, sadece “public” özniteliği ile işaretlenmiştir ve bu nedenle dışarıdan çağrılabilir. Bu fonksiyon içinde, smart contract içindeki “count” değişkeninin değeri bir artırılır.

Son olarak, “dec” adlı fonksiyon smart contract içindeki sayımı bir azaltır. Bu fonksiyon da sadece “public” özniteliği ile işaretlenmiştir ve dışarıdan çağrılabilir. Bu fonksiyon içinde, smart contract içindeki “count” değişkeninin değeri bir azaltılır. Ancak, eğer “count” değişkeninin değeri sıfırdan küçük olursa, bu fonksiyon hata verir ve işlem gerçekleşmez.

Akıllı Sözleşmenin Güvenliği

Bu şekilde, “Counter” adında bir smart contract oluşturulmuş ve bu smart contract içinde sayımı tutan bir değişken ve bu değişkeni okuyan, artıran ve azaltan fonksiyonlar bulunmaktadır. Bu smart contract, dışarıdan çağrılan fonksiyonlar aracılığıyla sayımı değiştirilebilir ve dışarıdan okunabilir.

Bu nedenle, bu smart contract’ta güvenlik açığı göstermiyorum. Bu smart contract, sayımı tutan bir değişken ve bu değişkeni okuyan, artıran ve azaltan fonksiyonlar içerir. Bu fonksiyonlar “public” özniteliği ile işaretlenmiş ve dışarıdan çağrılabilir. “dec” fonksiyonu içinde ise, “count” değişkeninin değeri sıfırdan küçük olursa hata verir ve işlem gerçekleşmez. Bu sayede, smart contract’ın işleyişi beklenen şekilde devam eder ve sayımın sıfırdan küçük olmaması sağlanır.

Bu smart contract’ın kullanımı ise, dışarıdan çağrılan fonksiyonlar aracılığıyla yapılır. Örneğin, sayımı okumak için “get” fonksiyonunu çağırır ve bu fonksiyon sayımı döndürür. Sayımı artırmak için ise “inc” fonksiyonunu çağırır ve bu fonksiyon sayımı bir artırır. Sayımı azaltmak için de “dec” fonksiyonunu çağırır ve bu fonksiyon sayımı bir azaltır.

Bu şekilde, “Counter” adında bir smart contract yaratılmış ve bu smart contract sayımı tutan bir değişken ve bu değişkeni okuyan, artıran ve azaltan fonksiyonlar içerir. Bu smart contract, dışarıdan çağrılan fonksiyonlar aracılığıyla sayımı değiştirilebilir ve dışarıdan okunabilir.

Akıllı Sözleşmenin Verimliliği

Bu smart contract, sayımı tutan bir değişken ve bu değişkeni okuyan, artıran ve azaltan fonksiyonlar içerir. Bu fonksiyonlar “public” özniteliği ile işaretlenmiş ve dışarıdan çağrılabilir. “dec” fonksiyonu içinde ise, “count” değişkeninin değeri sıfırdan küçük olursa hata verir ve işlem gerçekleşmez. Bu sayede, smart contract’ın işleyişi beklenen şekilde devam eder ve sayımın sıfırdan küçük olmaması sağlanır.

Bu smart contract’ta, sayımı tutan bir değişken ve bu değişkeni okuyan, artıran ve azaltan fonksiyonlar bulunur. Bu fonksiyonlar “public” özniteliği ile işaretlenmiş ve dışarıdan çağrılabilir. “dec” fonksiyonu içinde ise, “count” değişkeninin değeri sıfırdan küçük olursa hata verir ve işlem gerçekleşmez. Bu sayede, smart contract’ın işleyişi beklenen şekilde devam eder ve sayımın sıfırdan küçük olmaması sağlanır.

Smart contract’ın verimliliği açısından, bu smart contract içinde sadece bir değişken ve bu değişkeni okuyan, artıran ve azaltan fonksiyonlar bulunur. Bu fonksiyonlar “public” özniteliği ile işaretlenmiş ve dışarıdan çağrılabilir. Bu sayede, smart contract çok az kaynak kullanır ve etkin bir şekilde çalışır.

Smart contract’ın güvenliği açısından ise, “dec” fonksiyonu içinde “count” değişkeninin değeri sıfırdan küçük olursa hata verir ve işlem gerçekleşmez. Bu sayede, smart contract’ın işleyişi beklenen şekilde devam eder ve sayımın sıfırdan küçük olmaması sağlanır. Bu smart contract’ta diğer bir güvenlik açığı göstermiyorum.

Bu smart contract’ın kullanımı ise, dışarıdan çağrılan fonksiyonlar aracılığıyla yapılır. Örneğin, sayımı okumak için “get” fonksiyonunu çağırır ve bu fonksiyon sayımı döndürür. Sayımı artırmak için ise “inc” fonksiyonunu çağırır ve bu fonksiyon sayımı bir artırır. Sayımı azaltmak için de “dec” fonksiyonunu çağırır ve bu fonksiyon sayımı bir azaltır.

Bu şekilde, smart contract içinde bulunan fonksiyonlar aracılığıyla sayımı değiştirebilir ve okuyabilirsiniz. Bu smart contract verimli ve güvenli bir şekilde çalışmaktadır ve bu nedenle kullanımı için bir sıkıntı görünmüyor.

Sonuç olarak, bu smart contract verimli ve güvenli bir şekilde çalışmaktadır. Bu smart contract sayımı tutan bir değişken ve bu değişkeni okuyan, artıran ve azaltan fonksiyonlar içerir. Bu fonksiyonlar “public” özniteliği ile işaretlenmiş ve dışarıdan çağrılabilir. “dec” fonksiyonu içinde ise, “count” değişkeninin değeri sıfırdan küçük olursa hata verir ve işlem gerçekleşmez. Bu sayede, smart contract’ın işleyişi beklenen şekilde devam eder ve sayımın sıfırdan küçük olmaması sağlanır.

Akıllı Sözleşmeyi Farklı Biçimde Oluşturmak

Bu smart contract’ın aynı işlev ve amaçla farklı bir şekilde yazılması için aşağıdaki önerilere göz atabilirsiniz:

  • Değişkenlerin türlerini değiştirin: Örneğin, “count” değişkenini “int” türünden “uint” türüne dönüştürebilir ve bu sayede tamsayı değerlerinin depolandığı değişkeni ondalıklı değerlerin depolandığı bir değişkene dönüştürebilirsiniz.
  • Değişkenlerin isimlerini değiştirin: Örneğin, “count” değişkenini “sayac” değişkenine dönüştürebilir ve bu sayede değişkenin ne işe yaradığını daha iyi anlatan bir isim kullanabilirsiniz.
  • Fonksiyonların özniteliklerini değiştirin: Örneğin, “inc” ve “dec” fonksiyonlarını “private” özniteliğine dönüştürerek bu fonksiyonların sadece smart contract içinde çağrılabileceğini belirtebilirsiniz.
  • Fonksiyonların isimlerini değiştirin: Örneğin, “inc” fonksiyonunu “artir” fonksiyonuna dönüştürebilir ve bu sayede fonksiyonun ne işe yaradığını daha iyi anlatan bir isim kullanabilirsiniz.
  • Fonksiyonların içeriğini değiştirin: Örneğin, “inc” fonksiyonu içinde sayımı artırmak yerine sayımın karesini alan bir kod bloğu yazabilirsiniz. Bu sayede, fonksiyonun işlevi değişecek ve sayımı artırmak yerine sayımın karesini alan bir fonksiyon olacaktır. Bu şekilde, smart contract’ın işlevi değişecek ve sayımı artıran yerine sayımın karesini alan bir smart contract olacaktır.

Bu öneriler doğrultusunda, smart contract’ın aynı işlev ve amaçla farklı bir şekilde yazılması mümkündür. Bu önerilere göre yapılan değişiklikler ile smart contract’ın verimliliği ve güvenliği de değişebilir. Önemli olan, smart contract’ın işlevini yerine getirecek ve güvenli bir şekilde çalışacak şekilde yazılmış olmasıdır.

pragma solidity ^0.8.7;

contract Counter {
uint public sayac;

Copy code
function get() public view returns (uint) {
    return sayac;
}

function artir() public {
    sayac = sayac ** 2;
}

function azalt() private {
    require(sayac > 0, "Sayac sifirdan kucuk olamaz.");
    sayac -= 1;
}
}

Bu smart contract, sayımı tutan “sayac” değişkeni ve bu değişkeni okuyan, artıran ve azaltan fonksiyonlar içerir. “get” fonksiyonu sayımı döndürür, “artir” fonksiyonu ise sayımın karesini alır. “azalt” fonksiyonu ise sayımı bir azaltır, ancak sayım sıfırdan küçük olursa hata verir ve işlem gerçekleşmez. Bu fonksiyon “private” özniteliği ile işaretlenmiş ve sadece smart contract içinde çağrılabilir. Bu smart contract, Solidity 0.8.7 versiyonu ile yazılmıştır.

Yeni Akıllı Sözleşmenin Güvenlik Analizi

Tabii, aşağıdaki güvenlik analizi ile smart contract’ın yeni yazılış şeklinin güvenlik açıklarına bakalım:

  • Değişkenlerin ve fonksiyonların güvenliği: Bu smart contract’ta kullanılan “sayac” değişkeni ve “get”, “artir” ve “azalt” fonksiyonları güvenli bir şekilde tasarlandı. Değişken “uint” türünde ve fonksiyonlar “public”, “private” ve “view” öznitelikleriyle işaretlenmişlerdir. Bu sayede, değişkenlerin ve fonksiyonların güvenli bir şekilde kullanılabileceği garanti edilir.
  • Doğrulama kontrollerinin yeterliliği: “azalt” fonksiyonu içinde sayımın sıfırdan küçük olmaması kontrol edilir. Bu sayede, sayım sıfırdan küçük olursa hata verir ve işlem gerçekleşmez. Bu doğrulama kontrolü yeterlidir ve smart contract’ın beklenen şekilde çalışmasını sağlar.
  • Özel fonksiyonların güvenliği: “azalt” fonksiyonu “private” özniteliği ile işaretlenmiş ve sadece smart contract içinde çağrılabilir. Bu sayede, bu fonksiyon dışarıdan çağrılamaz ve smart contract’ın güvenliği sağlanır.
  • Fonksiyonların performansı: Bu smart contract’ta yer alan “artir” fonksiyonu sayımın karesini alır. Bu fonksiyonun performansı, sayımın büyüklüğüne göre değişebilir. Örneğin, sayım çok büyük olursa fonksiyonun çalışması uzun sürebilir ve smart contract’ın performansı düşebilir. Bu durumda, fonksiyonun çalışma hızını arttıracak yöntemler kullanılabilir.
  • Güncelleme işlemlerinin güvenliği: Bu smart contract’ta güncelleme işlemlerinin güvenliği güncellenen fonksiyonların güvenliğine ve doğrulama kontrollerine bağlıdır. Örneğin, “artir” fonksiyonu güncellendiğinde, fonksiyonun güvenliği ve doğrulama kontrollerinin yeterliliği tekrar değerlendirilmelidir. Bu sayede, güncelleme işlemlerinin güvenliği sağlanır.

Bu açıklamalar doğrultusunda, bu smart contract güvenli bir şekilde tasarlandı ve beklenen şekilde çalışmaktadır. Güvenlik açıklarına yönelik önlemler alınmış ve fonksiyonların performansı dikkate alınmıştır. Güncelleme işlemlerinin güvenliği de düşünülmüştür.

Sonuç olarak, bu makalede “Counter” smart contract’ının ilk yazılış şekli ve alternatif bir yazılış şeklinin önerilmesi ele alınmıştır. Smart contract’ların güvenliği ve performansı önemli konular olduğu için, bu konulara yönelik öneriler sunulmuştur.

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
İlginizi Çekebilir

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