

Oracle; fiyat, hava durumu veya maç sonucu gibi blokzincir dışındaki verileri akıllı sözleşmelere taşıyan altyapıdır. Blokzincirler deterministik çalıştığı için bu verilere kendi başlarına erişemez. Oracle’lar aslında DeFi (Merkeziyetsiz finans) ve oyun uygulamalarının temelidir. Ancak yanlış veya manipüle edilmiş bir veri, kusursuz yazılmış bir sözleşmeyi bile hatalı çalıştırabilir. Merkeziyetsiz oracle ağları bu riski azaltmak için geliştirilmiştir.
Zincir üstü (on-chain) veri, bir cüzdanın bakiyesi gibi doğrudan blokzincirde bulunan bilgidir. Zincir dışı (off-chain) veri ise borsa fiyatları veya maç skorları gibi blokzincirin dışında oluşan bilgidir. Oracle’lar bu iki dünya arasındaki boşluğu doldurur. Bu nedenle sektörde sıkça köprü benzetmesiyle anılır.
Ethereum’un geliştirici dokümantasyonuna göre veri akışı tek yönlü değildir. Oracle, dış dünyadan zincire bilgi taşıyabildiği gibi zincirdeki bir işlemin dış dünyada bir eylemi tetiklemesini de sağlar.
Akıllı sözleşmeler neden oracle’a ihtiyaç duyar?
Blokzincirdeki her node, aynı işlemi çalıştırdığında aynı sonuca ulaşmak zorundadır. Sözleşmeler dışarıdan sürekli değişen bir veri çekerse node’lar farklı sonuçlar üretebilir ve konsensüs bozulabilir.
Oracle, veriyi zincire bir kez kaydeder. Böylece tüm node’lar aynı bilgiyi okur. Bu özelliğe determinizm denir. Deterministik bir sistem, aynı başlangıç durumu ve aynı girdiyle her zaman aynı çıktıyı üretir.
Oracle nasıl çalışır?
Bir oracle hizmeti, on-chain’deki bir oracle sözleşmesi ile zincir dışındaki oracle node’larından oluşur. Sözleşme veri talebini alır, node’lar veriyi dış kaynaklardan çeker ve sonucu bir işlemle zincire yazar. Talep eden akıllı sözleşme bu veriyi kullanarak işlemini tamamlar. Süreç genellikle dört adımda ilerler:
- Talep: Bir akıllı sözleşme, güncel ETH fiyatı gibi dış bir veriye ihtiyaç duyar ve oracle sözleşmesine talep gönderir.
- Bildirim: Oracle sözleşmesi talebi bir olay kaydı olarak yayımlar. Bu kaydı dinleyen zincir dışı node’lar harekete geçer.
- Veri toplama: Node’lar, API’ler aracılığıyla dış kaynaklara bağlanır ve istenen veriyi alır.
- Birleştirme ve teslim: Node’ların yanıtları tek bir değerde birleştirilir. Bu değer bir işlemle zincire yazılır ve talep eden sözleşmeye iletilir.
Ethereum dokümantasyonu iki yaygın tasarım modelini öne çıkarır. Publish-subscribe modelinde oracle, sürekli güncellenen bir veri akışı sunar ve sözleşmeler bu akışı düzenli olarak okur. Request-response modelinde ise sözleşme yalnızca ihtiyaç duyduğu veriyi ister. Bu modelde veri çekme maliyetini ve işlem ücretini talep eden taraf karşılar.
Oracle problemi nedir?
Oracle problemi, blokzincirin kendisine giren verinin doğruluğunu kanıtlayamamasıdır. Zincir değiştirilemez olsa da yanlış bir veri zincire yazıldığında sözleşme bu veriyle çalışmaya devam eder. Bilgisayar biliminde bu durum “garbage in, garbage out” ilkesiyle özetlenir. Yani hatalı girdi, hatalı çıktı üretir.
Ethereum dokümantasyonu, oracle’ları değerlendirmek için üç temel ölçüt öne sürer:
- Doğruluk: Veri doğru kaynaktan alınmalı ve zincire ulaşana kadar değiştirilmemelidir.
- Erişilebilirlik: Veri, ihtiyaç duyulduğu anda kesintisiz sunulmalıdır.
- Teşvik uyumu: Sistem, veri sağlayıcılarını doğru bilgi vermeye yöneltmeli ve hatalı veriyi cezalandırabilmelidir.
