Ana içeriğe geç
Change page

Akıllı sözleşme dilleri

Sayfanın son güncellenmesi: 26 Şubat 2026

Ethereum'un harika yönlerinden birisi, akıllı sözleşmelerin nispeten geliştirici dostu dillerle yazılabilmesidir. Python'da veya herhangi bir süslü parantezli dilde (opens in a new tab) deneyimliyseniz, söz dizimi tanıdık olan bir dil bulabilirsiniz.

En aktif ve sürdürülen iki dil ise şunlardır:

  • Solidity
  • Vyper

Remix IDE, hem Solidity hem de Vyper'da sözleşme oluşturmak ve test etmeye yönelik kapsamlı bir geliştirme ortamı sağlar. Kodlamaya başlamak için tarayıcı içi Remix IDE'yi deneyin (opens in a new tab).

Daha deneyimli geliştiriciler Ethereum Sanal Makinesi için bir ara dil olan Yul'u veya Yul'un bir uzantısı olan Yul+'ı kullanmak isteyebilirler.

Eğer meraklıysanız ve hâlâ ağır geliştirme altında olan yeni dilleri test etmeye yardımcı olmak istiyorsanız, daha başlangıç aşamasında ve yakın zamanda ortaya çıkmış bir akıllı sözleşme dili olan Fe'yi deneyebilirsiniz.

Ön Koşullar

Programlama dilleri, özellikle JavaScript veya Python hakkında önceden bilgiye sahip olmak akıllı sözleşme dillerindeki farklılıkları bir mantığa oturtabilmenize yardımcı olur. Ayrıca dil karşılaştırmalarında çok derine dalmadan önce akıllı sözleşmeleri konsept olarak anlamanızı öneriyoruz. Akıllı sözleşmelere giriş.

Solidity

  • Akıllı sözleşmeler yapmak için nesne odaklı ve yüksek düzey bir dil.
  • En çok C++'tan etkilenmiş olan bir süslü ayraç dili.
  • Statik şekilde yazılır (bir değişkenin türü derleme esnasında bilinir).
  • Şunları destekler:
    • Kalıtım (başka sözleşmeleri ekleyebilirsiniz).
    • Kütüphaneler (başka nesne odaklı programlama dillerinde statik bir sınıftaki statik fonksiyonlar gibi başka sözleşmelerden çağırabileceğiniz yeniden kullanılabilir kodlar oluşturabilirsiniz).
    • Karışık, kullanıcı tarafından tanımlanan türler.

Örnek sözleşme

1// SPDX-License-Identifier: GPL-3.0
2pragma solidity >= 0.7.0;
3
4contract Coin {
5 // "public" anahtar kelimesi, değişkenleri
6 // diğer sözleşmelerden erişilebilir kılar
7 address public minter;
8 mapping (address => uint) public balances;
9
10 // Olaylar, istemcilerin bildirdiğiniz belirli
11 // sözleşme değişikliklerine tepki vermesine olanak tanır
12 event Sent(address from, address to, uint amount);
13
14 // Yapıcı kod yalnızca sözleşme
15 // oluşturulduğunda çalışır
16 constructor() {
17 minter = msg.sender;
18 }
19
20 // Yeni oluşturulan coin'lerden bir miktarını bir adrese gönderir
21 // Yalnızca sözleşme yaratıcısı tarafından çağrılabilir
22 function mint(address receiver, uint amount) public {
23 require(msg.sender == minter);
24 require(amount < 1e60);
25 balances[receiver] += amount;
26 }
27
28 // Herhangi bir çağırandan bir adrese
29 // mevcut coin miktarını gönderir
30 function send(address receiver, uint amount) public {
31 require(amount <= balances[msg.sender], "Yetersiz bakiye.");
32 balances[msg.sender] -= amount;
33 balances[receiver] += amount;
34 emit Sent(msg.sender, receiver, amount);
35 }
36}
Tümünü göster

Bu örnek size Solidity sözleşme söz dizimi hakkında bir fikir verecektir. Fonksiyonların ve değişkenlerin daha ayrıntılı bir açıklaması için belgelere bakın (opens in a new tab).

Vyper

  • Python'a benzer programlama dili
  • Güçlü tipleme
  • Küçük ve anlaşılabilir derleyici kodu
  • Etkili bit kodu oluşturma
  • Sözleşmeleri daha güvenli ve denetlenmesi daha kolay hâle getirmek amacıyla bilinçli olarak Solidity'den daha az özelliğe sahiptir. Vyper şunları desteklemez:
    • Niteleyiciler
    • Kalıtım
    • Satır içi derleme
    • Fonksiyon aşırı yüklemesi
    • Operatör aşırı yüklemesi
    • Özyinelemeli çağrı
    • Sonsuz uzunlukta döngüler
    • İkili sabit noktalar

