Solidity中合约类型状态变量占用多少存储字节?
Solidity合约类型状态变量存储占用说明
核心结论
合约类型的状态变量存储空间占用和address类型完全一致,为20字节,支持和其他小长度变量共同打包进同一个32字节的存储槽。
底层逻辑
- 合约类型是Solidity提供的语法糖,本质就是带类型约束的地址:存储层只保存对应合约部署的20字节地址值,不会存储合约代码、ABI等任何额外信息,因此没有额外存储开销。
- 编译器仅在语法层面做校验:比如你通过该合约类型变量调用目标合约方法时,编译器会自动做函数匹配、类型检查,这类检查发生在编译期,不会上链也不占用链上存储。
验证参考
你可以通过存储布局规则快速验证:20字节的合约类型变量,搭配一个12字节长度的uint96类型状态变量相邻声明,两者总长度刚好32字节,编译后会被分配到同一个存储槽,不会额外占用新槽位。
对应示例代码如下:
contract ContractA { // some code... } contract ContractB { ContractA contractA; // 该状态变量占用20字节存储空间 constructor (address addr) { contractA = ContractA(addr); } }
内容的提问来源于stack exchange,提问作者Masa
相关产品推荐
相关产品推荐

