Pelajaran 3

Membangun Kontrak Sederhana yang Terintegrasi dengan Oracle

Sekarang setelah kita menyiapkan IDE Remix dan perpustakaan Chainlink yang diperlukan telah diimpor, kita akan membuat kontrak pintar dasar yang terintegrasi dengan oracle. Ini akan memungkinkan kita mengambil dan menangani data eksternal.

Menyusun Kontrak: Dasar-dasar Integrasi Oracle

  1. Dimulai dengan Dasar-Dasar:
    Mari kita mulai dengan mendefinisikan kontrak kita, menentukan versi Soliditas, dan mengimpor perpustakaan Chainlink yang akan kita gunakan:
    ```
    Kepadatan
    // Pengenal-Lisensi SPDX: MIT

soliditas pragma ^0.8.21;

impor “@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol”;

kontrak OracleIntegratedContract {
AggregatorV3Interface umpan harga internal;

// Visibilitas untuk konstruktor dihapus 
 konstruktor(alamat _priceFeed) {
    priceFeed = AggregatorV3Interface(_priceFeed);
}

1. 
Di segmen ini, kami telah menetapkan bahwa kontrak kami akan menggunakan Umpan Harga Chainlink. Konstruktor mengambil alamat untuk kontrak umpan harga di jaringan Ethereum.

1. 
 Mengambil Data dari Oracle 

 1. 
 Mari kita perpanjang kontrak kita untuk mengambil harga Ethereum terbaru:

Kepadatan
fungsi getLatestEthPrice() tampilan publik kembali (int) {
(,int price,,,) = priceFeed.latestRoundData();
return price;
}


1. 
Fungsi `latestRoundData()` dari antarmuka Chainlink Aggregator memberi kita berbagai data, termasuk harga terbaru.

## Menangani Respons Oracle: Mengelola Data Setelah Diterima 

 Data yang diambil dari oracle sering kali datang dalam format mentah yang mungkin tidak langsung sesuai dengan kebutuhan kita. Sangat penting untuk memproses data ini dengan benar dalam kontrak pintar kami: 



 1. 
 Memformat Data 

 1. 
Katakanlah oracle mengembalikan harga Ethereum dalam USD tetapi dikalikan dengan 10^8 untuk memastikan tidak ada desimal (umum dalam pengaturan oracle). Untuk mendapatkan harga sebenarnya, Anda perlu memformat data:

Kepadatan
fungsi getFormattedEthPrice() tampilan publik kembali (int) {
int rawPrice = getLatestEthPrice();
return rawPrice / 10**8;
}


1. 
Fungsi ini mengambil harga mentah, lalu membaginya dengan 10^8 untuk mendapatkan nilai sebenarnya.

1. 
 Penanganan Kesalahan 

 1. 
 Selalu memperhitungkan kemungkinan oracle gagal mengambil data:

Kepadatan
fungsi safeGetLatestEthPrice() tampilan publik kembali (int) {
(,int price,,uint256 timestamp,) = priceFeed.latestRoundData();
require(timestamp > 0, “Failed to fetch data from the oracle”);
return price;
}


1. 
 Di sini, fungsi `latestRoundData()` juga menyediakan stempel waktu. Jika stempel waktunya adalah 0, kemungkinan besar itu berarti Oracle gagal mengambil data, dan kami menanganinya dengan pernyataan `require`.
Kode lengkap Anda akan terlihat seperti ini:

Kepadatan
// Pengenal-Lisensi SPDX: MIT

soliditas pragma ^0.8.21;

impor “@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol”;

kontrak OracleIntegratedContract {
AggregatorV3Interface umpan harga internal;

// Visibilitas untuk konstruktor dihapus 
 konstruktor(alamat _priceFeed) {
    priceFeed = AggregatorV3Interface(_priceFeed);
}

fungsi getLatestEthPrice() tampilan publik mengembalikan (int) {
    (,int price,,,) = priceFeed.latestRoundData();
    return price;
}

fungsi getFormattedEthPrice() tampilan publik mengembalikan (int) {
    int rawPrice = getLatestEthPrice();
    return rawPrice / 10**8;
}

fungsi safeGetLatestEthPrice() tampilan publik kembali (int) {
    (,int price,,uint256 timestamp,) = priceFeed.latestRoundData();
    require(timestamp > 0, "Failed to fetch data from the oracle");
    return price;
}

}
```

Di akhir pelajaran ini, Anda seharusnya sudah memiliki kontrak pintar dasar yang terintegrasi dengan Oracle yang dirancang dalam Remix. Kontrak ini mengambil harga Ethereum terbaru dan menangani data yang dikembalikan. Dalam pelajaran berikutnya, kami akan menerapkan kontrak ini dan mempelajari lebih jauh praktik terbaik dan perbedaannya.

Pernyataan Formal
* Investasi Kripto melibatkan risiko besar. Lanjutkan dengan hati-hati. Kursus ini tidak dimaksudkan sebagai nasihat investasi.
* Kursus ini dibuat oleh penulis yang telah bergabung dengan Gate Learn. Setiap opini yang dibagikan oleh penulis tidak mewakili Gate Learn.
Katalog
Pelajaran 3

