Solidity
儲存在映射中的氣體成本,初始與後續
我有以下簡單的儲存程式碼:
pragma solidity ^0.4.17; //The Oracle contract provides the reference prices for the contracts. Currently the Oracle is updated by an off chain calculation by DDA. Methodology can be found at www.github.com/DecentralizedDerivatives/Oracles contract Test_Oracle { /*Variables*/ //Mapping of documents stored in the oracle mapping(uint => uint) oracle_values; //Allows the owner of the Oracle to store a document in the oracle_values mapping. Documents //represent underlying values at a specified date (key). function StoreDocument(uint _key, uint _value) public { oracle_values[_key] = _value; } //Allows for the viewing of oracle data function RetrieveData(uint _date) public constant returns (uint data) { return oracle_values[_date]; } }
現在我創建測試 Oracle 並執行以下事務:
a)StoreDocument(1,1000) b)SotreDocument(1,1000) c)StoreDocument(1,1000) d)StoreDocument(2,999999999999)
記錄以下交易和執行成本:
a)42024,20304 b)27024,5034 c)27024,5034 d)42216,20304
一些問題… 為什麼 a 和 b 不同?為什麼 a 和 d 的交易成本不同,而執行成本卻不同?
也許對低級 EVM 更熟悉的人知道答案。提前感謝您的幫助!
簡而言之,如果您在以前為零的地方儲存非零值(如在第一個範例中),則 SSTORE(儲存值)需要 20,000 氣體,如果您要儲存非零值,則需要 5,000 氣體已經存在非零值的值。