Akıllı sözleşme dilleri
Sayfanın son güncellenme tarihi: 25 Ş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
// SPDX-License-Identifier: GPL-3.0
pragma solidity >= 0.7.0;
contract Coin {
// "public" anahtar kelimesi, değişkenleri
// diğer sözleşmelerden erişilebilir kılar
address public minter;
mapping (address => uint) public balances;
// Olaylar, istemcilerin bildirdiğiniz belirli
// sözleşme değişikliklerine tepki vermesine olanak tanır
event Sent(address from, address to, uint amount);
// Yapıcı kod yalnızca sözleşme
// oluşturulduğunda çalışır
constructor() {
minter = msg.sender;
}
// Yeni oluşturulan coin'lerden bir miktarını bir adrese gönderir
// Yalnızca sözleşme yaratıcısı tarafından çağrılabilir
function mint(address receiver, uint amount) public {
require(msg.sender == minter);
require(amount < 1e60);
balances[receiver] += amount;
}
// Herhangi bir çağırandan bir adrese
// mevcut coin miktarını gönderir
function send(address receiver, uint amount) public {
require(amount <= balances[msg.sender], "Yetersiz bakiye.");
balances[msg.sender] -= amount;
balances[receiver] += amount;
emit Sent(msg.sender, receiver, amount);
}
}
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).
Ö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
# Açık Artırma
# Açık artırma parametreleri
# Lehtar, en yüksek teklifi verenden para alır
beneficiary: public(address)
auctionStart: public(uint256)
auctionEnd: public(uint256)
# Açık artırmanın mevcut durumu
highestBidder: public(address)
highestBid: public(uint256)
# Sonunda true olarak ayarlanır, herhangi bir değişikliğe izin vermez
ended: public(bool)
# Geri çekme modelini takip edebilmek için iade edilen teklifleri takip edin
pendingReturns: public(HashMap[address, uint256])
# Lehtar adresi `_beneficiary` adına `_bidding_time`
# saniyelik teklif süresi ile basit bir açık artırma oluşturun.
@external
def __init__(_beneficiary: address, _bidding_time: uint256):
self.beneficiary = _beneficiary
self.auctionStart = block.timestamp
self.auctionEnd = self.auctionStart + _bidding_time
# Bu işlemle birlikte gönderilen değerle
# açık artırmaya teklif verin.
# Değer yalnızca açık artırma
# kazanılmazsa iade edilecektir.
@external
@payable
def bid():
# Teklif verme süresinin bitip bitmediğini kontrol edin.
assert block.timestamp < self.auctionEnd
# Teklifin yeterince yüksek olup olmadığını kontrol edin
assert msg.value > self.highestBid
# Önceki en yüksek teklif verenin iadesini takip edin
self.pendingReturns[self.highestBidder] += self.highestBid
# Yeni yüksek teklifi takip edin
self.highestBidder = msg.sender
self.highestBid = msg.value
# Önceden iade edilmiş bir teklifi geri çekin. Geri çekme modeli
# burada bir güvenlik sorununu önlemek için kullanılır. Geri ödemeler doğrudan
# bid()'in bir parçası olarak gönderilirse, kötü niyetli bir teklif sözleşmesi bu
# geri ödemeleri engelleyebilir ve dolayısıyla yeni daha yüksek tekliflerin gelmesini engelleyebilir.
@external
def withdraw():
pending_amount: uint256 = self.pendingReturns[msg.sender]
self.pendingReturns[msg.sender] = 0
send(msg.sender, pending_amount)
# Açık artırmayı sonlandırın ve en yüksek teklifi
# lehtara gönderin.
@external
def endAuction():
# Diğer sözleşmelerle etkileşim kuran (yani fonksiyonları çağıran veya ether gönderen)
# fonksiyonları üç aşamada yapılandırmak iyi bir kılavuzdur:
# 1. koşulları kontrol etme
# 2. eylemleri gerçekleştirme (koşulları potansiyel olarak değiştirme)
# 3. diğer sözleşmelerle etkileşim kurma
# Bu aşamalar karıştırılırsa, diğer sözleşme mevcut sözleşmeye
# geri çağrı yapabilir ve durumu değiştirebilir veya etkilerin (ether ödemesi)
# birden çok kez gerçekleştirilmesine neden olabilir.
# Dahili olarak çağrılan fonksiyonlar harici sözleşmelerle etkileşim içeriyorsa,
# bunlar da harici sözleşmelerle etkileşim olarak kabul edilmelidir.
# 1. Koşullar
# Açık artırma bitiş zamanına ulaşılıp ulaşılmadığını kontrol edin
assert block.timestamp >= self.auctionEnd
# Bu fonksiyonun daha önce çağrılıp çağrılmadığını kontrol edin
assert not self.ended
# 2. Etkiler
self.ended = True
# 3. Etkileşim
send(self.beneficiary, self.highestBid)
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.
Ö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.
{
function power(base, exponent) -> result
{
switch exponent
case 0 { result := 1 }
case 1 { result := base }
default
{
result := power(mul(base, base), div(exponent, 2))
if mod(exponent, 2) { result := mul(base, result) }
}
}
let res := power(calldataload(0), calldataload(32))
mstore(0, res)
return(0, 32)
}
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.
Ö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.
type BookMsg = bytes[100]
contract GuestBook:
pub guest_book: map<address, BookMsg>
event Signed:
book_msg: BookMsg
pub def sign(book_msg: BookMsg):
self.guest_book[msg.sender] = book_msg
emit Signed(book_msg=book_msg)
pub def get_msg(addr: address) -> BookMsg:
return self.guest_book[addr].to_mem()
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.