Ana içeriğe geç
Change page

Akıllı sözleşmelere giriş

Son düzenleme: , 25 Eylül 2023

Akıllı sözleşme nedir?

Bir "akıllı sözleşme" basitçe Ethereum blok zincirinde çalışan bir programdır. Ethereum blok zincirindeki özel bir adreste bulunan bir kod (sözleşmenin fonksiyonları) ve veri (sözleşmenin durumu) koleksiyonudur.

Akıllı sözleşmeler bir tür Ethereum hesabıdır. Bu, onların bir dengeye sahip olduğu ve işlemlerinin hedefi olabilecekleri anlamına gelir. Ancak bir kullanıcı tarafından kontrol edilmezler, bunun yerine ağa dağıtılırlar ve programlandıkları gibi çalışırlar. Sonrasında kullanıcı hesapları akıllı sözleşmede tanımlanmış bir fonksiyonu yürüten işlemler göndererek akıllı sözleşme ile etkileşime geçebilirler. Akıllı sözleşmeler, normal bir sözleşmeye benzer şekilde kurallar belirleyebilir ve bu kuralları kod aracılığıyla zorunlu kılabilirler. Akıllı sözleşmeler varsayılan olarak silinemezler ve onlarla yapılan etkileşimler geri alınamaz.

Ön Koşullar

Yeni başlıyorsanız veya daha az teknik bir giriş arıyorsanız, akıllı sözleşmelere girişimizi öneririz.

Akıllı sözleşmelerin dünyasına atlamadan önce hesaplar, işlemler ve Ethereum Sanal Makinesi hakkında yeterince bilgi sahibi olduğunuzdan emin olun.

Dijital bir otomat

Nick Szabo(opens in a new tab)'nun açıkladığı gibi, bir akıllı sözleşme için en iyi metafor, muhtemelen bir otomattır. Doğru girdilerle, belli bir çıktı garanti edilir.

Otomattan bir atıştırmalık almak için:

1money + snack selection = snack dispensed

Bu mantık otomatın içine programlanmıştır.

Bir akıllı sözleşme, tıpkı bir otomat gibi içine programlanmış bir mantığa sahiptir. Solidity'de yazılmış bir akıllı sözleşme olsaydı otomatın nasıl görüneceğini aşağıdaki basit örnekte görebilirsiniz:

1pragma solidity 0.8.7;
2
3contract VendingMachine {
4
5 // Declare state variables of the contract
6 address public owner;
7 mapping (address => uint) public cupcakeBalances;
8
9 // When 'VendingMachine' contract is deployed:
10 // 1. set the deploying address as the owner of the contract
11 // 2. set the deployed smart contract's cupcake balance to 100
12 constructor() {
13 owner = msg.sender;
14 cupcakeBalances[address(this)] = 100;
15 }
16
17 // Allow the owner to increase the smart contract's cupcake balance
18 function refill(uint amount) public {
19 require(msg.sender == owner, "Only the owner can refill.");
20 cupcakeBalances[address(this)] += amount;
21 }
22
23 // Allow anyone to purchase cupcakes
24 function purchase(uint amount) public payable {
25 require(msg.value >= amount * 1 ether, "You must pay at least 1 ETH per cupcake");
26 require(cupcakeBalances[address(this)] >= amount, "Not enough cupcakes in stock to complete this purchase");
27 cupcakeBalances[address(this)] -= amount;
28 cupcakeBalances[msg.sender] += amount;
29 }
30}
Tümünü göster
Kopyala

Bir otomatın bir kasiyere olan ihtiyacı yok etmesi gibi, akıllı sözleşmeler de birçok endüstrideki aracıların yerini alabilir.

İzne dayalı olmama

