Oracle Problemi
Ethereum’un ortaya çıkışından beri akıllı kontratlara dış kaynaklardan gerekli verileri sağlayabilmek için farklı algoritmalar ve yapılar geliştirilmiştir. Bu ürünler genel olarak Oracle’lar (veri sağlayıcıları) olarak adlandırılır.
Akıllı Kontratlara (Sözleşmeler) Dair Hap Bilgi
Detaya inmeden önce blokzincirlerin çalışabilmesini sağlayan kod parçacıklarından biraz bahsedelim.
Eğer blokzincir ve/veya akıllı kontratlar özelinde başlangıç seviyesinde bir yazı okuduysanız muhtemelen ilk karşılaşacağınız anlatım otomat makineleri üzerinden verilen bir örnek olacaktır.
Akıllı kontratlar aynı otomat makineleri gibi kapalı bir kutu/sistem olarak çalışan, kullanıcıyla etkileşime girip yapılan ödeme ile yapmak istediğiniz işlemi size bir sonuç olarak ileten kod gruplarıdır.
Örnek olarak aşağıda Ethereum için geliştirilen Solidity kodlama dilinde yazılmış basit bir depolama görevindeki akıllı kontratı inceleyebilirsiniz:
Bu akıllı kontrat temel olarak şunları yapar:
- 1. satırda lisans tipini belirtir. Her ne kadar genelde açık kaynak kodlu (open-source) projeler olarak başlasak dahi açık kaynak kodlu olmak demek direkt kodu kopyalayıp başka bir kopya ürün ortaya çıkartılabileceği anlamına gelmez. Burada belirtilen lisans tipi “MIT” herkesin kullanabileceği anlamına geliyor ancak tüm lisans çeşitleri bu anlama gelmez. İleride bahsedeceğimiz Uniswap, kodlarının kopyalanarak Sushiswap adlı bir ürün çıkması sonucu açık kaynak kodlu olmaya devam etmiş ancak lisans tipini değiştirmişti.
- 2. satırda başka dillerde kütüphane belirttiğimiz gibi benzer bir amaçla kullanılacak Solidity dilinin hangi versiyonunun akıllı kontratta kullanılacağı belirtilir.
- 4. satırda bir süslü parantez açarak akıllı kontratın içeriğinin yazılacağı kısma geçiliyor.
- 5. satırda depolamayı yapabilmek için bir değişken tanımlanıyor.
- 7. satırda “store” fonksiyonunda tanımladığımız değişkeni kullanarak depolama işlemi gerçekleştiriliyor.
- 9. ve son satırda ise “retrieve” fonksiyonu ile depolanan değişkeni sonuç olarak akıllı kontratın dışına veriyor.