1. Anasayfa
  2. 100 Günde Solidity

🧵 100GündeSolidity 064 : Multi Call

Solidity'de Verimliliği Arttırmak için Multi Call Kullanımı

🧵 100GündeSolidity 064 : Multi Call
Multi Call Kullanımı
0

Multi Call Kullanımı

Merhaba!

Bugün #100GündeSolidity serisinin 64. bülteninde “Solidity’de Verimliliği Arttırmak için Multi Call Kullanımı” konusuna değineceğiz. Solidity, Ethereum blok zinciri üzerinde akıllı sözleşmeler oluşturmak için kullanılan bir programlama dilidir. Bu dilde yazılan sözleşmeler, işlem yapmak için gaz adı verilen bir ücret ödemenizi gerektirir. İşlemlerin birçoğu basit işlemler olsa da, bu ücretler büyük ölçüde artabilir ve özellikle birden fazla işlem yapmak istediğinizde masraflarınız artabilir. Multi Call, birden fazla işlemi tek bir işlemde birleştiren bir tekniktir. Bu teknik sayesinde, gaz masraflarını azaltabilir ve sözleşmelerinizin verimliliğini artırabilirsiniz. Şimdi, Multi Call’in ne olduğuna ve neden kullanılması gerektiğine bir göz atalım.

Multi Call Nedir?

Multi Call, Ethereum blok zinciri üzerinde birden fazla işlemi tek bir işlemde birleştiren bir tekniktir. Bu işlemler, farklı sözleşmeler arasında veya aynı sözleşme içinde olabilir. Multi Call, özellikle değişmez verilerin okunması için sıklıkla kullanılır. Örneğin, birden fazla adresin bakiyelerini veya bir dizi tokenın toplam arzını almak isteyebilirsiniz. Bu işlemler tek tek gerçekleştirilirse, çok sayıda gaz ücreti ödemeniz gerekebilir. Ancak, Multi Call ile tüm işlemleri birleştirerek sadece bir kere gaz ücreti ödersiniz ve işlemlerin tüm sonuçları aynı anda alınır.

Multi Call, genellikle Solidity dilinde yazılan akıllı sözleşmelerde kullanılır. Bu sözleşmelerin belirli adreslerde veya diğer sözleşmelerdeki verileri okuması gerektiğinde kullanışlı olabilir. Multi Call ile birçok veri okuması tek bir işlemle gerçekleştirilebildiği için, sözleşmeler daha verimli hale gelir ve işlem ücretleri azaltılabilir.

Multi Call’in Avantajları & Dezavantajları Nelerdir?

Multi Call’in avantajları ve dezavantajları şu şekildedir:

Avantajları:

  1. Verimliliği Arttırır: Multi Call, birden fazla işlemi tek bir işlemde birleştirdiği için sözleşmelerinizi daha verimli hale getirir. Ayrı ayrı işlemler gerçekleştirmek yerine tek bir işlemde işlerinizi tamamlamanız mümkün olur. Bu da sözleşmelerinizin çalışma süresini ve işlem ücretlerini azaltır.
  2. Daha Az Gaz Harcaması: Multi Call, birçok işlemi tek bir işlemde birleştirdiği için gaz harcamalarınızı azaltır. İşlemler tek tek gerçekleştirilseydi, her biri için gaz ücreti ödemeniz gerekecekti. Ancak Multi Call ile sadece bir kez gaz ücreti ödersiniz ve tüm işlemler aynı anda gerçekleştirilir.
  3. Veri Okuma İşlemlerini Kolaylaştırır: Multi Call, birden fazla adres veya sözleşme üzerinde veri okuma işlemlerini kolaylaştırır. Örneğin, birden fazla adresin bakiyelerini veya bir dizi tokenın toplam arzını almak istiyorsanız, her biri için ayrı ayrı işlem yapmak yerine Multi Call kullanarak tek bir işlemle hepsini alabilirsiniz.

