Chainlink price oracles ऐसे smart contracts हैं जिनमें public view functions होते हैं जो USD में दर्शाए गए किसी विशेष एसेट की कीमत वापस (return) करते हैं।
Off-chain nodes विभिन्न स्रोतों जैसे एक्सचेंजों से कीमतें एकत्र करते हैं और कीमत के डेटा को smart contract में लिखते हैं।
ETH / USD की कीमत प्राप्त करने के लिए smart contract यहाँ दिया गया है: https://etherscan.io/address/0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419/advanced#readContract
जब हम latestAnswer() function को कॉल करते हैं, तो हमें Ether की कीमत मिलती है। जब हम decimals() को क्वेरी करते हैं, तो हमें उत्तर को समझने के लिए दशमलवों (decimals) की संख्या मिलती है।

इसलिए, oracle के अनुसार Ether की वर्तमान कीमत $2053.05552675 है (यह लिखते समय सत्य है)।
यदि आप केवल यह समझना चाहते हैं कि Chainlink oracles कैसे काम करते हैं, तो आप यहाँ रुक सकते हैं — एक price oracle बस इतना ही होता है!
यदि आप उन्हें किसी प्रोजेक्ट में उपयोग करने की योजना बना रहे हैं, तो इसके बाद महत्वपूर्ण इम्प्लीमेंटेशन विवरण दिए गए हैं।
हम ETH / USD का उपयोग एक चालू उदाहरण के रूप में करेंगे, लेकिन Chainlink कई अन्य एसेट की कीमतों को सपोर्ट करता है।
latestAnswer() का उपयोग अनुशंसित नहीं है — इसके बजाय latestRoundData() का उपयोग करें
यह function latestAnswer() हमें यह नहीं बताता कि कीमत पिछली बार कब अपडेट हुई थी। यदि कीमत अपडेट होने में देरी होती है, तो smart contract पुरानी कीमतों के आधार पर निर्णय ले सकता है।
नीचे दिए गए हरे बॉक्स में, हम वही कीमत देखते हैं जो हमें latestAnswer() से मिली थी और नीले बॉक्स में हम देखते हैं कि इसे आखिरी बार Unix timestamp के रूप में कब अपडेट किया गया था।

Smart contracts एक ऐसी सीमा (threshold) सेट करना चाह सकते हैं जिससे वे एक वैकल्पिक (alternative) oracle का उपयोग करें या महत्वपूर्ण निर्णयों को तब तक निलंबित कर दें जब तक कि updatedAt फ़ील्ड पर्याप्त रूप से हाल का (recent) न हो जाए।
Price Aggregation
कीमतें प्राप्त करने के लिए किसी एक नोड या डेटा स्रोत पर निर्भर रहना असुरक्षित होगा, इसलिए Chainlink price feeds में कई whitelisted nodes होते हैं जो कीमतें प्रदान करते हैं।
ETH / USD price feed के सप्लायर्स का स्क्रीनशॉट नीचे दिया गया है।
किसी दिए गए समय में उनके द्वारा प्रदान की जाने वाली कीमतों की रेंज (range) को रिपोर्ट की गई कीमत में छोटे बदलाव के रूप में देखा जा सकता है। ध्यान दें कि कीमत का “सेंट्स (cents)” हिस्सा 26 सेंट (सबसे ऊपरी पंक्ति) से लेकर 73 सेंट (सबसे निचली पंक्ति) तक भिन्न होता है।

transmit()
Off-chain कीमतें transmit function के माध्यम से smart contract इकोसिस्टम में प्रवेश करती हैं। यह function नोड्स से (sorted) कीमतों की एक सूची और हस्ताक्षरों (signatures) की एक सूची लेता है। oracle पर रिपोर्ट की गई कीमत इन कीमतों की माध्यिका (median) होती है। नीचे हम Etherscan से कोड की संबंधित पंक्ति दिखाते हैं।

Smart contract आर्किटेक्चर
पाठक ने शायद ध्यान दिया होगा कि latestRoundData() function उसी कॉन्ट्रैक्ट में नहीं है जिसमें transmit() है। यहाँ तीन smart contracts काम कर रहे हैं:
कीमत अपडेट ट्रांजैक्शन
एक प्राइस अपडेट (price update) के दौरान, नोड्स के हस्ताक्षर और कीमतों को एक साथ बैच (batch) किया जाता है और aggregator contract में transmit() को भेजा जाता है। aggregator contract फिर validator contract में validate function को कॉल करता है। वहाँ मौजूद नियमों के अधीन, प्राइस अपडेट को अस्वीकार (reject) भी किया जा सकता है। ऐसे ट्रांजैक्शन का tenderly trace नीचे स्क्रीनशॉट में दिया गया है। पर्पल कॉल कोड्स क्रॉस कॉन्ट्रैक्ट कॉल्स (cross contract calls) दिखाते हैं।

कीमत देखना

price oracles को पढ़ने की गैस एफिशिएंसी (gas efficiency) में सुधार करना
चूँकि कीमत देखने में एक cross-contract call शामिल होता है, इसलिए यह अनुशंसा की जाती है कि एक access list transaction का उपयोग करके aggregator call को “pre-warming” करके 200 गैस (gas) की बचत की जाए। इस repo में Chainlink price oracle के साथ access list का उपयोग करने का एक उदाहरण देखें।
कीमत अपडेट होने की आवृत्ति
हर मिनट ब्लॉकचेन पर state-updating ट्रांजैक्शन भेजते रहना व्यावहारिक नहीं है। इसलिए, Chainlink दो परिस्थितियों में कीमत को अपडेट करता है:
- जब “हार्टबीट (heartbeat)” का समय बीत जाता है (ETH / USD के लिए यह एक घंटा है)
- यदि कीमत 0.5% से अधिक बदलती है
नीचे chainlink ETH / USD डैशबोर्ड के स्क्रीनशॉट में इन मापदंडों (parameters) को हाईलाइट किया गया है

सुरक्षा संबंधी विचार
गलत तरीके से Chainlink oracles का उपयोग करने से उत्पन्न होने वाले smart contract security के मुद्दों के बारे में बहुत कुछ लिखा गया है, इसलिए हम इसे यहाँ नहीं दोहराएंगे। हम पाठकों को Dacian के एक article का संदर्भ देते हैं जो उन संभावित समस्याओं को सूचीबद्ध करता है।
RareSkills के साथ और जानें
गहरे स्तर पर smart contract डेवलपमेंट सीखने के लिए कृपया हमारा solidity bootcamp देखें।
मूल रूप से 11 जनवरी, 2024 को प्रकाशित