Gaz Optimizasyonu (Array / Mapping)
Gaz Optimizasyonda array ve mapping karşılaştırması üzerine kısa bir yazı.
Solidity ile yazılan kodları ilk incelediğinizde, kod yapılarının çok kısa ve net olduğunu göreceksiniz. Bunun nedeni EVM üzerinde yazdığınız sözleşmeleri oluşturan her kod parçasının bir gaz bedelinin olmasıdır. Gaz bedellerine ilişkin temel rakamlara şu linkten ulaşabilirsiniz.Bu yazıda sizlere array ve map kullanımında ortaya çıkan gaz maliyetlerine ilişkin uygulamalı bir örnek sunacağım.
Mapping mi yoksa Array mi ?
Hemen dinamik bir array yazalım
uint[] public array;
GAZ: 137857
Basit bir mapping yazalım.
mapping(uint => uint) public balances;
GAZ: 152982
Dinamik bir array, mapping’ten daha ucuzdur diye bilir miyiz?
Bir de fonksiyonlar yoluyla üzerlerinde çalışma yapalım.
Dinamik array için basit bir fonksiyon yazalım.
uint[] public array;
function usearray(uint item) public {
array.push(item);
}
GAZ: 164125
Mapping için basit bir fonksiyon yazalım.
mapping(uint => uint) public balances;
function addClass(uint x, uint y) public {
balances[x]=y;
}
GAZ: 172791
Dinamik bir array, mapping’ten daha ucuzdur diye bilir miyiz?
usearray fonksiyonunu kullanarak array’e bir değer ekleyelim.
İlk eklenen değerinin gaz maliyeti 75823
sonrasında eklenen her değerin yaklaşık gaz maliyeti 56158
addClass fonksiyonunu kullanarak mapping’e bir değer çifti ekleyelim.
İlk eklenen değer çiftinin gaz maliyeti 50733
sonrasında eklenen her değer çiftinin yaklaşık gaz maliyeti 50733
Görüldüğü üzere, dinamik arraylere değer eklemeye veya diğer işlemleri yapmaya başladığımızda gaz maliyeti mappinglere göre artmaktadır.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.15;
contract Optimization {
uint[] public array;
function usearray(uint item) public {
array.push(item);
}
mapping(uint => uint) public balances;
function addClass(uint x, uint y) public {
balances[x]=y;
}
}