وقتی در قراردادتان به اطلاعاتی خارج از بلاکچین نیاز دارید، یکی از بهترین راهکار ها استفاده از اوراکل ها هستند.
بسته به پروژه هم میتوان اوراکل شخصی متناسب با نیاز های قرارداد هوشمند خود را پیاده سازی کرد و هم میتوانید از اوراکل های آماده استفاده کرد.
بیشتر بخوانید: دسترسی به خارج از بلاکچین با اوراکل هادر اینجا به یک نمونه ارتباط با اوراکل اشاره می کنیم. (منبع کد)
import "github.com/oraclize/ethereum-api/oraclizeAPI.sol";
contract OracleExample is usingOraclize {
string public EURUSD;
function updatePrice() public payable {
if (oraclize_getPrice("URL") > this.balance) {
//Handle out of funds error
} else {
oraclize_query("URL", "json(http://api.fixer.io/latest?symbols=USD).rates.USD");
}
}
function __callback(bytes32 myid, string result) public {
require(msg.sender == oraclize_cbAddress());
EURUSD = result;
}
}
در کد بالا با استفاده از تابع updatePrice() درخواست را به اوراکل میفرستیم.(خط 7) همانطور که میبینید تابع را از جنس payable در نظر گرفتیم چون برای ارسال درخواست باید مقداری اتر متناسب با هزینه های اوراکل مورد نظر ارسال شود. در خط 8 با استفاده از شرط بررسی می کنیم که هزینه خدمات اوراکل بیشتر از موجودی کانترکت است یا نه. اگر بیشتر بود باید خطا را مدیریت کنیم و اگر نبود درخواست را ارسال می کنیم. (خط 11)