Solidity
將布爾值與地址一起打包會降低儲存成本嗎?
假設我有一個這樣的結構:
struct MyStruct { bool foo; uint256 bar; uint256 baz; address qux; }
如果我這樣重寫:
struct MyStruct { bool foo; address qux; uint256 bar; uint256 baz; }
儲存是否會變得更便宜,因為它是 0 或 1
address
的別名,uint160
並且bool
只能是 0 或 1?如果foo
是 typeaddress
怎麼辦?
是的,它適用於第一種情況,但如果
foo
是address
,則不,沒有儲存效率提升。如果我應用問題正文中提到的更改,我最終會少花 20,134 美元來在映射中添加新結構。
查看 Rinkeby 上的交易:
使用的範例合約:
pragma solidity 0.5.11; contract StorageCostTest { struct MyStruct { bool foo; uint256 bar; uint256 baz; address qux; } mapping(uint256 => MyStruct) private myStructs; uint256 public nextMyStructId; constructor() public { nextMyStructId = 1; } function addItem(bool foo, uint256 bar, uint256 baz, address qux) external { myStructs[nextMyStructId] = MyStruct({ foo: foo, bar: bar, baz: baz, qux: qux }); nextMyStructId += 1; } }