Blockchain Oracles

Blockchain Oracles

Oracle da Neymiş? Oracle Problemi Diye Bir Şey Duydum Ama? Chainlink diye bir proje var diyorlar? gibi sorulara cevap arıyorsan doğru yerdesin!

·

5 min read

Oracle’lar, blockchain yapılarına akıllı sözleşmelerde kullanılmak üzere off-chain dataları getiren blockchain yapılarıdır. Blockchain’ler yapıları geneli dışarıya kapalı sistemlerdir ve bu nedenle kendi ekosistemleri dışındaki bilgilerden haberdar olamazlar. Oracle’lar tam olarak bu noktada devreye girerek bu blockchain yapısının dışında bulunan (off-chain) veri kaynaklarını (data sources) alır ve blockchain üzerinde (on-chain) bu bilgileri işler.

Peki Ama Neden? 😮

Hemen arkasından gelmesi gereken soru tam olarak budur. Neden off-chain datalara akıllı sözleşmeler ve doğal olarak akıllı sözleşme geliştiricileri ihtiyaç duyar? Hemen güncel bir örnek vererek duruma açıklık getirmeye çalışalım.

Şuanda dünyanın dört bir yanında milyonlarca insanın izlediği, tarihte ilk kez kışın düzenlenen, Dünya Kupası organizasyonu devam ediyor. Diyelim ki, siz de bu dünya kupasının en çok gol atan oyuncusu kim olur sorusuna bağlı olarak dApp geliştirmek istiyorsunuz. Dünya Kupasında hangi oyuncunun kaç gol attığı bilgisi blockchain üzerinde mevcut olmadığından dolayı off-chain olarak final maçının sonuna kadar hangi oyuncunun toplamda kaç gol atmış olduğunu bir şekilde öğrenmemiz ve sonuca göre, bu bahse katılan kullanıcıların toplam likiditesini kazananlar arasında eşit olarak bölüştürmemiz gerekmektedir. Oracle’lar tam olarak bu noktada devreye girerek, bu bilgiyi hem sağlarlar hem de onaylarlar.

Akıllı Sözleşme & Oracle İlişkisi Üzerine Biraz Daha Derine İnelim 🤿

Yukarıda da açıklamaya çalıştığım gibi Oracle’lar aslında blockchain üzerinde çalışan akıllı sözleşmeler için off-chain olarak depolanan bilgileri “pull” lamasının yanı sıra bu bilgileri doğrular ve aktarır. Bunun yanı sıra Oracle’lar on-chain dataları “push” layarak off-chain sistemlerin de blockchain üzerindeki datalara erişmesini sağlayabilmektedir. Tek bir kelime ile özetlemek gerekirse Oracle uygulamaları aslında blockchain üzerindeki akıllı sözleşmeler ile off-chain data sağlayıcıları (data providers) arasında birer köprü görevi görmektedir diyebiliriz.

Blockchain’ler gerçek dünya ile kendi başlarına iletişime geçemezler.

Blockchain’ler dış dünyaya kapalı sistemlerdir ve bu nedenle gerçek dünya ile kendi başlarına iletişime geçemezler. Bu durum ilk başta kulağa kötü gelebilir fakat blockchain’ler bu kapalı durum sayesinde deterministik sistemler (deterministic system) olarak çalışabilmektedirler. Deterministik sistemleri kısaca tanımlarsak, ilk şartları/durumları (initial condition) ve belirli bir girdisi (particular input) olmasına rağmen her zaman aynı çıktıyı (output) üreten sistemlerdir. Yani içerisinde herhangi bir rastgelelik ya da varyasyon yoktur. Blockchain’ler deterministik uygulamalar olabilmek adına, node’larını limitleyerek konsensusta sadece basit düzeyde doğru/yanlış soruları(simple binary (true/false) questions) sorarlar ve bu sorulara cevap ararlar. Örnek vermek gerekirse,

  • Hesap blockchain üzerinde yapılan işlemi(transaction) karşılayacak kadar yeterli bakiyeye sahip mi?

  • Gerçekleşen işlem akıllı sözleşme tarafından onaylı mı?

Blockchain’lerin dış dünyaya kapalı olmadığı bir yapıyı düşünüp, inceleyelim ve deterministik olmasının önemini biraz daha pekiştirelim. Eğer blockchain’ler dış dünyaya açık sistemler olsalardı her bir node üzerinden farklı çıktılar alma gibi bir durum söz konusu olabilirdi ve bu nedenle deterministik yapı bozulabilirdi. Peki bu nasıl bir duruma yol açardı diye sorarsak, örnek olarak ETH-USD çifti üzerinden bir işlem açtığımızı düşünelim ve bu işlemi geleneksel bir API’dan çektiğimizi varsayalım. Bu durum fiyatta sürekli bir oynama yaratmasının yanı sıra, gerçek hayatta çok kez görüldüğü gibi API’ın kullanımdan kaldırılması ya da hack’lenmesi durumunda node’larda execute’lanan aynı akıllı sözleşmeden, farklı çıktılar alma durumu söz konusu olabilirdi. Bu durum ise deterministik yapının önüne geçip, ilk durumlara ya da belirli girdilere rağmen aynı çıktıyı vermesi gerekirken her bir node farklı çıktılar verebilirlerdi. Bu durumda belki de biz ETH-USD çiftinde o anlık çok daha ucuza ya da çok daha pahalıya işlem yapmış olabilirdik ve blockchain’in vazgeçilmezi olan güvenlik konusunda çok büyük bir açık verebilirdik.

