跳转至

3.VariableType

variable只是用于存储值的预留位置。因此,用户可以为某个变量预留任意数量的内存。

Solidity 包含了大量的值类型,例如布尔值、双精度浮点数、整数、字符等。

操作系统将负责分配内存并选择要存储在特定变量中的数据。

Variable Type

从位置上来说,variables分为三类

  • State Variables:在contract内,function外。state variable永久存储在区块链中。
  • Local Variables:存在于function内。方法执行的时候存在,方法结束的时候销毁。
  • Global Variables:在全局命名空间中存在特殊变量,用于获取有关区块链的信息。

State Variable

  • 定义在方法外,contrast内
  • 存储在区块链中
  • 更新state variable的时候需要发送交易,但是读取state variable的时候不需要transaction fee
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.1;

contract StateVariables{
    // 将value存储在了blockchain
    // state varibale定义在contract中,function外
    uint public myUnit=123;

    function foo() external {
        // 调用这个方法的时候创建这个变量,调用结束后销毁
        uint notStateVariable=456;
        myUnit=notStateVariable; //该方法结束后,myUnit=456
    }
}
// SPDX-License-Identifier: GPL-3.0

pragma solidity ^0.8.1;

import "./Function.sol" as myFuntion;

contract FirstContract {
   uint var1;

   function set(uint x) public {
       var1 = x;
   }

   function get() public view returns (uint) {
       return var1;
   }
}

Local Variable

  • ​ 定义在function内,方法结束的时候变量销毁
  • ​ 不会存储在区块链中
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.1;

contract LocalVariables {
    // State variables  
    uint public i;
    bool public b;
    address public myAddress;

    function foo() external {
    // Local variable
        uint x=123;
        bool f=false;

        x+=345;
        f=true;

        // 改变了区块链中的值, state才会改变,local在方法结束时,改变失效
        i=125;
        b=true;
        myAddress=address(1);
    }
}

Global Variable

https://docs.soliditylang.org/en/v0.8.17/units-and-global-variables.html

  • ​ 提供关于区块链的信息
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.1;

contract GlobalVariables {
    function globalVars() external view returns (address,uint,uint){
        address sender=msg.sender;
        uint timestamp=block.timestamp;
        uint blockNum=block.number;
        return (sender,timestamp,blockNum);
        /*
        0:
        address: 0x5B38Da6a701c568545dCfcB03FcB875f56beddC4
        1:
        uint256: 1694958611
        2:
        uint256: 14
        */
    }
}

image-20230924190900455