# Gas Saving Technique 15: Cache External Call

{% hint style="info" %}
[**Book an audit with Zokyo**](https://www.zokyo.io/)
{% endhint %}

#### Introduction

Optimizing gas consumption is paramount when developing smart contracts on blockchain networks, such as Ethereum. Caching results from external contract calls is a valuable technique for saving gas, especially when you need to use the retrieved data multiple times within a function. This tutorial guides you through the process and benefits of caching external call results to optimize gas usage.

#### Impact & Details

**Understanding Gas Consumption**

* **External Call Costs**: Every call to an external contract consumes a significant amount of gas. If you need to use the result of an external call multiple times, making the call each time is inefficient and costly.
* **Caching Benefits**: By caching the result of an external call in a local variable, you can reuse this data without incurring the cost of multiple external calls, thereby saving gas.

#### How to Implement Caching for Gas Savings

**Practical Example: Caching External Call Results**

Below is an example illustrating how to optimize gas consumption through caching:

Before Optimization:

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

interface IRewardStaking {
    function rewardToken() external view returns (address);
}

contract MyContract {
    address public extraPool;

    function someFunction() public {
        // ... some code ...
        address token1 = IRewardStaking(extraPool).rewardToken();
        // ... some code that doesn't modify token1 ...
        address token2 = IRewardStaking(extraPool).rewardToken();
        // ... more code ...
    }
}
```

After Optimization:

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

interface IRewardStaking {
    function rewardToken() external view returns (address);
}

contract MyContract {
    address public extraPool;

    function someFunction() public {
        // ... some code ...
        address token = IRewardStaking(extraPool).rewardToken();
        // ... some code that doesn't modify token ...
        address token1 = token;  // Reusing cached value
        // ... more code ...
    }
}
```

In the optimized version, the result of `IRewardStaking(extraPool).rewardToken()` is cached in a local variable and reused, eliminating the need for a second external call and saving gas.

#### Recommended Mitigation Steps

1. **Identify Multiple External Calls**: Review your smart contracts and locate any repeated external calls whose results can be cached.
2. **Cache and Reuse**: Implement caching by saving the result of the first call in a local variable and reusing it where needed.
3. **Test**: After implementation, test the contract to ensure that it maintains its functionality while consuming less gas due to caching.

#### Conclusion

Caching external call results is a straightforward yet powerful optimization technique for saving gas in smart contracts. This approach is especially beneficial when dealing with repeated external calls within a function. Remember to rigorously test the contract after implementation to ensure its integrity while enjoying the benefits of optimized gas consumption.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://zokyo-auditing-tutorials.gitbook.io/zokyo-gas-savings/tutorials/gas-saving-technique-15-cache-external-call.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
