Cách tạo contract theo dõi giá LINK

    PriceFeedssolidityDevelopment

Chainlinker /

-- lượt xem
pragma solidity ^0.8.0;
import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol";

contract LinkPriceMonitorV3 {
    AggregatorV3Interface internal priceFeed;

    /**
     * Network: Ethereum Mainnet
     * Aggregator: LINK/USD
     * Address: 0xDC530D9457755926550b59e8ECcdaE7624181557
     */
    constructor() {
        priceFeed = AggregatorV3Interface(0xDC530D9457755926550b59e8ECcdaE7624181557);
    }

    /**
     * Hàm này lấy giá LINK mới nhất từ feed của Chainlink.
     * Giá trả về là số nguyên với 8 chữ số thập phân.
     */
    function getLatestPrice() public view returns (int) {
        (
            uint80 roundID, 
            int price,
            uint startedAt,
            uint timeStamp,
            uint80 answeredInRound
        ) = priceFeed.latestRoundData();
        return price / 1e8; // Chuyển từ 8 decimal places sang giá thực tế
    }

    /**
     * Hàm kiểm tra xem giá LINK có vượt qua một ngưỡng giá nhất định không.
     * @param _thresholdUSD Ngưỡng giá trong USD mà bạn muốn kiểm tra.
     */
    function checkPriceThreshold(uint _thresholdUSD) public view returns (bool) {
        int currentPrice = getLatestPrice();
        return currentPrice >= int(_thresholdUSD);
    }

    /**
     * Hàm này đơn giản là in ra giá hiện tại của LINK và một thông báo nếu giá vượt qua ngưỡng.
     * Chỉ để minh họa, không thực sự cần thiết trong contract thông minh vì không có tương tác với blockchain.
     */
    function logPrice(uint _thresholdUSD) public view {
        int price = getLatestPrice();
        bool aboveThreshold = checkPriceThreshold(_thresholdUSD);
        string memory message = aboveThreshold ? "Giá LINK đã vượt qua ngưỡng." : "Giá LINK chưa vượt qua ngưỡng.";
        // Lưu ý: Đây chỉ là một hàm cho mục đích minh họa; trong thực tế, bạn sẽ không thể "log" thông tin như vậy trực tiếp từ contract.
        // Thay vào đó, bạn sẽ trả về các giá trị để frontend hoặc contract khác xử lý.
    }
}

Giải thích:

  • Constructor: Khởi tạo priceFeed với địa chỉ của feed LINK/USD trên Ethereum Mainnet. Bạn nên kiểm tra lại địa chỉ này nếu triển khai trên các mạng khác.

  • getLatestPrice: Lấy giá mới nhất của LINK từ Chainlink Price Feed. Giá được trả về với 8 chữ số thập phân, do đó, chúng ta chia cho 1e8 để có giá thực tế trong USD.

  • checkPriceThreshold: Kiểm tra xem giá hiện tại của LINK có vượt quá một ngưỡng nhất định hay không. Điều này có thể được sử dụng để kích hoạt các hành động trong contract, như thanh toán hoặc đầu tư tự động.

  • logPrice: Một hàm minh họa để hiển thị giá và một thông báo dựa trên ngưỡng giá. Lưu ý rằng trong Solidity, bạn không thể thực sự "log" thông tin như vậy trực tiếp từ contract; thay vào đó, bạn sẽ trả về dữ liệu để frontend xử lý.

Contract này có thể được mở rộng để thực hiện các chức năng DeFi như quản lý khoản vay dựa trên giá trị tài sản, điều chỉnh lãi suất, hoặc tự động thực hiện các quyết định đầu tư dựa trên giá cả.

Tài liệu: