توسعه دهندگان Web3 غالباً به جای اینکه تبدیل به ارز فیات شوند ، یک cryptocurrency بومی پلتفرم یا پروتکل را در جبهه نشان می دهند. اما در حالی که تمرکز روی ارز بومی آسان است ، نمایش تبدیل فیات ممکن است گزینه بهتری باشد. قیمت گذاری در Crypto دانش در مورد ارزش فعلی ارز را فرض می کند ، که تمایل به نوسان دارد و همچنین تجربه کمتری برای کاربران جدید ایجاد می کند ، که بسیاری از آنها احساس راحتی بیشتری به مراجعه به دلار یا ارز بومی خود می کنند.
خوشبختانه ، تبدیل بین ارزهایی مانند ETH و USD با فیدهای داده ChainLink ساده است ، به این معنی که توسعه دهندگان می توانند فقط با چند قدم آسان تجربه بهتری را برای کاربران فراهم کنند. این آموزش فنی نحوه نمایش هر دو قیمت Crypto و Fiat را در یک جبهه با استفاده از فید قیمت ChainLink ETH / USD نشان می دهد.
فیدهای داده ChainLink چیست؟
فیدهای داده های زنجیره ای مجموعه ای از قراردادهای هوشمند است که دسترسی به منابع داده ایمن و قابل اعتماد در دنیای واقعی را فراهم می کند. آنها از اپراتورهای گره مستقل ، بسیار معتبر و توزیع شده جغرافیایی بهره می برند که به اطمینان از قابلیت اطمینان داده های برگشتی کمک می کند. به عنوان مثال ، فید ETH / USD ، در حال حاضر از 31 اوراکل جداگانه یا منبع اطلاعاتی برای تعیین پاسخ قابل اعتماد فعلی برای قیمت ETH در USD استفاده می کند.
چرا برای همان اطلاعات به 31 منبع نیاز داریم؟استفاده از چندین منبع برای جمع آوری یک پاسخ معتبر به این معنی است که نمی توان نقطه ای از شکست را وجود داشت و در برابر دستکاری داده ها محافظت می کند.
یادداشتی در مورد ارائه دهندگان
هنگام تعامل با قراردادهای هوشمند ، لازم است یک ارائه دهنده برای اتصال Web3 داشته باشید. اغلب ، این از طریق اتصال کیف پول کاربر در دسترس خواهد بود. اگر این در دسترس نیست ، یا نیازی به اتصال کیف پول کاربر ندارید ، می توانید همان عملکرد را از طریق انجام دهید
Const Provider = Ethers. Providers. jsonrpcprovider ('rpc_url_here') ؛rpc_url_here را می توان از ارائه دهنده گره مانند کیمیاگری ، Infura ، Moralis یا QuickNode بدست آورد. ارائه دهنده "دروازه" ما به blockchain است.
شرط دیگر این آموزش ، یک کتابخانه Ethereum JavaScript است. در این مثال ، من از اترها استفاده می کنم. برای مثال برای کار باید آن را نصب کنید.
NPM نص ب-Ether s-Save
استفاده از تبدیل ETH / USD با استفاده از JavaScript
اکنون برای کدی که لازم است فید قیمت ETH / USD را در قسمت جلوی نمایش دهید.
اگر مایل به دنبال کردن هستید ، کد این مثال را می توان در نمونه های repo یافت. برای اجرای این نمونه به صورت محلی ، دستورالعمل های موجود در readme. md را دنبال کنید. این مثال از SVELTE استفاده می کند ، اما همان مفاهیم باید در مورد هر چارچوب JavaScript Frontend مانند React یا Vue اعمال شود. همچنین چندین کیت استارت دیگر وجود دارد که می توانید در SmartContract Github Repo استفاده کنید.
این کد را می توان از طریق بیانیه واردات در جبهه استفاده کرد
وارد كردن از جانب '../utils/getethprice';
سپس ، نتایج را به عنوان ارزش ETH در USD ذخیره کنید
مقدار = در انتظار GetEthPrice () ؛
از این مقدار استفاده کنید تا از ETH به USD بروید ، با فرض اینکه Ethamount مقدار ETH برای تبدیل است.
UsdValue = عدد(ethamount * مقدار) . tofixed (2);
در اینجا پرونده کامل وجود دارد:
~/utils/getethprice. js وارد كردن از جانب "اتر"; صادر کردن درز تابع با قیمت() محاصره کردن ارائه دهنده = جدید ethers. providers. jsonrpcprovider ('rpc_url_here'); // این ثابت رابط ABI قرارداد را توصیف می کند ، که قیمت ETH را ارائه می دهد // به نظر می رسد خیلی زیاد است ، و این است ، اما این اطلاعات هنگام تهیه قرارداد تولید می شود // ما باید به اترها اطلاع دهیم که چگونه با این قرارداد ارتباط برقرار کنند. محاصره کردن AggregatorV3InterfaceABI = [ ورودی: [], نام: 'اعداد اعشاری', خروجی ها: [ نوع داخلی: 'uint8', نام: '', نوع: 'uint8' >], قابلیت اطمینان: 'چشم انداز', نوع: 'تابع' >, ورودی: [], نام: 'شرح', خروجی ها: [ نوع داخلی: "رشته", نام: '', نوع: "رشته" >], قابلیت اطمینان: 'چشم انداز', نوع: 'تابع' >, ورودی: [ نوع داخلی: 'uint80', نام: '_roundid', نوع: 'uint80' >], نام: 'getrounddata', خروجی ها: [ نوع داخلی: 'uint80', نام: "دور", نوع: 'uint80' >, نوع داخلی: "int256", نام: 'پاسخ', نوع: "int256" >, نوع داخلی: 'uint256', نام: "شروع شده", نوع: 'uint256' >, نوع داخلی: 'uint256', نام: "به روز شده", نوع: 'uint256' >, نوع داخلی: 'uint80', نام: "پاسخ داد", نوع: 'uint80' > ], قابلیت اطمینان: 'چشم انداز', نوع: 'تابع' >, ورودی: [], نام: "Latestrounddata", خروجی ها: [ نوع داخلی: 'uint80', نام: "دور", نوع: 'uint80' >, نوع داخلی: "int256", نام: 'پاسخ', نوع: "int256" >, نوع داخلی: 'uint256', نام: "شروع شده", نوع: 'uint256' >, نوع داخلی: 'uint256', نام: "به روز شده", نوع: 'uint256' >, نوع داخلی: 'uint80', نام: "پاسخ داد", نوع: 'uint80' > ], قابلیت اطمینان: 'چشم انداز', نوع: 'تابع' >, ورودی: [], نام: "نسخه", خروجی ها: [ نوع داخلی: 'uint256', نام: '', نوع: 'uint256' >], قابلیت اطمینان: 'چشم انداز', نوع: 'تابع' > ]; // آدرس قرارداد که قیمت ETH را ارائه می دهد محاصره کردن addr = '0x8a753747a1fa494ec906ce90e9f37563a8af630e'; // ما نمونه ای از قرارداد را ایجاد می کنیم که می توانیم با آن ارتباط برقرار کنیم محاصره کردن PriceFeed = جدید ETHERS. CONTRACT (ADDR ، AggregatorV3Interfaceabi ، ارائه دهنده) ؛ // داده ها را از آخرین دور قرارداد دریافت می کنیم اجازه دهید rounddata = در انتظار pricefeed. latestrounddata () ؛ // تعیین کنید که تعداد اعشار از قیمت آن وجود دارد (10 ** اعشار) اجازه دهید اعشار = در انتظار pricefeed. decimals () ؛ // ما قیمت را به یک شماره تبدیل می کنیم و آن را برمی گردانیم برگشت عدد((RoundData. Answer. ToString () / ریاضی. pow (10، اعشار)). tofixed (2)); >AggregatorV3Interfaceabi یا ABI بخش عمده ای از کدهای مورد نیاز خود را تشکیل می دهد. این ساختار داده برای قراردادی است که ما با آن در تعامل خواهیم بود ، که باید به اترها اطلاع دهیم. به طور معمول ، ممکن است این موارد را در پرونده های جداگانه JSON در یک پروژه جلوی ذخیره کنید. در این حالت ، برای نگه داشتن همه چیز در پرونده UTIL گنجانده شده است.
// آدرس قرارداد که قیمت ETH را ارائه می دهد محاصره کردن addr = '0x8a753747a1fa494ec906ce90e9f37563a8af630e';
این آدرس قرارداد بسته به شبکه یا جفت قیمت تغییر خواهد کرد. می توانید از هر یک از این آدرس های قرارداد خوراک داده استفاده کنید.
// داده ها را از آخرین دور قرارداد دریافت می کنیم اجازه دهید RoundData = منتظر PriceFeed. latestroundData () باشد. // تعیین کنید که تعداد اعشار از قیمت آن وجود دارد (10 ** اعشار) اجازه دهید اعشار = در انتظار PriceFeed. Decimals () ؛ // ما قیمت را به یک شماره تبدیل می کنیم و آن را برمی گردانیم شماره برگشتی ((RoundData. Answer. ToString () / Math. pow (10 ، اعشار)). tofixed (2)) ؛
تعامل با قرارداد ساده است. ما LatestroundData را دریافت می کنیم ، که برمی گردد:
- Roundid: شناسه گرد.
- پاسخ: قیمت.
- شروع: زمان شروع زمان شروع دور.
- به روز شده: جدول زمانی از زمان به روزرسانی دور.
- AnsweredInround: شناسه دور دور که در آن جواب محاسبه شده است. ما علاقه مند به پاسخ هستیم. این قیمت ETH با یک هشدار جزئی خواهد بود. ما باید تعداد مکانهای اعشاری را که در پاسخ گنجانده می شود ، بدانیم. این جایی است که اعشار وارد می شوند. تعداد مکان های اعشاری را برای آن باز می گرداند.
ما از پاسخ و اعشاری برای بازگشت مقدار یک ETH استفاده می کنیم:
شماره برگشتی ((RoundData. Answer. ToString () / Math. pow (10 ، اعشار)). tofixed (2)) ؛
قرار دادن مقدار برای استفاده
پس از داشتن ارزش یک ETH ، می توانیم از آن برای تبدیل ETH به USD با سهولت استفاده کنیم. در مثال زیر ، Raweth رشته ای است که از تراز یک قرارداد بازگردانده می شود.
اخلاق $ <(Number(rawETH) * value).toFixed(2)>دلار آمریکا
فیدهای داده های زنجیره ای یک راه حل قابل اعتماد برای تبدیل مقدار ما از ETH به USD با استفاده از یک روش ایمن ارائه می دهند.
استفاده از استحکام
تاکنون ، ایجاد یک تابع ابزار در یک برنامه جبهه ساده به نظر می رسد. اما ، اگر بتوانیم نیاز به توسعه دهندگان جبهه را برای نگرانی در مورد قیمت گذاری و رسیدگی به آنها برای آنها از بین ببریم؟
با چند تغییر در قرارداد خود ، می توانید داده های قیمت فعلی را به کاربر نهایی ارائه دهید-همه آنها باید نگران باشند که به قرارداد شما متصل شود. این کار جلوی مورد نیاز را ساده می کند. بیایید نگاهی به یک قرارداد نمونه بیندازیم.
استحکام پراگما ^0. 8. 0; // وارد کردن رابط جمع کننده زنجیره ای وارد كردن "@chainlink/contracts/src/v0. 8/interfaces/anggregatorv3interface. sol"; // ایجاد قرارداد قرارداد youlawesomecontract// اعلام PriceFeed به عنوان یک رابط جمع کننده AggregatorV3Interface PriceFeed داخلی ؛ سازنده() /** قیمت را تعریف کنید * شبکه: Rinkeby * جمع کننده: ETH/USD * آدرس: 0x8a753747a1fa494ec906ce90e9f37563a8af630e */ PriceFeed = AggregatorV3Interface ( 0x8a753747a1fa494ec906ce90e9f37563a8af630e ); > // منطق دیگر قرارداد در اینجا /** * آخرین قیمت و # اعشار را برای استفاده برمی گرداند */ تابع گله() عمومی چشم انداز بازگرداندن (int256 ، uint8)// مقادیر برگشتی بلااستفاده از آن خارج شده اند ، از این رو تعداد زیادی "،" (، int256 قیمت ، ، ،) = PriceFeed. LatestroundData () ؛ DECIMALS UINT8 = PriceFeed. Decimals () ؛ برگشت (قیمت ، اعشار) ؛ > >
اول ، ما همان رابط جمع کننده را که در نسخه جلوی آن استفاده کردیم وارد می کنیم.
وارد كردن "@chainlink/contracts/src/v0. 8/interfaces/anggregatorv3interface. sol";
سپس ما باید به جمع کننده آدرس قرارداد فید قیمت مورد علاقه ما را اطلاع دهیم.
PriceFeed = AggregatorV3Interface ( 0x8a753747a1fa494ec906ce90e9f37563a8af630e );
در عملکرد GetLatestPrice () ما ، ما PriceFeed. LatestroundData () را می نامیم. PriceFeed در حال ارجاع همان قراردادی است که ما در UTIL GetEthPrice در بالا استفاده کردیم. برمی گردد:
- Roundid: شناسه گرد.
- پاسخ: قیمت.
- شروع: زمان شروع زمان شروع دور.
- به روز شده: جدول زمانی از زمان به روزرسانی دور.
- AnsweredInround: شناسه دور دور که در آن جواب محاسبه شده است.
کد در اینجا ممکن است کمی عجیب به نظر برسد. تنها ارزشی که به آن علاقه مندیم پاسخ است. بنابراین ، ما مقادیر دیگر را به متغیرها اختصاص نمی دهیم. ترک آنها از ذخیره داده های بلااستفاده جلوگیری می کند.
(، int256 قیمت ، ، ،) = PriceFeed. LatestroundData () ؛
تغییر در جبهه
اکنون که این ارزش در قرارداد هوشمند شما گنجانده شده است ، ما فقط باید از قرارداد در جبهه به ارزش دسترسی پیدا کنیم.
درز تابع با قیمت() اجازه دهید [اخلاق ، اعشار] = در انتظار youlawesomecontract. getLatestPrice () ؛ اخلاق = عدد(اخلاق / ریاضی. pow (10، اعشار)). tofixed (2); برگشت EthPrice ؛ >
این یک رابط کاربری بسیار ساده تر برای مصرف کنندگان قرارداد ما ایجاد می کند ، زیرا آنها نیازی به دانستن در مورد اوراکل ها یا واردات ABI جداگانه ندارند.
خلاصه
در این آموزش فنی ، ما نشان داده ایم که ادغام یک فید داده های زنجیره ای در DAPP شما چقدر آسان است و به کاربران این امکان را می دهد تا به راحتی یک تبدیل قیمت USD / ETH را ارجاع دهند. طیف وسیعی از فیدهای قیمت زنجیره ای برای هر دو ارز رمزنگاری و ارزهای فیات موجود وجود دارد که به توسعه دهندگان این فرصت را می دهد تا با استفاده از جفت انتخاب خود ، این مراحل را تطبیق دهند.
با مراجعه به jusic. link یا خواندن اسناد در docs. chain. link در مورد chainlink بیشتر بدانید. برای بحث در مورد ادغام ، به یک متخصص مراجعه کنید.< SPAN> ETHPRICE =
کتاب آموزش بورس...
ما را در سایت کتاب آموزش بورس دنبال می کنید
برچسب : نویسنده : محمود استادمحمد بازدید : 25 تاريخ : پنجشنبه 19 مرداد 1402 ساعت: 14:27