Chainlink kullanarak Solidity ile yazılmış çok basit bir örnek.

Ana sayfa Forumlar Kodlar Chainlink kullanarak Solidity ile yazılmış çok basit bir örnek.

  • Bu konu boş.
1 yazı görüntüleniyor (toplam 1)
  • Yazar
    Yazılar
  • #136
    admin
    Anahtar yönetici

    Chainlink kullanarak Solidity ile yazılmış çok basit bir örnek. Bu örnek, Chainlink’i kullanarak bir API’den veri çekmeye odaklanacak. Bu API, basit bir HTTP GET isteği yapacak ve sonucunu bir akıllı kontrata iletecek.

    Örnek Senaryo:

    Bir akıllı kontrat, Chainlink oracle’ları kullanarak dış dünyadan basit bir metin verisi alacak. Bu veriyi kullanıcıya gösterecek. Örneğin, bir hava durumu API’sinden veri alabiliriz.

    Adımlar:

    1. API’ye GET isteği gönderme: Chainlink, belirli bir URL’ye (örneğin, bir hava durumu API’sine) GET isteği gönderir.
    2. API’den gelen veriyi işleme: API’den gelen veri Chainlink oracle’ı tarafından akıllı kontrata iletilir.
    3. Veriyi kullanıcıya gösterme: Akıllı kontrat gelen veriyi işler ve bir event ile loglar.

    Kod Örneği

    solidity
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.0;

    import “@chainlink/contracts/src/v0.8/ChainlinkClient.sol”;

    contract SimpleChainlinkExample is ChainlinkClient {
    using Chainlink for Chainlink.Request;

    // Chainlink Oracle ve Job ID
    address private oracle; // Oracle adresi
    bytes32 private jobId; // Chainlink Job ID
    uint256 private fee; // Chainlink işlem ücreti

    // Gelen veriyi loglamak için event
    event WeatherDataReceived(string data);

    // Constructor: Oracle ve Job ID’yi ayarlama
    constructor(address _oracle, bytes32 _jobId, uint256 _fee) {
    setChainlinkToken(0xXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxX); // Chainlink token adresini burada belirtin
    oracle = _oracle;
    jobId = _jobId;
    fee = _fee;
    }

    // API’den veri almak için fonksiyon
    function requestWeatherData() public {
    // Chainlink isteğini oluşturuyoruz
    Chainlink.Request memory req = buildChainlinkRequest(jobId, address(this), this.fulfill.selector);

    // Örnek API URL’si (örneğin, bir hava durumu verisi sağlayan API)
    string memory url = “https://api.weatherapi.com/v1/current.json?key=YOUR_API_KEY&q=London”;

    // URL’yi Chainlink isteğine ekliyoruz
    req.add(“get”, url);

    // Oracle’a istek gönderiyoruz
    sendChainlinkRequestTo(oracle, req, fee);
    }

    // Oracle’dan gelen veriyi işleme fonksiyonu
    function fulfill(bytes32 _requestId, bytes memory _response) public recordChainlinkFulfillment(_requestId) {
    // Gelen cevabı string olarak alıyoruz
    string memory weatherData = string(_response);

    // Weather verisini logluyoruz
    emit WeatherDataReceived(weatherData);
    }

    // LINK token’larını çekmek için fonksiyon
    function withdrawLink(address _to, uint256 _amount) public {
    require(msg.sender == owner(), “Only owner can withdraw LINK”);
    LinkTokenInterface link = LinkTokenInterface(chainlinkTokenAddress());
    require(link.transfer(_to, _amount), “Transfer failed”);
    }

    // Sözleşmenin sahibinin adresini döndüren fonksiyon
    function owner() public view returns (address) {
    return address(0xYourOwnerAddressHere); // Buraya sözleşmenin sahibinin adresini yazın
    }
    }


    Açıklamalar:

    1. ChainlinkClient Kullanımı:
      • Bu kontrat, Chainlink ile veri alabilmek için ChainlinkClient kontratını import eder ve kullanır.
      • Chainlink.Request kullanarak API’den veri almak için gerekli olan parametreleri yapılandırırız.
    2. Constructor (Kurucu):
      • Kontrata oracle adresi, jobId ve işlem ücreti (fee) parametreleri verilir. Bu, Chainlink oracle’ını ve işlevlerini başlatmak için gereklidir.
      • setChainlinkToken() ile Chainlink token’ı (LINK) adresi belirtilir.
    3. Veri Talep Etme (requestWeatherData):
      • Bu fonksiyon, dış dünyadaki API’den veri almak için kullanılır. buildChainlinkRequest ile Chainlink isteği yapılır.
      • req.add("get", url) kısmında API’ye yapılacak GET isteği belirtilir (bu örnekte bir hava durumu API’si).
    4. Veri Alımı ve İşleme (fulfill):
      • API’den gelen veri, fulfill() fonksiyonu aracılığıyla alınır ve işlenir. Bu fonksiyon, Chainlink.Request‘in callback fonksiyonu olarak çalışır.
      • Gelen veri string olarak alınır ve bir event (WeatherDataReceived) ile kaydedilir.
    5. Veri Çekme ve Ödeme:
      • Chainlink oracle’larına LINK token ile ödeme yapılır. Bu ödeme, sendChainlinkRequestTo() fonksiyonu ile gerçekleştirilir.
      • withdrawLink() fonksiyonu, kontrat sahibinin LINK token’larını çekmesini sağlar.

    Kontratın Kullanımı:

    1. Veri Talep Etme:
      • Kullanıcı requestWeatherData() fonksiyonunu çağırarak, hava durumu verisini almak için Chainlink oracle’larına bir GET isteği gönderir.
    2. Veri Alma ve İşleme:
      • Oracle, API’den veri alır ve bu veriyi akıllı kontrata iletir. fulfill() fonksiyonu bu veriyi alır, işler ve WeatherDataReceived event’i aracılığıyla loglar.
    3. Veri Gösterimi:
      • API’den gelen veriyi akıllı kontrat emit ile loglar. Bu event’ler, dış dünyada (örneğin bir frontend uygulamasında) görüntülenebilir.

    Chainlink ve API Kullanımı:

    • API URL: Örnekte hava durumu verisi almak için https://api.weatherapi.com/v1/current.json?key=YOUR_API_KEY&q=London gibi bir API kullanılıyor. Bu URL, örnek olarak verilmiştir; kendi API’nizi kullanmanız gerekebilir.
    • API Anahtarı: Gerçek bir API anahtarına ihtiyacınız olacak. Örneğin, WeatherAPI gibi bir servis kullanabilirsiniz.

    Sonuç:

    Bu kontrat, Chainlink’i kullanarak dış dünyadan veri almak için basit bir örnek sunuyor. Örnekte, bir hava durumu API’sinden veri alındıktan sonra, bu veri bir event aracılığıyla kullanıcıya bildirilmektedir. Bu yapı, herhangi bir dış veriyi akıllı kontratlara güvenli bir şekilde entegre etmenin temellerini atmaktadır.

1 yazı görüntüleniyor (toplam 1)
  • Bu konuyu yanıtlamak için giriş yapmış olmalısınız.