Membangun Kontrak Sederhana yang Terintegrasi dengan Oracle

Sekarang setelah kita menyiapkan IDE Remix dan perpustakaan Chainlink yang diperlukan telah diimpor, kita akan membuat kontrak pintar dasar yang terintegrasi dengan oracle. Ini akan memungkinkan kita mengambil dan menangani data eksternal.

Menyusun Kontrak: Dasar-dasar Integrasi Oracle

  1. Dimulai dengan Dasar-Dasar:
    Mari kita mulai dengan mendefinisikan kontrak kita, menentukan versi Soliditas, dan mengimpor perpustakaan Chainlink yang akan kita gunakan:
    ```
    Kepadatan
    // Pengenal-Lisensi SPDX: MIT

soliditas pragma ^0.8.21;

impor “@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol”;

kontrak OracleIntegratedContract {
AggregatorV3Interface umpan harga internal;

// Visibilitas untuk konstruktor dihapus 
 konstruktor(alamat _priceFeed) {
    priceFeed = AggregatorV3Interface(_priceFeed);
}

1. 
Di segmen ini, kami telah menetapkan bahwa kontrak kami akan menggunakan Umpan Harga Chainlink. Konstruktor mengambil alamat untuk kontrak umpan harga di jaringan Ethereum.

1. 
 Mengambil Data dari Oracle 

 1. 
 Mari kita perpanjang kontrak kita untuk mengambil harga Ethereum terbaru:

Kepadatan
fungsi getLatestEthPrice() tampilan publik kembali (int) {
(,int price,,,) = priceFeed.latestRoundData();
return price;
}


1. 
Fungsi `latestRoundData()` dari antarmuka Chainlink Aggregator memberi kita berbagai data, termasuk harga terbaru.

## Menangani Respons Oracle: Mengelola Data Setelah Diterima 

 Data yang diambil dari oracle sering kali datang dalam format mentah yang mungkin tidak langsung sesuai dengan kebutuhan kita. Sangat penting untuk memproses data ini dengan benar dalam kontrak pintar kami: 



 1. 
 Memformat Data 

 1. 
Katakanlah oracle mengembalikan harga Ethereum dalam USD tetapi dikalikan dengan 10^8 untuk memastikan tidak ada desimal (umum dalam pengaturan oracle). Untuk mendapatkan harga sebenarnya, Anda perlu memformat data:

Kepadatan
fungsi getFormattedEthPrice() tampilan publik kembali (int) {
int rawPrice = getLatestEthPrice();
return rawPrice / 10**8;
}


1. 
Fungsi ini mengambil harga mentah, lalu membaginya dengan 10^8 untuk mendapatkan nilai sebenarnya.

1. 
 Penanganan Kesalahan 

 1. 
 Selalu memperhitungkan kemungkinan oracle gagal mengambil data:

Kepadatan
fungsi safeGetLatestEthPrice() tampilan publik kembali (int) {
(,int price,,uint256 timestamp,) = priceFeed.latestRoundData();
require(timestamp > 0, “Failed to fetch data from the oracle”);
return price;
}


1. 
 Di sini, fungsi `latestRoundData()` juga menyediakan stempel waktu. Jika stempel waktunya adalah 0, kemungkinan besar itu berarti Oracle gagal mengambil data, dan kami menanganinya dengan pernyataan `require`.
Kode lengkap Anda akan terlihat seperti ini:

Kepadatan
// Pengenal-Lisensi SPDX: MIT

soliditas pragma ^0.8.21;

impor “@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol”;

kontrak OracleIntegratedContract {
AggregatorV3Interface umpan harga internal;

// Visibilitas untuk konstruktor dihapus 
 konstruktor(alamat _priceFeed) {
    priceFeed = AggregatorV3Interface(_priceFeed);
}

fungsi getLatestEthPrice() tampilan publik mengembalikan (int) {
    (,int price,,,) = priceFeed.latestRoundData();
    return price;
}

fungsi getFormattedEthPrice() tampilan publik mengembalikan (int) {
    int rawPrice = getLatestEthPrice();
    return rawPrice / 10**8;
}

fungsi safeGetLatestEthPrice() tampilan publik kembali (int) {
    (,int price,,uint256 timestamp,) = priceFeed.latestRoundData();
    require(timestamp > 0, "Failed to fetch data from the oracle");
    return price;
}

}
```

Di akhir pelajaran ini, Anda seharusnya sudah memiliki kontrak pintar dasar yang terintegrasi dengan Oracle yang dirancang dalam Remix. Kontrak ini mengambil harga Ethereum terbaru dan menangani data yang dikembalikan. Dalam pelajaran berikutnya, kami akan menerapkan kontrak ini dan mempelajari lebih jauh praktik terbaik dan perbedaannya.

Pernyataan Formal
* Investasi Kripto melibatkan risiko besar. Lanjutkan dengan hati-hati. Kursus ini tidak dimaksudkan sebagai nasihat investasi.
* Kursus ini dibuat oleh penulis yang telah bergabung dengan Gate Learn. Setiap opini yang dibagikan oleh penulis tidak mewakili Gate Learn.