Kaynak dosyaları sınırsız sayıda import
yönlendirmeleri, sözleşme tanımları (fonksiyonlar, durum değişkenleri) ve pragma yönlendirmeleri(pragma directives) içerebilir. Ek olarak her kaynak dosyası SPDX-License-Identifier yorum satırı içerir. Aşağıda Solidity diliyle yazılmış örnek bir Storage.sol kaynak dosyasını görmektesiniz.
// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.7.0 <0.9.0; /** * @title Storage * @dev Store & retrieve value in a variable */ contract Storage { uint256 number; /** * @dev Store value in variable * @param num value to store */ function store(uint256 num) public { number = num; } /** * @dev Return value * @return value of 'number' */ function retrieve() public view returns (uint256){ return number;
Solidity akıllı sözleşme dosyalarının başına koyulan // SPDX-License-Identifier: MIT
yorum satırı kodu akıllı sözleşmelere olan güveni pekiştirir ve yasal sorunlara karşı çözüm olur. Her kaynak kodu Solidity derleyicisinin okuyabileceğini SPDX lisans tanımlayıcıları içermek zorundadır.
// SPDX-License-Identifier: MIT
➝ doğru kullanım// SPDX-License-Identifier:
➝ yanlış kullanım (lisans kısaltması gerekir)
Lisans tanımlamaları yaparken SPDX-License-Identifier:
kodunun dosyada herhangi bir satırda bulunması ve bir değerinin olması gerekmektedir. Bu lisans değerlerine ve ne işe yaradıklarına SPDX orjinal sitesinden ulaşabilirsiniz. Ayrıca, SPDX satırının yerinin farklı olması bir hataya neden olmasa da çoğunlukla ilk satırda kullanılır.
Pragma
kodları derleyici(compiler) özellikleri ve bazı kontroller için kullanılır. Her pragma
kodu kaynak dosyalara ayrı ayrı eklenmelidir. import
kodu kullanılarak dahil edilen başka kaynak dosyalar, ana kaynak dosyasındaki pragma
kodundan etkilenmezler.
Pragma
versiyon kodları, derleyicilerin kritik versiyon güncellemelerinden etkilenmesini önler. Özetle, kullanılan bu kodlar derleyici ile akıllı sözleşmelerin uyum içinde, sorunsuz çalışmasını sağlar.
Ek olarak, sürümler arasındaki kritik güncellemelerde nelerin değiştiğini ve çözüldüğünü görmek adına orjinal dökümana göz atmak iyi fikir olabilir. Peki pragma versiyon kodları nasıl kullanılır?
pragma solidity ^0.8.12;
Yukarıdaki örnek koda baktığımızda kaynak kodun yalnızca 0.8.12
sürümünden sonraki 0.8.x sürümlerinde çalışacağını, daha önceki sürümlerden etkilenmeyeceğini anlayabiliriz.
^
işareti yukarıdaki şekilde kullanıldığında ise kaynak kodun kritik güncellemelerden etkilenmemesi gerektiğini belirtmiş oluruz.
//Bu bir yorum satırıdır. Kodu anlamlı kılmak adına yerleştiriyorum. pragma solidity ^0.5.2 //Kaynak kodu 0.5.2 versyionundan önceki versiyonlardan etkilenmez. 0.5.2 'den sonraki 0.5.x versiyonlarında geçerli olur. pragma solidity 0.5.2 // Bu kod kaynak dosyanın yalnızca 0.5.2 versiyonunda çalışacağını belirtir. Bu tarz bir kullanım doğru değildir. Bunun yerine belirli versiyon aralıkları belirtmek hata çözümleri gibi iyileştirmelerden faydalanmak için önemlidir. pragma solidity >=0.7.0 <0.9.0; //Kaynak kodun 0.7.0 sürümünden sonraki ve 0.9.0 sürümünden önceki versiyonlardan herhangi biri için geçerli olacağını belirtir
"pragma" kodu, yalnızca derleyicinin kodu hangi versiyona göre okuması gerektiğini belirtmek için gereklidir. Derleyicinin versiyonunun değiştirilmesine, özelliklerinin aktifleştirilmesine ya da pasifleştirilmesine hiçbir etkisi yoktur. Bir başka deyişle, Solidity derleyicileri yer yer güncellenir ancak akıllı sözleşme dosyalarının bu değişikliklerden kötü etkilenmemesi için pragma kodlarının kullanılması gerekir.
ABI kodlayıcı (v2), keyfi olarak iç içe geçmiş dizileri ve yapıları kodlayabilir ve kodunu çözebilir. -solidity
pragma abicoder v1
veya pragma abicoder v2
kodları ABI kodlayıcısı(encoder) ve kod çözümleyicisi(decoder) olarak kullanılır.
ABI coder(v2) yeni bir kodlayıcı olduğu için eski kodlayıcı ABI Coder(v1) kadar test almamış olsa da Solidity 0.8.x versiyonlarındaki ABI coder (v1) gibi deneysel kabul edilmez.
Son olarak, Solidity 0.8.x versiyonlarıda varsayılan olarak pragma abicoder v2;
kullanılır ancak pragma abicoder v1;
kodu kullanılarak ABI Coder V1 de kullanılabilir.
Derleyicilerin bazı özelliklerinin henüz aktif olarak kullanılmadığı zamanlarda deneysel pragma kodları kullanılarak bu özellikler test edilebilir.
ABI Encode Solidity 0.7.4'den sonraki sürümlerde artık deneysel olarak kullanılmamaktadır. Yani bu kodu test ortamı dışında (live) pragma abicoder v2;
şeklinde kullanmanız gerekir.
Aşırı basitleştirilmiş terimlerle, Solidity derleyicisi için yerleşik bir resmi doğrulama modülüdür. [ayr. bkz]
SMTChecker, genel olarak Solidity kodlarındaki hataları bulmak, açık olup olmadığını kontrol etmek ve programın doğruluğunu kanıtlamak için kullanılır. [ayr. bkz] Ayrıca, SMT Checker gibi modüller genellikle derleyici optimizasyon özellikleri olarak bulunur.
pragma experimental SMTChecker;
kullanarak bir SMTChecker'i sorgularsınız ve elde edilen ek güvenlik uyarıları alırsınız. Bu özellik Solidity dilinin tüm özelliklerini desteklemediğinden dolayı birçok hata meydana gelebilmektedir.
Solidity, modülleme yapmak için farklı kaynak dosyalarını içerisine dahil(import) edebilir. Bu yazım şekli ve kullanım Javascript ES6 diline çok benzerdir.
import "dosya-konumu";
şeklinde kullanılır. "dosya-konumu" ile ayrılmış alana modüllerin, dosyaların konumu verilmelidir.
//Burada dahil(import) edilen dosyaya genel bir modül ismi "as" kodu kullanılarak verilir. import * as symbolName from "filename"; //Yukarıdaki kodun alternatifi olarak kullanılır. import "filename" as symbolName; //Bu koddaysa modül içerisindeki birden fazla sembole farklı farklı takma isimler verebiliriz. Bunu yine "as" kodu ile sağlarız. import {symbol1 as alias, symbol2} from "filename"; //Bir diğer örneği import {symbol1, symbol2 as alias2} from "filename
Diğer birçok yazılım dilindeki gibi Solidity'de de yorum satırları //tek satır yorum alanıdır
ve /* çok satır yorum alanıdır */
şeklinde kullanılır. Yukarıdaki örnek kodları açıklamak için yorum satırlarını kullandım. Tekrardan göz gezdirebilirsiniz.
// İşaretten sonra tek satır yorum yazabilirsiniz. /* Birden fazla satırda istediğiniz şekilde yorum yazabilirsiniz. */
Bu yazımızda Solidity diliyle ilgili teknik kısma giriş yapmış olduk. Temel kod yapıları, import özelliği, yorum satırları, pragmaları ve lisansları inceledik. Bundan sonraki yazımızda kodlarla daha iç içe olacağız. Takipte kalın!
Yorumunu Bırak
Yorumlar
0 Yorum yokHenüz yorum yapılmamış. İlk yorum yapan sen ol.