الدرس رقم 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. ويُرجى العلم أنّ أي رأي يشاركه المؤلف لا يمثّل مركز التعلّم في Gate.
الكتالوج
الدرس رقم 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. ويُرجى العلم أنّ أي رأي يشاركه المؤلف لا يمثّل مركز التعلّم في Gate.
It seems that you are attempting to access our services from a Restricted Location where Gate.io is unable to provide services. We apologize for any inconvenience this may cause. Currently, the Restricted Locations include but not limited to: the United States of America, Canada, Cambodia, Cuba, Iran, North Korea and so on. For more information regarding the Restricted Locations, please refer to the User Agreement. Should you have any other questions, please contact our Customer Support Team.