Takip

Nedir Bu Blokzincirdeki Oracle

Bu Solidity kodu, basit bir oracle mekanizması üzerine kurulmuş bir akıllı kontrat örneğidir. Oracle, blockchain dışındaki verileri alıp zincire getiren bir yapıdır. Bu kontratın amacı, belirli bir API’den veri almak için oracle’lara bir istekte bulunmak ve minimum bir doğrulama sayısına (quorum) ulaşıldığında sonuç üzerinde anlaşmaya varmak.

Detaylı Açıklama:

Değişkenler:

  1. Request[] requests;: Bu, yapılan tüm isteklerin saklandığı bir liste (array) olup her bir isteği bir yapı (struct) olarak tutar.
  2. uint currentId = 0;: Bu, her isteğe özgü benzersiz bir kimlik numarası verir ve her yeni istek oluşturulduğunda artar.
  3. uint minQuorum = 2;: Bir sonuç üzerinde mutabakata varmak için en az kaç oracle cevabının aynı olması gerektiğini tanımlar. Burada minimum 2 cevap gerekli.
  4. uint totalOracleCount = 3;: Toplam oracle sayısını belirtir. Bu, kontratın 3 farklı oracle adresi ile çalıştığını gösterir.

Yapılar (Structs):

  • Request:
    • id: İsteğin kimlik numarası.
    • urlToQuery: Oracle’ların sorgulayacağı API’nin URL’si.
    • attributeToFetch: Bu URL’den dönen JSON cevabından alınması gereken anahtar (key).
    • agreedValue: Oracle’ların mutabık kaldığı değer.
    • mapping(uint => string) anwers;: Oracle’lar tarafından verilen cevapları saklar.
    • mapping(address => uint) quorum;: Oracle’ların isteğe oy verip vermediğini gösterir (1=oy vermedi, 2=oy verdi).

Olaylar (Events):

  • NewRequest: Oracle’ların zincir dışındaki API’yi çağırması gerektiğini bildiren bir olaydır. Bir istek yapıldığında tetiklenir.
    • id: İsteğin kimliği.
    • urlToQuery: API’nin URL’si.
    • attributeToFetch: JSON verisinden alınacak anahtar.
  • UpdatedRequest: Bir sonuç üzerinde mutabakata varıldığında tetiklenir.
    • id: İsteğin kimliği.
    • urlToQuery: API’nin URL’si.
    • attributeToFetch: JSON verisinden alınacak anahtar.
    • agreedValue: Oracle’ların üzerinde mutabık kaldığı değer.

Fonksiyonlar:

  1. createRequest:
    • Bu fonksiyon, yeni bir oracle isteği oluşturur.
    • Parametreler:
      • _urlToQuery: Oracle’ın sorgulayacağı API’nin URL’si.
      • _attributeToFetch: JSON’dan alınması gereken anahtar.
    • Fonksiyon, yeni bir Request yapısı oluşturur ve requests dizisine ekler.
    • Oracle adresleri (hardcoded) olarak belirlenmiş üç adresle çalışır. Bu adreslere oy hakkı atanır.
    • Son olarak, bir NewRequest olayı tetiklenir.
  2. updateRequest:
    • Oracle’lar tarafından çağrılan fonksiyondur. Bir oracle bu fonksiyonu çağırarak API’den aldığı veriyi gönderir.
    • Parametreler:
      • _id: İlgili isteğin kimliği.
      • _valueRetrieved: Oracle tarafından API’den getirilen veri.
    • Oracle, henüz oy kullanmadıysa (quorum 1 ise) ve oyunu verdikten sonra (quorum 2 yapılır), cevabını saklar.
    • Oracle’ların verdiği cevaplar incelenir ve aynı cevabı veren oracle sayısı minQuorum‘a ulaştığında mutabakata varılan cevap olarak agreedValue güncellenir.
    • Güncellenmiş istek için bir UpdatedRequest olayı tetiklenir.

İşleyiş Adımları:

  1. Yeni Bir İstek Oluşturma (createRequest): Bu fonksiyonla yeni bir istek yapılır ve oracle’ların cevaplaması gereken bir olay tetiklenir.
  2. Oracle’ların Yanıt Verme Süreci (updateRequest): Her oracle API’yi sorguladıktan sonra bu fonksiyonu çağırarak cevaplarını gönderir. Cevaplar aynı olduğunda ve minimum 2 oracle aynı cevabı verdiğinde (minQuorum), sonuca karar verilir ve güncellenmiş istek olayı tetiklenir.
  3. Mutabakat: Oracle’ların cevapları arasında yeterince benzerlik varsa (en az 2 oracle aynı cevabı verdiyse), agreedValue belirlenir ve bu sonucun mutabık kalınmış sonuç olduğu kabul edilir.

Oracle Mekanizması:

Bu kontratta, oracle’ların blockchain dışındaki bir kaynaktan veri alıp zincire geri getirmesi amaçlanmıştır. Mutabakata ulaşılması için her oracle’ın oy kullanması ve aynı cevaba ulaşılması önemlidir. Oracle’ların cevabı en az 2 kez aynıysa, sonuç kabul edilir.

Bu basit oracle mekanizması, dış dünya ile blockchain arasındaki bağlantıyı sağlar ve güvenilirliği artırmak için birden fazla oracle’ın doğrulama yapmasını sağlar.

Yorumlar
Tartışmaya katılın ve görüşlerinizi paylaşın.
Yorum Yapabilirsiniz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Listesi
Posta Listemize Katılın
En güncel gelişmeleri, yaratıcı ipuçlarını ve size özel kaynakları doğrudan gelen kutunuza alın. Tasarımın ve inovasyonun geleceğini birlikte keşfedelim.