Menu
Coddy logo textTech

Solidity Cheat Sheet

Kontrat yapısı

Her dosya bir lisans ve bir pragma ile başlar; kontrat, dağıtım birimidir.

SözdizimiAnlamı
// SPDX-License-Identifier: MITDerleyicinin 1. satırda beklediği lisans yorumu
pragma solidity ^0.8.0;Dosyanın yazıldığı derleyici sürümü
contract Counter { ... }Bir kontrat tanımla (durum + fonksiyonlar)
constructor(uint start) { count = start; }Dağıtımda bir kez çalışır
import "./Token.sol";Başka bir dosyayı içe aktar
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";Bir kütüphane paketini içe aktar
interface IToken { function balanceOf(address a) external view returns (uint); }Bir arayüz tanımla (gövdesiz)
library Math { function min(uint a, uint b) internal pure returns (uint) { ... } }Yeniden kullanılabilir fonksiyonlardan oluşan bir kütüphane

Değer türleri

Tam sayıların boyutu sabittir ve ondalık yoktur; 0.8 taşmada geri alır (revert).

TürNe tutar
uint256 / uintİşaretsiz tam sayı, 0 ile 2^256 - 1 arası (uint, uint256 demektir)
uint8, uint16, ... uint1288 bitlik adımlarla daha küçük işaretsiz tam sayılar
int256 / intİşaretli tam sayı (negatif olabilir)
booltrue veya false
address20 baytlık hesap veya kontrat adresi
address payabletransfer/send ile Ether alabilen adres
bytes32, bytes1...Sabit boyutlu bayt dizileri
enum Status { Open, Closed }Adlandırılmış sabitler kümesi, uint8 olarak saklanır
1 ether, 1 gwei, 1 weiEther birimleri: 1 ether = 10^18 wei
1 days, 2 hours, 30 minutesZaman birimleri, saniye cinsinden

Referans türleri ve veri konumu

Diziler, string'ler, bayt dizileri, struct'lar ve mapping'ler storage, memory veya calldata'da yaşar.

SözdizimiAnlamı
string memory nameDinamik UTF-8 string (geçici bir kopya)
bytes memory dataDinamik bayt dizisi
uint[] public scores;Storage'da dinamik dizi
uint[3] fixed;3 elemanlı sabit boyutlu dizi
uint[] memory tmp = new uint[](5);Memory'de bir dizi ayır
scores.push(42);Storage dizisinin sonuna ekle
scores.pop();Son elemanı kaldır
scores.lengthEleman sayısı
storageKalıcı, zincir üzerinde, yazması pahalı
memoryGeçici, tek bir çağrı boyunca yaşar
calldataSalt okunur external fonksiyon girdisi, en ucuzu

Mapping'ler ve struct'lar

Mapping, uzunluğu ve yinelemesi olmayan bir hash tablosudur; struct alanları gruplar.

SözdizimiAnlamı
mapping(address => uint) public balances;Anahtar-değer deposu; her anahtar vardır (varsayılan 0)
balances[msg.sender] += 1;Anahtarla oku/yaz
mapping(address => mapping(address => uint)) allowance;İç içe mapping
struct User { string name; uint age; bool active; }Bir struct tanımla
User memory u = User("Ada", 36, true);Memory'de bir struct oluştur
User memory u = User({name: "Ada", age: 36, active: true});Adlandırılmış alanlarla oluşturma
users[msg.sender] = u;Bir struct'ı mapping'de sakla
users[msg.sender].age = 37;Storage'daki tek bir alanı güncelle
delete users[msg.sender];Varsayılan değerlere sıfırla

Fonksiyonlar ve görünürlük

Her fonksiyon, kimin çağırabileceğini ve durumu okuyup okumadığını ya da yazıp yazmadığını belirtir.

SözdizimiAnlamı
function add(uint a, uint b) public pure returns (uint) { return a + b; }Parametreli ve dönüş değerli bir fonksiyon
publicHer yerden çağrılabilir (içeriden ve dışarıdan)
externalYalnızca kontratın dışından çağrılabilir
internalBu kontrat ve ondan miras alan kontratlar
privateYalnızca bu kontrat
viewDurumu okur, asla yazmaz
pureHiçbir durumu okumaz
payableÇağrıyla birlikte Ether alabilir
returns (uint sum, bool ok)Birden fazla adlandırılmış dönüş değeri
(uint s, bool ok) = f();Birden fazla dönüş değerini ayrıştır
uint public count;Public durum değişkeni otomatik bir count() getter'ı alır

Modifier'lar, sabitler ve kalıtım

Denetimleri modifier'larla yeniden kullan; değerleri constant ve immutable ile sabitle.

