أوراكل

في مناقشة أساسيات blockchain ، ناقشنا كيف تنسق شبكات blockchain العامة هذه الأدوات القوية لإنشاء حالة شبكة يمكن إنشاؤها والحفاظ عليها من قبل المشاركين في الشبكة.

ومع ذلك ، فإن حالة الشبكة هذه لا تنطبق إلا داخل حدود الشبكة نفسها. يمكننا فقط ضمان انتقالات الحالة للمشاركين في الشبكة الذين يقومون بتشغيل برنامج عميل blockchain الخاص بنا. ماذا عن البيانات الموجودة خارج هذه الشبكة ، وماذا عن بيانات “العالم الحقيقي” ، مثل تقارير الطقس وتفاصيل الحوادث أو أسعار الأسهم؟

بالإضافة إلى ذلك ، ماذا لو أردنا التفاعل مع الحوسبة الخارجية في العالم الخارجي؟ ستكون خوارزمية التعلم الآلي ، أو مولد الأرقام العشوائية ، أو أتمتة المهام المدفوعة بالحدث أمثلة على الحسابات الخارجية التي ستكون ضرورية لبناء عقود ذكية غنية بالميزات.

توجد مثل هذه البيانات والحسابات الخارجية ولكنها تتجاوز حدود الثقة التي تحددها بروتوكولات blockchain الخاصة بنا.

إحدى الطرق التي حاول بها مطورو blockchain سد الفجوة هي من خلال ما يسمى خارج السلسلة oracles..تعتبر  oracles  خارج السلسلة عبارة عن وكلاء يعثرون على معلومات العالم الحقيقي ويتحققون منها وإرسالها إلى blockchain لاستخدامها بواسطة العقود الذكية. يمكن أن يطلقوا عمليات تنفيذ ذكية للعقود عند الحصول على البيانات أو تلبية الشروط المحددة مسبقًا (مثل الوقت والطقس والتتبع والمدفوعات). يتم توفير أوراكل خارج السلسلة من قبل منظمات مثل Provable Things و Chainlink Labs, والمزيد.

يرجى ملاحظة أن DeFi قد أدى إلى وجود oracles على السلسلة ، وخاصة التعامل مع أسعار التوكن، والتي سنناقشها أكثر في المقال الخاص بـ DeFi. مثل هذه الأمثلة على سلسلة oracles هي Chainlink’s Data Feeds  وUniswap’s Observations,  و خلاصات MakerDAO.

غالبًا ما يُشار إلى العقد الذكي الذي يستخدم أوراكل في بعض الجوانب باسم العقد الذكي الهجين (Hybrid Smart Contract.).

ثقة

من المهم للغاية أن نفهم أن oracles مثل تلك التي نناقشها هنا يمكن أن تتطلب الثقة. يعد فهم مصدر البيانات أمرًا ضروريًا لتشغيل عقد ذكي لامركزي. عند استخدام أوراكل ، من المهم بناء آليات تعاقد ذكية يمكنها توقع الأخطاء أو الفساد المحتمل ، حيث يمكن أن تستسلم الأوراكل للعديد من متجهات الهجوم.

إن وجود أوراكل واحد أو مصدر بيانات واحد يقدم بياناتك أو تنفيذ الحساب الخاص بك يخلق مصدرًا واحدًا للفشل لعقدك الذكي ، ويعني أن تطبيقك اللامركزي ليس لامركزيًا في الواقع. ستحتاج إلى التأكد من أن شبكة أوراكل التي تعمل معها تعمل في سياق لامركزي قدر الإمكان. على سبيل المثال ، إذا كنت تريد بيانات التسعير ، فستحصل على بيانات التسعير من العديد من التبادلات ، والعديد من أوراكل blockchain المستقلة تقدم هذه البيانات.

من المهم أن تعرف أن مجرد إعداد خدمة أوراكل بنفسك يمكن أن يعني أن تطبيقك مركزي ، وربما لا يحتوي على بيانات أو تنفيذ عالي الجودة. لذلك نريد تجنب إعدادها بأنفسنا ، ولكن أيضًا بذل العناية الواجبة للتأكد من أن النظام الذي نعمل معه لا مركزي.

قامت خدمات مثل Chainlink ببناء المزيد من الشبكات اللامركزية للتحوط ضد مركزية الثقة ، يمكنك قراءة المزيد حول كيفية قيام Chainlink بذلك هنا وإلقاء نظرة عامة على أوراكل اللامركزية هنا.

آلية أوراكل الأساسية

في أبسط صوره ، يحتاج العقد الذكي الذي يستخدم أوراكل إلى تنفيذ طريقة من أجل:

  • قدم الطلب إلى أوراكل ، و
  • تلقي استجابة أوراكل من طريقة رد الاتصال

يُعرف هذا غالبًا باسم نموذج طلب وتلقي أوراكل. ما لم تقم بإعداد الخدمة بنفسك ، عادةً ما تتطلب المكالمات الخارجية إلى oracles رسومًا مرفقة لتوفير البيانات في عقدك.

