1. Anasayfa
  2. 100 Günde Solidity

🧵 #100GündeSolidity 009 : Gaz Yönetimi

🧵 #100GündeSolidity 009 : Gaz Yönetimi
Gaz Yönetimi
0

Gaz Yönetimi: Akıllı Sözleşmelerin işlevselliği ve güvenliği

Akıllı Sözleşmelerin Ethereum ağında gaz harcamasının optimize edilmesi ve işlev, güvenlik ve verimliliğin dengelenmesi

Ethereum ağında yaptığınız her işlem için bir miktar gaz ödemeniz gerekir. Gaz, işlemlerin gerçekleştirilmesi için gerekli olan hesaplama kaynaklarını ölçen bir birimdir. İşlem maliyeti, işlemde kullanılan toplam gaz miktarı (gaz harcanmış) ile gaz fiyatının çarpımı ile belirlenir. Gaz fiyatı, birim gaz için ödemek istediğiniz ether miktarıdır. Gaz limiti ise işlem için kullanmak istediğiniz maksimum gaz miktarıdır ve blok gaz limiti ise ağ tarafından belirlenen blok içinde izin verilen maksimum gaz miktarıdır. Daha yüksek gaz fiyatına sahip işlemler daha yüksek öncelikle blok içine eklenir ve kullanılmayan gaz geri iade edilir.

Ethereum ağında yaptığınız işlemler için gaz ödemek zorundasınız. Gaz, işlemleri gerçekleştirmek için gerekli olan hesaplama kaynaklarını ölçen bir birimdir. İşlem maliyeti, işlemde kullanılan toplam gaz miktarı ile gaz fiyatının çarpımı ile belirlenir. Gaz fiyatı, birim gaz için ödemek istediğiniz ether miktarıdır.

Gaz limiti, işlem için kullanmak istediğiniz maksimum gaz miktarıdır. Ayrıca, ağ tarafından belirlenen blok gaz limiti de bulunmaktadır. Bu limit, bir blok içinde izin verilen maksimum gaz miktarıdır. Daha yüksek gaz fiyatına sahip işlemler, daha yüksek öncelikle blok içine eklenir. Kullanılmayan gaz ise geri iade edilir.

Gaz ödemeleri, işlemlerin önceliğini belirler ve ayrıca, işlemlerin hızlı ve güvenli bir şekilde gerçekleşmesini sağlar. Ancak, yüksek gaz fiyatları nedeniyle yapılan işlemler maliyetli olabilir. Bu nedenle, gaz limitini ve gaz fiyatını dikkatli bir şekilde ayarlamalısınız.

Gaz ödemeleri, smart contractlerin yürütülmesi ve işlemlerin gerçekleştirilmesi için gerekli olan bir parçasıdır. Bu nedenle, Ethereum ağını kullanırken gaz ödemelerine dikkat etmeniz gerekir.

Bir işlem için ne kadar ether ödemeniz gerekiyor?

Bir işlem için ödemek zorunda olduğunuz ether miktarı, işlemde kullandığınız gaz miktarı (harcanan gaz) ile gaz fiyatının çarpımına eşittir. Örneğin, bir işlem için 21000 gaz kullandınız ve gaz fiyatınız 0.02 ether ise, işlem için 21000 * 0.02 = 420 ether ödemek zorunda kalacaksınız.

Harcanan gaz, işlemde kullandığınız gaz miktarıdır. Bu miktar, işlem gerçekleştirilirken kullanılan hesaplama kaynaklarının ölçüsüdür.

Gaz iade, işlemde kullanılmayan gaz miktarının geri iadesidir. Örneğin, bir işlem için ayrılmış olan gaz limiti 100000 iken, gerçekleştirilen işlem için sadece 50000 gaz kullanıldıysa, geri kalan 50000 gaz geri iade edilir.

Gaz limiti, işlem için kullanmak istediğiniz maksimum gaz miktarıdır. Bu limit, işlemi gerçekleştirmek için gerekli olan gaz miktarının üst sınırını belirler.

