You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 05:57:13