Lohkoketjun älysopimukset Soliditylla · Oppitunti

Chainlink-oraakkeleiden integrointi

Opettele käyttämään Chainlinkiä älysopimusten turvalliseen yhdistämiseen tosimaailman dataan, tapahtumiin ja laskentaan.

Oppitunti 2/411 vaihetta

Chainlink-oraakkeleiden integrointi on ilmainen Lohkoketjun älysopimukset Soliditylla-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Lohkoketjun älysopimukset Soliditylla-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Lohkoketjun älysopimukset Soliditylla-kurssilla on yhteensä 4 oppituntia.

Tervetuloa Chainlink-oraakkeleihin!

Edellisessä oppitunnissa opimme ”oraakkeliongelmasta” eli siitä, etteivät älysopimukset voi käyttää suoraan tosielämän tietoja.

Chainlink ratkaisee tämän toimimalla siltana, joka tuo ketjun ulkopuoliset tiedot turvallisesti lohkoketjuun. Tässä oppitunnissa näytämme, miten Chainlink integroidaan Solidity-sopimuksiin.

Ketjun sisäisen ja ulkopuolisen maailman yhdistäminen

Chainlink on hajautettu oraakkeliverkosto. Sen avulla älysopimukset voivat muodostaa luotettavan yhteyden ulkoisiin tietolähteisiin, rajapintoihin ja jopa perinteisiin maksujärjestelmiin.

  • Hajautettu: Useat toisistaan riippumattomat solmut vahvistavat tiedot.
  • Turvallinen: Kryptografiset todisteet varmistavat tietojen eheyden.
  • Luotettava: Tiedot yhdistetään useista lähteistä.

Tietosyötteiden voima

Yksi Chainlinkin suosituimmista ominaisuuksista on sen Data Feeds -tietosyötteet. Ne tarjoavat jatkuvasti päivittyviä hintatietoja kryptovaluutoista, hyödykkeistä ja muusta.

Sen sijaan että tietoja pyydettäisiin tarvittaessa, mikä voi olla monimutkaista, Data Feeds tarjoaa yksinkertaisemman tavan käyttää usein päivittyviä tietoja suoraan sopimuksessa.

Aloittaminen: rajapinta

Voidakseen käyttää Chainlink Data Feeds -tietosyötteitä älysopimuksesi on tiedettävä, miten niiden kanssa ”keskustellaan”. Chainlink tarjoaa tätä varten AggregatorV3Interface-nimisen rajapinnan.

Tämä rajapinta määrittelee funktiot, joita sopimuksesi voi kutsua tietojen hakemista varten. Yleensä tuot sen Solidity-tiedostoon seuraavasti:

interface AggregatorV3Interface {
  function decimals() external view returns (uint8);
  function description() external view returns (string memory);
  function version() external view returns (uint256);

  function latestRoundData()
    external
    view
    returns (
      uint80 roundId,
      int256 answer,
      uint256 startedAt,
      uint256 updatedAt,
      uint80 answeredInRound
    );
}

Oraakkelin alustaminen

Sopimuksesi on tiedettävä sen käyttämän Chainlink Data Feed -tietosyötteen tarkka osoite. Tämä määritetään yleensä sopimuksen rakentajassa.

Jos haluat esimerkiksi hakea ETH/USD-hinnan testiverkossa, annat vastaavan Data Feed -osoitteen priceFeed-muuttujan alustamista varten.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface AggregatorV3Interface {
  function latestRoundData()
    external
    view
    returns (
      uint80 roundId,
      int256 answer,
      uint256 startedAt,
      uint256 updatedAt,
      uint80 answeredInRound
    );
}

contract PriceConsumer {
  AggregatorV3Interface internal priceFeed;

  constructor(address _priceFeedAddress) {
    priceFeed = AggregatorV3Interface(_priceFeedAddress);
  }
}

Hintatietojen hakeminen

Kun yhteys on muodostettu, voit kutsua latestRoundData()-funktiota priceFeed-muuttujassa. Tämä funktio palauttaa useita tietoja.

Tärkein niistä on answer, joka sisältää varsinaisen hintatiedon. Muut arvot tarjoavat kontekstia, kuten tiedon viimeisimmän päivitysajan.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface AggregatorV3Interface {
  function latestRoundData()
    external
    view
    returns (
      uint80 roundId,
      int256 answer,
      uint256 startedAt,
      uint256 updatedAt,
      uint80 answeredInRound
    );
  function decimals() external view returns (uint8);
}

contract PriceConsumer {
  AggregatorV3Interface internal priceFeed;

  constructor(address _priceFeedAddress) {
    priceFeed = AggregatorV3Interface(_priceFeedAddress);
  }

  function getLatestPrice() public view returns (int256) {
    // We only care about the 'answer' here, so other return values are ignored.
    (, int256 price, , , ) = priceFeed.latestRoundData();
    return price;
  }
}

Tietojen tulkitseminen

latestRoundData()-funktion palauttama answer on tyyppiä int256. Jos esimerkiksi ETH/USD-hinta on 2 000 dollaria, vastaus voi olla 200000000000.

