ऑन-चेन प्राइस ओरेकल · वास्तविक-दुनिया की संपत्तियों की प्राइस फ़ीड
स्मार्ट कॉन्ट्रैक्ट के लिए प्राइस ओरेकल: फ़ॉरेक्स, सोना, इंडेक्स और स्टॉक ऑन-चेन
हमारी API से हस्ताक्षरित प्राइस रिपोर्ट लें और उसे अपने कॉन्ट्रैक्ट को दें। हमारा वेरिफ़ायर कॉन्ट्रैक्ट ऑन-चेन हस्ताक्षर जाँचता है, इसलिए आपका कॉन्ट्रैक्ट संदेशवाहक पर भरोसा किए बिना कीमत पर भरोसा कर सकता है।
यह कैसे काम करता है
- हस्ताक्षरित रिपोर्ट प्राप्त करें: अपनी API कुंजी के साथ
GET /oracle/report। - इसे अपने ट्रांज़ैक्शन में सबमिट करें: हमारा वेरिफ़ायर कॉन्ट्रैक्ट
ecrecoverसे हस्ताक्षर जाँचता है। - सत्यापित कीमत का उपयोग करें; अगर वह आपके उपयोग के लिए बहुत पुरानी हो तो उसे अस्वीकार करें।
रिपोर्ट EIP-712 टाइप्ड डेटा PriceReport(bytes32 feedId,int256 price,uint64 timestamp,uint64 validUntil,uint8 marketStatus,uint32 spreadBps) हैं, एक चेन और एक वेरिफ़ायर कॉन्ट्रैक्ट से बँधी (कहीं और दोबारा उपयोग नहीं) और केवल validUntil तक स्वीकार, यानी हस्ताक्षर के लगभग एक मिनट बाद तक (अनुकूल रिपोर्ट जमा नहीं की जा सकतीं)। कीमतें बिड और आस्क का मध्य हैं, 8 दशमलव के साथ; spreadBps बिड-आस्क स्प्रेड है। जब आप अपने ट्रांज़ैक्शन में रिपोर्ट सबमिट करते हैं, तो वह गैस आप चुकाते हैं। माँग वाली फ़ीड हमारा रिलेयर भी समय-समय पर ऑन-चेन संग्रहीत करता है (पढ़ना मुफ़्त), पर संग्रहीत कीमत की उम्र हमेशा जाँचें।
बाज़ार का समय
हर रिपोर्ट बाज़ार की स्थिति बताती है: OPEN (लाइव कीमत, अधिकतम 60 सेकंड पुरानी), CLOSED (बंद होने से पहले की आधिकारिक अंतिम कीमत, सबके लिए एक जैसी, बाज़ार बंद रहने तक कभी भी हस्ताक्षरित) या HALTED (ट्रेडिंग रुकी)। getPriceNoOlderThan केवल OPEN कीमतें लौटाता है, इसलिए क्लोज़िंग कीमत कभी लाइव के रूप में नहीं चल सकती। एसेट-समर्थित टोकन को बाज़ार बंद रहते दिए गए ऑर्डर अगली OPEN कीमत पर सेटल करने चाहिए (फ़ॉरवर्ड प्राइसिंग, जैसे फ़ंड और ETF करते हैं)।
सर्किट ब्रेकर
हर फ़ीड की अधिकतम अनुमत छलाँग हो सकती है। बड़ी चाल संग्रहीत नहीं होती: फ़ीड तब तक रुकी रहती है जब तक हम उसे जाँचकर फिर से न खोलें, इसलिए ग़लत या हेरफेर की गई कीमत कभी आपके कॉन्ट्रैक्ट तक नहीं पहुँचती।
फ़ीड
| सिंबल | feedId |
|---|---|
| AUDUSD | 0x5577fa17b1be8ae0f1517fe1864ea534d6992f3721000cdb6585b11e7046d5ec |
| EURGBP | 0xeaff3420d70d388655273db9b4f3000962445a6f0ea23ec1f04d843e4dbae4b0 |
| EURUSD | 0x0730076c3c0f5da594eb635c5d5a22116233bdb2a9c2977279cc348b8b8ce917 |
| GBPUSD | 0xd30842147b60fe333c2700bcae5eee6815b8529847955d19522858806bca8217 |
| IEF | 0x309dab183458dd939568dca0d68bea45d34aa25d31fa47fc5f12030e8f227f4e |
| OILCash# | 0xe21b90a237aa0663c02092eca221a0098c6c477054a61d05ecd3692f6631f6ff |
| SHY | 0x78f1083af8e72ddefc2e66fad95680c38a953b3136f413c61ab40f99b72991bc |
| SPY | 0xcea23e8f56b5ac447ac08d57e0808e35f468a65f29bb659b3d48934481e7c67a |
| TLT | 0x4abd434857e07567d49487ccf888348e55d5cfc15498c09a9dbcba2820e40ee4 |
| USDCAD | 0xa36f6cf3195abb4e93bf276660acee423f78878e6cfdbad0eab36e455afca97e |
| USDCHF | 0xd85af9ebd6fec6b317a7ac07f6d6455c4fc915cc8e1cfe19471faca002582907 |
| USDJPY | 0x3d6c40e9d821c10e442cb3fc6cb1c589ffd8b906e734a1ab3b3f7d213ac395d6 |
| USDSGD | 0x8a1375bd16e33aff9be7037f83e076defe9df6efea6d39a51d0b08f17ac9bc6d |
| XAGUSD | 0x67107df7f0e95594d9bf8ad8840bbb2ff95617123c227e10aab4d161dd6959b6 |
| XAUUSD | 0xe21c86d8b6a127bfef214d88fdb0c279e55d27dd8c443733e46c8d3de3c98cd6 |
नेटवर्क
| नेटवर्क | चेन ID | वेरिफ़ायर कॉन्ट्रैक्ट |
|---|---|---|
| Optimism | 10 | 0xaeF7f701acFB42267015D3F593ce17CF536Afd6B |
| Optimism Sepolia टेस्टनेट | 11155420 | 0xBBf36E7Cd75494f28E02C5698EaD35fF4960a943 |
हस्ताक्षरकर्ता का पता: 0x83fa2d8836525251FAd214A78A72038D0864f877। मशीन-पठनीय सूची: /oracle/feeds।
इंटीग्रेट करें
1. हस्ताक्षरित रिपोर्ट प्राप्त करें
curl -H "Authorization: Bearer $API_KEY" \
"https://api.marketapi.app/v1/oracle/report?symbols=EURUSD&chain_id=10"
हर सिंबल के लिए report (ABI-एन्कोडेड टपल) और signature (65 बाइट) लौटाता है। आपकी कुंजी को read:oracle स्कोप चाहिए।
2. अपने कॉन्ट्रैक्ट में सत्यापित करें
interface IMarketApiOracle {
struct PriceReport { bytes32 feedId; int256 price; uint64 timestamp; uint64 validUntil;
uint8 marketStatus; uint32 spreadBps; }
function submit(PriceReport calldata r, bytes calldata sig) external returns (bool); // verifies, stores if newer
function getPriceNoOlderThan(bytes32 feedId, uint256 maxAge)
external view returns (int256 price, uint64 timestamp); // OPEN and fresh only, else reverts
function getPrice(bytes32 feedId) external view
returns (int256 price, uint64 timestamp, uint8 marketStatus, uint32 spreadBps); // incl. CLOSED
}
contract MyVault {
IMarketApiOracle immutable oracle;
bytes32 constant EURUSD = keccak256("EURUSD");
constructor(IMarketApiOracle o) { oracle = o; }
function act(IMarketApiOracle.PriceReport calldata r, bytes calldata sig) external {
oracle.submit(r, sig); // reverts on a bad signature
(int256 price, ) = oracle.getPriceNoOlderThan(EURUSD, 60); // 8 decimals
// ... use price ...
}
}
Chainlink-शैली के उपभोक्ता MarketApiFeedAdapter (latestRoundData(), AggregatorV3Interface) के ज़रिए फ़ीड पढ़ सकते हैं।
कीमतें
प्रति हस्ताक्षरित रिपोर्ट 5 क्रेडिट, आपके सामान्य API बैलेंस से भुगतान। ऑन-चेन पहले से संग्रहीत कीमतें पढ़ना मुफ़्त है।
हमारी ऑन-चेन प्राइस फ़ीड के उपयोग
- टोकनाइज़्ड एसेट और RWA: बाज़ार के समय को ध्यान में रखने वाले प्राइस डेटा से टोकनाइज़्ड स्टॉक, सोना-समर्थित टोकन और अन्य वास्तविक-दुनिया की संपत्तियों का मूल्य तय करें।
- DeFi उधार और कोलैटरल: फ़ॉरेक्स और कमोडिटी-समर्थित कोलैटरल का मूल्य ताज़ा, सत्यापन-योग्य कीमतों और लिक्विडेशन-सुरक्षित पुरानेपन की जाँच से तय करें।
- सिंथेटिक एसेट और ऑन-चेन FX: सिंथेटिक फ़ॉरेक्स, इंडेक्स और कमोडिटी पोज़िशन हस्ताक्षरित संदर्भ कीमतों पर सेटल करें।
- स्टेबलकॉइन और भुगतान: लाइव EUR/USD, GBP/USD और अन्य फ़ॉरेक्स दरों से ऑन-चेन मुद्राओं में बदलें।
हस्ताक्षरित पुल ओरेकल क्यों?
पुश ओरेकल तय समय पर अपडेट होते हैं और हर अपडेट का गैस कोई चुकाता है। पुल ओरेकल के साथ आपका कॉन्ट्रैक्ट ठीक तभी ताज़ा, क्रिप्टोग्राफ़िक रूप से हस्ताक्षरित कीमत लेता है जब उसे ज़रूरत हो: कम लागत, ताज़ा डेटा और वही ऑन-चेन सत्यापन। बाज़ार की स्थिति, बिड-आस्क स्प्रेड और समाप्ति हर हस्ताक्षरित रिपोर्ट का हिस्सा हैं।
प्राइस ओरेकल FAQ
ब्लॉकचेन प्राइस ओरेकल क्या है?
प्राइस ओरेकल ऑफ़-चेन बाज़ार कीमतें स्मार्ट कॉन्ट्रैक्ट तक लाता है। हमारा ओरेकल हर कीमत को EIP-712 हस्ताक्षर से साइन करता है; आपका कॉन्ट्रैक्ट उपयोग से पहले ecrecover से उसे ऑन-चेन सत्यापित करता है, इसलिए रास्ते में कीमत जाली नहीं हो सकती।
प्राइस फ़ीड किन एसेट को कवर करती हैं?
EUR/USD जैसी फ़ॉरेक्स जोड़ियाँ, सोना (XAU/USD) और चाँदी जैसी कीमती धातुएँ, स्टॉक इंडेक्स और अलग-अलग स्टॉक, जैसा इस पेज की फ़ीड सूची में प्रकाशित है। हर फ़ीड का एक निश्चित feedId है (सिंबल का keccak256)।
क्या यह RWA और टोकनाइज़्ड एसेट के लिए उपयुक्त है?
हाँ। रिपोर्ट में बाज़ार की स्थिति (खुला, बंद, रुका) होती है, इसलिए टोकनाइज़्ड स्टॉक, कमोडिटी और अन्य वास्तविक-दुनिया की संपत्तियाँ बाज़ार समय के बाहर पुरानी कीमत पर ट्रेड करने के बजाय फ़ॉरवर्ड प्राइसिंग लागू कर सकती हैं।
क्या ओरेकल Chainlink-संगत है?
हर फ़ीड को ऐसे एडैप्टर से पढ़ा जा सकता है जो Chainlink AggregatorV3Interface (latestRoundData) लागू करता है, इसलिए Chainlink-शैली की प्राइस फ़ीड पढ़ने वाला मौजूदा DeFi कोड न्यूनतम बदलाव से काम करता है।
हेरफेर कैसे रोका जाता है?
रिपोर्ट लगभग एक मिनट में समाप्त होती हैं और संग्रहीत कीमत से नई होनी चाहिए, हर फ़ीड का सर्किट ब्रेकर असामान्य छलाँग के बाद फ़ीड रोक देता है, और कई ब्रोकर होने पर कीमत स्वतंत्र स्रोतों का माध्यिका होती है, असामान्य मान हटाकर।
गैस शुल्क कौन देता है?
यह एक पुल ओरेकल है: आपका एप्लिकेशन अपने ट्रांज़ैक्शन में हस्ताक्षरित रिपोर्ट सबमिट करता है और वह गैस चुकाता है। हमारा रिलेयर माँग वाली फ़ीड को भी समय-समय पर ऑन-चेन संग्रहीत करता है; संग्रहीत कीमतें पढ़ना मुफ़्त है, पर उपयोग से पहले उनकी उम्र जाँचें।
कौन-से ब्लॉकचेन समर्थित हैं?
कोई भी EVM चेन जहाँ वेरिफ़ायर कॉन्ट्रैक्ट तैनात हो, जैसे Ethereum, Base, Arbitrum, Optimism, BNB Smart Chain और Polygon तथा उनके टेस्टनेट; वर्तमान सूची ऊपर दिखाई गई है।
सुझाया गया: पुल पैटर्न (हमेशा ताज़ा कीमतें)
ऑन-चेन पहले से संग्रहीत कीमत पर निर्भर न रहें। ताज़ा हस्ताक्षरित रिपोर्ट लें और उसे उसी ट्रांज़ैक्शन में सबमिट करें जो उसका उपयोग करता है: आपका कॉन्ट्रैक्ट हमेशा मौजूदा कीमत देखता है, और आप केवल अपने अपडेट के लिए भुगतान करते हैं।
// 1) off-chain: GET https://api.marketapi.app/v1/oracle/report?symbols=EURUSD&chain_id=CHAIN_ID (header: Authorization: Bearer KEY)
// 2) on-chain: verify, store and use the report atomically
interface IMarketApiOracle {
struct PriceReport { bytes32 feedId; int256 price; uint64 timestamp; uint64 validUntil; uint8 marketStatus; uint32 spreadBps; }
function submit(PriceReport calldata r, bytes calldata sig) external returns (bool);
function getPriceNoOlderThan(bytes32 feedId, uint256 maxAge) external view returns (int256 price, uint64 timestamp);
}
contract MyVault {
IMarketApiOracle immutable oracle;
bytes32 constant EURUSD = keccak256("EURUSD");
constructor(IMarketApiOracle o) { oracle = o; }
function settle(IMarketApiOracle.PriceReport calldata r, bytes calldata sig) external {
oracle.submit(r, sig); // ignored if an equal/newer price is stored
(int256 price, ) = oracle.getPriceNoOlderThan(EURUSD, 60); // reverts unless OPEN and fresh
// ... use price (8 decimals)
}
}
API से मिली रिपोर्ट के report और signature फ़ील्ड ठीक submit के दो आर्ग्युमेंट हैं। रिपोर्ट लगभग एक मिनट मान्य रहती हैं, इसलिए ट्रांज़ैक्शन भेजने से ठीक पहले उन्हें लें।
जोखिम सूचना। कीमतें हमारे स्रोत से सांकेतिक बाज़ार डेटा हैं, कोई निष्पादन स्थल नहीं। किसी भी ओरेकल के आधार पर फ़ंड हिलाने वाले स्मार्ट कॉन्ट्रैक्ट को ताज़गी जाँचनी चाहिए, छूटे अपडेट संभालने चाहिए और ग़लत कीमत के असर को सीमित करना चाहिए। प्रोडक्शन में ओरेकल पर निर्भर होने से पहले शर्तें पढ़ें।