Mengakses data dunia nyata menggunakan RedStone Oracle (Pull)
Halaman ini akan menjelaskan cara Anda dapat mengakses data oracle menggunakan RedStone Pull.
RedStone adalah ekosistem data yang menyediakan data yang sering diperbarui, dapat diandalkan, dan beragam untuk dApp dan smart contract Anda yang di-deploy di Lisk.
Cara Mengambil Data Oracle dari RedStone
Untuk membuat smart contract yang secara langsung mengambil data terbaru dari RedStone oracle, ikuti panduan ini.
Panduan ini menggunakan model RedStone Pull untuk mengambil data.
Untuk gambaran umum mengenai berbagai modul yang ditawarkan RedStone untuk menerima data oracle, kunjungi Oracles > RedStone.
Panduan ini menggunakan Hardhat untuk membuat smart contract. Jika Anda ingin menggunakan Foundry, silakan cek dokumentasi RedStone untuk instruksi.
Dependensi
- ethers ^5.7.2
- hardhat ^2.14.0
Instalasi EVM Connector
Instal paket @redstone-finance/evm-connector.
npm install @redstone-finance/evm-connector
Mengimpor evm connector
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.9;
/**
* Mengimpor EVM connector
*/
import "@redstone-finance/evm-connector/contracts/data-services/RapidDemoConsumerBase.sol";
contract YourContract is RapidDemoConsumerBase {
// ...
}
Mendapatkan Data Oracle
Dapatkan data oracle menggunakan fungsi-fungsi yang disediakan oleh EVM connector.
Mendapatkan Satu Nilai
Untuk mendapatkan satu data price feed, gunakan fungsi getOracleNumericValueFromTxMsg()
dan berikan ID data feed sebagai parameter.
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.9;
/**
* Mengimpor EVM connector
*/
import "@redstone-finance/evm-connector/contracts/data-services/RapidDemoConsumerBase.sol";
contract YourContract is RapidDemoConsumerBase {
// ...
/**
* Mendapatkan harga terbaru dari ETH
*/
function getLatestEthPrice() public view returns (uint256) {
bytes32 dataFeedId = bytes32("ETH");
return getOracleNumericValueFromTxMsg(dataFeedId);
}
}
Mendapatkan Beberapa Nilai
Untuk mendapatkan data dari beberapa price feed, gunakan fungsi getOracleNumericValuesFromTxMsg()
dan berikan array ID data feed sebagai parameter.
/**
* Mendapatkan harga terbaru dari ETH dan BTC
*/
function getLatestEthBtcPrices() public view returns (uint256[] memory) {
bytes32[] memory dataFeedIds = new bytes32[](2);
dataFeedIds[0] = bytes32("ETH");
dataFeedIds[1] = bytes32("BTC");
uint256[] memory values = getOracleNumericValuesFromTxMsg(dataFeedIds);
return values;
}
Testing
Untuk mengetes fungsi-fungsi yang terkait dengan EVM connector dalam contract Anda, maka Anda perlu me-wrap contract menggunakan WrapperBuilder
yang disediakan oleh paket @redstone-finance/evm-connector
.
import { expect } from "chai";
import { ethers } from "hardhat";
import { WrapperBuilder } from "@redstone-finance/evm-connector";
describe("YourContract", function () {
describe("RedStone", function () {
it("Get ETH price securely", async function () {
const YourContract = await ethers.getContractFactory("YourContract");
const contract = await YourContract.deploy();
const wrappedContract = WrapperBuilder.wrap(contract).usingDataService({
dataFeeds: ["ETH"],
});
// Berinteraksi dengan contract (mengambil nilai oracle secara aman)
const ethPriceFromContract = await wrappedContract.getLatestEthPrice();
console.log("Latest ETH price:");
console.log({ ethPriceFromContract });
});
});
});
Sekarang jalankan tesnya:
npx hardhat test
Ini akan menampilkan harga ETH terbaru di konsol:
Latest ETH price:
{ ethPriceFromContract: BigNumber { value: "250255087192" } }
Deploy smart contract di Lisk
Untuk deploy smart contract di Lisk Sepolia atau Lisk Mainnet, ikuti panduan berikut: