Solidity
如何檢查映射是否尚未編寫?
我有這個映射:
mapping (uint256 => string ) private storedData;
我正在嘗試這樣做:
modifier dataNotStored(uint256 _index) { require( keccak256(abi.encodePacked(storedData[_index])) == keccak256(abi.encodePacked('')) ); _; } function set(uint _index, string calldata _data_to_store) external dataNotStored(_index) { storedData[_index] = _data_to_store; }
我的目標是只允許對映射的每個條目進行一次寫入。
我認為它正在工作,因為從 Remix IDE 我只有在嘗試重寫時才會出錯。
是否有更有效和更智能的方法來避免覆蓋映射?
您可以避免修飾符和散列。這樣做更簡單:
function set(uint _index, string calldata _data_to_store) external { require(bytes(storedData[_index]).length == 0); storedData[_index] = _data_to_store; }
檢查的長度
bytes
受到這個答案的啟發。