Ana içeriğe atla
Change page

Akıllı sözleşmelerin anatomisi

Sayfanın son güncellenme tarihi: 15 Nisan 2026

Bir akıllı sözleşme Ethereum üzerindeki bir adreste çalışan bir programdır. Bir işlem alındığında yürütülebilen fonksiyonlar ve verilerden oluşurlar. Burada bir akıllı sözleşmenin nelerden oluştuğu hakkında genel bir bakış bulunmaktadır.

Ön Koşullar

Önce akıllı sözleşmeler hakkında bilgi edindiğinizden emin olun. Bu belge, hâlihazırda JavaScript veya Python gibi programlama dillerine aşina olduğunuzu varsayar.

Veri

Herhangi bir sözleşme verisi bir konuma atanmalıdır: ya storage ya da memory. Bir akıllı sözleşmede depolamayı değiştirmek pahalıdır, bundan dolayı verinizin nerede yaşayacağını düşünmelisiniz.

Depolama

Kalıcı veriden depolama olarak bahsedilir ve durum değişkenleri tarafından temsil edilir. Bu değerler kalıcı olarak blok zincirinde depolanır. Sözleşmenin derlendiğinde blok zincirinde ne kadar depolama ihtiyacı duyacağını takip edebilmesi için türünü deklare etmelisiniz.

// Solidity örneği
contract SimpleStorage {
    uint storedData; // Durum değişkeni
    // ...
}
# Vyper örneği
storedData: int128

Hâlihazırda nesne odaklı dillerde programlama yaptıysanız, büyük ihtimalle çoğu türe aşinasınızdır. Ancak, Ethereum geliştirmede yeniyseniz address sizin için yeni olmalıdır.

Bir address türü, 20 bayt veya 160 bite eşdeğer bir Ethereum adresi tutabilir. Önünde 0x olan onaltılık gösterim şeklinde döndürür.

Diğer türler:

  • boolean
  • tam sayı
  • sabit noktalı sayılar
  • sabit boyutlu bayt dizileri
  • dinamik olarak boyutlandırılmış bayt dizileri
  • rasyonel ve tam sayı değişmezleri
  • metin değişmezleri
  • onaltılık değişmezler
  • enum'lar

Daha fazla açıklama için belgelere göz atın:

Bellek

Sadece bir sözleşme fonksiyonunun yürütümü esnasında depolanan değerlere bellek değişkenleri denir. Bunlar blok zincirinde kalıcı şekilde depolanmadıkları için kullanımları çok daha ucuzdur.

EVM'nin verileri nasıl depoladığı (Depolama, Bellek ve Yığın) hakkında daha fazla bilgiyi Solidity belgelerinden (opens in a new tab) edinin.

Ortam değişkenleri

Sözleşmenizde tanımladığınız değişkenlere ek olarak, bazı özel global değişkenler bulunmaktadır. Başlıca blok zinciri veya mevcut işlem hakkında bilgi sağlamak için kullanılırlar.

Örnekler:

ÖzellikDurum değişkeniAçıklama
block.timestampuint256Mevcut blok dönemi zaman damgası
msg.senderadresMesajın göndericisi (mevcut çağrı)

Fonksiyonlar

En basit şekilde, fonksiyonlar gelen işlemlere yanıt olarak bilgi alabilir veya düzenleyebilir.

İki tip fonksiyon çağrısı bulunur:

  • internal – bunlar bir EVM çağrısı oluşturmaz
    • Dahili fonksiyonlara ve durum değişkenlerine yalnızca dahili olarak erişilebilir (yani mevcut sözleşmenin içinden veya ondan türetilen sözleşmelerden)
  • external – bunlar bir EVM çağrısı oluşturur
    • External fonksiyonlar sözleşme arayüzünün bir parçasıdır, bu da diğer sözleşmelerden ve işlemler aracılığıyla çağrılabilecekleri anlamına gelir. Harici bir f fonksiyonu dahili olarak çağrılamaz (yani f() çalışmaz, ancak this.f() çalışır).

