Solidity参数

数值数据类型占位存储

TypeBit
boolean8
uint8/int8/bytes18
uint32/int32/bytes432
uint128/int128/bytes16128
uint256/int256/bytes32256
address160
enum8
  • slot 存储位置和合约状态变量声明顺序相关,不满栈宽 256bit 高位补到同一个 slot
contract AddressVariable {
    address owner = 0x5B38Da6a701c568545dCfcB03FcB875f56beddC4;
    // new
    bool Boolean = true;
    uint32 thirdvar;
}
  • 其中,owner 占位 160 bit, Boolean 占位 8 bit, thirdvar 占位 32 bit
  • 三个变量按照证明顺序,高位编码到同一个slot存储
  • 此时,slot 剩余 56 bit,下个声明变量的类型如果超出 56 bit,会顺延到 下一个 slot 存储

contract AddressVariable {
    address owner = 0x5B38Da6a701c568545dCfcB03FcB875f56beddC4;
    bool Boolean = true;
    uint32 thirdVar;
    // new
    address admin = 0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2;
}