ایران اکسچنج

اوراکل بلاکچین چیست؟ انواع Oracle، نحوه کار و ریسک‌ها

اوراکل بلاکچین چیست؟ انواع Oracle، نحوه کار و ریسک‌ها

زهرا حقی
زمان تقریبی مطالعه: 15 دقیقه
فهرست عناوین

قراردادهای هوشمند برای اینکه همه 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 را مصرف می‌کند، مقاله قرارداد هوشمند چیست؟ را مطالعه کنید.

اوراکل ارز دیجیتال

تفاوت Oracle و API چیست؟

API فقط Interface دسترسی به Data یا Service است. Oracle علاوه بر دریافت داده از API یا Source دیگر، مسئله انتقال آن به محیط Blockchain، Authentication، Aggregation، Freshness و Trust Model را نیز حل می‌کند.

ویژگیAPIBlockchain Oracle
محیط اصلیOffchainپل Offchain ↔ Onchain
وظیفهارائه Data/Serviceدریافت، Verify/Aggregate و Delivery برای Contract
Trust Modelاعتماد به Providerاز Provider منفرد تا چند Source/Operator
Onchain deliveryبه‌طور پیش‌فرض نداردجزء اصلی معماری Oracle است

Oracle چگونه کار می‌کند؟

یک Data Oracle معمولاً چنین مسیر مفهومی‌ای دارد:

  1. Data Source: داده در Exchange، API، Sensor، Database یا سیستم خارجی تولید می‌شود.
  2. Observation: Oracle Node یا Data Provider مقدار را دریافت می‌کند.
  3. Verification: Signature، Source Authentication یا Ruleهای اعتبارسنجی بررسی می‌شوند.
  4. Aggregation: در مدل چندمنبعی، چند Report به یک مقدار Aggregate تبدیل می‌شوند.
  5. Delivery: مقدار یا Proof به Contract/Feed Onchain منتقل می‌شود.
  6. Consumption: Smart Contract داده را همراه با Ruleهای Freshness و Validation خودش مصرف می‌کند.

همه Oracleها دقیقاً این مراحل را به یک شکل انجام نمی‌دهند؛ بعضی Data را Push می‌کنند، بعضی فقط هنگام Request Update می‌شوند و بعضی Computation یا Randomness را به‌جای Data Feed تحویل می‌دهند.

Oracle Problem چیست؟

Blockchain می‌تواند درستی اجرای Code Onchain را Verify کند، اما به‌طور ذاتی نمی‌داند یک Fact خارج از Chain واقعاً درست است یا نه. اگر Oracle قیمت غلطی ارسال کند، Consensus Blockchain نمی‌تواند صرفاً با نگاه به Blockها تشخیص دهد «قیمت واقعی بازار» چیز دیگری بوده است.

Oracle Problem چند لایه دارد:

  • Source correctness: آیا Source اصلی داده صحیح است؟
  • Transport integrity: آیا Data بین Source و Chain تغییر کرده است؟
  • Oracle operator risk: آیا Node/Operator می‌تواند Report را دستکاری کند؟
  • Availability: اگر Oracle متوقف شود Contract چه می‌کند؟
  • Freshness: آیا Data به‌روز است یا مقدار قدیمی مصرف می‌شود؟
  • Aggregation risk: Outlier و اختلاف Sourceها چگونه مدیریت می‌شوند؟
  • Economic manipulation: آیا هزینه Manipulation از ارزشی که Contract کنترل می‌کند کمتر است؟

بنابراین «غیرمتمرکز بودن Oracle» به‌تنهایی کافی نیست؛ ممکن است چند Oracle Node همگی داده را از یک Source واحد بخوانند و همچنان Single Source Risk باقی بماند.

انواع Oracle در بلاکچین

بهتر است Oracle را به‌جای یک فهرست ثابت، در چند محور مستقل دسته‌بندی کنیم.

Input Oracle

داده خارج از Chain را وارد Smart Contract می‌کند؛ مانند قیمت دارایی، نرخ بهره یا نتیجه رویداد.

Output Oracle

رویداد Onchain را به یک سیستم خارجی منتقل می‌کند؛ برای مثال ثبت وضعیت Blockchain در یک Backend یا Trigger کردن Device خارجی.

Computational Oracle

محاسبه‌ای را خارج از Chain انجام می‌دهد و Result یا Proof را به Contract می‌دهد؛ Randomness قابل Verify نمونه‌ای از این مدل است.

Software Oracle

Data را از API، Database، Exchange یا سیستم نرم‌افزاری دریافت می‌کند.

Hardware / IoT Oracle

