オフチェーンデータの取得
価格フィードや外部API呼び出しなど、Chainlinkオラクルにデータを要求して受け取るスマートコントラクトを実装します。
「オフチェーンデータの取得」はCoddyKit上の無料Web3 & DApp Development Fundamentalsレッスンです。 これはレッスン3/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはWeb3 & DApp Development Fundamentals学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Web3 & DApp Development Fundamentalsコースには全3レッスンが含まれています。
このレッスンの一部はまだ翻訳されておらず、英語で表示されています。
Data Beyond the Blockchain
Smart contracts are powerful, but they operate in isolation on the blockchain. They can't directly access information from the 'real world' like current stock prices, weather data, or external API responses.
This limitation is known as the oracle problem. To overcome it, we use oracles.
Chainlink's Data Solution
Chainlink is a decentralized oracle network designed to securely connect smart contracts with off-chain data and services.
- It acts as a bridge between the blockchain and external systems.
- Chainlink nodes collect data from various sources.
- They then deliver this data to smart contracts in a reliable and verifiable way.
Real-Time Price Feeds
One of the most common and critical uses of Chainlink is providing price feeds. These feeds deliver up-to-date market prices for cryptocurrencies, commodities, and other assets directly to your smart contracts.
This is crucial for DeFi applications, lending protocols, and derivatives.
Interacting with Price Feeds
To get data from a Chainlink price feed, your smart contract interacts with a specific data feed contract deployed on the blockchain.
These data feed contracts all implement a standard interface called AggregatorV3Interface. This makes it easy for your contract to read the data.
How to Get Price Data
The primary function we use to fetch the latest price from an AggregatorV3Interface is latestRoundData().
It returns several pieces of information, including the actual price, when it was updated, and the round ID.
Build a Price Reader
Let's write a simple Solidity contract that reads the latest ETH/USD price from a Chainlink price feed. You can try running this in Remix, using the Sepolia testnet.
The address 0x694AA1769357215Ee4f0fFf93d2d05d454e5f5c4 is for the ETH/USD price feed on Sepolia.
pragma solidity ^0.8.0;
import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol";
contract PriceReader {
AggregatorV3Interface internal priceFeed;
constructor() {
// ETH/USD price feed address on Sepolia testnet
priceFeed = AggregatorV3Interface(0x694AA1769357215Ee4f0fFf93d2d05d454e5f5c4);
}
function getLatestPrice() public view returns (
uint80 roundId,
int answer,
uint256 startedAt,
uint256 updatedAt,
uint80 answeredInRound
) {
// Get the latest price data from the feed
(roundId, answer, startedAt, updatedAt, answeredInRound) = priceFeed.latestRoundData();
}
function getDecimals() public view returns (uint8) {
// Get the number of decimals used by the price feed
return priceFeed.decimals();
}
}Decoding Price Data
The answer returned by latestRoundData() is the actual price, but it's an int and scaled by a certain number of decimals.
You must call getDecimals() to know how many decimal places to account for. For example, if answer is 180000000000 and decimals is 8, the price is 1800.00000000.
Beyond Prices: Custom Data
While price feeds are common, Chainlink can also fetch almost any other type of off-chain data, or even generate verifiable randomness.
This requires a more generalized approach where your contract makes a request to a Chainlink node for specific data, and the node responds by calling back your contract.
The Request & Fulfill Pattern
For custom data, Chainlink uses a two-step process:
- Request: Your smart contract sends a request to a Chainlink oracle contract, specifying the data source (e.g., an API endpoint) and the job ID.
- Fulfill: A Chainlink node processes the request, fetches the off-chain data, and then sends a transaction back to your smart contract, calling a designated 'fulfill' function with the requested data.
This ensures data is delivered securely on-chain.
Oracle Integration Check
Consider a smart contract that needs to get the current weather conditions for a specific city. Which of the following best describes how a Chainlink oracle would typically facilitate this?
Lesson Summary
We've explored how smart contracts fetch off-chain data using Chainlink. You learned about:
- The oracle problem and Chainlink's solution.
- Interacting with Chainlink Price Feeds using
AggregatorV3Interface. - The
latestRoundData()function and interpreting its output. - The general 'request and fulfill' pattern for custom data requests.
Fetching external data securely is vital for building robust DApps!
よくある質問
「オフチェーンデータの取得」レッスンは無料ですか?
はい。「オフチェーンデータの取得」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Web3 & DApp Development Fundamentalsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Web3 & DApp Development Fundamentalsコースには全3レッスンが含まれています。
「オフチェーンデータの取得」で何を学びますか?
価格フィードや外部API呼び出しなど、Chainlinkオラクルにデータを要求して受け取るスマートコントラクトを実装します。 ブラウザで直接実行するハンズオンコードでWeb3 & DApp Development Fundamentalsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Web3 & DApp Development Fundamentalsを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのWeb3 & DApp Development Fundamentalsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/3です。
「オフチェーンデータの取得」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このWeb3 & DApp Development Fundamentalsレッスンでコードを書いて実行できますか?
はい。すべてのWeb3 & DApp Development Fundamentalsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- オラクル問題
- Chainlinkの基礎
- オフチェーンデータの取得