Herkes bir akıllı sözleşme yazabilir ve onu ağa dağıtabilir. Sadece bir akıllı sözleşme dilinde kod yazmayı öğrenmeniz ve sözleşmenizi dağıtmaya yetecek kadar ETH sahibi olmanız gerekir. Bir akıllı sözleşmenin dağıtılması, teknik olarak bir işlem olduğundan basit bir ETH transferi için gaz ödediğiniz gibi bunun için de gaz ödemeniz gerekir. Ancak akıllı sözleşme dağıtımının gaz masrafı çok daha fazladır.

Ethereum, akıllı sözleşme yazmak için geliştirici dostu dillere sahiptir:

  • Solidity
  • Vyper

Diller hakkında daha fazlası

Ancak, Ethereum sanal makinesinin sözleşmeyi yorumlayabilmesi ve depolayabilmesi için dağıtılmadan önce derlenmeleri gerekir. Derleme üzerine daha fazla bilgi

Birleştirilebilirlik

Akıllı sözleşmeler Ethereum üzerinde herkese açıktır ve açık API'ler olarak düşünülebilirler. Bu, kendi akıllı sözleşmenizde başka akıllı sözleşmeleri çağırarak olanakları büyük ölçüde genişletebileceğiniz anlamına gelir. Sözleşmeler, başka sözleşmeleri bile dağıtabilir.

Akıllı sözleşme birleştirilebilirliği hakkında fazlasını öğrenin.

Kısıtlamalar

Akıllı sözleşmeler, zincir dışındaki kaynaklardan veri çekemedikleri için kendi başlarına ''gerçek dünya'' olayları hakkında bilgi toplayamaz. Dolayısıyla gerçek dünyada gerçekleşen olaylara yanıt veremezler. Bu, tasarımlarının bir gereğidir. Dış bilgiye bağımlı olmak, güvenlik ve merkeziyetsizlik için önemli olan mutabakatı riske atabilir.

Ancak blokzincir uygulamaları için zincir dışından edinilen verileri kullanabilmek önemlidir. Çözüm ise zincir dışından edinilen verileri sentezleyip akıllı sözleşmeler için kullanılabilir hale getiren araçlar olan kâhinlerdir.

Akıllı sözleşmelerin diğer bir kısıtlaması ise maksimum sözleşme boyutudur. Bir akıllı sözleşme maksimum 24 KB olabilir: Aksi takdirde sahip olduğu gaz tükenir. Bu, Elmas Deseni(opens in a new tab) kullanılarak aşılabilir.

Çoklu imza sözleşmeleri

Çoklu imza sözleşmeleri, bir işlemi gerçekleştirmek için birden fazla geçerli imza gerektiren akıllı sözleşme hesaplarıdır. Bu, önemli miktarda ether veya diğer tokenleri tutan sözleşmeler için tek başarısızlık noktalarından kaçınmak için çok kullanışlıdır. Çoklu imzalar, ayrıca sözleşme yürütme ve anahtar yönetimi sorumluluğunu birden fazla taraf arasında bölüştürür ve tek bir özel anahtarın geri dönüşü olmayan fon kaybına yol açmasını önler. Bu nedenlerle, basit DAO yönetişimi için çoklu imza sözleşmeleri kullanılabilir. Çoklu imzalar, yürütmek için M olası kabul edilebilir imzadan (burada N ≤ M ve M > 1 olduğunda) N imza gerektirir. N = 3, M = 5 ve N = 4, M = 7 yaygın olarak kullanılır. 4/7 çoklu imza, olası yedi geçerli imzadan dördünü gerektirir. Bu, üç imza kaybolsa bile fonların geri alınabileceği anlamına gelir. Bu durumda, sözleşmenin uygulanabilmesi için anahtar sahiplerinin çoğunluğunun kabul etmesi ve imzalaması gerektiği anlamına da gelir.

Akıllı sözleşme kaynakları

OpenZeppelin Kontratları - Güvenli akıllı sözleşme geliştirme kütüphanesidir.

Daha fazla okuma

Bu makale yararlı oldu mu?