داده دنیای فیزیکی را از Sensor، RFID، GPS یا Device دیگر وارد سیستم می‌کند. در اینجا امنیت Sensor و اتصال دنیای واقعی به Identity موردنظر بخشی از Trust Model است.

Centralized Oracle

یک Provider یا Operator مرجع اصلی داده است. این مدل ساده‌تر و کم‌Latency‌تر می‌تواند باشد، ولی Single Point of Failure/Manipulation ایجاد می‌کند.

Decentralized Oracle Network

چند Node و/یا چند Data Source Report ارائه می‌کنند و خروجی Aggregate می‌شود. هدف کاهش وابستگی به یک Provider واحد است، نه حذف کامل Trust.

Push و Pull Oracle

در مدل Push، Feed طبق Ruleهای Update به Chain ارسال می‌شود. در Pull، Consumer/Updater در زمان نیاز Data مناسب را برای استفاده Onchain ارائه می‌کند. هر مدل Trade-off متفاوتی در Latency، Cost و Freshness دارد.

آیا انسان می‌تواند Oracle باشد؟

بله، در بعضی 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 را زیاد می‌کند.

Data Feed چگونه به‌روز می‌شود؟

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 نیز بررسی شوند.

Price Oracle در DeFi چه کاری انجام می‌دهد؟

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 ارزیابی شود.

چرا Oracle Price فقط «یک عدد» نیست؟

بازار واقعی در یک لحظه Price واحد مطلق ندارد؛ Exchangeها و Venueهای مختلف Bid/Ask و Liquidity متفاوت دارند. یک Oracle طراحی‌شده برای Market Data باید این عدم قطعیت را در نظر بگیرد.

برای نمونه، مستند Pyth علاوه بر Aggregate Price، Confidence Interval را نیز منتشر می‌کند تا پراکندگی و عدم قطعیت مشاهده قیمت بین Publisherها قابل اندازه‌گیری باشد. توضیح Price و Confidence Interval در Pyth

نکته آموزشی مهم این است که Consumer Contract باید بداند Data چه زمانی تولید شده، از چند Source آمده و چه میزان عدم قطعیت دارد؛ نه اینکه فقط آخرین عدد را بدون کنترل مصرف کند.

First-party Oracle و Third-party Oracle چه تفاوتی دارند؟

در بعضی معماری‌ها، خود 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

چرا Smart Contract برای Randomness هم به Oracle نیاز دارد؟

تولید Randomness امن در یک محیط Deterministic دشوار است. استفاده ساده از Timestamp یا Block Data می‌تواند قابل پیش‌بینی یا Manipulate باشد.

یک Verifiable Random Function می‌تواند Random Value را همراه با Proof رمزنگاری‌شده تولید کند تا Contract قبل از استفاده، صحت Proof را Onchain بررسی کند.

Chainlink VRF نمونه‌ای از این معماری است و Randomness را همراه با Proof قابل Verify ارائه می‌کند. مستند Chainlink VRF

Oracleها چه کاربردهایی دارند؟

  • DeFi: Price Feed، نرخ بهره، Collateral Valuation و Liquidation.
  • Stablecoin: بررسی قیمت مرجع یا Assetهای وثیقه‌ای.
  • Insurance: داده آب‌وهوا، Delay یا Event خارجی در صورت طراحی مناسب.
  • Prediction Market: تعیین Outcome رویداد خارج از Chain.
  • Gaming: Randomness قابل Verify یا نتیجه Event خارجی.
  • Tokenized Assets: قیمت، NAV، نرخ بهره یا Attestationهای لازم.
  • Automation: Trigger کردن Function براساس Condition/Time/Event.
  • IoT: انتقال Sensor Data به Contract یا ارسال Output Onchain به Device.

Oracle برای همه DAppها ضروری نیست؛ Applicationی که فقط از State Onchain استفاده می‌کند ممکن است هیچ Oracle خارجی لازم نداشته باشد.

برای معماری کامل Frontend، Wallet و Smart Contract در یک Application غیرمتمرکز، مقاله DApp چیست؟ را بخوانید.

ریسک‌های Oracle چیست؟

  • Single-source risk: همه Reportها از یک Source اصلی بیایند.
  • Operator compromise: Key یا Infrastructure Oracle Node compromise شود.
  • Stale data: Contract داده قدیمی را معتبر فرض کند.
  • Market manipulation: Source Market کم‌عمق دستکاری شود.
  • Latency: قیمت بازار سریع‌تر از Feed تغییر کند.
  • Aggregation failure: Method تجمیع در شرایط Extreme Market رفتار نامناسب داشته باشد.
  • Availability / DoS: Feed Update متوقف شود.
  • Governance risk: Feed Address، Operator Set یا Parameters توسط Authority قابل تغییر باشد.
  • Cross-chain dependency: Bridge یا Messaging Layer ریسک مستقل اضافه کند.

