第3课

単純なOracle-Integrated Contractの構築

Remix IDEをセットアップし、必要なChainlinkライブラリをインポートしたので、オラクルと統合する基本的なスマートコントラクトを作成します。 これにより、外部データを取得して処理できるようになります。

契約の起草: Oracle Integrationの基本

  1. 基本から始める:
    まず、コントラクトを定義し、Solidityのバージョンを指定し、使用するChainlinkライブラリをインポートします。
    ```
    硬度
    SPDX-ライセンス識別子: MIT

プラグマの堅実さ^0.8.21;

"@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol"をインポートします。

コントラクト OracleIntegratedContract {
AggregatorV3Interface 内部 priceFeed;

コンストラクタの可視性の削除
constructor(address _priceFeed) {
    priceFeed = AggregatorV3Interface(_priceFeed);
}

1.このセグメントでは、契約でChainlink価格フィードを使用することを指定しました。 コンストラクタは、イーサリアムネットワーク上のプライスフィードコントラクトのアドレスを取得します。1.
Oracleからのデータのフェッチ

1.
最新のイーサリアム価格を取得するために契約を延長しましょう。

硬度
function getLatestEthPrice() public view returns (int) {
(,int price,,,) = priceFeed.latestRoundData();
return price;
}


1.Chainlinkアグリゲーターインターフェースの「latestRoundData()」関数は、最新の価格を含むさまざまなデータを提供します。## Oracleレスポンスの処理:受信後のデータの管理

オラクルからフェッチされたデータは、多くの場合、生の形式で提供され、私たちのニーズにすぐには適していない可能性があります。 スマートコントラクト内でこのデータを正しく処理することが重要です。

1.
データの書式設定

1.オラクルがイーサリアムの価格を米ドルで返し、小数点以下がないように10^8を掛けたとします(オラクルの設定では一般的です)。 実際の価格を取得するには、データをフォーマットする必要があります。

硬度
関数getFormattedEthPrice() public view returns (int) {
int rawPrice = getLatestEthPrice();
return rawPrice / 10**8;
}


1.この関数は、生の価格を取得し、それを 10^8 で除算して実際の値を取得します。1.
エラー処理

1.
オラクルがデータのフェッチに失敗する可能性を常に考慮してください。

硬度
関数 safeGetLatestEthPrice() public view returns (int) {
(,int price,,uint256 timestamp,) = priceFeed.latestRoundData();
require(timestamp > 0, “Failed to fetch data from the oracle”);
return price;
}


1.
ここでは、「latestRoundData()」関数もタイムスタンプを提供します。 タイムスタンプが 0 の場合は、オラクルがデータの取得に失敗したことを意味する可能性が高く、「require」ステートメントで処理します。完全なコードは次のようになります。

硬度
SPDX-ライセンス識別子: MIT

プラグマの堅実さ^0.8.21;

"@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol"をインポートします。

コントラクト OracleIntegratedContract {
AggregatorV3Interface 内部 priceFeed;

コンストラクタの可視性の削除
constructor(address _priceFeed) {
    priceFeed = AggregatorV3Interface(_priceFeed);
}

関数 getLatestEthPrice() public view returns (int) {
    (,int price,,,) = priceFeed.latestRoundData();
    return price;
}

関数getFormattedEthPrice()パブリックビューは(int)を返します {
    int rawPrice = getLatestEthPrice();
    return rawPrice / 10**8;
}

関数 safeGetLatestEthPrice() public view returns (int) {
    (,int price,,uint256 timestamp,) = priceFeed.latestRoundData();
    require(timestamp > 0, "Failed to fetch data from the oracle");
    return price;
}

}
```

このレッスンを修了すると、Remix内で基本的なOracle統合スマートコントラクトが作成されているはずです。 このコントラクトは、最新のイーサリアム価格を取得し、返されたデータを処理します。 次のレッスンでは、このコントラクトを展開し、ベストプラクティスとニュアンスをさらに掘り下げます。

免责声明
* 投资有风险,入市须谨慎。本课程不作为投资理财建议。
* 本课程由入驻Gate Learn的作者创作,观点仅代表作者本人,绝不代表Gate Learn赞同其观点或证实其描述。
目录
第3课

