Solidity

第二次呼叫函式呼叫更便宜

  • October 21, 2022

我有幾個不同的智能合約(信標代理等),它們可以接收 ERC20 代幣並執行各種呼叫(用於實施和管理),然後將所有 ERC20 餘額轉移到提供的目的地。

我一直在嘗試找到一種方法來節省執行功能(和掙扎)所需的氣體,但我注意到的一件事是,相同的函式呼叫在被呼叫後會更便宜。

我一直在嘗試調查(和Google搜尋)以尋找答案,但我無法將它拼湊起來。

只是想知道是否有人能夠提供一些理由來說明為什麼天然氣成本會降低?

sload是不是跟

使用USDC.

First call
┌──────────┬─────────┐
│ (index)  │ Values  │
├──────────┼─────────┤
│ moveGas1 │ '83979' │
└──────────┴─────────┘
Second call
┌──────────┬─────────┐
│ (index)  │ Values  │
├──────────┼─────────┤
│ moveGas2 │ '66879' │
└──────────┴─────────┘

歡迎來到 ES!:) SSTORE(將數據寫入儲存)操作碼在將非零值分配給先前歸零的插槽時花費 20000 氣體,在其他情況下花費 5000。如果不查看您的程式碼,我不能肯定地說,但這很可能是您的第二次通話更便宜的原因:)

重複使用以前使用過的儲存槽確實可以節省 gas。

例如,從儲存中讀取先前讀取的值需要 100 個 gas,而不是 2100 個。此外,先前訪問的儲存位置在寫入時使用的 gas 更少。當先前裝滿的儲存位置被清空時,會有額外的氣體退款。

您應該能夠使用evm opcodes計算器來找出在您的特定範例中最終的 gas 成本。

引用自:https://ethereum.stackexchange.com/questions/137909