Розробка кастомного оракула
Chainlink та Pyth закривають 95% потребностей у цінових даних. Але існують випадки, коли готове рішення не підходить: специфічний ілліквідний актив без покриття, нестандартний тип даних, мінімальна вимога до довіри третім особам, або спеціальна потреба агрегації. Тоді розробляють кастомний оракул.
Коли потрібен кастомний оракул
- Ілліквідний або нішевий актив: Chainlink не додає feed для токена $1M TVL
- Off-chain дані: спортивні результати, погода, страхові індекси — специфічні
- Приватні дані: корпоративні метрики, TradFi дані з ліцензійними обмеженнями
- Спеціальна агрегація: медіана від конкретних джерел, VWAP для кастомного періоду
- On-chain дані з верифікацією: дані з іншого ланцюга через ZK proofs
Архітектура кастомного оракула
Компоненти
Зовнішні джерела даних
↓ (HTTP/WebSocket)
Мережа Oracle Node
├── Node 1 (отримує, підписує, подає)
├── Node 2 (отримує, підписує, подає)
└── Node N (отримує, підписує, подає)
↓ (підписані звіти)
On-chain контракт агрегатора
├── Збирає звіти
├── Перевіряє підписи
├── Агрегує (медіана/TWAP)
└── Публікує результат
On-chain агрегатор
contract CustomOracle {
struct Report {
uint256 value;
uint256 timestamp;
bytes signature;
}
mapping(address => bool) public trustedNodes;
uint256 public requiredReports;
function submitReport(uint256 value, uint256 timestamp, bytes calldata sig) external {
require(trustedNodes[msg.sender], "Not trusted node");
// Перевірити підпис
bytes32 messageHash = keccak256(abi.encodePacked(value, timestamp));
address signer = recoverSigner(messageHash, sig);
require(signer == msg.sender, "Invalid signature");
_pendingReports[roundId][msg.sender] = Report(value, timestamp, sig);
if (_pendingReportCount[roundId] >= requiredReports) {
_finalizeRound(roundId);
}
}
}
Oracle Node
Off-chain вузол періодично:
- Отримує дані з джерел
- Агрегує (медіана, зважене середнє)
- Підписує ECDSA
- Подає транзакцію до агрегатора
Верифіцируємий оракул з ZK Proofs
Для високих вимог до trustlessness — ZK-based оракул. Вузол надає ZK proof, що дані корректно отримані та агреговані.
На практиці експериментально та обчислювально дороговизна — але розвивальний напрямок.
Захист від маніпуляції оракулом
Flash loan + маніпуляція: атакуючий бере flash loan, рухає ціну на DEX, експлуатує протокол при маніпульованій ціні.
Захисти:
- TWAP замість spot: Time-Weighted Average Price складніше манипулювати
- Кілька джерел: медіана з кількох бірж
- Circuit breakers: відхилити коли відхилення > X%
- Volume-weighted: ігнорувати джерела з аномально низьким volume
Розробка кастомного оракула: 4-12 тижнів залежно від джерел, мереж та вимог trustlessness.