نتیجه مهم این است که «Oracle غیرمتمرکز» معادل «Oracle بدون ریسک» نیست. Decentralization فقط بخشی از مدل امنیتی است.

Smart Contract چگونه ریسک Oracle را کاهش می‌دهد؟

  1. Freshness check: Timestamp آخرین Update کنترل شود.
  2. Range / sanity check: مقادیر غیرممکن یا Outlier رد شوند.
  3. Circuit breaker: در حرکت شدید بازار بعضی Functionها Pause یا محدود شوند.
  4. Multiple-source design: وابستگی به یک Market یا Provider کاهش یابد.
  5. Fallback: رفتار Contract در صورت توقف Oracle از قبل تعریف شود.
  6. Sequencer check در L2: در Use Caseهای حساس، وضعیت Sequencer نیز در نظر گرفته شود.
  7. Upgrade monitoring: تغییر Feed Address یا Oracle Config کنترل شود.

این کنترل‌ها Oracle Problem را حذف نمی‌کنند؛ فقط Blast Radius خطا یا Manipulation را کاهش می‌دهند.

به‌جای «بهترین Oracle»، چه معیارهایی را مقایسه کنیم؟

معیارسؤال کلیدی
Data sourcesچند Source مستقل وجود دارد و Sourceها چه کیفیت/Liquidity دارند؟
Oracle operatorsچند Operator Report را جمع‌آوری یا منتشر می‌کنند؟
AggregationMedian، weighted aggregate یا مدل دیگری استفاده می‌شود؟
FreshnessHeartbeat/Deviation/On-demand Update چگونه تعریف شده است؟
LatencyData با چه تاخیری به Consumer می‌رسد؟
Proof / signaturesSource یا Reporter چه چیزی را امضا می‌کند و چه چیزی Onchain Verify می‌شود؟
Governanceچه کسی Feed، Operator Set یا Contract را Upgrade می‌کند؟
Failure modeاگر Update متوقف شود Contract چه رفتاری دارد؟
Economic securityارزش تحت کنترل Contract در مقایسه با هزینه Manipulation چقدر است؟
  • Prediction market می‌تواند Oracle مصرف کند یا Mechanism حل اختلاف داشته باشد، اما صرفاً به این دلیل Oracle Network نیست.
  • Wrapped asset ممکن است از Attestation یا Oracle استفاده کند، اما خودش Oracle Protocol محسوب نمی‌شود.
  • Smart-contract platform می‌تواند Oracle integration داشته باشد، اما دسته محصول آن Oracle نیست.

جمع‌بندی؛ Oracle مسئله Data را حل می‌کند، اما Trust را حذف نمی‌کند

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 کنترل می‌کند ارزیابی شوند.

مقالات مرتبط

سوالات متداول

Oracle چیست؟

سیستمی برای واردکردن Data یا Computation خارج از Chain به Smart Contract یا ارسال رویداد Onchain به سیستم خارجی است.

چرا Smart Contract مستقیم API را صدا نمی‌زند؟

چون Nodeها باید Execution Deterministic داشته باشند. پاسخ API خارجی می‌تواند بین Nodeها یا زمان‌های مختلف متفاوت باشد و Consensus را بشکند.

Oracle Problem چیست؟

مشکل اعتماد به صحت، Freshness، Availability و Integrity داده‌ای است که از دنیای خارج وارد Contract می‌شود.

آیا Oracle غیرمتمرکز کاملاً امن است؟

خیر. Source، Operator، Aggregation، Governance، Market Manipulation و Staleness همچنان می‌توانند ریسک ایجاد کنند.

Oracle و API چه تفاوتی دارند؟

API Data یا Service می‌دهد؛ Oracle علاوه بر Data Access، Delivery و Trust/Verification Model لازم برای مصرف Onchain را مدیریت می‌کند.

آیا همه DAppها Oracle لازم دارند؟

خیر. فقط Applicationهایی که به Data، Computation یا Event خارج از State Onchain نیاز دارند Oracle خارجی لازم دارند.

Price Oracle هر چند وقت یک‌بار Update می‌شود؟

پاسخ به Feed بستگی دارد. ممکن است با Heartbeat، Deviation Threshold، Request یا Push/Pull Mechanism Update شود؛ بنابراین Frequency ثابت عمومی وجود ندارد.