هناك طرق متعددة لتحقيق ذلك ؛ دعنا نلقي نظرة على نسخة مبسطة من هذا المثال باستخدام Provable  أدناه:

import "github.com/provable-things/ethereum-api/provableAPI.sol";

contract DieselPrice is usingProvable {
    uint dieselPriceUSD;

    constructor() public {
        provable_query("URL", "xml(https://www.fueleconomy.gov/ws/rest/fuelprices).fuelPrices.diesel");
    }

    function __callback (bytes32 myid, string result) public {
        require(msg.sender == provable_cbAddress());
        dieselPriceUSD = parseInt(result);
    }
}

في هذا الكود ، نستدعي واجهة برمجة التطبيقات (API) الخاصة بـ Provable  لسعر الديزل عند إنشاء العقد. الاستعلام الأول مجاني ، ولكن سيتعين علينا توفير ETH لدفع تكاليف طلباتنا للمضي قدمًا. تؤدي المكالمة إلى بدء حدث ، مما يتيح لعقد Provable  لسحب البيانات من تغذية البيانات خارج السلسلة وتقديم النتيجة لعقدنا. يخزن العقد هذه القيمة dieselPriceUSD.

النموذج العام هو أن يرسل عقدك حدثًا ، إما إلى عقد آخر أو ببساطة في الكتلة التي تم إنشاؤها. ستقوم خدمة أوراكل باكتشاف هذا الحدث ، وسحب البيانات المطلوبة ، والرد على عقدك. تتطلب منك خدمات أوراكل أن يكون لديك طريقة قياسية ، مثل __callback ، يمكن أن تستهدفها معاملتها عند الرد على استعلام أوراكل.

آلية أوراكل اللامركزية

في المثال أعلاه ،  نظرنا في سحب البيانات من مصدر ومزود واحد. يمكن لطلبات مثل هذه معًا أن تجعلنا نمتلك تطبيقًا أكثر لامركزية ، لكننا سنستمر في توجيهه عبر نفس المؤسسة.

لنلقِ نظرة على مثال آخر لسحب البيانات في سياق لامركزي ، على سبيل المثال ، من خلاصة بيانات Chainlink.

يمكنك الاطلاع على أحدث إصدار من هذا الكود في وثائق Chainlink.


pragma solidity ^0.6.7;

import "@chainlink/contracts/src/v0.6/interfaces/AggregatorV3Interface.sol";

contract PriceConsumerV3 {

    AggregatorV3Interface internal priceFeed;

    /**
     * Network: Kovan
     * Aggregator: ETH/USD
     * Address: 0x9326BFA02ADD2366b30bacB125260Af641031331
     */
    constructor() public {
        priceFeed = AggregatorV3Interface(0x9326BFA02ADD2366b30bacB125260Af641031331);
    }

    /**
     * Returns the latest price
     */
    function getThePrice() public view returns (int) {
        (
            uint80 roundID, 
            int price,
            uint startedAt,
            uint timeStamp,
            uint80 answeredInRound
        ) = priceFeed.latestRoundData();
        return price;
    }
}

في هذا المثال ، نقوم بسحب سعر Ethereum بالدولار الأمريكي إلى عقدنا الذكي. نقوم بذلك عن طريق الاستعلام عن عقد آخر اتبعت بالفعل نموذج الطلب الأساسي بين العديد من مزودي البيانات و oracles المختلفين. من المهم أن تستخدم الشبكة مزودي بيانات مختلفين و oracles بحيث لا توجد أبدًا نقطة مرجعية واحدة.

يمكنك رؤية تصور لهذا العقد والعقد المختلفة التي تجمع البيانات لها على data.chain.link.

ختاماُ 

ينمو نظام oracle البيئي بسرعة مثل blockchain ، وسوف نتطرق إليه أكثر لاحقًا. في الوقت الحالي ، من المهم أن نرى كيف تسمح لنا oracles بعبور “حدود الثقة” في blockchain ، وما هي افتراضات الثقة التي تتطلبها ، ونمط التصميم الأساسي لدمج تدفق البيانات هذا.

مصادر إضافية 

  • ويكي: Oracles (Ethereum.org) نظرة عامة رائعة على oracles على Ethereum مع  كود تجريبي لـ Chainlink Wikipedia: Blockchain Oracle
  •  وثائق: Chainlink سلسلة من المستندات المنسقة جيدًا توضح كيفية البدء مع Chainlink والخدمات والشبكات المختلفة المتاحة.
  •  البرنامج التعليمي:Implementing a Blockchain Oracle on Ethereum 
  •  كود :Provable Things Ethereum Examples  مجموعة من الأمثلة من  Provable ، قديمة قليلاً ولكن لا يزال بإمكانها توفير مصدر مرجعي. 
  •  مقال أكاديمي: A Study of Blockchain Oracles  فحص تقني لأوراكل blockchain المشار إليها في ويكيبيديا. 

 مقال: So You Want to Use a Price Oracle مقالة مثيرة للاهتمام (وإن كانت عن أوراكل على السلسلة) تناقش موجهات الهجوم.

إضافة تعليق