Oracle چیست؟
Oracle چیست؟
سیستمی برای واردکردن Data یا Computation خارج از Chain به Smart Contract یا ارسال رویداد Onchain به سیستم خارجی است.
قراردادهای هوشمند برای اینکه همه Nodeها به نتیجه یکسان برسند، باید اجرای Deterministic داشته باشند. به همین دلیل یک Smart Contract نمیتواند هنگام اجرا بهصورت مستقیم از هر Website یا API خارجی داده بخواند؛ چون پاسخ منبع خارجی ممکن است در زمانها یا Nodeهای مختلف متفاوت باشد.
Blockchain Oracle سازوکاری است که داده یا محاسبه خارج از زنجیره را به شکلی قابل استفاده برای Smart Contract وارد میکند؛ یا در جهت عکس، رویداد Onchain را برای یک سیستم خارجی قابل استفاده میسازد.
Oracle قابلیت Smart Contract را افزایش میدهد، اما همزمان یک مسئله امنیتی جدید میسازد: اگر Contract کاملاً درست نوشته شده باشد ولی داده Oracle غلط، قدیمی یا دستکاریشده باشد، Contract میتواند همان داده غلط را بدون خطای نرمافزاری اجرا کند.
Oracle یک سیستم واسط برای دریافت، بررسی، پردازش و انتقال داده میان محیط Onchain و Offchain است. Oracle میتواند قیمت بازار، نتیجه یک رویداد، داده آبوهوا، نرخ بهره، اثبات ذخایر، Randomness قابل Verify یا نتیجه یک محاسبه خارج از زنجیره را برای Contract فراهم کند.
Ethereum.org نیز Oracle را Applicationی تعریف میکند که اطلاعات خارجی را Source، Verify و به Smart Contract منتقل میکند. بدون Oracle، Contract به دادهای که از قبل Onchain است محدود میماند. مستند رسمی Oracle در Ethereum.org
برای درک اینکه Contract چگونه این Data را مصرف میکند، مقاله قرارداد هوشمند چیست؟ را مطالعه کنید.

API فقط Interface دسترسی به Data یا Service است. Oracle علاوه بر دریافت داده از API یا Source دیگر، مسئله انتقال آن به محیط Blockchain، Authentication، Aggregation، Freshness و Trust Model را نیز حل میکند.
| ویژگی | API | Blockchain Oracle |
|---|---|---|
| محیط اصلی | Offchain | پل Offchain ↔ Onchain |
| وظیفه | ارائه Data/Service | دریافت، Verify/Aggregate و Delivery برای Contract |
| Trust Model | اعتماد به Provider | از Provider منفرد تا چند Source/Operator |
| Onchain delivery | بهطور پیشفرض ندارد | جزء اصلی معماری Oracle است |
یک Data Oracle معمولاً چنین مسیر مفهومیای دارد:
همه Oracleها دقیقاً این مراحل را به یک شکل انجام نمیدهند؛ بعضی Data را Push میکنند، بعضی فقط هنگام Request Update میشوند و بعضی Computation یا Randomness را بهجای Data Feed تحویل میدهند.

Blockchain میتواند درستی اجرای Code Onchain را Verify کند، اما بهطور ذاتی نمیداند یک Fact خارج از Chain واقعاً درست است یا نه. اگر Oracle قیمت غلطی ارسال کند، Consensus Blockchain نمیتواند صرفاً با نگاه به Blockها تشخیص دهد «قیمت واقعی بازار» چیز دیگری بوده است.
Oracle Problem چند لایه دارد:
بنابراین «غیرمتمرکز بودن Oracle» بهتنهایی کافی نیست؛ ممکن است چند Oracle Node همگی داده را از یک Source واحد بخوانند و همچنان Single Source Risk باقی بماند.
بهتر است Oracle را بهجای یک فهرست ثابت، در چند محور مستقل دستهبندی کنیم.
داده خارج از Chain را وارد Smart Contract میکند؛ مانند قیمت دارایی، نرخ بهره یا نتیجه رویداد.
رویداد Onchain را به یک سیستم خارجی منتقل میکند؛ برای مثال ثبت وضعیت Blockchain در یک Backend یا Trigger کردن Device خارجی.
محاسبهای را خارج از Chain انجام میدهد و Result یا Proof را به Contract میدهد؛ Randomness قابل Verify نمونهای از این مدل است.
Data را از API، Database، Exchange یا سیستم نرمافزاری دریافت میکند.
داده دنیای فیزیکی را از Sensor، RFID، GPS یا Device دیگر وارد سیستم میکند. در اینجا امنیت Sensor و اتصال دنیای واقعی به Identity موردنظر بخشی از Trust Model است.
یک Provider یا Operator مرجع اصلی داده است. این مدل سادهتر و کمLatencyتر میتواند باشد، ولی Single Point of Failure/Manipulation ایجاد میکند.
چند Node و/یا چند Data Source Report ارائه میکنند و خروجی Aggregate میشود. هدف کاهش وابستگی به یک Provider واحد است، نه حذف کامل Trust.
در مدل Push، Feed طبق Ruleهای Update به Chain ارسال میشود. در Pull، Consumer/Updater در زمان نیاز Data مناسب را برای استفاده Onchain ارائه میکند. هر مدل Trade-off متفاوتی در Latency، Cost و Freshness دارد.

