Lesson 3

إنشاء عقد بسيط متكامل من Oracle

الآن بعد أن قمنا بإعداد Remix IDE الخاص بنا واستيراد مكتبات Chainlink الضرورية، سنقوم بصياغة عقد ذكي أساسي يتكامل مع أوراكل. سيتيح لنا ذلك جلب البيانات الخارجية والتعامل معها.

صياغة العقد: أساسيات تكامل Oracle


  1. بدءًا من الأساسيات:
    لنبدأ بتحديد عقدنا، وتحديد إصدار Solidity، واستيراد مكتبة Chainlink التي سنستخدمها:
    ``Solidity//SPDX-license-Identifier:
    MIT

صلابة البراغما ^ 0.8.21؛

استيراد «@chainlink /contracts/src/v0.8/الواجهات/المجمعv3interface.sol»؛


العقد: موجز الأسعار الداخلي لواجهة العقد المتكامل لـ Oracle {Aggregator V3;

//تمت إزالة الرؤية للمُنشئ
المُنشئ (العنوان _PriceFeed) {
    priceFeed = AggregatorV3Interface(_priceFeed);
}

1. 
في هذا الجزء، حددنا أن عقدنا سيستخدم موجز أسعار Chainlink. يأخذ المُنشئ عنوانًا لعقد تغذية الأسعار على شبكة Ethereum.

1. 
جلب البيانات من Oracle

1. 
دعونا نمدد عقدنا لجلب أحدث سعر لإيثريوم:


دالة الصلابة getlatesTethPrice () تُرجع طريقة العرض العام (int) {
(,int price,,,) = priceFeed.latestRoundData();
return price;
}


1. 
تعطينا وظيفة `latesRoundData () `من واجهة Chainlink Aggregator بيانات متنوعة، بما في ذلك أحدث سعر.

## التعامل مع استجابات Oracle: إدارة البيانات بمجرد استلامها

غالبًا ما تأتي البيانات التي يتم جلبها من oracles بتنسيقات أولية قد لا تكون مناسبة على الفور لاحتياجاتنا. من الضروري معالجة هذه البيانات بشكل صحيح ضمن عقودنا الذكية:



1. 
تنسيق البيانات

1. 
لنفترض أن oracle تُرجع سعر Ethereum بالدولار الأمريكي ولكن مضروبًا في 10 ^ 8 لضمان عدم وجود أرقام عشرية (شائعة في إعدادات oracle). للحصول على السعر الفعلي، ستحتاج إلى تنسيق البيانات:


دالة الصلابة getFormatedethPrice () تُرجع طريقة العرض العام (int) {
int rawPrice = getLatestEthPrice();
return rawPrice / 10**8;
}


1. 
تقوم هذه الدالة بجلب السعر الخام، ثم تقسمه على 10 ^ 8 للحصول على القيمة الحقيقية.

1. 
معالجة الأخطاء

1. 
ضع في اعتبارك دائمًا احتمال فشل oracle في جلب البيانات:


دالة الصلابة safeGetLatestethPrice () تُرجع طريقة العرض العام (int) {
(,int price,,uint256 timestamp,) = priceFeed.latestRoundData();
require(timestamp > 0, “Failed to fetch data from the oracle”);
return price;
}


1. 
هنا، توفر وظيفة `latesRoundData () `أيضًا طابعًا زمنيًا. إذا كان الطابع الزمني هو 0، فهذا يعني على الأرجح أن أوراكل فشلت في استرداد البيانات، ونحن نتعامل مع ذلك باستخدام عبارة «require».
يجب أن تبدو الشفرة الكاملة كما يلي:

الصلابة
//معرف ترخيص SPDX: معهد ماساتشوستس للتكنولوجيا

صلابة البراغما ^ 0.8.21؛

استيراد «@chainlink /contracts/src/v0.8/الواجهات/المجمعv3interface.sol»؛


العقد: موجز الأسعار الداخلي لواجهة العقد المتكامل لـ Oracle {Aggregator V3;

//تمت إزالة الرؤية للمُنشئ
المُنشئ (العنوان _PriceFeed) {
    priceFeed = AggregatorV3Interface(_priceFeed);
}

تقوم الدالة getlatesTethPrice () بإرجاع العرض العام (int) {
    (,int price,,,) = priceFeed.latestRoundData();
    return price;
}

وظيفة getFormatedethPrice () إرجاع العرض العام (int) {
    int rawPrice = getLatestEthPrice();
    return rawPrice / 10**8;
}

تقوم الدالة safeGetLatestTethPrice () بإرجاع العرض العام (int) {
    (,int price,,uint256 timestamp,) = priceFeed.latestRoundData();
    require(timestamp > 0, "Failed to fetch data from the oracle");
    return price;
}

}
```

في نهاية هذا الدرس، يجب أن يكون لديك عقد ذكي أساسي متكامل من Oracle تمت صياغته داخل Remix. يجلب هذا العقد أحدث سعر لـ Ethereum ويعالج البيانات التي تم إرجاعها. في دروسنا القادمة، سننشر هذا العقد ونتعمق أكثر في أفضل الممارسات والفروق الدقيقة.

Disclaimer
* Crypto investment involves significant risks. Please proceed with caution. The course is not intended as investment advice.
* The course is created by the author who has joined Gate Learn. Any opinion shared by the author does not represent Gate Learn.
Catalog
Lesson 3

إنشاء عقد بسيط متكامل من Oracle

الآن بعد أن قمنا بإعداد Remix IDE الخاص بنا واستيراد مكتبات Chainlink الضرورية، سنقوم بصياغة عقد ذكي أساسي يتكامل مع أوراكل. سيتيح لنا ذلك جلب البيانات الخارجية والتعامل معها.

صياغة العقد: أساسيات تكامل Oracle


  1. بدءًا من الأساسيات:
    لنبدأ بتحديد عقدنا، وتحديد إصدار Solidity، واستيراد مكتبة Chainlink التي سنستخدمها:
    ``Solidity//SPDX-license-Identifier:
    MIT

صلابة البراغما ^ 0.8.21؛

استيراد «@chainlink /contracts/src/v0.8/الواجهات/المجمعv3interface.sol»؛


العقد: موجز الأسعار الداخلي لواجهة العقد المتكامل لـ Oracle {Aggregator V3;

//تمت إزالة الرؤية للمُنشئ
المُنشئ (العنوان _PriceFeed) {
    priceFeed = AggregatorV3Interface(_priceFeed);
}

1. 
في هذا الجزء، حددنا أن عقدنا سيستخدم موجز أسعار Chainlink. يأخذ المُنشئ عنوانًا لعقد تغذية الأسعار على شبكة Ethereum.

1. 
جلب البيانات من Oracle

1. 
دعونا نمدد عقدنا لجلب أحدث سعر لإيثريوم:


دالة الصلابة getlatesTethPrice () تُرجع طريقة العرض العام (int) {
(,int price,,,) = priceFeed.latestRoundData();
return price;
}


1. 
تعطينا وظيفة `latesRoundData () `من واجهة Chainlink Aggregator بيانات متنوعة، بما في ذلك أحدث سعر.

## التعامل مع استجابات Oracle: إدارة البيانات بمجرد استلامها

غالبًا ما تأتي البيانات التي يتم جلبها من oracles بتنسيقات أولية قد لا تكون مناسبة على الفور لاحتياجاتنا. من الضروري معالجة هذه البيانات بشكل صحيح ضمن عقودنا الذكية:



1. 
تنسيق البيانات

1. 
لنفترض أن oracle تُرجع سعر Ethereum بالدولار الأمريكي ولكن مضروبًا في 10 ^ 8 لضمان عدم وجود أرقام عشرية (شائعة في إعدادات oracle). للحصول على السعر الفعلي، ستحتاج إلى تنسيق البيانات:


دالة الصلابة getFormatedethPrice () تُرجع طريقة العرض العام (int) {
int rawPrice = getLatestEthPrice();
return rawPrice / 10**8;
}


1. 
تقوم هذه الدالة بجلب السعر الخام، ثم تقسمه على 10 ^ 8 للحصول على القيمة الحقيقية.

1. 
معالجة الأخطاء

1. 
ضع في اعتبارك دائمًا احتمال فشل oracle في جلب البيانات:


دالة الصلابة safeGetLatestethPrice () تُرجع طريقة العرض العام (int) {
(,int price,,uint256 timestamp,) = priceFeed.latestRoundData();
require(timestamp > 0, “Failed to fetch data from the oracle”);
return price;
}


1. 
هنا، توفر وظيفة `latesRoundData () `أيضًا طابعًا زمنيًا. إذا كان الطابع الزمني هو 0، فهذا يعني على الأرجح أن أوراكل فشلت في استرداد البيانات، ونحن نتعامل مع ذلك باستخدام عبارة «require».
يجب أن تبدو الشفرة الكاملة كما يلي:

الصلابة
//معرف ترخيص SPDX: معهد ماساتشوستس للتكنولوجيا

صلابة البراغما ^ 0.8.21؛

استيراد «@chainlink /contracts/src/v0.8/الواجهات/المجمعv3interface.sol»؛


العقد: موجز الأسعار الداخلي لواجهة العقد المتكامل لـ Oracle {Aggregator V3;

//تمت إزالة الرؤية للمُنشئ
المُنشئ (العنوان _PriceFeed) {
    priceFeed = AggregatorV3Interface(_priceFeed);
}

تقوم الدالة getlatesTethPrice () بإرجاع العرض العام (int) {
    (,int price,,,) = priceFeed.latestRoundData();
    return price;
}

وظيفة getFormatedethPrice () إرجاع العرض العام (int) {
    int rawPrice = getLatestEthPrice();
    return rawPrice / 10**8;
}

تقوم الدالة safeGetLatestTethPrice () بإرجاع العرض العام (int) {
    (,int price,,uint256 timestamp,) = priceFeed.latestRoundData();
    require(timestamp > 0, "Failed to fetch data from the oracle");
    return price;
}

}
```

في نهاية هذا الدرس، يجب أن يكون لديك عقد ذكي أساسي متكامل من Oracle تمت صياغته داخل Remix. يجلب هذا العقد أحدث سعر لـ Ethereum ويعالج البيانات التي تم إرجاعها. في دروسنا القادمة، سننشر هذا العقد ونتعمق أكثر في أفضل الممارسات والفروق الدقيقة.

Disclaimer
* Crypto investment involves significant risks. Please proceed with caution. The course is not intended as investment advice.
* The course is created by the author who has joined Gate Learn. Any opinion shared by the author does not represent Gate Learn.