Proses Hari ke 72

Intro to Oracles - Getting Real World Price Data
π§π» Test yourself
- π Describe 4 Chainlink products and what problem each one solves.
1. Describe 4 Chainlink products and what problem each one solves.
- Chainlink VRF (Verifiable Random Function)
Chainlink VRF adalah produk Chainlink yang digunakan untuk menghasilkan bilangan acak yang verifikasi. Ini sering digunakan dalam permainan yang memerlukan bilangan acak, seperti gacha.
- Chainlink Data Feed
Chainlink Data Feed adalah produk Chainlink yang digunakan untuk mengambil data dari sumber data yang terpercaya. Ini sering digunakan dalam permainan yang memerlukan data yang terpercaya, seperti harga kripto.
- Chainlink Automation (Keepers)
Chainlink Automation (Keepers) adalah produk Chainlink yang digunakan untuk menjalankan kontrak smart contract secara otomatis.
- Chainlink Functions
Chainlink Functions adalah memungkinkan smartcontract untuk melakukan API call ke external data source.
Mid Section Recap
π§βπ» Test yourself
- π What are the three primary topics covered from lessons 1 to 5?
1. What are the three primary topics covered from lessons 1 to 5?
- Payable
Payable adalah keyword yang digunakan untuk menandai sebuah function agar bisa menerima ETH.
- Require
Require adalah statement yang mewajibkan user memenuhi kondisi tertentu. Jika kondisi tersebut tidak terpenuhi, maka function akan di-revert.
- Reverts
Reverts digunakan untuk melindungi kontrak dari kondisi yang tidak diinginkan.
Solidity Interfaces
π§βπ» Test yourself
π Explain the role of interfaces in Solidity and why are they advantageous.
π What are the steps required to convert a variable containing a value in ETH to its equivalent in USD?
π§π» Implement another function on the FundMe contract that implements the decimals() methods of the Data Feed address.
1. Explain the role of interfaces in Solidity and why are they advantageous.
Interface di Solidity adalah deklarasi function signature tanpa implementasi yang digunakan untuk berinteraksi dengan kontrak eksternal yang sudah terdeploy. Interface memberikan ABI sehingga kontrak kita dapat memanggil fungsi kontrak lain tanpa mengetahui implementasinya. Ini membuat sistem modular, efisien, dan reusable.
2. What are the steps required to convert a variable containing a value in ETH to its equivalent in USD?
Langkah konversi ETH ke USD:
- Ambil harga ETH/USD dari Chainlink Data Feed (latestRoundData)
- Perhatikan jumlah decimals dari price feed (decimals())
- Ambil jumlah ETH yang dikirim (msg.value)
- Kalikan harga ETH dengan jumlah ETH
- Sesuaikan presisi (karena ETH 18 decimals, price feed 8 decimals)
- Bandingkan hasil USD dengan minimumUSD
- Jika kurang, revert
3. Implement another function on the FundMe contract that implements the decimals() methods of the Data Feed address.
function getDecimals() public view returns (uint8) {
return AggregatorV3Interface(
0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419
).decimals();
}Use AI to Help pt.2
π§βπ» Test yourself
- π Delve deeper into the getVersion function by asking AI three more questions about it
1. Delve deeper into the getVersion function by asking AI three more questions about it
- Apa yang terjadi di level EVM ketika memanggil:
AggregatorV3Interface(0x...).version();Ketika kita melakukan type casting address ke interface, Solidity TIDAK membuat kontrak baru.
Solidity hanya memberi tahu compiler bahwa address tersebut memiliki function version().
Yang terjadi di level EVM:
- Solidity membuat function selector dari
version()(4 byte pertama dari keccak256(βversion()β)) - EVM melakukan external CALL ke address tersebut
- Kontrak asli di address itu menjalankan logic-nya
- Return value dikirim kembali ke kontrak pemanggil
- Solidity mendecode hasilnya menjadi uint256
Jadi interface hanyalah:
- Deklarasi signature
- Bantuan ABI encoding/decoding
- Tidak mengandung logic apa pun
- Apakah Solidity mengecek apakah function itu benar-benar ada?
Tidak.
Solidity hanya mengecek:
- Interface memiliki function tersebut
- Return type sesuai
Solidity TIDAK:
- Mengecek apakah address itu benar
- Mengecek apakah kontrak di sana benar-benar punya function tersebut
Validasi hanya terjadi saat runtime.
Jika:
- Function tidak ada
- Signature salah
- Return data tidak sesuai
Maka:
- Transaksi akan revert
- Atau decoding akan gagal
- Apa yang terjadi jika address tersebut adalah EOA (bukan kontrak)?
Jika address tersebut adalah EOA:
- Tidak ada bytecode di address itu
- CALL tetap technically sukses
- Tetapi tidak ada return data
Karena tidak ada return data:
- Solidity mencoba mendecode sebagai uint256
- Decoding gagal
- Transaksi revert
Inilah mengapa dalam production sering dilakukan pengecekan:
require(address.code.length > 0, βNot a contractβ);
Untuk memastikan address tersebut memang kontrak.