Dezavantajları:

  1. Güvenlik Riski: Multi Call, birçok işlemi tek bir işlemde birleştirdiği için güvenlik riski taşıyabilir. Bir işlemdeki hata, tüm işlemlerin başarısız olmasına neden olabilir. Ayrıca, işlemlerin birleştirilmesi, bazı işlemlerin işlenmesinin gecikmesine veya iptal edilmesine neden olabilir.
  2. Karmaşık Kodlama: Multi Call, işlemleri birleştirmek için karmaşık kodlama gerektirir. Bu nedenle, başlangıçta karmaşık görünebilir ve geliştiricilerin kodlama becerilerini gerektirebilir.
  3. Sınırlı Kullanım: Multi Call, belirli durumlar için kullanılabilir. Özellikle, veri okuma işlemleri için idealdir. Ancak, belirli işlemler için Multi Call kullanımı uygun olmayabilir. Bu nedenle, geliştiriciler, kullanmadan önce dikkatli bir şekilde düşünmelidirler.

Multi Call Nasıl Kullanılır?

Multi Call, birçok işlemi tek bir işlemde birleştirdiği için Solidity dilinde yazılan akıllı sözleşmelerde sıklıkla kullanılır. Multi Call’ı kullanmak için şu adımları izleyebilirsiniz:

  • Multi Call Kütüphanesini İçe Aktarın: Multi Call’ı kullanmak için öncelikle Multi Call kütüphanesini içe aktarmanız gerekiyor. Bunun için aşağıdaki kodu kullanabilirsiniz:

import “./MultiCall.sol”;

  • Multi Call Sözleşmesi Oluşturun: Multi Call işlemlerini gerçekleştirmek için bir sözleşme oluşturmanız gerekiyor. Bunun için aşağıdaki kodu kullanabilirsiniz:
contract MyContract {
    using MultiCall for *;
    
    function getBalances(address[] memory _addresses) public view returns(uint256[] memory) {
        (bool success, bytes[] memory returnData) = MultiCall.multiStaticCall(
            abi.encodeWithSignature("balanceOf(address)", _addresses),
            address(0x1234567890123456789012345678901234567890)
        );
        
        require(success, "Multicall failed");
        
        uint256[] memory balances = new uint256[](returnData.length);
        
        for (uint256 i = 0; i < returnData.length; i++) {
            balances[i] = abi.decode(returnData[i], (uint256));
        }
        
        return balances;
    }
}
  • İşlemleri Multi Call ile Birleştirin: Multi Call ile birleştirmek istediğiniz işlemleri hazırlayın. Örneğin, birden fazla adresin bakiyelerini almak istiyorsanız, bu işlemleri hazırlayın ve Multi Call ile birleştirin.
  • Multi Call İşlemi Yapın: Hazırlanan işlemleri Multi Call ile birleştirin ve işlemi gerçekleştirin. Bunun için aşağıdaki kodu kullanabilirsiniz:
(bool success, bytes[] memory returnData) = MultiCall.multiStaticCall(
    encodedCalls,
    callAddress
);

Bu adımları izlediğinizde, Multi Call’ı kullanarak birden fazla işlemi tek bir işlemde birleştirebilir ve işlem ücretlerinden tasarruf edebilirsiniz.

Multi Call Örnekleri

Multi Call, Ethereum geliştiricileri için oldukça kullanışlı bir tekniktir. Birden fazla akıllı sözleşme çağrısını tek bir işlemde birleştirerek gas maliyetlerini azaltır ve işlem verimliliğini artırır. Aşağıda, Multi Call teknolojisinin kullanıldığı bazı örnekler verilmiştir:

  1. Uniswap v3 Uniswap v3, likidite sağlayıcılarının gas maliyetlerini azaltmak için Multi Call teknolojisini kullanır. Sözleşmenin temel fonksiyonlarından biri, likidite sağlayıcısı hesaplarını ve pozisyonlarını tek bir çağrıda toplamaktır.
  2. Aave Aave, borç verme ve borç alma işlemlerini yönetmek için Multi Call teknolojisini kullanır. Aave, birden fazla sözleşmeyi tek bir işlemde çağırarak gas maliyetlerini azaltır ve işlem verimliliğini artırır.
  3. Yearn Finance Yearn Finance, birçok DeFi platformunun en popüler otomasyon araçlarından biridir. Multi Call teknolojisi, Yearn Finance platformunda sıklıkla kullanılır. Sözleşme, birden fazla likidite havuzunu ve stratejiyi tek bir işlemde yönetir.
  4. SushiSwap SushiSwap, Uniswap gibi bir AMM (Automated Market Maker) protokolüdür. Multi Call teknolojisi, SushiSwap’ta likidite sağlayıcılarına, birden fazla pozisyonu tek bir işlemde yönetme imkanı sunar.

