冷读热读

- 1 min

以太坊里面对储存变量的热读和冷读是怎么定义的?

在以太坊中,热读和冷读是根据存储位置的访问频率来区分的:

  1. 热读(Warm Read):
    • 热读是指对频繁访问的存储位置进行读取操作。
    • 热读通常发生在合约执行期间,智能合约需要频繁读取某些状态变量。
    • EVM(以太坊虚拟机)会将最近访问过的存储数据缓存起来,使得后续的读取操作更加高效。
    • 热读的gas成本相对较低,因为数据可以从缓存中快速读取。
  2. 冷读(Cold Read):
    • 冷读是指对不常访问或首次访问的存储位置进行读取操作。
    • 当智能合约需要读取长时间未访问的状态变量时,就会发生冷读。
    • 由于数据不在EVM的缓存中,需要从以太坊的状态树(State Trie)中读取,因此冷读的操作相对较慢。
    • 冷读的gas成本比热读更高,因为需要从状态树中读取数据。

EVM会跟踪存储位置的访问频率,动态调整存储数据的缓存。频繁访问的数据会被保留在缓存中,而不常访问的数据可能会被从缓存中移除。

在优化智能合约的gas成本时,尽量将频繁读取的状态变量安排在一起,增加它们成为热读的机会。对于不常访问的状态变量,可以考虑使用冷读,以节省gas。

需要注意的是,写操作(写入或修改状态变量)始终是冷写,因为写操作需要修改以太坊的状态树,无法利用缓存。

以上是以太坊中热读和冷读的基本概念和区别。合理利用热读和冷读可以优化智能合约的执行效率和gas成本。