Özel Oracle Sözleşmeleri Oluşturma
İstek-yanıt akışları, güvenilir güncelleyiciler ve verilerin zincir üzerindeki güncelliğini doğrulama dahil olmak üzere kendi oracle kalıbınızı Solidity'de tasarlamayı ve uygulamayı öğrenin.
Özel Oracle Sözleşmeleri Oluşturma, CoddyKit'te ücretsiz bir Blockchain Smart Contracts with Solidity dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Blockchain Smart Contracts with Solidity öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Blockchain Smart Contracts with Solidity kursu toplamda 4 dersten oluşur.
Bu dersin bazı bölümleri henüz çevrilmemiş olup İngilizce olarak gösterilmektedir.
Beyond Third-Party Oracles
Chainlink and similar networks cover common feeds, but sometimes you need data nobody else provides, like a proprietary API result. In those cases you build a custom oracle: an off-chain updater plus an on-chain contract that stores and serves the data.
The Two-Party Design
A custom oracle has two sides:
- Off-chain updater: a server that reads the external source and sends transactions.
- On-chain contract: stores the latest value and exposes a read function for other contracts.
A Minimal Storage Oracle
The simplest oracle just lets a trusted address write a value that anyone can read.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract SimpleOracle {
address public updater;
uint256 public value;
uint256 public lastUpdated;
constructor() {
updater = msg.sender;
}
function setValue(uint256 newValue) external {
require(msg.sender == updater, 'not updater');
value = newValue;
lastUpdated = block.timestamp;
}
}Guarding the Updater
The single point of trust is the updater address. Protect it with access control and allow it to be rotated safely if a key is compromised.
function transferUpdater(address newUpdater) external {
require(msg.sender == updater, 'not updater');
require(newUpdater != address(0), 'zero address');
updater = newUpdater;
}Checking Data Freshness
Stale data is dangerous. Consumers should reject values older than a threshold using the stored lastUpdated timestamp.
uint256 public constant MAX_AGE = 1 hours;
function getFreshValue() external view returns (uint256) {
require(block.timestamp - lastUpdated <= MAX_AGE, 'stale data');
return value;
}Request-Response Pattern
For on-demand data, a consumer emits a request event. The off-chain updater watches for it and replies with the answer in a callback.
event DataRequested(uint256 indexed requestId, string query);
uint256 private nextId;
function requestData(string calldata query) external returns (uint256) {
uint256 id = nextId++;
emit DataRequested(id, query);
return id;
}Fulfilling a Request
The updater calls back with the result for a given request id. Store it keyed by id so the consumer can read it later.
mapping(uint256 => uint256) public answers;
mapping(uint256 => bool) public fulfilled;
function fulfill(uint256 requestId, uint256 result) external {
require(msg.sender == updater, 'not updater');
answers[requestId] = result;
fulfilled[requestId] = true;
}Reducing Single-Source Risk
One updater is one point of failure. To harden the oracle you can require multiple updaters to agree (an aggregation or median of submissions) before a value is accepted.
mapping(address => bool) public isUpdater;
mapping(address => uint256) public submitted;
address[] public updaters;
function submit(uint256 v) external {
require(isUpdater[msg.sender], 'not updater');
submitted[msg.sender] = v;
}Computing a Median
A median resists a single malicious updater better than an average. Collect submissions, sort them off-chain or with a small on-chain helper, and take the middle value.
function median(uint256[] memory data) internal pure returns (uint256) {
// assume data already sorted
uint256 n = data.length;
if (n % 2 == 1) return data[n / 2];
return (data[n / 2 - 1] + data[n / 2]) / 2;
}Trust Tradeoffs
Custom oracles trade decentralization for flexibility. Document clearly who runs the updater, what data is sourced, and how consumers should react to staleness. For high-value DeFi, prefer established decentralized oracle networks.
Consumer Integration
A consumer contract simply imports the oracle interface and reads from it, applying its own freshness checks.
interface IOracle {
function getFreshValue() external view returns (uint256);
}
contract Consumer {
IOracle public oracle;
constructor(address o) { oracle = IOracle(o); }
function price() external view returns (uint256) {
return oracle.getFreshValue();
}
}Quick Check
Test your grasp of custom oracle design.
Recap
You built a custom oracle with an off-chain updater and an on-chain store. Key ideas:
- Trusted updater with rotatable access control
- Freshness checks via
lastUpdated - Request-response flow with events and callbacks
- Multiple updaters and medians to reduce single-source risk
Use custom oracles for niche data, but prefer decentralized networks for high-stakes feeds.
Sıkça Sorulan Sorular
“Özel Oracle Sözleşmeleri Oluşturma” dersi ücretsiz mi?
Evet — “Özel Oracle Sözleşmeleri Oluşturma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Blockchain Smart Contracts with Solidity kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Blockchain Smart Contracts with Solidity kursu toplamda 4 dersten oluşur.
“Özel Oracle Sözleşmeleri Oluşturma” dersinde ne öğreneceğim?
İstek-yanıt akışları, güvenilir güncelleyiciler ve verilerin zincir üzerindeki güncelliğini doğrulama dahil olmak üzere kendi oracle kalıbınızı Solidity'de tasarlamayı ve uygulamayı öğrenin. Blockchain Smart Contracts with Solidity ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Blockchain Smart Contracts with Solidity öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Blockchain Smart Contracts with Solidity, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Özel Oracle Sözleşmeleri Oluşturma” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Blockchain Smart Contracts with Solidity dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Blockchain Smart Contracts with Solidity dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Oracle Sorunu Açıklaması
- Chainlink Oracle'larını Entegre Etme
- Zincir Dışı Veri Alımını İşleme
- Özel Oracle Sözleşmeleri Oluşturma