Bu örnekler, Multi Call teknolojisinin Ethereum ekosistemindeki DeFi uygulamalarının gelişimi için ne kadar önemli olduğunu göstermektedir. Multi Call, Ethereum geliştiricilerine, akıllı sözleşme çağrılarını daha verimli hale getirme ve gas maliyetlerini azaltma imkanı sunar.

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

Staticcall

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

contract MultiCall {
    function multiCall(
        address[] calldata targets,
        bytes[] calldata data
    ) external view returns (bytes[] memory) {
        require(targets.length == data.length, "target length != data length");

        bytes[] memory results = new bytes[](data.length);

        for (uint i; i < targets.length; i++) {
            (bool success, bytes memory result) = targets[i].staticcall(data[i]);
            require(success, "call failed");
            results[i] = result;
        }

        return results;
    }
}

Bu örnek akıllı sözleşme, Multi Call kullanarak birden fazla adres üzerinde işlem yapmak isteyen kullanıcılar için tasarlanmıştır. Sözleşme, birden fazla hedef adres ve veri girişi alır ve ardından bu hedef adreslerin her birindeki verileri almak için bir döngü kullanarak Multi Call işlemini gerçekleştirir.

Sözleşme, “multiCall” işlevini içerir, bu işlev aşağıdaki parametreleri alır:

  • “targets”: İşlem yapılacak hedef adreslerin dizisi.
  • “data”: Her hedef adres için kullanılacak veri girişlerinin dizisi.

Bu parametreler, Multi Call işlemi için gerekli olan verileri sağlar. İşlev, bu parametreleri kullanarak bir döngü oluşturur ve her döngüde bir hedef adres için bir “staticcall” işlemi gerçekleştirir.

Her bir “staticcall” işlemi başarılı olursa, sonuçlar dizisinde ilgili sonucu depolar. Eğer bir “staticcall” işlemi başarısız olursa, işlemi durdurur ve bir hata mesajı gösterir.

Sonuç olarak, bu örnek akıllı sözleşme, birden fazla hedef adres üzerinde işlem yapmak isteyen kullanıcılar için kolay ve verimli bir yöntem sağlar. Ancak, her bir hedef adres için ayrı bir işlem yapmak yerine, tüm işlemleri tek bir işlemde birleştirdiği için işlem maliyetlerinden tasarruf etmenin yanı sıra, Multi Call işleminin doğru bir şekilde yapılandırılması ve yönetilmesi önemlidir.

MultiCall

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

contract TestMultiCall {
    function test(uint _i) external pure returns (uint) {
        return _i;
    }

    function getData(uint _i) external pure returns (bytes memory) {
        return abi.encodeWithSelector(this.test.selector, _i);
    }
}

Bu örnek akıllı sözleşme, Multi Call’in nasıl kullanılacağını test etmek için tasarlanmıştır. Sözleşme, “test” ve “getData” adında iki işlev içerir.

“test” işlevi, “uint _i” adında bir tamsayı parametresi alır ve bu parametreyi geri döndürür. Bu işlev, test amaçlı olarak kullanılır ve Multi Call işlemini gerçekleştirmek için gerekli bir adrestir.

“getData” işlevi, “uint _i” adında bir tamsayı parametresi alır ve bu parametre ile “test” işlevini çağırmak için gereken verileri döndürür. Bu veriler, “abi.encodeWithSelector” işlevi kullanılarak kodlanır.

Sözleşme, test amaçlı olduğundan, işlevler “pure” deklaratörü ile işaretlenmiştir. Bu, işlevlerin sözleşme durumunu değiştirmediği ve sadece girilen parametrelere dayalı olarak sonuç ürettiği anlamına gelir.

Bu örnek akıllı sözleşme, Multi Call kullanımı için bir adreste gereken verileri nasıl oluşturacağımızı gösterir. Bu verileri kullanarak, sözleşmenin bir örneğini kullanarak birden fazla işlemi tek bir işlemde gerçekleştirmek mümkündür.

Multi Call ile İlgili Dikkat Edilmesi Gerekenler

