Solidity

在同一個 tx 中設置和刪除儲存變數

  • December 26, 2020

我四處尋找並沒有看到答案……我想有人知道這一點。

問題:在同一個交易中設置和刪除儲存變數的 gas 成本是多少?由於在 tx 結束時沒有新的狀態,我隱約記得曾經讀過 gas 成本不同。任何人都可以確認這一點或指向我的文件嗎?

如果沒有特殊處理,我預計這將花費 20k (set) + 5k (delete) - 15k (refund) = 10k 每個變數,這是很多…

謝謝!

編輯:澄清一下,我希望有一個映射,我可以在單個 tx 期間將其用於本質上的“快閃記憶體儲存”。據我所知,沒有memory等價的映射,因為它們只存在於儲存中,這就是為什麼我認為沒有替代方案只使用局部變數。

我不認為有什麼特殊待遇。從這個意義上說,EVM 是“愚蠢的”,它一次只執行一條指令併計算使用(或退還)多少 gas。所以它只是執行第一條指令,計算消耗了多少氣體,開始下一條指令等等……

我真的不記得確切的汽油成本,但至少你的想法是正確的。刪除退款的想法不是進行免費交易,而是給開發者一個小的激勵來繼續刪除數據。10k 比 20k 少很多。

我不會直接回答你的問題,而是採取不同的方法,因為在我看來,你已經開始了一項涉及使用儲存變數的工作,當你完成時,結果發現這個儲存變數不是需要開始。

如果儲存變數在事務結束時達到其原始值,那麼您也可以將此值複製到函式開頭的局部變數中,然後在其餘部分使用該局部變數而不是儲存變數功能。

這種方法不僅適用於儲存變數的目前值為 0,而且適用於任何其他情況,因為儲存變數操作比局部變數操作要昂貴得多。

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