LogoLogo
  • Kaiko Knowledge Hub
  • Introduction
  • Analytics
    • Fair Market Value
Powered by GitBook
On this page
  • Read and update manually
  • Update and read on-chain

Was this helpful?

Export as PDF
  1. Analytics

Fair Market Value

PreviousIntroduction

Last updated 2 months ago

Was this helpful?

This guide walks you through consuming Fair Market Value on Arbitrum using our on-chain delivery. Several asset pairs are publicly available, meaning you can access free hourly updates or update on-demand by covering the gas fee. We've developed this solution to demonstrate how you could consume our data on-chain. If you're interested in consuming any other Kaiko data on-chain please .

Read and update manually

Visit . Here, you can see the latest Kaiko price updates for all pairs.

To update the price:

  1. Click "connect wallet"

  2. Once you've connected your wallet, click "Update"

  3. Authorize the gas payment of 0.00000112 ETH

  4. Wait a few seconds for the prices to be updated

Update and read on-chain

To read and update on-chain, you'll need to set up an off-chain listening event using a node provider of your choice to connect to the blockchain.

To update the price:

This example script uses Typescript, but you can produce similar results using other coding languages. Running the script requests a price update and listens until it's been updated on-chain. When the update is detected, it alerts your on-chain smart contract.

  1. Install ethers npm install ethers

  2. Send a gas fee with a value of 0.00000112 ETH to the refreshPriceFeeds contract address 0xff2743c44f820c64c94eccfc1b497a1019541097

import { ethers } from 'ethers';

// Set up your Ethereum provider
const provider = new ethers.providers.JsonRpcProvider("<YOUR_PROVIDER_URL>");

// Initialize wallet using private key and connect it to the provider
const wallet = new ethers.Wallet("<YOUR_PRIVATE_KEY>", provider);

// Smart contract address
const contractAddress = "0xff2743c44f820c64c94eccfc1b497a1019541097";

// ABI definition of the contract's refreshPriceFeeds method
const abi = [
    "function refreshPriceFeeds() payable external"
];

// Create an instance of the contract
const contract = new ethers.Contract(contractAddress, abi, wallet);

async function refreshPriceFeeds() {
    try {
        // Define the amount of ETH to send (0.00000112 ETH)
        const amountToSend = ethers.utils.parseEther("0.00000112");

        // Call the refreshPriceFeeds function, sending 0.00000112 ETH
        const tx = await contract.refreshPriceFeeds({
            value: amountToSend // Send 0.00000112 ETH
        });

        // Wait for the transaction to be mined
        console.log("Transaction sent. Waiting for confirmation...");
        const receipt = await tx.wait();

        console.log("Transaction confirmed, receipt:", receipt);
    } catch (error) {
        console.error("Error while calling refreshPriceFeeds:", error);
    }
}

// Call the function
refreshPriceFeeds();
  1. Wait for at least one block for the price update to be reflected on-chain

Read the price on-chain:

This Solidity contract example is triggered by the refreshPriceFeeds function in the Typescript example above. When triggered, it ingests the updated prices on-chain.

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

interface IExternalContract {
    function latestUpdate() external view returns (uint256 price, uint256 decimals, uint256 updatedAt);
}

contract CallLatestUpdate {
    address public externalContractAddress = <PRICE_CONTRACT_ADDRESS>;

    // Function to call the latestUpdate() function on the external contract
    function getLatestUpdate() public view returns (uint256 price, uint256 decimals, uint256 updatedAt) {
        // Create an instance of the external contract using the interface
        IExternalContract externalContract = IExternalContract(externalContractAddress);
        
        // Call the latestUpdate() function on the external contract
        return externalContract.latestUpdate();
    }
}

Although one price update refreshes all prices on-chain, you must read each price feed individually. See the price feeds and their corresponding addresses at .

get in touch
onchain.kaiko.com
onchain.kaiko.com