単純なOracle-Integrated Contractの構築

Remix IDEをセットアップし、必要なChainlinkライブラリをインポートしたので、オラクルと統合する基本的なスマートコントラクトを作成します。 これにより、外部データを取得して処理できるようになります。

契約の起草: Oracle Integrationの基本

  1. 基本から始める:
    まず、コントラクトを定義し、Solidityのバージョンを指定し、使用するChainlinkライブラリをインポートします。
    ```
    硬度
    SPDX-ライセンス識別子: MIT

プラグマの堅実さ^0.8.21;

"@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol"をインポートします。

コントラクト OracleIntegratedContract {
AggregatorV3Interface 内部 priceFeed;

コンストラクタの可視性の削除
constructor(address _priceFeed) {
    priceFeed = AggregatorV3Interface(_priceFeed);
}

1.このセグメントでは、契約でChainlink価格フィードを使用することを指定しました。 コンストラクタは、イーサリアムネットワーク上のプライスフィードコントラクトのアドレスを取得します。1.
Oracleからのデータのフェッチ

1.
最新のイーサリアム価格を取得するために契約を延長しましょう。

硬度
function getLatestEthPrice() public view returns (int) {
(,int price,,,) = priceFeed.latestRoundData();
return price;
}


1.Chainlinkアグリゲーターインターフェースの「latestRoundData()」関数は、最新の価格を含むさまざまなデータを提供します。## Oracleレスポンスの処理:受信後のデータの管理

オラクルからフェッチされたデータは、多くの場合、生の形式で提供され、私たちのニーズにすぐには適していない可能性があります。 スマートコントラクト内でこのデータを正しく処理することが重要です。

1.
データの書式設定

1.オラクルがイーサリアムの価格を米ドルで返し、小数点以下がないように10^8を掛けたとします(オラクルの設定では一般的です)。 実際の価格を取得するには、データをフォーマットする必要があります。

硬度
関数getFormattedEthPrice() public view returns (int) {
int rawPrice = getLatestEthPrice();
return rawPrice / 10**8;
}


1.この関数は、生の価格を取得し、それを 10^8 で除算して実際の値を取得します。1.
エラー処理

1.
オラクルがデータのフェッチに失敗する可能性を常に考慮してください。

硬度
関数 safeGetLatestEthPrice() public view returns (int) {
(,int price,,uint256 timestamp,) = priceFeed.latestRoundData();
require(timestamp > 0, “Failed to fetch data from the oracle”);
return price;
}


1.
ここでは、「latestRoundData()」関数もタイムスタンプを提供します。 タイムスタンプが 0 の場合は、オラクルがデータの取得に失敗したことを意味する可能性が高く、「require」ステートメントで処理します。完全なコードは次のようになります。

硬度
SPDX-ライセンス識別子: MIT

プラグマの堅実さ^0.8.21;

"@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol"をインポートします。

コントラクト OracleIntegratedContract {
AggregatorV3Interface 内部 priceFeed;

コンストラクタの可視性の削除
constructor(address _priceFeed) {
    priceFeed = AggregatorV3Interface(_priceFeed);
}

関数 getLatestEthPrice() public view returns (int) {
    (,int price,,,) = priceFeed.latestRoundData();
    return price;
}

関数getFormattedEthPrice()パブリックビューは(int)を返します {
    int rawPrice = getLatestEthPrice();
    return rawPrice / 10**8;
}

関数 safeGetLatestEthPrice() public view returns (int) {
    (,int price,,uint256 timestamp,) = priceFeed.latestRoundData();
    require(timestamp > 0, "Failed to fetch data from the oracle");
    return price;
}

}
```

このレッスンを修了すると、Remix内で基本的なOracle統合スマートコントラクトが作成されているはずです。 このコントラクトは、最新のイーサリアム価格を取得し、返されたデータを処理します。 次のレッスンでは、このコントラクトを展開し、ベストプラクティスとニュアンスをさらに掘り下げます。

免责声明
* 投资有风险,入市须谨慎。本课程不作为投资理财建议。
* 本课程由入驻Gate Learn的作者创作,观点仅代表作者本人,绝不代表Gate Learn赞同其观点或证实其描述。