Daha fazla bilgi için Vyper gerekçesini okuyun (opens in a new tab).

Örnek

1# Açık Artırma
2
3# Açık artırma parametreleri
4
5# Lehtar, en yüksek teklifi verenden para alır
6
7beneficiary: public(address)
8auctionStart: public(uint256)
9auctionEnd: public(uint256)
10
11# Açık artırmanın mevcut durumu
12
13highestBidder: public(address)
14highestBid: public(uint256)
15
16# Sonunda true olarak ayarlanır, herhangi bir değişikliğe izin vermez
17
18ended: public(bool)
19
20# Geri çekme modelini takip edebilmek için iade edilen teklifleri takip edin
21
22pendingReturns: public(HashMap[address, uint256])
23
24# Lehtar adresi `_beneficiary` adına `_bidding_time`
25
26# saniyelik teklif süresi ile basit bir açık artırma oluşturun.
27
28@external
29def __init__(_beneficiary: address, _bidding_time: uint256):
30 self.beneficiary = _beneficiary
31 self.auctionStart = block.timestamp
32 self.auctionEnd = self.auctionStart + _bidding_time
33
34# Bu işlemle birlikte gönderilen değerle
35
36# açık artırmaya teklif verin.
37
38# Değer yalnızca açık artırma
39
40# kazanılmazsa iade edilecektir.
41
42@external
43@payable
44def bid():
45 # Teklif verme süresinin bitip bitmediğini kontrol edin.
46 assert block.timestamp < self.auctionEnd
47 # Teklifin yeterince yüksek olup olmadığını kontrol edin
48 assert msg.value > self.highestBid
49 # Önceki en yüksek teklif verenin iadesini takip edin
50 self.pendingReturns[self.highestBidder] += self.highestBid
51 # Yeni yüksek teklifi takip edin
52 self.highestBidder = msg.sender
53 self.highestBid = msg.value
54
55# Önceden iade edilmiş bir teklifi geri çekin. Geri çekme modeli
56
57# burada bir güvenlik sorununu önlemek için kullanılır. Geri ödemeler doğrudan
58
59# bid()'in bir parçası olarak gönderilirse, kötü niyetli bir teklif sözleşmesi bu
60
61# geri ödemeleri engelleyebilir ve dolayısıyla yeni daha yüksek tekliflerin gelmesini engelleyebilir.
62
63@external
64def withdraw():
65 pending_amount: uint256 = self.pendingReturns[msg.sender]
66 self.pendingReturns[msg.sender] = 0
67 send(msg.sender, pending_amount)
68
69# Açık artırmayı sonlandırın ve en yüksek teklifi
70
71# lehtara gönderin.
72
73@external
74def endAuction():
75 # Diğer sözleşmelerle etkileşim kuran (yani fonksiyonları çağıran veya ether gönderen)
76 # fonksiyonları üç aşamada yapılandırmak iyi bir kılavuzdur:
77 # 1. koşulları kontrol etme
78 # 2. eylemleri gerçekleştirme (koşulları potansiyel olarak değiştirme)
79 # 3. diğer sözleşmelerle etkileşim kurma
80 # Bu aşamalar karıştırılırsa, diğer sözleşme mevcut sözleşmeye
81 # geri çağrı yapabilir ve durumu değiştirebilir veya etkilerin (ether ödemesi)
82 # birden çok kez gerçekleştirilmesine neden olabilir.
83 # Dahili olarak çağrılan fonksiyonlar harici sözleşmelerle etkileşim içeriyorsa,
84 # bunlar da harici sözleşmelerle etkileşim olarak kabul edilmelidir.
85
86 # 1. Koşullar
87 # Açık artırma bitiş zamanına ulaşılıp ulaşılmadığını kontrol edin
88 assert block.timestamp >= self.auctionEnd
89 # Bu fonksiyonun daha önce çağrılıp çağrılmadığını kontrol edin
90 assert not self.ended
91
92 # 2. Etkiler
93 self.ended = True
94
95 # 3. Etkileşim
96 send(self.beneficiary, self.highestBid)
Tümünü göster

Bu örnek size Vyper sözleşme söz dizimi hakkında bir fikir verecektir. Fonksiyonların ve değişkenlerin daha ayrıntılı bir açıklaması için belgelere bakın (opens in a new tab).

Yul ve Yul+

Eğer Ethereum'da yeniyseniz ve akıllı sözleşme dilleriyle henüz herhangi bir kodlama yapmadıysanız, Solidity veya Vyper ile başlamanızı öneririz. Akıllı sözleşme güvenliğinin en iyi yöntemleri ve EVM ile çalışmanın şartları ile aşina olduğunuz zaman Yul veya Yul+ dillerine bakın.

