خدمات أوراكل
آخر تحديث للصفحة: 26 فبراير 2026
خدمات أوراكل هي تطبيقات تنتج خلاصات بيانات تجعل مصادر البيانات خارج السلسلة متاحة على البلوك تشين للعقود الذكية. هذا ضروري لأن العقود الذكية القائمة على إيثريوم لا يمكنها، افتراضيًا، الوصول إلى المعلومات المخزنة خارج شبكة البلوك تشين.
إن منح العقود الذكية القدرة على التنفيذ باستخدام بيانات خارج السلسلة يوسع من فائدة وقيمة التطبيقات اللامركزية. على سبيل المثال، تعتمد أسواق التنبؤ على السلسلة على خدمات أوراكل لتوفير معلومات حول النتائج التي تستخدمها للتحقق من تنبؤات المستخدمين. لنفترض أن أليس راهنت بـ 20 ETH على من سيصبح الرئيس الأمريكي القادم. في هذه الحالة، يحتاج التطبيق اللامركزي لسوق التنبؤ إلى خدمة أوراكل لتأكيد نتائج الانتخابات وتحديد ما إذا كانت أليس مؤهلة للحصول على العائد.
المتطلبات الأساسية
تفترض هذه الصفحة أن القارئ على دراية بأساسيات إيثريوم، بما في ذلك العقد، وآليات الإجماع، وآلة إيثريوم الافتراضية. يجب أن يكون لديك أيضًا فهم جيد لـ العقود الذكية وبنية العقد الذكي، وخاصة .
ما هي خدمة أوراكل على البلوك تشين؟
خدمات أوراكل هي تطبيقات تقوم بجلب المعلومات الخارجية (أي المعلومات المخزنة خارج السلسلة) والتحقق منها ونقلها إلى العقود الذكية التي تعمل على البلوك تشين. إلى جانب "سحب" البيانات خارج السلسلة وبثها على إيثريوم، يمكن لخدمات أوراكل أيضًا "دفع" المعلومات من البلوك تشين إلى الأنظمة الخارجية، على سبيل المثال، فتح قفل ذكي بمجرد أن يرسل المستخدم رسومًا عبر معاملة إيثريوم.
بدون خدمة أوراكل، سيكون العقد الذكي مقتصرًا بالكامل على البيانات على السلسلة.
تختلف خدمات أوراكل بناءً على مصدر البيانات (مصدر واحد أو مصادر متعددة)، ونماذج الثقة (مركزية أو لامركزية)، وبنية النظام (القراءة الفورية، النشر والاشتراك، والطلب والاستجابة). يمكننا أيضًا التمييز بين خدمات أوراكل بناءً على ما إذا كانت تسترد بيانات خارجية لاستخدامها بواسطة العقود على السلسلة (أوراكل الإدخال)، أو ترسل معلومات من البلوك تشين إلى التطبيقات خارج السلسلة (أوراكل الإخراج)، أو تؤدي مهام حسابية خارج السلسلة (أوراكل حسابية).
لماذا تحتاج العقود الذكية إلى خدمات أوراكل؟
يرى العديد من المطورين العقود الذكية ككود برمجي يعمل في عناوين محددة على البلوك تشين. ومع ذلك، فإن النظرة الأكثر شمولية للعقود الذكية هي أنها برامج ذاتية التنفيذ قادرة على فرض الاتفاقيات بين الأطراف بمجرد استيفاء شروط محددة - ومن هنا جاء مصطلح "العقود الذكية".
لكن استخدام العقود الذكية لفرض الاتفاقيات بين الأشخاص ليس بالأمر السهل، نظرًا لأن إيثريوم نظام حتمي. النظام الحتمي (opens in a new tab) هو النظام الذي ينتج دائمًا نفس النتائج بالنظر إلى حالة أولية ومدخلات معينة، مما يعني عدم وجود عشوائية أو تباين في عملية حساب المخرجات من المدخلات.
لتحقيق التنفيذ الحتمي، تقصر شبكات البلوك تشين العقد على الوصول إلى إجماع حول أسئلة ثنائية بسيطة (صواب/خطأ) باستخدام البيانات المخزنة على البلوك تشين نفسها فقط. تشمل أمثلة هذه الأسئلة:
- "هل قام مالك الحساب (المحدد بواسطة المفتاح العام) بتوقيع هذه المعاملة باستخدام المفتاح الخاص المقترن؟"
- "هل يمتلك هذا الحساب أموالاً كافية لتغطية المعاملة؟"
- "هل هذه المعاملة صالحة في سياق هذا العقد الذكي؟"، إلخ.
إذا تلقت شبكات البلوك تشين معلومات من مصادر خارجية (أي من العالم الحقيقي)، فسيكون من المستحيل تحقيق الحتمية، مما يمنع العقد من الاتفاق على صحة التغييرات في حالة البلوك تشين. خذ على سبيل المثال عقدًا ذكيًا ينفذ معاملة بناءً على سعر صرف ETH-USD الحالي الذي تم الحصول عليه من واجهة برمجة تطبيقات (API) تقليدية للأسعار. من المرجح أن يتغير هذا الرقم بشكل متكرر (ناهيك عن أن واجهة برمجة التطبيقات قد يتم إيقافها أو اختراقها)، مما يعني أن العقد التي تنفذ نفس كود العقد ستصل إلى نتائج مختلفة.
بالنسبة لشبكة بلوك تشين عامة مثل إيثريوم، مع آلاف العقد حول العالم التي تعالج المعاملات، فإن الحتمية أمر بالغ الأهمية. مع عدم وجود سلطة مركزية تعمل كمصدر للحقيقة، تحتاج العقد إلى آليات للوصول إلى نفس الحالة بعد تطبيق نفس المعاملات. الحالة التي تنفذ فيها العقدة أ كود العقد الذكي وتحصل على "3" كنتيجة، بينما تحصل العقدة ب على "7" بعد تشغيل نفس المعاملة، ستؤدي إلى انهيار الإجماع والقضاء على قيمة إيثريوم كمنصة حوسبة لامركزية.
يسلط هذا السيناريو الضوء أيضًا على مشكلة تصميم شبكات البلوك تشين لسحب المعلومات من مصادر خارجية. ومع ذلك، تحل خدمات أوراكل هذه المشكلة عن طريق أخذ المعلومات من مصادر خارج السلسلة وتخزينها على البلوك تشين لتستهلكها العقود الذكية. نظرًا لأن المعلومات المخزنة على السلسلة غير قابلة للتغيير ومتاحة للجمهور، يمكن لعقد إيثريوم استخدام البيانات خارج السلسلة المستوردة من خدمة أوراكل بأمان لحساب تغييرات الحالة دون كسر الإجماع.
للقيام بذلك، تتكون خدمة أوراكل عادةً من عقد ذكي يعمل على السلسلة وبعض المكونات خارج السلسلة. يتلقى العقد على السلسلة طلبات للحصول على بيانات من عقود ذكية أخرى، والتي يمررها إلى المكون خارج السلسلة (يسمى عقدة أوراكل). يمكن لعقدة أوراكل هذه الاستعلام عن مصادر البيانات - باستخدام واجهات برمجة التطبيقات (APIs)، على سبيل المثال - وإرسال معاملات لتخزين البيانات المطلوبة في مساحة تخزين العقد الذكي.
في الأساس، تسد خدمة أوراكل على البلوك تشين فجوة المعلومات بين البلوك تشين والبيئة الخارجية، مما يؤدي إلى إنشاء "عقود ذكية هجينة". العقد الذكي الهجين هو العقد الذي يعمل بناءً على مزيج من كود العقد على السلسلة والبنية التحتية خارج السلسلة. تعد أسواق التنبؤ اللامركزية مثالاً ممتازًا للعقود الذكية الهجينة. قد تشمل الأمثلة الأخرى العقود الذكية لتأمين المحاصيل التي تدفع تعويضات عندما تحدد مجموعة من خدمات أوراكل حدوث ظواهر جوية معينة.
ما هي مشكلة أوراكل؟
تحل خدمات أوراكل مشكلة مهمة، ولكنها تقدم أيضًا بعض التعقيدات، على سبيل المثال:
-
كيف نتحقق من أن المعلومات المدخلة تم استخراجها من المصدر الصحيح أو لم يتم العبث بها؟
-
كيف نضمن أن هذه البيانات متاحة دائمًا ويتم تحديثها بانتظام؟
توضح ما يسمى بـ "مشكلة أوراكل" المشكلات التي تصاحب استخدام خدمات أوراكل على البلوك تشين لإرسال مدخلات إلى العقود الذكية. يجب أن تكون البيانات الواردة من خدمة أوراكل صحيحة حتى يتم تنفيذ العقد الذكي بشكل صحيح. علاوة على ذلك، فإن الاضطرار إلى "الثقة" في مشغلي أوراكل لتقديم معلومات دقيقة يقوض جانب "مفتوح بدون إذن" في العقود الذكية.
تقدم خدمات أوراكل المختلفة حلولاً مختلفة لمشكلة أوراكل، والتي سنستكشفها لاحقًا. يتم تقييم خدمات أوراكل عادةً بناءً على مدى قدرتها على التعامل مع التحديات التالية:
-
الصحة: يجب ألا تتسبب خدمة أوراكل في قيام العقود الذكية بإحداث تغييرات في الحالة بناءً على بيانات غير صالحة خارج السلسلة. يجب أن تضمن خدمة أوراكل موثوقية و_سلامة_ البيانات. تعني الموثوقية أن البيانات تم الحصول عليها من المصدر الصحيح، بينما تعني السلامة أن البيانات ظلت سليمة (أي لم يتم تغييرها) قبل إرسالها على السلسلة.
-
التوافر: يجب ألا تؤخر خدمة أوراكل أو تمنع العقود الذكية من تنفيذ الإجراءات وإحداث تغييرات في الحالة. هذا يعني أن البيانات الواردة من خدمة أوراكل يجب أن تكون متاحة عند الطلب دون انقطاع.
-
توافق الحوافز: يجب أن تحفز خدمة أوراكل مزودي البيانات خارج السلسلة على تقديم معلومات صحيحة للعقود الذكية. يتضمن توافق الحوافز النسبة و_المساءلة_. تسمح النسبة بربط جزء من المعلومات الخارجية بمزودها، بينما تلزم المساءلة مزودي البيانات بالمعلومات التي يقدمونها، بحيث يمكن مكافأتهم أو معاقبتهم بناءً على جودة المعلومات المقدمة.
كيف تعمل خدمة أوراكل على البلوك تشين؟
المستخدمون
المستخدمون هم كيانات (أي العقود الذكية) تحتاج إلى معلومات خارجية عن البلوك تشين لإكمال إجراءات محددة. يبدأ سير العمل الأساسي لخدمة أوراكل بإرسال المستخدم طلب بيانات إلى عقد أوراكل. عادةً ما تجيب طلبات البيانات على بعض أو كل الأسئلة التالية:
-
ما هي المصادر التي يمكن للعقد خارج السلسلة الرجوع إليها للحصول على المعلومات المطلوبة؟
-
كيف يعالج المراسلون المعلومات من مصادر البيانات ويستخرجون نقاط بيانات مفيدة؟
-
كم عدد عقد أوراكل التي يمكنها المشاركة في استرداد البيانات؟
-
كيف ينبغي إدارة التناقضات في تقارير أوراكل؟
-
ما هي الطريقة التي يجب تنفيذها في تصفية التقديمات وتجميع التقارير في قيمة واحدة؟
عقد أوراكل
عقد أوراكل هو المكون على السلسلة لخدمة أوراكل. يستمع إلى طلبات البيانات من العقود الأخرى، وينقل استعلامات البيانات إلى عقد أوراكل، ويبث البيانات المرتجعة إلى عقود العملاء. قد يقوم هذا العقد أيضًا بإجراء بعض العمليات الحسابية على نقاط البيانات المرتجعة لإنتاج قيمة مجمعة لإرسالها إلى العقد الطالب.
يعرض عقد أوراكل بعض الوظائف التي تستدعيها عقود العملاء عند تقديم طلب بيانات. عند تلقي استعلام جديد، سيصدر العقد الذكي حدث سجل بتفاصيل طلب البيانات. يُعلم هذا العقد خارج السلسلة المشتركة في السجل (عادةً باستخدام شيء مثل أمر eth_subscribe في JSON-RPC)، والتي تشرع في استرداد البيانات المحددة في حدث السجل.
يوجد أدناه مثال لعقد أوراكل (opens in a new tab) بواسطة بيدرو كوستا. هذه خدمة أوراكل بسيطة يمكنها الاستعلام عن واجهات برمجة التطبيقات خارج السلسلة بناءً على طلب من عقود ذكية أخرى وتخزين المعلومات المطلوبة على البلوك تشين:
1pragma solidity >=0.4.21 <0.6.0;23contract Oracle {4 Request[] requests; //list of requests made to the contract // قائمة الطلبات المقدمة للعقد5 uint currentId = 0; //increasing request id // معرف الطلب المتزايد6 uint minQuorum = 2; //minimum number of responses to receive before declaring final result // الحد الأدنى لعدد الاستجابات التي يجب تلقيها قبل إعلان النتيجة النهائية7 uint totalOracleCount = 3; // Hardcoded oracle count // عدد الأوراكل المبرمج مسبقاً89 // defines a general api request // يحدد طلب واجهة برمجة تطبيقات (API) عام10 struct Request {11 uint id; //request id // معرف الطلب12 string urlToQuery; //API url // رابط واجهة برمجة التطبيقات (API)13 string attributeToFetch; //json attribute (key) to retrieve in the response // سمة (مفتاح) json المراد استردادها في الاستجابة14 string agreedValue; //value from key // القيمة من المفتاح15 mapping(uint => string) answers; //answers provided by the oracles // الإجابات المقدمة من الأوراكل16 mapping(address => uint) quorum; //oracles which will query the answer (1=oracle hasn't voted, 2=oracle has voted) // الأوراكل التي ستستعلم عن الإجابة (1=الأوراكل لم يصوت، 2=الأوراكل قام بالتصويت)17 }1819 //event that triggers oracle outside of the blockchain // الحدث الذي يُشغّل الأوراكل خارج البلوكتشين20 event NewRequest (21 uint id,22 string urlToQuery,23 string attributeToFetch24 );2526 //triggered when there's a consensus on the final result // يتم تشغيله عندما يكون هناك إجماع على النتيجة النهائية27 event UpdatedRequest (28 uint id,29 string urlToQuery,30 string attributeToFetch,31 string agreedValue32 );3334 function createRequest (35 string memory _urlToQuery,36 string memory _attributeToFetch37 )38 public39 {40 uint length = requests.push(Request(currentId, _urlToQuery, _attributeToFetch, ""));41 Request storage r = requests[length-1];4243 // Hardcoded oracles address // عنوان الأوراكل المبرمج مسبقاً44 r.quorum[address(0x6c2339b46F41a06f09CA0051ddAD54D1e582bA77)] = 1;45 r.quorum[address(0xb5346CF224c02186606e5f89EACC21eC25398077)] = 1;46 r.quorum[address(0xa2997F1CA363D11a0a35bB1Ac0Ff7849bc13e914)] = 1;4748 // launch an event to be detected by oracle outside of blockchain // إطلاق حدث ليتم اكتشافه بواسطة الأوراكل خارج البلوكتشين49 emit NewRequest (50 currentId,51 _urlToQuery,52 _attributeToFetch53 );5455 // increase request id // زيادة معرف الطلب56 currentId++;57 }5859 //called by the oracle to record its answer // يتم استدعاؤه بواسطة الأوراكل لتسجيل إجابته60 function updateRequest (61 uint _id,62 string memory _valueRetrieved63 ) public {6465 Request storage currRequest = requests[_id];6667 //check if oracle is in the list of trusted oracles // التحقق مما إذا كان الأوراكل في قائمة الأوراكل الموثوقة68 //and if the oracle hasn't voted yet // وما إذا كان الأوراكل لم يصوت بعد69 if(currRequest.quorum[address(msg.sender)] == 1){7071 //marking that this address has voted // وضع علامة على أن هذا العنوان قد قام بالتصويت72 currRequest.quorum[msg.sender] = 2;7374 //iterate through "array" of answers until a position if free and save the retrieved value // التكرار عبر "مصفوفة" الإجابات حتى يتوفر موضع فارغ وحفظ القيمة المستردة75 uint tmpI = 0;76 bool found = false;77 while(!found) {78 //find first empty slot // العثور على أول خانة فارغة79 if(bytes(currRequest.answers[tmpI]).length == 0){80 found = true;81 currRequest.answers[tmpI] = _valueRetrieved;82 }83 tmpI++;84 }8586 uint currentQuorum = 0;8788 //iterate through oracle list and check if enough oracles(minimum quorum) // التكرار عبر قائمة الأوراكل والتحقق مما إذا كان هناك عدد كافٍ من الأوراكل (الحد الأدنى للنصاب)89 //have voted the same answer as the current one // قد صوتوا لنفس الإجابة الحالية90 for(uint i = 0; i < totalOracleCount; i++){91 bytes memory a = bytes(currRequest.answers[i]);92 bytes memory b = bytes(_valueRetrieved);9394 if(keccak256(a) == keccak256(b)){95 currentQuorum++;96 if(currentQuorum >= minQuorum){97 currRequest.agreedValue = _valueRetrieved;98 emit UpdatedRequest (99 currRequest.id,100 currRequest.urlToQuery,101 currRequest.attributeToFetch,102 currRequest.agreedValue103 );104 }105 }106 }107 }108 }109}إظهار الكلعقد أوراكل
عقدة أوراكل هي المكون خارج السلسلة لخدمة أوراكل. تستخرج المعلومات من مصادر خارجية، مثل واجهات برمجة التطبيقات المستضافة على خوادم تابعة لجهات خارجية، وتضعها على السلسلة لاستهلاكها بواسطة العقود الذكية. تستمع عقد أوراكل إلى الأحداث من عقد أوراكل على السلسلة وتشرع في إكمال المهمة الموضحة في السجل.
تتمثل المهمة الشائعة لعقد أوراكل في إرسال طلب HTTP GET (opens in a new tab) إلى خدمة واجهة برمجة التطبيقات، وتحليل الاستجابة لاستخراج البيانات ذات الصلة، وتنسيقها في مخرجات قابلة للقراءة على البلوك تشين، وإرسالها على السلسلة من خلال تضمينها في معاملة إلى عقد أوراكل. قد يُطلب من عقدة أوراكل أيضًا الإقرار بصلاحية وسلامة المعلومات المقدمة باستخدام "إثباتات الموثوقية"، والتي سنستكشفها لاحقًا.
تعتمد خدمات أوراكل الحسابية أيضًا على العقد خارج السلسلة لأداء المهام الحسابية التي سيكون من غير العملي تنفيذها على السلسلة، نظرًا لتكاليف الغاز وحدود حجم الكتلة. على سبيل المثال، قد يتم تكليف عقدة أوراكل بإنشاء رقم عشوائي يمكن التحقق منه (على سبيل المثال، للألعاب القائمة على البلوك تشين).
أنماط تصميم أوراكل
تأتي خدمات أوراكل بأنواع مختلفة، بما في ذلك القراءة الفورية، و_النشر والاشتراك_، و_الطلب والاستجابة_، حيث يكون النوعان الأخيران هما الأكثر شيوعًا بين العقود الذكية على إيثريوم. هنا نصف بإيجاز نماذج النشر والاشتراك والطلب والاستجابة.
خدمات أوراكل للنشر والاشتراك
يعرض هذا النوع من خدمات أوراكل "خلاصة بيانات" يمكن للعقود الأخرى قراءتها بانتظام للحصول على المعلومات. من المتوقع أن تتغير البيانات في هذه الحالة بشكل متكرر، لذلك يجب أن تستمع عقود العملاء للتحديثات على البيانات في مساحة تخزين أوراكل. مثال على ذلك هو خدمة أوراكل التي توفر أحدث معلومات أسعار ETH-USD للمستخدمين.
خدمات أوراكل للطلب والاستجابة
يسمح إعداد الطلب والاستجابة لعقد العميل بطلب بيانات عشوائية بخلاف تلك التي توفرها خدمة أوراكل للنشر والاشتراك. تعتبر خدمات أوراكل للطلب والاستجابة مثالية عندما تكون مجموعة البيانات كبيرة جدًا بحيث لا يمكن تخزينها في مساحة تخزين العقد الذكي، و/أو سيحتاج المستخدمون فقط إلى جزء صغير من البيانات في أي وقت.
على الرغم من أنها أكثر تعقيدًا من نماذج النشر والاشتراك، إلا أن خدمات أوراكل للطلب والاستجابة هي في الأساس ما وصفناه في القسم السابق. ستحتوي خدمة أوراكل على مكون على السلسلة يتلقى طلب بيانات ويمرره إلى عقدة خارج السلسلة لمعالجته.
يجب على المستخدمين الذين يبدؤون استعلامات البيانات تغطية تكلفة استرداد المعلومات من المصدر خارج السلسلة. يجب أن يوفر عقد العميل أيضًا أموالاً لتغطية تكاليف الغاز التي يتكبدها عقد أوراكل في إرجاع الاستجابة عبر وظيفة رد الاتصال المحددة في الطلب.
خدمات أوراكل المركزية مقابل اللامركزية
خدمات أوراكل المركزية
يتم التحكم في خدمة أوراكل المركزية بواسطة كيان واحد مسؤول عن تجميع المعلومات خارج السلسلة وتحديث بيانات عقد أوراكل كما هو مطلوب. خدمات أوراكل المركزية فعالة لأنها تعتمد على مصدر واحد للحقيقة. قد تعمل بشكل أفضل في الحالات التي يتم فيها نشر مجموعات البيانات الخاصة مباشرة من قبل المالك بتوقيع مقبول على نطاق واسع. ومع ذلك، فإنها تجلب سلبيات أيضًا:
ضمانات صحة منخفضة
مع خدمات أوراكل المركزية، لا توجد طريقة لتأكيد ما إذا كانت المعلومات المقدمة صحيحة أم لا. حتى المزودين "ذوي السمعة الطيبة" يمكن أن يصبحوا مارقين أو يتعرضوا للاختراق. إذا أصبحت خدمة أوراكل فاسدة، فسيتم تنفيذ العقود الذكية بناءً على بيانات سيئة.
توافر ضعيف
لا تضمن خدمات أوراكل المركزية دائمًا إتاحة البيانات خارج السلسلة للعقود الذكية الأخرى. إذا قرر المزود إيقاف تشغيل الخدمة أو قام متسلل باختطاف المكون خارج السلسلة لخدمة أوراكل، فإن عقدك الذكي معرض لخطر هجوم حجب الخدمة (DoS).
توافق حوافز ضعيف
غالبًا ما يكون لدى خدمات أوراكل المركزية حوافز مصممة بشكل سيئ أو غير موجودة لمزود البيانات لإرسال معلومات دقيقة/غير معدلة. الدفع لخدمة أوراكل مقابل الصحة لا يضمن الصدق. تتفاقم هذه المشكلة مع زيادة مقدار القيمة التي تتحكم فيها العقود الذكية.
خدمات أوراكل اللامركزية
تم تصميم خدمات أوراكل اللامركزية للتغلب على قيود خدمات أوراكل المركزية من خلال القضاء على نقاط الفشل الفردية. تتكون خدمة أوراكل اللامركزية من مشاركين متعددين في شبكة نظير إلى نظير يشكلون إجماعًا على البيانات خارج السلسلة قبل إرسالها إلى عقد ذكي.
يجب أن تكون خدمة أوراكل اللامركزية (من الناحية المثالية) مفتوحة بدون إذن، ولا تتطلب الثقة، وخالية من الإدارة من قبل طرف مركزي؛ في الواقع، اللامركزية بين خدمات أوراكل تقع على طيف. هناك شبكات أوراكل شبه لامركزية حيث يمكن لأي شخص المشاركة، ولكن مع "مالك" يوافق على العقد ويزيلها بناءً على الأداء التاريخي. توجد أيضًا شبكات أوراكل لامركزية بالكامل: تعمل هذه عادةً كشبكات بلوك تشين مستقلة ولديها آليات إجماع محددة لتنسيق العقد ومعاقبة السلوك السيئ.
يأتي استخدام خدمات أوراكل اللامركزية مع الفوائد التالية:
ضمانات صحة عالية
تحاول خدمات أوراكل اللامركزية تحقيق صحة البيانات باستخدام طرق مختلفة. يتضمن ذلك استخدام إثباتات تقر بموثوقية وسلامة المعلومات المرتجعة ومطالبة كيانات متعددة بالاتفاق الجماعي على صحة البيانات خارج السلسلة.
إثباتات الموثوقية
إثباتات الموثوقية هي آليات تشفيرية تتيح التحقق المستقل من المعلومات المستردة من مصادر خارجية. يمكن لهذه الإثباتات التحقق من صحة مصدر المعلومات واكتشاف التعديلات المحتملة على البيانات بعد استردادها.
تشمل أمثلة إثباتات الموثوقية ما يلي:
إثباتات أمان طبقة النقل (TLS): غالبًا ما تسترد عقد أوراكل البيانات من مصادر خارجية باستخدام اتصال HTTP آمن يعتمد على بروتوكول أمان طبقة النقل (TLS). تستخدم بعض خدمات أوراكل اللامركزية إثباتات الموثوقية للتحقق من جلسات TLS (أي تأكيد تبادل المعلومات بين عقدة وخادم معين) وتأكيد عدم تغيير محتويات الجلسة.
إقرارات بيئة التنفيذ الموثوقة (TEE): بيئة التنفيذ الموثوقة (opens in a new tab) (TEE) هي بيئة حسابية معزولة عن العمليات التشغيلية لنظامها المضيف. تضمن بيئات TEE أن أي كود تطبيق أو بيانات مخزنة/مستخدمة في بيئة الحوسبة تحتفظ بسلامتها وسريتها وعدم قابليتها للتغيير. يمكن للمستخدمين أيضًا إنشاء إقرار لإثبات أن مثيل التطبيق يعمل داخل بيئة التنفيذ الموثوقة.
تتطلب فئات معينة من خدمات أوراكل اللامركزية من مشغلي عقد أوراكل تقديم إقرارات TEE. يؤكد هذا للمستخدم أن مشغل العقدة يقوم بتشغيل مثيل لعميل أوراكل في بيئة تنفيذ موثوقة. تمنع بيئات TEE العمليات الخارجية من تغيير أو قراءة كود التطبيق وبياناته، وبالتالي، تثبت هذه الإقرارات أن عقدة أوراكل قد حافظت على المعلومات سليمة وسرية.
التحقق من المعلومات القائم على الإجماع
تعتمد خدمات أوراكل المركزية على مصدر واحد للحقيقة عند توفير البيانات للعقود الذكية، مما يقدم إمكانية نشر معلومات غير دقيقة. تحل خدمات أوراكل اللامركزية هذه المشكلة من خلال الاعتماد على عقد أوراكل متعددة للاستعلام عن المعلومات خارج السلسلة. من خلال مقارنة البيانات من مصادر متعددة، تقلل خدمات أوراكل اللامركزية من خطر تمرير معلومات غير صالحة إلى العقود على السلسلة.
ومع ذلك، يجب أن تتعامل خدمات أوراكل اللامركزية مع التناقضات في المعلومات المستردة من مصادر متعددة خارج السلسلة. لتقليل الاختلافات في المعلومات والتأكد من أن البيانات التي تم تمريرها إلى عقد أوراكل تعكس الرأي الجماعي لعقد أوراكل، تستخدم خدمات أوراكل اللامركزية الآليات التالية:
التصويت/التحصيص على دقة البيانات
تتطلب بعض شبكات أوراكل اللامركزية من المشاركين التصويت أو التحصيص على دقة الإجابات على استعلامات البيانات (على سبيل المثال، "من فاز في الانتخابات الأمريكية لعام 2020؟") باستخدام الرمز الأصلي للشبكة. يقوم بروتوكول التجميع بعد ذلك بتجميع الأصوات والحصص ويأخذ الإجابة التي تدعمها الأغلبية على أنها الإجابة الصالحة.
تتم معاقبة العقد التي تنحرف إجاباتها عن إجابة الأغلبية من خلال توزيع رموزها على الآخرين الذين يقدمون قيمًا أكثر صحة. إن إجبار العقد على تقديم ضمان قبل تقديم البيانات يحفز الاستجابات الصادقة حيث يُفترض أنهم فاعلون اقتصاديون عقلانيون يعتزمون تعظيم العوائد.
يحمي التحصيص/التصويت أيضًا خدمات أوراكل اللامركزية من حيث يقوم الفاعلون الخبيثون بإنشاء هويات متعددة للتلاعب بنظام الإجماع. ومع ذلك، لا يمكن للتحصيص أن يمنع "الاستغلال المجاني" (عقد أوراكل التي تنسخ المعلومات من الآخرين) و"التحقق الكسول" (عقد أوراكل التي تتبع الأغلبية دون التحقق من المعلومات بأنفسهم).
آليات نقطة شيلينغ
نقطة شيلينغ (opens in a new tab) هي مفهوم في نظرية الألعاب يفترض أن كيانات متعددة ستلجأ دائمًا إلى حل مشترك لمشكلة ما في غياب أي اتصال. غالبًا ما تُستخدم آليات نقطة شيلينغ في شبكات أوراكل اللامركزية لتمكين العقد من الوصول إلى إجماع حول الإجابات على طلبات البيانات.
كانت الفكرة المبكرة لذلك هي SchellingCoin (opens in a new tab)، وهي خلاصة بيانات مقترحة حيث يقدم المشاركون إجابات على أسئلة "عددية" (الأسئلة التي توصف إجاباتها بالحجم، على سبيل المثال، "ما هو سعر ETH؟")، إلى جانب إيداع. تتم مكافأة المستخدمين الذين يقدمون قيمًا بين النسبة المئوية (opens in a new tab) الـ 25 والـ 75، بينما تتم معاقبة أولئك الذين تنحرف قيمهم بشكل كبير عن القيمة المتوسطة.
على الرغم من أن SchellingCoin غير موجودة اليوم، إلا أن عددًا من خدمات أوراكل اللامركزية - ولا سيما خدمات أوراكل لبروتوكول Maker (opens in a new tab) - تستخدم آلية نقطة شيلينغ لتحسين دقة بيانات أوراكل. تتكون كل خدمة أوراكل لـ Maker من شبكة P2P خارج السلسلة من العقد ("المرحلات" و"الخلاصات") التي تقدم أسعار السوق للأصول الإضافية وعقد "Medianizer" على السلسلة الذي يحسب متوسط جميع القيم المقدمة. بمجرد انتهاء فترة التأخير المحددة، تصبح هذه القيمة المتوسطة السعر المرجعي الجديد للأصل المرتبط.
تشمل الأمثلة الأخرى لخدمات أوراكل التي تستخدم آليات نقطة شيلينغ تقارير Chainlink خارج السلسلة (opens in a new tab) وWitnet (opens in a new tab). في كلا النظامين، يتم تجميع الاستجابات من عقد أوراكل في شبكة نظير إلى نظير في قيمة مجمعة واحدة، مثل المتوسط أو الوسيط. تتم مكافأة العقد أو معاقبتها وفقًا لمدى توافق استجاباتها مع القيمة المجمعة أو انحرافها عنها.
تعتبر آليات نقطة شيلينغ جذابة لأنها تقلل من البصمة على السلسلة (يجب إرسال معاملة واحدة فقط) مع ضمان اللامركزية. هذا الأخير ممكن لأن العقد يجب أن توقع على قائمة الاستجابات المقدمة قبل إدخالها في الخوارزمية التي تنتج القيمة المتوسطة/الوسيطة.
التوافر
تضمن خدمات أوراكل اللامركزية توافرًا عاليًا للبيانات خارج السلسلة للعقود الذكية. يتحقق ذلك من خلال لامركزية كل من مصدر المعلومات خارج السلسلة والعقد المسؤولة عن نقل المعلومات على السلسلة.
يضمن هذا التسامح مع الأخطاء حيث يمكن لعقد أوراكل الاعتماد على عقد متعددة (والتي تعتمد أيضًا على مصادر بيانات متعددة) لتنفيذ الاستعلامات من العقود الأخرى. تعد اللامركزية على مستوى المصدر و مشغل العقدة أمرًا بالغ الأهمية - فشبكة من عقد أوراكل التي تخدم المعلومات المستردة من نفس المصدر ستواجه نفس المشكلة التي تواجهها خدمة أوراكل المركزية.
من الممكن أيضًا لخدمات أوراكل القائمة على التحصيص تطبيق العقوبة على مشغلي العقد الذين يفشلون في الاستجابة بسرعة لطلبات البيانات. هذا يحفز بشكل كبير عقد أوراكل على الاستثمار في بنية تحتية متسامحة مع الأخطاء وتوفير البيانات في الوقت المناسب.
توافق حوافز جيد
تنفذ خدمات أوراكل اللامركزية تصميمات حوافز مختلفة لمنع السلوك البيزنطي (opens in a new tab) بين عقد أوراكل. على وجه التحديد، فإنها تحقق النسبة و_المساءلة_:
-
غالبًا ما يُطلب من عقد أوراكل اللامركزية توقيع البيانات التي تقدمها استجابة لطلبات البيانات. تساعد هذه المعلومات في تقييم الأداء التاريخي لعقد أوراكل، بحيث يمكن للمستخدمين تصفية عقد أوراكل غير الموثوقة عند تقديم طلبات البيانات. مثال على ذلك هو نظام السمعة الخوارزمي (opens in a new tab) الخاص بـ Witnet.
-
قد تتطلب خدمات أوراكل اللامركزية - كما أوضحنا سابقًا - من العقد وضع تحصيص على ثقتها في حقيقة البيانات التي تقدمها. إذا تم التحقق من الادعاء، يمكن إرجاع هذا التحصيص مع مكافآت للخدمة الصادقة. ولكن يمكن أيضًا تطبيق العقوبة في حالة كانت المعلومات غير صحيحة، مما يوفر قدرًا من المساءلة.
تطبيقات خدمات أوراكل في العقود الذكية
فيما يلي حالات الاستخدام الشائعة لخدمات أوراكل في إيثريوم:
استرداد البيانات المالية
تسمح تطبيقات التمويل اللامركزي (DeFi) بالإقراض والاقتراض وتداول الأصول من نظير إلى نظير. يتطلب هذا غالبًا الحصول على معلومات مالية مختلفة، بما في ذلك بيانات أسعار الصرف (لحساب القيمة الورقية للعملات الرقمية أو مقارنة أسعار الرموز) وبيانات أسواق رأس المال (لحساب قيمة الأصول المرمزة، مثل الذهب أو الدولار الأمريكي).
يحتاج بروتوكول إقراض التمويل اللامركزي، على سبيل المثال، إلى الاستعلام عن أسعار السوق الحالية للأصول (مثل ETH) المودعة كضمان. يتيح هذا للعقد تحديد قيمة الأصول الإضافية وتحديد مقدار ما يمكنه اقتراضه من النظام.
تشمل "خدمات أوراكل للأسعار" الشائعة (كما يطلق عليها غالبًا) في التمويل اللامركزي خلاصات أسعار Chainlink، وخلاصة الأسعار المفتوحة (opens in a new tab) لبروتوكول Compound، ومتوسط الأسعار المرجح بالوقت (TWAPs) (opens in a new tab) لـ Uniswap، وخدمات أوراكل لـ Maker (opens in a new tab).
يجب على البناة فهم المحاذير التي تأتي مع خدمات أوراكل للأسعار هذه قبل دمجها في مشروعهم. تقدم هذه المقالة (opens in a new tab) تحليلاً مفصلاً لما يجب مراعاته عند التخطيط لاستخدام أي من خدمات أوراكل للأسعار المذكورة.
يوجد أدناه مثال على كيفية استرداد أحدث سعر لـ ETH في عقدك الذكي باستخدام خلاصة أسعار Chainlink:
1pragma solidity ^0.6.7;23import "@chainlink/contracts/src/v0.6/interfaces/AggregatorV3Interface.sol";45contract PriceConsumerV3 {67 AggregatorV3Interface internal priceFeed;89 /* *10 * الشبكة: Kovan11 * المُجمِّع: ETH/USD12 * العنوان: 0x9326BFA02ADD2366b30bacB125260Af641031331 */13 /**14 * Network: Kovan15 * Aggregator: ETH/USD16 * Address: 0x9326BFA02ADD2366b30bacB125260Af64103133117 */18 constructor() public {19 priceFeed = AggregatorV3Interface(0x9326BFA02ADD2366b30bacB125260Af641031331);20 }2122 /* *23 * يُرجع أحدث سعر */24 /**25 * Returns the latest price26 */27 function getLatestPrice() public view returns (int) {28 (29 uint80 roundID,30 int price,31 uint startedAt,32 uint timeStamp,33 uint80 answeredInRound34 ) = priceFeed.latestRoundData();35 return price;36 }37}إظهار الكلتوليد عشوائية يمكن التحقق منها
تتطلب بعض تطبيقات البلوك تشين، مثل الألعاب القائمة على البلوك تشين أو مخططات اليانصيب، مستوى عاليًا من عدم القدرة على التنبؤ والعشوائية للعمل بفعالية. ومع ذلك، فإن التنفيذ الحتمي لشبكات البلوك تشين يقضي على العشوائية.
كان النهج الأصلي هو استخدام وظائف تشفيرية شبه عشوائية، مثل blockhash، ولكن يمكن التلاعب بها من قبل المعدنين (opens in a new tab) الذين يحلون خوارزمية إثبات العمل. أيضًا، يعني انتقال إيثريوم إلى إثبات الحصة أنه لم يعد بإمكان المطورين الاعتماد على blockhash للعشوائية على السلسلة. توفر آلية RANDAO (opens in a new tab) الخاصة بسلسلة المنارة مصدرًا بديلاً للعشوائية بدلاً من ذلك.
من الممكن إنشاء القيمة العشوائية خارج السلسلة وإرسالها على السلسلة، ولكن القيام بذلك يفرض متطلبات ثقة عالية على المستخدمين. يجب أن يعتقدوا أن القيمة تم إنشاؤها حقًا عبر آليات غير متوقعة ولم يتم تغييرها أثناء النقل.
تحل خدمات أوراكل المصممة للحوسبة خارج السلسلة هذه المشكلة عن طريق إنشاء نتائج عشوائية بشكل آمن خارج السلسلة والتي تبثها على السلسلة جنبًا إلى جنب مع إثباتات تشفيرية تقر بعدم القدرة على التنبؤ بالعملية. مثال على ذلك هو Chainlink VRF (opens in a new tab) (وظيفة عشوائية يمكن التحقق منها)، وهو منشئ أرقام عشوائية (RNG) عادل بشكل يمكن إثباته ومقاوم للعبث ومفيد لبناء عقود ذكية موثوقة للتطبيقات التي تعتمد على نتائج غير متوقعة.
الحصول على نتائج للأحداث
مع خدمات أوراكل، يعد إنشاء عقود ذكية تستجيب لأحداث العالم الحقيقي أمرًا سهلاً. تجعل خدمات أوراكل هذا ممكنًا من خلال السماح للعقود بالاتصال بواجهات برمجة التطبيقات الخارجية من خلال مكونات خارج السلسلة واستهلاك المعلومات من مصادر البيانات تلك. على سبيل المثال، قد يطلب التطبيق اللامركزي للتنبؤ المذكور سابقًا من خدمة أوراكل إرجاع نتائج الانتخابات من مصدر موثوق خارج السلسلة (على سبيل المثال، وكالة أسوشيتد برس).
يتيح استخدام خدمات أوراكل لاسترداد البيانات بناءً على نتائج العالم الحقيقي حالات استخدام جديدة أخرى؛ على سبيل المثال، يحتاج منتج التأمين اللامركزي إلى معلومات دقيقة حول الطقس والكوارث وما إلى ذلك للعمل بفعالية.
أتمتة العقود الذكية
لا تعمل العقود الذكية تلقائيًا؛ بل يجب أن يقوم حساب مملوك خارجيًا (EOA)، أو حساب عقد آخر، بتشغيل الوظائف الصحيحة لتنفيذ كود العقد. في معظم الحالات، يكون الجزء الأكبر من وظائف العقد عامًا ويمكن استدعاؤه بواسطة الحسابات المملوكة خارجيًا والعقود الأخرى.
ولكن هناك أيضًا وظائف خاصة داخل العقد لا يمكن للآخرين الوصول إليها؛ ولكنها ضرورية للوظائف العامة للتطبيق اللامركزي. تشمل الأمثلة وظيفة mintERC721Token() التي تقوم بشكل دوري بـ السك او انشاء رموز غير قابلة للاستبدال (NFTs) جديدة للمستخدمين، أو وظيفة لمنح العوائد في سوق التنبؤ، أو وظيفة لفتح الرموز المحصصة في بورصة لامركزية (DEX).
سيحتاج المطورون إلى تشغيل مثل هذه الوظائف على فترات للحفاظ على تشغيل التطبيق بسلاسة. ومع ذلك، قد يؤدي هذا إلى ضياع المزيد من الساعات في المهام الدنيوية للمطورين، ولهذا السبب تعد أتمتة تنفيذ العقود الذكية جذابة.
تقدم بعض شبكات أوراكل اللامركزية خدمات أتمتة، والتي تسمح لعقد أوراكل خارج السلسلة بتشغيل وظائف العقد الذكي وفقًا للمعلمات التي يحددها المستخدم. عادةً، يتطلب هذا "تسجيل" العقد المستهدف مع خدمة أوراكل، وتوفير الأموال لدفع مشغل أوراكل، وتحديد الشروط أو الأوقات لتشغيل العقد.
توفر شبكة Keeper (opens in a new tab) الخاصة بـ Chainlink خيارات للعقود الذكية للاستعانة بمصادر خارجية لمهام الصيانة الدورية بطريقة لامركزية وبأقل قدر من الثقة. اقرأ وثائق Keeper (opens in a new tab) الرسمية للحصول على معلومات حول جعل عقدك متوافقًا مع Keeper واستخدام خدمة Upkeep.
كيفية استخدام خدمات أوراكل على البلوك تشين
هناك العديد من تطبيقات أوراكل التي يمكنك دمجها في تطبيقك اللامركزي على إيثريوم:
Chainlink (opens in a new tab) - توفر شبكات أوراكل اللامركزية من Chainlink مدخلات ومخرجات وحسابات مقاومة للعبث لدعم العقود الذكية المتقدمة على أي بلوك تشين.
RedStone Oracles (opens in a new tab) - RedStone هي خدمة أوراكل معيارية لامركزية توفر خلاصات بيانات محسنة للغاز. وهي متخصصة في تقديم خلاصات أسعار للأصول الناشئة، مثل رموز التحصيص السائل (LSTs)، ورموز إعادة التحصيص السائل (LRTs)، ومشتقات تحصيص بيتكوين.
Chronicle (opens in a new tab) - تتغلب Chronicle على القيود الحالية لنقل البيانات على السلسلة من خلال تطوير خدمات أوراكل قابلة للتوسع حقًا وفعالة من حيث التكلفة ولامركزية ويمكن التحقق منها.
Witnet (opens in a new tab) - Witnet هي خدمة أوراكل مفتوحة بدون إذن ولامركزية ومقاومة للرقابة تساعد العقود الذكية على التفاعل مع أحداث العالم الحقيقي بضمانات اقتصادية تشفيرية قوية.
UMA Oracle (opens in a new tab) - تسمح خدمة أوراكل المتفائلة من UMA للعقود الذكية بتلقي أي نوع من البيانات بسرعة لتطبيقات مختلفة، بما في ذلك التأمين والمشتقات المالية وأسواق التنبؤ.
Tellor (opens in a new tab) - Tellor هو بروتوكول أوراكل شفاف ومفتوح بدون إذن لعقدك الذكي للحصول بسهولة على أي بيانات متى احتاج إليها.
Band Protocol (opens in a new tab) - Band Protocol هي منصة أوراكل للبيانات عبر السلاسل تقوم بتجميع وربط بيانات العالم الحقيقي وواجهات برمجة التطبيقات بالعقود الذكية.
Pyth Network (opens in a new tab) - شبكة Pyth هي شبكة أوراكل مالية من الطرف الأول مصممة لنشر بيانات العالم الحقيقي المستمرة على السلسلة في بيئة مقاومة للعبث ولامركزية ومستدامة ذاتيًا.
API3 DAO (opens in a new tab) - تقدم API3 DAO حلول أوراكل من الطرف الأول توفر شفافية أكبر للمصدر وأمانًا وقابلية للتوسع في حل لامركزي للعقود الذكية
Supra (opens in a new tab) - مجموعة أدوات متكاملة رأسيًا من الحلول عبر السلاسل التي تربط جميع شبكات البلوك تشين، العامة (الطبقة الأولى والطبقة الثانية) أو الخاصة (الشركات)، مما يوفر خلاصات أسعار أوراكل لامركزية يمكن استخدامها لحالات الاستخدام على السلسلة وخارج السلسلة.
Gas Network (opens in a new tab) - منصة أوراكل موزعة توفر بيانات أسعار الغاز في الوقت الفعلي عبر البلوك تشين. من خلال جلب البيانات من مزودي بيانات أسعار الغاز الرائدين على السلسلة، تساعد Gas Network في دفع قابلية التشغيل البيني. تدعم Gas Network البيانات لأكثر من 35 سلسلة، بما في ذلك الشبكة الرئيسية لإيثريوم والعديد من شبكات الطبقة الثانية الرائدة.
DIA (opens in a new tab) - شبكة أوراكل عبر السلاسل تقدم خلاصات بيانات يمكن التحقق منها لأكثر من 20,000 أصل عبر جميع فئات الأصول الرئيسية. تستمد DIA بيانات التداول الأولية مباشرة من أكثر من 100 سوق أولي وتحسبها على السلسلة، مما يضمن شفافية البيانات الكاملة وقابلية التحقق مع تكوينات مخصصة لأي حالة استخدام.
Stork (opens in a new tab) - تقدم Stork بيانات الأسعار بزمن انتقال منخفض للغاية، وتدعم مجموعة واسعة من حالات الاستخدام بما في ذلك الأسواق الدائمة، وبروتوكولات الإقراض، وأنظمة التمويل اللامركزي البيئية، مع دعم الأصول الجديدة بسرعة عند الإدراج.
قراءة إضافية
المقالات
- ما هي خدمة أوراكل على البلوك تشين؟ (opens in a new tab) — Chainlink
- ما هي خدمة أوراكل على البلوك تشين؟ (opens in a new tab) — باتريك كولينز
- خدمات أوراكل اللامركزية: نظرة عامة شاملة (opens in a new tab) — جوليان ثيفينارد
- تنفيذ خدمة أوراكل على البلوك تشين في إيثريوم (opens in a new tab) – بيدرو كوستا
- لماذا لا تستطيع العقود الذكية إجراء استدعاءات لواجهة برمجة التطبيقات؟ (opens in a new tab) — StackExchange
- إذن أنت تريد استخدام خدمة أوراكل للأسعار (opens in a new tab) — samczsun
مقاطع الفيديو
- خدمات أوراكل وتوسيع فائدة البلوك تشين (opens in a new tab) — Real Vision Finance
البرامج التعليمية
- كيفية جلب السعر الحالي لإيثريوم في Solidity (opens in a new tab) — Chainlink
- استهلاك بيانات أوراكل (opens in a new tab) — Chronicle
مشاريع أمثلة