بله، در بعضی Use Caseها Reporter انسانی یا مجموعهای از Resolverها میتوانند درباره نتیجه یک رویداد Report امضاشده ارائه کنند. اما این مدل به معنی «تبدیل دانش انسان به Smart Contract» نیست.
امنیت آن به Identity، Reputation، Incentive، Dispute Mechanism و تعداد Reporterها بستگی دارد. برای دادهای که Machine-verifiable نیست، مانند برخی Event Outcomeها، Human/Optimistic Oracle میتواند مناسب باشد.
اصطلاح «Contract-specific Oracle» نیز بهتر است بهعنوان Oracle اختصاصی یک Application توضیح داده شود، نه یک کلاس امنیتی مستقل؛ اختصاصیبودن معمولاً Reuse را کم و Maintenance Cost را زیاد میکند.
Oracle Feed الزاماً با هر Block Update نمیشود. بسیاری از Feedها Ruleهایی مثل Deviation Threshold یا Heartbeat دارند: اگر قیمت بهاندازه مشخصی تغییر کند یا زمان مشخصی از Update قبلی بگذرد، Round جدید ایجاد میشود.
مستند Chainlink نیز Data Feedها را شبکهای از Oracle Operatorها معرفی میکند که Reportها را Aggregate میکنند و Update میتواند با Deviation یا Heartbeat Trigger شود. معماری Data Feed غیرمتمرکز در Chainlink
برای Consumer فقط خواندن «آخرین قیمت» کافی نیست؛ باید Timestamp، Staleness، Network State و شرایط Emergency نیز بررسی شوند.
Lending، Derivative و Liquidation Contractها برای ارزشگذاری Collateral به قیمت بازار نیاز دارند. اگر Price Feed اشتباه یا قدیمی باشد، Contract ممکن است Liquidation اشتباه انجام دهد یا اجازه Borrow بیش از حد بدهد.
Price Oracle نباید صرفاً قیمت یک Market کمعمق را بدون Validation به Protocol بدهد. Source diversity، Market depth، Aggregation، Update latency و Circuit Breaker اهمیت دارند.
برای مشاهده قیمتهای بازار از منظر کاربر، صفحه قیمت ارزهای دیجیتال مرجع جداگانهای است؛ اما Data Feed داخل Smart Contract باید براساس Oracle Architecture خود Protocol ارزیابی شود.
بازار واقعی در یک لحظه Price واحد مطلق ندارد؛ Exchangeها و Venueهای مختلف Bid/Ask و Liquidity متفاوت دارند. یک Oracle طراحیشده برای Market Data باید این عدم قطعیت را در نظر بگیرد.
برای نمونه، مستند Pyth علاوه بر Aggregate Price، Confidence Interval را نیز منتشر میکند تا پراکندگی و عدم قطعیت مشاهده قیمت بین Publisherها قابل اندازهگیری باشد. توضیح Price و Confidence Interval در Pyth
نکته آموزشی مهم این است که Consumer Contract باید بداند Data چه زمانی تولید شده، از چند Source آمده و چه میزان عدم قطعیت دارد؛ نه اینکه فقط آخرین عدد را بدون کنترل مصرف کند.
در بعضی معماریها، خود Data Provider مقدار را با Key خودش Sign میکند و داده امضاشده برای مصرف Onchain منتشر میشود. این الگو معمولاً First-party Oracle نامیده میشود.
در مدل Third-party، Oracle Operator داده را از Sourceهای دیگر دریافت، پردازش و سپس Report میکند. هر دو مدل میتوانند چندمنبعی یا Aggregate باشند؛ تفاوت اصلی در زنجیره اعتماد بین Source و Consumer است.
مستند API3 نمونهای از معماری First-party است که Data Provider مقدار را امضا میکند و Feedهای چندمنبعی میتوانند از چند Report امضاشده Aggregate شوند. معماری Data Feed در API3
تولید Randomness امن در یک محیط Deterministic دشوار است. استفاده ساده از Timestamp یا Block Data میتواند قابل پیشبینی یا Manipulate باشد.
یک Verifiable Random Function میتواند Random Value را همراه با Proof رمزنگاریشده تولید کند تا Contract قبل از استفاده، صحت Proof را Onchain بررسی کند.
Chainlink VRF نمونهای از این معماری است و Randomness را همراه با Proof قابل Verify ارائه میکند. مستند Chainlink VRF
Oracle برای همه DAppها ضروری نیست؛ Applicationی که فقط از State Onchain استفاده میکند ممکن است هیچ Oracle خارجی لازم نداشته باشد.
برای معماری کامل Frontend، Wallet و Smart Contract در یک Application غیرمتمرکز، مقاله DApp چیست؟ را بخوانید.
نتیجه مهم این است که «Oracle غیرمتمرکز» معادل «Oracle بدون ریسک» نیست. Decentralization فقط بخشی از مدل امنیتی است.
این کنترلها Oracle Problem را حذف نمیکنند؛ فقط Blast Radius خطا یا Manipulation را کاهش میدهند.
| معیار | سؤال کلیدی |
|---|---|
| Data sources | چند Source مستقل وجود دارد و Sourceها چه کیفیت/Liquidity دارند؟ |
| Oracle operators | چند Operator Report را جمعآوری یا منتشر میکنند؟ |
| Aggregation | Median، weighted aggregate یا مدل دیگری استفاده میشود؟ |
| Freshness | Heartbeat/Deviation/On-demand Update چگونه تعریف شده است؟ |
| Latency | Data با چه تاخیری به Consumer میرسد؟ |
| Proof / signatures | Source یا Reporter چه چیزی را امضا میکند و چه چیزی Onchain Verify میشود؟ |
| Governance | چه کسی Feed، Operator Set یا Contract را Upgrade میکند؟ |
| Failure mode | اگر Update متوقف شود Contract چه رفتاری دارد؟ |
| Economic security | ارزش تحت کنترل Contract در مقایسه با هزینه Manipulation چقدر است؟ |
Oracle به Smart Contract اجازه میدهد از Price، Event، Sensor، Randomness یا Computation خارج از Blockchain استفاده کند. همین قابلیت بسیاری از Use Caseهای DeFi، Insurance، Gaming و Tokenized Assets را ممکن میکند.
اما Oracle فقط «پل داده» نیست؛ خودش بخشی از Security Model برنامه است. کیفیت Source، تعداد Operatorها، Aggregation، Freshness، Governance و Failure Mode باید متناسب با ارزشی که Contract کنترل میکند ارزیابی شوند.
سیستمی برای واردکردن Data یا Computation خارج از Chain به Smart Contract یا ارسال رویداد Onchain به سیستم خارجی است.
چون Nodeها باید Execution Deterministic داشته باشند. پاسخ API خارجی میتواند بین Nodeها یا زمانهای مختلف متفاوت باشد و Consensus را بشکند.
مشکل اعتماد به صحت، Freshness، Availability و Integrity دادهای است که از دنیای خارج وارد Contract میشود.
خیر. Source، Operator، Aggregation، Governance، Market Manipulation و Staleness همچنان میتوانند ریسک ایجاد کنند.
API Data یا Service میدهد؛ Oracle علاوه بر Data Access، Delivery و Trust/Verification Model لازم برای مصرف Onchain را مدیریت میکند.
خیر. فقط Applicationهایی که به Data، Computation یا Event خارج از State Onchain نیاز دارند Oracle خارجی لازم دارند.
پاسخ به Feed بستگی دارد. ممکن است با Heartbeat، Deviation Threshold، Request یا Push/Pull Mechanism Update شود؛ بنابراین Frequency ثابت عمومی وجود ندارد.