SözdizimiAnlamı
modifier onlyOwner() { require(msg.sender == owner, "Not owner"); _; }Bir modifier tanımla (_ = fonksiyon gövdesini çalıştır)
function withdraw() public onlyOwner { ... }Bir modifier uygula
uint public constant MAX = 100;Derleme zamanı sabiti
address public immutable owner;Constructor'da bir kez atanır, sonra sabittir
contract Token is ERC20, Ownable { ... }Başka kontratlardan miras al
function f() public virtual { ... }Geçersiz kılmaya izin ver
function f() public override { ... }Üst kontratın fonksiyonunu geçersiz kıl
super.f();Üst kontratın uygulamasını çağır
abstract contract Base { function f() public virtual; }Uygulanmamış fonksiyonları olan kontrat

Akış kontrolü

C ailesinin alışıldık deyimleri; switch yoktur ve döngüler her yinelemede gas harcar.

SözdizimiAnlamı
if (x > 5) { ... } else if (x > 2) { ... } else { ... }Koşullu dallar
for (uint i = 0; i < n; i++) { ... }Sayaçlı döngü
while (x < 10) { x++; }Koşul sağlandığı sürece döngü
do { ... } while (cond);En az bir kez çalışır
break; / continue;Döngüden çık / sonraki yinelemeye geç
x > 0 ? a : bÜçlü (ternary) ifade
a / bTam sayı bölmesi (kalanı atar)
a % bKalan
a ** 2Üs alma
unchecked { x++; }Taşma denetimlerini atla (gas kazandırır, dikkatli kullan)

Hatalar: require, revert, assert

Başarısız bir denetim tüm işlemi geri alır ve kullanılmayan gas'ı iade eder.

SözdizimiAnlamı
require(amount > 0, "Amount must be positive");Girdiyi veya durumu doğrula; mesajla geri al
revert("Not allowed");Koşulsuz olarak iptal et
error Insufficient(uint available, uint requested);Özel bir hata tanımla (string'lerden daha ucuz)
revert Insufficient(balance, amount);Özel bir hatayla geri al
assert(total == a + b);Asla başarısız olmaması gereken bir değişmezi denetle
try token.transfer(to, amt) returns (bool ok) { ... } catch { ... }Başarısız olan bir dış çağrıyı ele al

Event'ler

Event'ler, zincir dışı uygulamaların abone olabileceği log'lar yazar; kontratlardan okunamazlar.

SözdizimiAnlamı
event Transfer(address indexed from, address indexed to, uint value);Bir event tanımla
emit Transfer(msg.sender, to, amount);Event'i yayınla
indexedFiltrelenebilir parametre (event başına en fazla 3)
event Log(string message);Herhangi bir ABI türü log'lanabilir

Ether, adresler ve global değişkenler

İşlem bağlamı msg, block ve tx'ten gelir.

SözdizimiAnlamı
msg.senderBu fonksiyonu çağıran adres
msg.valueÇağrıyla gönderilen wei (payable gerektirir)
block.timestampGeçerli blok zamanı (epoch'tan bu yana saniye)
block.numberGeçerli blok yüksekliği
tx.originİşlemi başlatan dış hesap (EOA); yetkilendirme için kullanma
address(this).balanceBu kontratın Ether bakiyesi
payable(to).transfer(1 ether);Ether gönder; başarısızlıkta geri alır
(bool ok, ) = to.call{value: amt}("");Düşük seviyeli gönderim; başarı bayrağı döndürür
receive() external payable {}Düz bir Ether transferinde çalışır
fallback() external payable {}Hiçbir fonksiyon eşleşmediğinde çalışır
keccak256(abi.encodePacked(a, b))Değerlerin hash'ini al
abi.encode(x), abi.decode(data, (uint))ABI verisini kodla / kodunu çöz

İhtiyaç duyduğun tüm Solidity sözdizimi tek sayfada. Bu Solidity cheat sheet, Ethereum'un ve tüm EVM zincirlerinin akıllı sözleşme dili için hızlı bir referanstır: kontrat tanımlama, tür seçme, verileri mapping ve struct'larda saklama, doğru görünürlük ve değiştirilebilirlikle fonksiyon yazma ve bunları require, modifier ve event'lerle koruma.

Buradaki sözdizimi, aritmetik taşmayı varsayılan olarak denetleyen ve Remix, Hardhat ve Foundry ile çalışan Solidity 0.8'e aittir. İhtiyacın olanı kopyala ya da Solidity playground'unda canlı dene: bir kontrat yaz, derle ve tarayıcında bir EVM üzerinde çalıştır.

Solidity cheat sheet FAQ

Is this Solidity cheat sheet free?
Yes. This cheat sheet is free to use, with no sign-up required. Bookmark it and come back any time you need a quick reference.
Is this cheat sheet good for beginners?
Yes. It is organized by topic so you can find what you need at any level, and each entry links back to Coddy's free interactive Solidity course when you want to go deeper.
Coddy programming languages illustration

Coddy ile Solidity öğren

BAŞLA