Multi Call kullanırken dikkat edilmesi gereken bazı önemli noktalar vardır:

  1. Güvenlik: Multi Call işlemleri, birden fazla akıllı sözleşme çağrısını tek bir işlemde birleştirir. Bu nedenle, güvenliği sağlamak için çağrılan akıllı sözleşmelerin tümünün güvenli ve doğru olduğundan emin olmak önemlidir.
  2. İşlem maliyetleri: Multi Call, tek bir işlemde birden fazla akıllı sözleşme çağrısı birleştirdiği için, işlem ücretlerini önemli ölçüde azaltabilir. Ancak, çağrılan her akıllı sözleşme için gas ücreti ödenir, bu nedenle çok sayıda çağrı yapmak, işlem maliyetlerini artırabilir.
  3. İşlem sırası: Multi Call işlemleri, çağrıların sırasını garanti etmez. Bu nedenle, çağrıların sırasının önemli olduğu durumlarda, Multi Call yerine tek tek çağrılar kullanılmalıdır.
  4. Veri boyutu sınırlamaları: Ethereum ağında bir işlem için maksimum veri boyutu sınırı vardır. Bu nedenle, çok sayıda akıllı sözleşme çağrısının birleştirilmesi, işlemin boyutunu aşabilir. Bu durumda, çağrılar küçük gruplar halinde yapılmalı veya farklı bir yöntem kullanılmalıdır.
  5. Staticcall kullanımı: Multi Call işlemlerinde, çağrı yapılan akıllı sözleşmelerin “view” veya “pure” işlevlerini çağırmak için “staticcall” kullanılır. Bu işlevler, sözleşmenin durumunu değiştirmediği için, işlemin blok zincirinde kalıcı olması gerekmez. Ancak, “staticcall” işlevi, sözleşmenin durumunu değiştiren işlemlerde kullanılmamalıdır.

Bu dikkat edilmesi gereken noktalar Multi Call kullanımının başarılı bir şekilde gerçekleştirilmesine yardımcı olacaktır.

Multi Call’in Geleceği

Multi Call, Ethereum geliştiricileri tarafından yaygın bir şekilde kullanılan bir tekniktir ve Ethereum topluluğu için önemli bir araçtır. Multi Call, birden fazla akıllı sözleşme çağrısını tek bir işlemde birleştirerek, gas maliyetlerini azaltır ve işlem verimliliğini artırır.

Gelecekte, Multi Call teknolojisi geliştirilebilir ve daha da iyileştirilebilir. Örneğin, Ethereum ağındaki işlem sınırı artırılarak, daha büyük veri setlerinin birleştirilmesine izin verilebilir. Ayrıca, Multi Call işlemlerinin daha güvenli hale getirilmesi için, akıllı sözleşmelerin güvenliğini artıran yeni teknolojilerin kullanılması da mümkündür.

Bununla birlikte, Multi Call’in geleceği, Ethereum ağının genel gelişimi ve DeFi uygulamalarının yaygınlaşmasıyla doğrudan ilişkilidir. DeFi uygulamaları, birden fazla akıllı sözleşmenin entegrasyonuyla oluşturulduğu için, Multi Call, DeFi uygulamalarının büyümesini ve daha karmaşık finansal enstrümanların oluşturulmasını kolaylaştıracaktır.

Sonuç olarak, Multi Call teknolojisi Ethereum ekosistemi için önemli bir araçtır ve Ethereum geliştiricileri tarafından gelecekte daha da iyileştirilmesi beklenmektedir.

Sonuç Bağlamı

Multi Call, Ethereum geliştiricileri için oldukça kullanışlı bir tekniktir. Birden fazla akıllı sözleşme çağrısını tek bir işlemde birleştirerek gas maliyetlerini azaltır ve işlem verimliliğini artırır. Multi Call’in kullanımı, DeFi uygulamalarının büyümesi ve daha karmaşık finansal enstrümanların oluşturulması için de büyük önem taşır.

Bununla birlikte, Multi Call kullanırken dikkat edilmesi gereken bazı hususlar vardır ve özenli bir şekilde tasarlanmalıdır. Ayrıca, gelecekte Multi Call teknolojisi geliştirilebilir ve Ethereum ekosistemindeki DeFi uygulamalarının yaygınlaşmasıyla doğrudan ilişkilidir. Ethereum topluluğu, Multi Call teknolojisinin geliştirilmesine ve daha da iyileştirilmesine devam edecektir.

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