Ayrıca public veya private olabilirler

  • public fonksiyonlar, sözleşme içinden dahili olarak veya mesajlar aracılığıyla harici olarak çağrılabilir
  • private fonksiyonlar yalnızca tanımlandıkları sözleşme için görünürdür ve türetilmiş sözleşmelerde görünmezler

Hem fonksiyonlar hem de durum değişkenleri public veya private yapılabilir

Burada bir sözleşmedeki bir durum değişkenini güncellemek için bir fonksiyon bulunmaktadır:

// Solidity örneği
function update_name(string value) public {
    dapp_name = value;
}
  • string türündeki value parametresi, update_name fonksiyonuna geçirilir
  • public olarak bildirilmiştir, yani herkes erişebilir
  • view olarak bildirilmemiştir, bu nedenle sözleşme durumunu değiştirebilir

Görünüm fonksiyonları

Bu fonksiyonlar sözleşmenin verisinin durumunu değiştirmemeye söz verirler. Yaygın örnekler "alıcı" fonksiyonlardır – örnek olarak bunu bir kullanıcının bakiyesini almak için kullanabilirsiniz.

// Solidity örneği
function balanceOf(address _owner) public view returns (uint256 _balance) {
    return ownerPizzaCount[_owner];
}
dappName: public(string)

@view
@public
def readName() -> string:
  return dappName

Durumu değiştirme olarak sayılan şeyler:

  1. Değişkenlikleri belirtmek için yazma.
  2. Olayları yayma (opens in a new tab).
  3. Diğer sözleşmeleri oluşturma (opens in a new tab).
  4. selfdestruct kullanma.
  5. Çağrılar aracılığıyla ether gönderme.
  6. view veya pure olarak işaretlenmemiş herhangi bir fonksiyonu çağırma.
  7. Alt düzey çağrıları kullanma.
  8. Belirli işlem kodları içeren satır içi tümleşkeler kullanma.

Yapıcı fonksiyonlar

constructor fonksiyonları yalnızca sözleşme ilk kez dağıtıldığında bir kez yürütülür. Birçok sınıf tabanlı programlama dilindeki constructor gibi, bu fonksiyonlar da genellikle durum değişkenlerini belirtilen değerlere başlatır.

# Vyper örneği

@external
def __init__(_beneficiary: address, _bidding_time: uint256):
    self.beneficiary = _beneficiary
    self.auctionStart = block.timestamp
    self.auctionEnd = self.auctionStart + _bidding_time

Yerleşik fonksiyonlar

Sözleşmenizde tanımladığınız değişkenler ve fonksiyonlara ek olarak, bazı özel yerleşik fonksiyonlar bulunmaktadır. En bariz örnek şudur:

  • address.send() – Solidity
  • send(address) – Vyper

Bunlar sözleşmelerin başka hesaplara ETH göndermesini sağlar.

Fonksiyon yazma

Fonksiyonunuz şunlara ihtiyaç duyar:

  • parametre değişkeni ve türü (eğer parametre kabul ediyorsa)
  • internal/external deklarasyonu
  • pure/view/payable deklarasyonu
  • dönüş türü (eğer bir değer döndürüyorsa)

Tam bir sözleşme bu şekilde gözükebilir. Burada constructor fonksiyonu, dapp_name değişkeni için bir başlangıç değeri sağlar.

Olaylar ve günlükler

Olaylar, akıllı sözleşmelerinizin ön yüzünüz ya da diğer abonelik uygulamalarınızla iletişime geçebilmesini sağlar. Bir işlem doğrulandıktan ve bir bloğa eklendikten sonra akıllı sözleşmeler, ön ucun daha sonra işleyebileceği ve kullanabileceği olayları ve günlük bilgilerini yayabilir.

Açıklamalı örnekler

Bunlar Solidity ile yazılmış bazı örneklerdir. Kodla oynamak isterseniz, Remix (opens in a new tab) üzerinde onlarla etkileşime girebilirsiniz.

Merhaba dünya

Jeton

Benzersiz dijital varlık

Daha fazla kaynak

Akıllı sözleşmelere daha detaylı bir genel bakış için Solidity ve Vyper'ın belgelerine bakın:

Bu makale faydalı oldu mu?