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.
Önemli bağlantılar
- Dokümantasyon (opens in a new tab)
- Solidity Dil Portalı (opens in a new tab)
- Örneklerle Solidity (opens in a new tab)
- GitHub (opens in a new tab)
- Solidity Matrix Sohbet Odasına (opens in a new tab) köprülenmiş Solidity Matrix Sohbet Odası (opens in a new tab)
- Kopya Kağıdı (opens in a new tab)
- Solidity Blogu (opens in a new tab)
- Solidity Twitter (opens in a new tab)
Örnek sözleşme
1// SPDX-License-Identifier: GPL-3.02pragma solidity >= 0.7.0;34contract Coin {5 // "public" anahtar kelimesi, değişkenleri6 // diğer sözleşmelerden erişilebilir kılar7 address public minter;8 mapping (address => uint) public balances;910 // Olaylar, istemcilerin bildirdiğiniz belirli11 // sözleşme değişikliklerine tepki vermesine olanak tanır12 event Sent(address from, address to, uint amount);1314 // Yapıcı kod yalnızca sözleşme15 // oluşturulduğunda çalışır16 constructor() {17 minter = msg.sender;18 }1920 // Yeni oluşturulan coin'lerden bir miktarını bir adrese gönderir21 // Yalnızca sözleşme yaratıcısı tarafından çağrılabilir22 function mint(address receiver, uint amount) public {23 require(msg.sender == minter);24 require(amount < 1e60);25 balances[receiver] += amount;26 }2728 // Herhangi bir çağırandan bir adrese29 // mevcut coin miktarını gönderir30 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österBu ö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).
Önemli bağlantılar
- Dokümantasyon (opens in a new tab)
- Örneklerle Vyper (opens in a new tab)
- Örneklerle Daha Fazla Vyper (opens in a new tab)
- GitHub (opens in a new tab)
- Vyper topluluğu Discord sohbeti (opens in a new tab)
- Kopya Kağıdı (opens in a new tab)
- Vyper için akıllı sözleşme geliştirme çerçeveleri ve araçları
- VyperPunk - Vyper akıllı sözleşmelerini güvenli hale getirmeyi ve hacklemeyi öğrenin (opens in a new tab)
- Geliştirme için Vyper Merkezi (opens in a new tab)
- En popüler Vyper akıllı sözleşme örnekleri (opens in a new tab)
- Harika Vyper derlenmiş kaynakları (opens in a new tab)
Örnek
1# Açık Artırma23# Açık artırma parametreleri45# Lehtar, en yüksek teklifi verenden para alır67beneficiary: public(address)8auctionStart: public(uint256)9auctionEnd: public(uint256)1011# Açık artırmanın mevcut durumu1213highestBidder: public(address)14highestBid: public(uint256)1516# Sonunda true olarak ayarlanır, herhangi bir değişikliğe izin vermez1718ended: public(bool)1920# Geri çekme modelini takip edebilmek için iade edilen teklifleri takip edin2122pendingReturns: public(HashMap[address, uint256])2324# Lehtar adresi `_beneficiary` adına `_bidding_time`2526# saniyelik teklif süresi ile basit bir açık artırma oluşturun.2728@external29def __init__(_beneficiary: address, _bidding_time: uint256):30 self.beneficiary = _beneficiary31 self.auctionStart = block.timestamp32 self.auctionEnd = self.auctionStart + _bidding_time3334# Bu işlemle birlikte gönderilen değerle3536# açık artırmaya teklif verin.3738# Değer yalnızca açık artırma3940# kazanılmazsa iade edilecektir.4142@external43@payable44def bid():45 # Teklif verme süresinin bitip bitmediğini kontrol edin.46 assert block.timestamp < self.auctionEnd47 # Teklifin yeterince yüksek olup olmadığını kontrol edin48 assert msg.value > self.highestBid49 # Önceki en yüksek teklif verenin iadesini takip edin50 self.pendingReturns[self.highestBidder] += self.highestBid51 # Yeni yüksek teklifi takip edin52 self.highestBidder = msg.sender53 self.highestBid = msg.value5455# Önceden iade edilmiş bir teklifi geri çekin. Geri çekme modeli5657# burada bir güvenlik sorununu önlemek için kullanılır. Geri ödemeler doğrudan5859# bid()'in bir parçası olarak gönderilirse, kötü niyetli bir teklif sözleşmesi bu6061# geri ödemeleri engelleyebilir ve dolayısıyla yeni daha yüksek tekliflerin gelmesini engelleyebilir.6263@external64def withdraw():65 pending_amount: uint256 = self.pendingReturns[msg.sender]66 self.pendingReturns[msg.sender] = 067 send(msg.sender, pending_amount)6869# Açık artırmayı sonlandırın ve en yüksek teklifi7071# lehtara gönderin.7273@external74def 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 etme78 # 2. eylemleri gerçekleştirme (koşulları potansiyel olarak değiştirme)79 # 3. diğer sözleşmelerle etkileşim kurma80 # Bu aşamalar karıştırılırsa, diğer sözleşme mevcut sözleşmeye81 # 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.8586 # 1. Koşullar87 # Açık artırma bitiş zamanına ulaşılıp ulaşılmadığını kontrol edin88 assert block.timestamp >= self.auctionEnd89 # Bu fonksiyonun daha önce çağrılıp çağrılmadığını kontrol edin90 assert not self.ended9192 # 2. Etkiler93 self.ended = True9495 # 3. Etkileşim96 send(self.beneficiary, self.highestBid)Tümünü gösterBu ö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.
Önemli bağlantılar
- Yul Dokümantasyonu (opens in a new tab)
- Yul+ Dokümantasyonu (opens in a new tab)
- Yul+ Tanıtım Yazısı (opens in a new tab)
Ö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) -> result3 {4 switch exponent5 case 0 { result := 1 }6 case 1 { result := base }7 default8 {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österAkı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.
Önemli bağlantılar
- GitHub (opens in a new tab)
- Fe Duyurusu (opens in a new tab)
- Fe 2021 Yol Haritası (opens in a new tab)
- Fe Discord Sohbeti (opens in a new tab)
- Fe Twitter (opens in a new tab)
Örnek sözleşme
Aşağıda Fe ile uygulanan basit bir sözleşme bulunuyor.
1type BookMsg = bytes[100]23contract GuestBook:4 pub guest_book: map<address, BookMsg>56 event Signed:7 book_msg: BookMsg89 pub def sign(book_msg: BookMsg):10 self.guest_book[msg.sender] = book_msg1112 emit Signed(book_msg=book_msg)1314 pub def get_msg(addr: address) -> BookMsg:15 return self.guest_book[addr].to_mem()16Tümünü gösterNası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.