pragma solidity ^0.6.8; interface ICERC20 { function mint(uint256) external returns (uint256); function redeem(uint256) external returns (uint256); function exchangeRateStored() external view returns (uint256); function exchangeRateCurrent() external returns (uint256); function getCash() external returns (uint256); function accrueInterest() external returns (uint256); function totalBorrowsCurrent() external returns (uint256); function totalReserves() external returns (uint256); // Links to public address variable from CERC200Storage function underlying() external returns (address); } contract cTokenClient { address cToken; constructor(address _cToken) public { cToken = _cToken; } // Single call cost is 40763 function callExchangeRateStored() public returns (uint256) { return ICERC20(cToken).exchangeRateStored(); } // Cost of doing 11 calls is 254739 // Doing it externally it would've been 40763 * 11 = 448393 // The cost for a single ICERC20 call is around = 23k function multipleCallExchangeRateStored() public returns (uint256){ for (uint256 i = 0 ; i<=10; i++){ ICERC20(cToken).exchangeRateStored(); } return ICERC20(cToken).exchangeRateStored(); } }
0.6.8