Yul

  • Ethereum için orta seviye dil.
  • EVM ve Ethereum aromalı bir WebAssembly olan Ewasm (opens in a new tab)'ı destekler ve her iki platformun da kullanılabilir ortak paydası olacak şekilde tasarlanmıştır.
  • EVM ve Ewasm platformlarına eşit derece katkı sağlayabilecek yüksek seviye optimizasyon aşamaları için iyi bir hedeftir.

Yul+

  • Yüksek derecede verimli bir alt düzey Yul eklentisi.
  • Başlangıçta bir iyimser toplama sözleşmesi için tasarlanmıştır.
  • Yul+, Yul'a yeni özellikler ekleyen deneysel bir yükseltme tasarısı olarak görülebilir.

Örnek sözleşme

Aşağıdaki basit örnek bir üs fonksiyonu uygular. solc --strict-assembly --bin input.yul kullanılarak derlenebilir. Örnek input.yul dosyasında depolanmalıdır.

1{
2 function power(base, exponent) -> result
3 {
4 switch exponent
5 case 0 { result := 1 }
6 case 1 { result := base }
7 default
8 {
9 result := power(mul(base, base), div(exponent, 2))
10 if mod(exponent, 2) { result := mul(base, result) }
11 }
12 }
13 let res := power(calldataload(0), calldataload(32))
14 mstore(0, res)
15 return(0, 32)
16}
Tümünü göster

Akıllı sözleşmeler konusunda zaten deneyimliyseniz, Yul'da tam bir ERC20 uygulamasını burada (opens in a new tab) bulabilirsiniz.

Fe

  • Ethereum Sanal Makinesi (EVM) için statik olarak yazılmış dil.
  • Python ve Rust'tan ilham almıştır.
  • Ethereum ekosistemine yabancı geliştiriciler için bile kolay öğrenilebilir olmayı hedefler.
  • Fe geliştirilmesi henüz erken aşamalarındadır: Alpha sürümü Ocak 2021'de yayınlanmıştır.

Örnek sözleşme

Aşağıda Fe ile uygulanan basit bir sözleşme bulunuyor.

1type BookMsg = bytes[100]
2
3contract GuestBook:
4 pub guest_book: map<address, BookMsg>
5
6 event Signed:
7 book_msg: BookMsg
8
9 pub def sign(book_msg: BookMsg):
10 self.guest_book[msg.sender] = book_msg
11
12 emit Signed(book_msg=book_msg)
13
14 pub def get_msg(addr: address) -> BookMsg:
15 return self.guest_book[addr].to_mem()
16
Tümünü göster

Nasıl seçilir

Her diğer programlama dilinde olduğu gibi, kişisel tercihlerin yanı sıra çoğunlukla doğru iş için doğru aracı seçmekle de ilgilidir.

Eğer dillerden herhangi birini denemediyseniz burada akılda tutulabilecek birkaç şey bulunmaktadır:

Solidity'nin harika olan tarafı nedir?

  • Eğer acemiyseniz, birçok öğretici ve öğrenim aracı bulunmaktadır. Bununla ilgili daha fazlasını Kodlayarak Öğrenme bölümünde görebilirsiniz.
  • İyi geliştirici araçları bulunur.
  • Solidity büyük bir geliştirici topluluğuna sahiptir, bu da sorularınıza büyük ihtimalle hızlıca cevaplar bulabileceğiniz anlamına gelir.

Vyper'ın harika olan tarafı nedir?

  • Akıllı sözleşmeler yazmak isteyen Python geliştiricileri için iyi bir başlangıç yolu.
  • Vyper daha az özellik sayısına sahip olduğu için fikirlerin hızlı prototiplenmesi için harikadır.
  • Vyper kolay denetlenebilirliği ve en yüksek seviyede insan tarafından okunabilmeyi hedefler.

Yul ve Yul+'ın harika olan tarafları nedir?

  • Basite indirgenmiş ve işlevsel alt düzey dil.
  • Saf EVM'ye çok daha yakınlaşmayı sağlar, bu da sözleşmelerinizin gaz kullanımını optimize etmeye yardımcı olabilir.

Dil karşılaştırmaları

Temel söz dizimi, sözleşme yaşam döngüsü, arayüzler, operatörler, veri yapıları, fonksiyonlar, kontrol akışı ve daha fazlasının karşılaştırmaları için Auditless tarafından hazırlanan bu kopya kağıdına (opens in a new tab) göz atın.

Daha fazla kaynak

Bu makale yararlı oldu mu?