映射类型的实体字段大小

时间:2018-06-23 18:24:35

标签: ethereum solidity smartcontracts evm

结构内的实心度allows映射类型。这样的字段需要多少字节?

具体来说,我想优化以下类型的storage layout

struct Balance {
    uint40 amount;
    mapping(address => uint) allowances;
}

1 个答案:

答案 0 :(得分:2)

我认为您的意思是存储布局,而不是内存布局。

uintuint256的别名,它是256位。因此,该映射中存储的每个值都使用一个32字节的存储槽。

编辑

对于完整的Balance结构,每个结构将占用两个存储槽,但是一个槽始终为零。第一个插槽由uint40占用,第二个插槽是mapping的占位符,实际上并没有存储任何值。就天然气成本而言,这是免费的。

因此,存储新的Balance将向存储写入一个32字节的字,然后,您添加到uint映射中的每个allowances将向存储写入一个32字节的字。