Oracle Problemi ⚠️

Akıllı sözleşmeler ve oracle arasındaki ilişkiye baktık ve eğer blockchain’ler dış dünyaya açık sistemler olsalardı nasıl bir problemle karşılaşırdık bunu görmüş olduk. Şimdi ise birkaç adım geriye çıkıp biraz daha geniş bir perspektiften bakmanın zamanı geldi, Neden akıllı sözleşmeleri on-chain olarak yazıyoruz? Peki Oracle’lar neden merkeziyetsiz olmalılar?

Eğer dataları tek bir API, node ya da kaynak üzerinden çekseydik, blockchain’in var olma nedenine ilk elden bir darbe vurmuş olurduk, merkeziyetsizlik. Merkezi bir oracle demek, bir topluluğun bir akıllı sözleşme üzerinde tamamen söz sahibi olması anlamına gelmektedir. Yani aslında yazılan akıllı sözleşmenin normal dünyada yazılan bir koddan çokta bir farkı kalmaması anlamına da geldiği söylenebilir. Daha da önemlisi merkezi yapıdaki her sistem gibi merkezi Oracle’lar da hacklenmeye ve atağa karşı fazlasıyla açık durumdadırlar, aynı zamanda güncelliğini kaybedebilirler ve bu durumlar sistemi felakete sürüklemeye yeterlidir. Bu tarz bir sürüklenmede hatalı bir data blockchain’e rapor edildikten sonra bu data artık değiştirilemez(immutable) bir yapının parçası olur. Eğer akıllı sözleşme bu datadan dolayı yanlış bir şekilde execute’lanırsa, yazılan akıllı sözleşme sadece yapması gerekeni yapmamakla kalmaz aynı zamanda geri dönülemez hasarlara da yol açar. Kısacası Oracle’lar datayı on-chain’e getirirken merkezi bir yapıdan kesinlikle destek almamalıdır. Yoksa akıllı sözleşmeler üzerindeki merkeziyetsizlik kaybolmuş olur.

Oracle problemini çözmek için şu 2 basit maddeye çözüm bulmak yeterlidir.

  • Blockchain’ler kendi başlarına dışarıdaki datalara erişemezler.

  • Merkezi oracle kullanımı akıllı sözleşme kullanmanın avantajını ortadan kaldırmasının yanında büyük güvenlik sorunlarını da beraberinde getirir.

Chainlink bu iki soruyada çözüm bularak merkeziyetsiz oracle yapıları geliştirdi ve standartlaştırdı. Bir merkeziyetsiz oracle ya da merkeziyetsiz oracle ağı aslında birbirinden bağımsız bir blockchain oracle grubudur ve bu grup blockchain’e data sağlamakla görevlidir. Her bir bağımsız oracle, off-chain kaynaktan datayı çeker ve on-chain’e getirir. Çekilen bu datalar daha sonra toplanır ve bu sayede sistem bu datalar için deterministik olarak kalabilir. Merkeziyetsiz Oracle’lar bu sayede oracle problemini çözmüş olurlar.

Chainlink, akıllı sözleşmelerin gerçek potansiyellerini ortaya çıkarması için gerçek dünyadaki verileri blockchain’e merkeziyetsiz node’larla bağlar. Bu sayede blockchain Oracle’ları için blockchain’in sahip olduğu aynı güvenilir, merkezi olmayan altyapı konseptinden yararlanılır. Eğer node ya da kaynak hacklenir, silinir ya da güncelliğini kaybederse Chainlink bu durumu dengeler ve merkeziyetsiz ağ çalışmaya devam eder. Tek bir Oracle’ı çalıştırmak çok riskli iken, Chainlink data kullanımı üzerine mükemmel bir Oracle ekosistemi sunmaktadır. Ayrıca Oracle’lar iki farklı blockchain’in birbirine tanıması konusunda da bize destek vermektedirler. Buna bilinen adıyla interoperability yani birlikte çalışabilirlik denmektedir.

Günün sonunda akıllı sözleşmelerin en üstün şekilde anlaşabilmesi için çeşitliliğe ve güvenilebilir dataya, bu nedenle de Oracle’lara ihtiyaç duyarız.


Kaynaklar ℹ️


Yazara ulaşmak için: https://twitter.com/Roq411

Did you find this article valuable?

Support Buildchain by becoming a sponsor. Any amount is appreciated!