Block: 86

Timestamp: 12:31:25

AuditProfile

Security blog

Be careful with the Chainlink Heartbeat System!

Did you know that the Chainlink Heartbeat System values vary for different types of tokens? If you use it incorrectly, it can cause a lot of problems for your protocol. This is what happened to the Beanstalk protocol. Have a look at the code snippet:

    function getTokenPriceFromExternal(
        address token,
        uint256 lookback
    ) internal view returns (uint256 tokenPrice) {
        AppStorage storage s = LibAppStorage.diamondStorage();
        Implementation memory oracleImpl = s.sys.oracleImplementation[token];

        // If the encode type is type 1, use the default chainlink implementation instead.
        // `target` refers to the address of the price aggergator implmenation
        if (oracleImpl.encodeType == bytes1(0x01)) {
            // if the address in the oracle implementation is 0, use the chainlink registry to lookup address
            address chainlinkOraclePriceAddress = oracleImpl.target;
            if (chainlinkOraclePriceAddress == address(0)) {
                // use the chainlink registry
                chainlinkOraclePriceAddress = ChainlinkPriceFeedRegistry(chainlinkRegistry).getFeed(
                        token,
                        0x0000000000000000000000000000000000000348
                    ); // 0x0348 is the address for USD
            }

            return
                uint256(1e24).div(
                    LibChainlinkOracle.getTokenPrice(
                        chainlinkOraclePriceAddress,
@>                      LibChainlinkOracle.FOUR_HOUR_TIMEOUT,
                        lookback
                    )
                );
        ...
    }

Chainlink stables have a heart beat of 24 hours i.e if the deviation threshold is not passed for this much time there will be no update to the price, but getTokenPriceFromExternal() hardcodes this limit to 4 hours which leads to price of token = 0 if the token is a stablecoin.

So for tokens with 1 day heartbeat price will be unavailable most of the time: 20 hours a day.

Be careful with the Chainlink Heartbeats! Read the docs and the report here:

Link: https://codehawks.cyfrin.io/c/2024-05-beanstalk-the-finale/s/17

#chainlink

#heartbeat

#price

Connent with me:

Регистрация прошла успешно! Спасибо за внимание!

loader