Block gas limit, blok içinde izin verilen maksimum gaz miktarıdır. Bu limit, ağ tarafından belirlenir ve her blokta değişebilir. Eğer işlem için ayarladığınız gaz limiti blok gaz limitinden yüksekse, işlem gerçekleştirilemez.

Solidity ile Örnekler

Gaz fiyatını ayarlamak için gasprice komutunu kullanabilirsiniz. Örneğin, işlem için gaz fiyatını 0.02 ether olarak ayarlayabilirsiniz:

uint gasPrice = 20000000000;

Gaz limitini ayarlamak için gas komutunu kullanabilirsiniz. Örneğin, işlem için gaz limitini 21000 olarak ayarlayabilirsiniz:

uint gasLimit = 21000;

Blok gaz limitini öğrenmek için block.gaslimit komutunu kullanabilirsiniz. Örneğin, aktif blokun gaz limitini değişkenine atayabilirsiniz:

uint blockGasLimit = block.gaslimit;

Bir işlem gerçekleştirirken harcanan gaz miktarını öğrenmek için gasleft() fonksiyonunu kullanabilirsiniz. Örneğin, işlemden geri kalan gaz miktarını değişkene atayabilirsiniz:

uint remainingGas = gasleft();

Bu örnekler sadece temel bir fikir vermek için verilmiştir, gerçek bir smart contract yazarken dikkatli olmanız gerekir.

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

contract Gas {
    uint public i = 0;

    // Using up all of the gas that you send causes your transaction to fail.
    // State changes are undone.
    // Gas spent are not refunded.
    function forever() public {
        // Here we run a loop until all of the gas are spent
        // and the transaction fails
        while (true) {
            i += 1;
        }
    }
}

Bu Solidity kodu, “Gas” adında bir smart contract içermektedir. Bu smart contract, sadece bir işlem gerçekleştirir ve tüm gazı harcar.

pragma solidity ^0.8.17; satırı, bu kodun çalıştırılması için gerekli olan Solidity sürümünü belirtir. Kod, sadece 0.8.17 veya daha yüksek sürümlerde çalışacaktır.

contract Gas { ile başlayan satır, “Gas” adında bir smart contract tanımlar.

uint public i = 0; satırı, bir tam sayı değişkeni tanımlar ve başlangıç değeri 0 olarak ayarlar. Bu değişken herhangi bir yerde okunabilir olacaktır.

function forever() public { ile başlayan satır, “forever” adında bir fonksiyon tanımlar. Bu fonksiyon, herhangi bir girdi almaz ve herhangi bir değer döndürmez. Bu fonksiyon herhangi bir yerden çağrılabilir.

while (true) { ile başlayan satır, sonsuz bir döngü oluşturur. Bu döngü, sürekli olarak çalışmaya devam eder ve tüm gazı harcar.

i += 1; satırı, i değişkeninin değerini 1 arttırır. Bu döngü içinde sürekli olarak çalıştırılır ve tüm gazı harcar.

while (true) döngüsünün içinde gerçekleşen işlemler, gazın tükendiği noktada geri alınamaz ve geri ödenmez. Bu smart contract sadece gazı harcamanın nasıl gerçekleştiğini göstermek için yazılmıştır. Gerçek bir smart contract yazarken, gaz miktarını ve işlem maliyetini dikkatli bir şekilde düşünmelisiniz.

Akıllı Sözleşme Güvenlik Analizi

Bu Solidity kod parçası, belirli bir güvenlik açığı içermemektedir. Ancak, bu kod yalnızca gazı harcamanın nasıl gerçekleştiğini göstermek için yazılmıştır ve gerçek bir smart contract olarak kullanılması önerilmez.

Bu kodun bir güvenlik açığı, sonsuz döngü (while (true) {) nedeniyle gaz tüketiminin sınırsız olmasıdır. Bu durumda, bir kullanıcı tarafından yapılan işlem, tüm gazı harcar ve işlem geri alınamaz ve geri ödenmez. Bu nedenle, gerçek bir smart contract yazarken dikkatli bir şekilde gaz miktarını ve işlem maliyetini düşünmelisiniz.

Ayrıca, bu contractta tanımlı olan i değişkeninin ne amaçla kullanıldığı belirsiz, contract’ın ne yaptığı da belirsiz olduğu için genel olarak contract’ın amacının ne olduğunu anlamak zor.

Solidity kod parçasını işlev ve verimlilik açısından değerlendirelim

Bu Solidity kod parçası, işlev ve verimlilik açısından çok az değer taşımaktadır.

Bu kodun amacı, sadece gazı harcamanın nasıl gerçekleştiğini göstermek için yazılmıştır. Bu nedenle, gerçek bir smart contract olarak kullanılması önerilmez. Sonsuz döngü (while (true) {) nedeniyle gaz tüketiminin sınırsız olması, gerçek bir smart contract için kabul edilemez bir durumdur.

Ayrıca, yazılmış olan kodun işlevi belirsiz olduğu için verimliliği de tartışılır.

Bu smart contract yazarken daha fazla işlevlilik ve verimlilik için daha dikkatli bir şekilde planlamalı ve tasarlanmalısınız. Gerçek bir işlem için gerekli olan gaz miktarını ve işlem maliyetini dikkatli bir şekilde değerlendirerek işlemlerinizi optimize etmeli ve gaz harcamanızı minimuma indirmelisiniz.

Akıllı Sözleşme Güvenlik Güncellemesi

Solidity kod parçasını daha işlevsel, verimli ve güvenli hale getirmek için birkaç seçenek sunabilirim.

  • İşlem gerçekleştirilirken gerekli olan gaz miktarını dikkatli bir şekilde planlamak: Öncelikle, işlem gerçekleştirilirken gerekli olan gaz miktarını dikkatli bir şekilde hesaplamak ve gaz limitini o miktara göre ayarlamak gerekir. Bu şekilde, işlem gerçekleştirilirken gereksiz gaz harcanmaz.
  • Sonsuz döngüyü kaldırmak: Sonsuz döngü (while (true) {) yerine, bir döngünün belirli bir süre sonra sonlandırılmasına izin verecek bir koşul kullanmalısınız. Örneğin, döngü içinde belirli bir sayıya ulaşana kadar çalıştırılmasını sağlayabilirsiniz.
  • İşlem gerçekleştirirken gaz iadesini düşünmek: Kullanılmayan gaz iadesi almak için, işlem gerçekleştirirken gaz limitini dikkatli bir şekilde ayarlamak ve gaz iadesini geri almak için gerekli fonksiyonları kullanmak.
  • Contract’ın amacını ve işlevini belirtmek: Smart contract’ın ne yaptığı ve amacını belirtmeli, işlevini açık ve anlaşılır bir şekilde tanımlamak. Bu sayede, contract’ın verimli ve güvenli bir şekilde kullanılması daha kolay olacaktır.
  • Güncel Solidity sürümünü kullanmak: Bu kod parçası Solidity 0.8.0 ile yazılmış. Solidity dilinin güncel sürümünü kullanmak, daha güncel özellikleri ve güvenlik düzeltmelerini kullanmanızı sağlar.
  • İşlemleri optimize etmek: Smart contract’ın işlevlerini optimize etmek, işlemleri hızlandırmak ve gaz harcamasını azaltmak için önemlidir. Örneğin, sadece gerektiğinde işlemleri gerçekleştirmek, işlemleri paralellize etmek gibi yollar izleyebilirsiniz.

Bu öneriler sadece bir başlangıç noktasıdır, gerçek bir smart contract yazarken daha fazla ayrıntıya dikkat etmeniz ve güvenlik, işlevsellik ve verimlilik dengesini sağlamanız gerekir.

Örneklerle Akıllı Sözleşme Oluşturulması ve İncelenmesi

Aşağıda bir örnek smart contract veriyorum. Bu smart contract, bir kullanıcının belirli bir sayıya ulaşana kadar adım adım saymasını sağlar.

pragma solidity ^0.8.0;

contract StepCounter {
    uint public count = 0;
    uint limit;

    constructor(uint _limit) public {
        limit = _limit;
    }

    function step() public {
        require(count < limit, "Reached the limit");
        count++;
    }
}

Bu smart contract, bir constructor ile başlar. Bu yapıcı fonksiyon, _limit adlı bir girdi alır ve limit değişkenine atar. Bu limit, kullanıcının sayabileceği maksimum sayıyı belirler.

step() adlı fonksiyon sayıyı arttırmak için kullanılır. Bu fonksiyon çağrılmadan önce, kullanıcının limiti aşıp aşmadığı kontrol edilir. Eğer limiti aşmışsa, işlem gerçekleşmez.

Bu smart contract, işlem gerçekleştirirken gerekli olan gaz miktarını dikkatli bir şekilde planlar ve gaz harcamasını minimuma indirir. Ayrıca, işlem gerçekleştirilirken gaz iadesini düşünür ve işlem gerçekleştirirken gaz limitini dikkatli bir şekilde ayarlar. Contract’ın işlevi ve amacı ise açık ve anlaşılır bir şekilde tanımlanmıştır.

Akıllı Sözleşmelerin Karşılaştırmalı Analizi

İki smart contract örneğini işlev, güvenlik ve verimlilik açısından karşılaştıralım.

  1. İşlev: İlk örnekteki smart contract, sadece gazı harcamanın nasıl gerçekleştiğini göstermek için yazılmıştır. İkinci örnekteki smart contract ise, bir kullanıcının belirli bir sayıya ulaşana kadar adım adım saymasını sağlar. İkinci örnekteki smart contract daha işlevseldir.
  2. Güvenlik: İlk örnekteki smart contract, sonsuz döngü nedeniyle gaz tüketiminin sınırsız olması nedeniyle güvenli değildir. İkinci örnekteki smart contract ise, işlem gerçekleştirirken gerekli olan gaz miktarını dikkatli bir şekilde planlar ve gaz harcamasını minimuma indirir. İkinci örnekteki smart contract daha güvenlidir.
  3. Verimlilik: İlk örnekteki smart contract, gerçek bir işlem için gereken gaz miktarını ve işlem maliyetini dikkatli bir şekilde düşünmemektedir. İkinci örnekteki smart contract ise, işlem gerçekleştirirken gaz limitini dikkatli bir şekilde ayarlar ve gaz iadesini geri almak için gerekli fonksiyonları kullanır. İkinci örnekteki smart contract daha verimlidir.
  4. Sonuç olarak, İkinci örnekteki smart contract, işlev, güvenlik ve verimlilik açısından daha iyidir. Gerçek bir smart contract yazarken daha işlevsel, güvenli ve verimli hale getirmek için bu örnekteki yöntemleri kullanabilirsiniz.

Smart Contract, blockchain teknolojisi ile uyumlu olarak yazılmış ve yürütülmüş programlardır. Bu programlar, blockchain ağının güvenli ve doğrulanmış bir şekilde işlem yapmasını sağlar. Özellikle Ethereum blockchain ağında, smart contractlar gas (gaz) ile ödeme yapılmasını gerektirmektedir.

#100GündeSolidity serisinin Bu bölümünde gas, gas spent, gas price, gas refund, gas limit, block gas limit gibi konulara değinilmiş ve iki örnek smart contract kod parçası incelenmiştir. İlk örnekteki smart contract sadece gaz harcama nasıl gerçekleştiğini göstermek için yazılmıştır ve gerçek bir smart contract olarak kullanılması önerilmemektedir. İkinci örnekteki smart contract ise, bir kullanıcının belirli bir sayıya ulaşana kadar adım adım saymasını sağlar. İkinci örnekteki smart contract, işlev, güvenlik ve verimlilik açısından daha iyidir. Gerçek bir smart contract yazarken daha işlevsel, güvenli ve verimli hale getirmek için bu örnekteki yöntemleri kullanabilirsiniz.

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