- Bu konu boş.
-
YazarYazılar
-
Ocak 19, 2025: 8:40 pm #136
admin
Anahtar yöneticiChainlink 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:
- API’ye GET isteği gönderme: Chainlink, belirli bir URL’ye (örneğin, bir hava durumu API’sine) GET isteği gönderir.
- API’den gelen veriyi işleme: API’den gelen veri Chainlink oracle’ı tarafından akıllı kontrata iletilir.
- 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:
- ChainlinkClient Kullanımı:
- Bu kontrat, Chainlink ile veri alabilmek için
ChainlinkClientkontratını import eder ve kullanır. Chainlink.Requestkullanarak API’den veri almak için gerekli olan parametreleri yapılandırırız.
- Bu kontrat, Chainlink ile veri alabilmek için
- Constructor (Kurucu):
- Kontrata
oracleadresi,jobIdve 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.
- Kontrata
- Veri Talep Etme (
requestWeatherData):- Bu fonksiyon, dış dünyadaki API’den veri almak için kullanılır.
buildChainlinkRequestile 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).
- Bu fonksiyon, dış dünyadaki API’den veri almak için kullanılır.
- 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.
- API’den gelen veri,
- 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.
- Chainlink oracle’larına LINK token ile ödeme yapılır. Bu ödeme,
Kontratın Kullanımı:
- 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.
- Kullanıcı
- 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 veWeatherDataReceivedevent’i aracılığıyla loglar.
- Oracle, API’den veri alır ve bu veriyi akıllı kontrata iletir.
- Veri Gösterimi:
- API’den gelen veriyi akıllı kontrat
emitile loglar. Bu event’ler, dış dünyada (örneğin bir frontend uygulamasında) görüntülenebilir.
- API’den gelen veriyi akıllı kontrat
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=Londongibi 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.
-
YazarYazılar
- Bu konuyu yanıtlamak için giriş yapmış olmalısınız.