Tämä arvo on jaettava luvulla 10 ** priceFeed.decimals(), jotta saat ihmisen luettavassa muodossa olevan arvon. Rajapinnan decimals()-funktio kertoo skaalauskertoimen.

Täysi esimerkki: ETH/USD-hinta

Tässä on täydellinen, suoritettavissa oleva esimerkki sopimuksesta, joka hakee uusimman ETH/USD-hinnan Chainlinkin avulla. Voit käyttää esittelyssä yleistä Sepolia-testiverkon osoitetta.

Kopioi ja liitä tämä Remixiin, käännä se ja ota se käyttöön käyttämällä verkollesi kuuluvaa oikeaa Chainlink Data Feed -osoitetta.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

// Import Chainlink's AggregatorV3Interface
interface AggregatorV3Interface {
  function decimals() external view returns (uint8);
  function description() external view returns (string memory);
  function version() external view returns (uint256);
  function latestRoundData()
    external
    view
    returns (
      uint80 roundId,
      int256 answer,
      uint256 startedAt,
      uint256 updatedAt,
      uint80 answeredInRound
    );
}

contract EthPriceConsumer {
  AggregatorV3Interface internal priceFeed;

  // Constructor takes the address of the Chainlink Data Feed
  // Example for Sepolia ETH/USD:
  // 0x694AA1769357215Ee4f0fFf93d2d05d454eBEaB8
  constructor(address _priceFeedAddress) {
    priceFeed = AggregatorV3Interface(_priceFeedAddress);
  }

  // Function to get the latest ETH/USD price
  function getLatestEthUsdPrice() public view returns (int256) {
    // latestRoundData returns (roundId, answer, startedAt, updatedAt, answeredInRound)
    (, int256 price, , , ) = priceFeed.latestRoundData();
    return price; // Price is returned with 8 decimals (e.g., $2000 becomes 200000000000)
  }

  // Function to get the number of decimals for the price feed
  function getDecimals() public view returns (uint8) {
    return priceFeed.decimals();
  }
}

Huomioita tuotantokäyttöön

Kun käytät Chainlinkiä tuotannossa, huomioi aina seuraavat asiat:

  • Gas-kustannukset: Data Feeds -tietosyötteiden lukeminen on yleensä edullista (view-funktio), mutta mukautettujen pyyntöjen tekeminen voi maksaa gasia.
  • Verkko-osoitteet: Käytä kohdeverkkoosi kuuluvaa oikeaa Data Feed -osoitetta, kuten Mainnet- tai Sepolia-osoitetta.
  • Virheenkäsittely: Toteuta tarkistukset vanhentuneiden tietojen (updatedAt) tai oraakkelista saatujen nolla-arvojen varalta, jotta ratkaisu on vikasietoinen.

Testaa tietosi

Olet oppinut integroimaan Chainlink Data Feeds -tietosyötteitä. Tarkistetaan, miten hyvin ymmärsit asian.

Chainlinkin integrointi: kertaus

Hienoa työtä! Olet oppinut integroimaan Chainlink Data Feeds -tietosyötteitä Solidity-älysopimuksiisi.

  • Chainlink yhdistää ketjun ulkopuoliset tiedot lohkoketjuun.
  • Käytät AggregatorV3Interface-rajapintaa Data Feeds -tietosyötteiden kanssa toimimiseen.
  • Sopimuksen constructor määrittää oraakkelin osoitteen.
  • latestRoundData() hakee hinnan ja muita tietoja.

Seuraavassa oppitunnissa perehdymme tarkemmin monimutkaisempiin tietojen hakumalleihin, kuten mukautettujen pyyntöjen tekemiseen sellaisille tiedoille, joita tavalliset Data Feeds -tietosyötteet eivät tarjoa.

Aloita maksutta

Opi Lohkoketjun älysopimukset Soliditylla tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
12
Oppitunnit
48

Usein kysytyt kysymykset

Onko oppitunti ”Chainlink-oraakkeleiden integrointi” ilmainen?

Kyllä – oppitunnin ”Chainlink-oraakkeleiden integrointi” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Lohkoketjun älysopimukset Soliditylla-kurssin, päivitä CoddyKit PROhon. Lohkoketjun älysopimukset Soliditylla-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Chainlink-oraakkeleiden integrointi”?

Opettele käyttämään Chainlinkiä älysopimusten turvalliseen yhdistämiseen tosimaailman dataan, tapahtumiin ja laskentaan. Harjoittelet Lohkoketjun älysopimukset Soliditylla-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Lohkoketjun älysopimukset Soliditylla-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Lohkoketjun älysopimukset Soliditylla-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”Chainlink-oraakkeleiden integrointi”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Lohkoketjun älysopimukset Soliditylla-oppitunnilla?

Kyllä. Jokainen Lohkoketjun älysopimukset Soliditylla-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Oracle-ongelman selitys
  2. Chainlink-oraakkeleiden integrointi
  3. Ketjun ulkopuolisen datan hakeminen
  4. Mukautettujen oracle-sopimusten rakentaminen
← Takaisin: Lohkoketjun älysopimukset Soliditylla