自学内容网 自学内容网

(6)solidity中的全局变量及属性详解

在 Solidity 中,全局变量是由以太坊虚拟机(EVM)提供的特殊变量,用于访问区块链和交易的相关信息。以下是 Solidity 中所有全局变量及其属性的详细介绍和用法。


1. 区块和交易信息

1.1 block
  • 作用:提供当前区块的信息。
  • 属性
    • block.basefee:当前区块的基础费用(EIP-1559)。
    • block.chainid:当前区块链的链 ID。
    • block.coinbase:当前区块的矿工地址。
    • block.difficulty:当前区块的难度(PoW)。
    • block.gaslimit:当前区块的 Gas 限制。
    • block.number:当前区块的编号。
    • block.timestamp:当前区块的时间戳(Unix 时间)。
  • 示例
    function getBlockInfo() public view returns (uint256, uint256) {
        return (block.number, block.timestamp);
    }
    
1.2 msg
  • 作用:提供当前交易的信息。
  • 属性
    • msg.data:完整的调用数据(calldata)。
    • msg.sender:当前调用的发送者地址。
    • msg.sig:函数选择器(前 4 字节)。
    • msg.value:发送的以太币数量(单位:wei)。
  • 示例
    function getMsgInfo() public view returns (address, uint256) {
        return (msg.sender, msg.value);
    }
    
1.3 tx
  • 作用:提供当前交易的信息。
  • 属性
    • tx.gasprice:当前交易的 Gas 价格。
    • tx.origin:交易的原始发送者地址。
  • 示例
    function getTxInfo() public view returns (uint256, address) {
        return (tx.gasprice, tx.origin);
    }
    

2. 地址相关

2.1 address
  • 作用:提供地址相关的属性和方法。
  • 属性
    • address.balance:地址的以太币余额(单位:wei)。
  • 方法
    • address.transfer(uint256 amount):发送以太币到地址,失败时抛出异常。
    • address.send(uint256 amount):发送以太币到地址,失败时返回 false
    • address.call(bytes memory data):低级调用,返回 (bool, bytes)
    • address.delegatecall(bytes memory data):委托调用,返回 (bool, bytes)
    • address.staticcall(bytes memory data):静态调用,返回 (bool, bytes)
  • 示例
    function sendEther(address payable recipient) public payable {
        recipient.transfer(msg.value);
    }
    

3. 合约相关

3.1 this
  • 作用:当前合约的地址。
  • 示例
    function getContractAddress() public view returns (address) {
        return address(this);
    }
    
3.2 selfdestruct
  • 作用:销毁当前合约,并将剩余以太币发送到指定地址。
  • 示例
    function destroy() public {
        selfdestruct(payable(msg.sender));
    }
    

4. 数学和加密

4.1 abi
  • 作用:提供 ABI 编码和解码功能。
  • 方法
    • abi.encode(...):编码参数。
    • abi.decode(bytes memory data, (...)):解码数据。
    • abi.encodePacked(...):紧凑编码参数。
    • abi.encodeWithSelector(bytes4 selector, ...):带选择器编码。
    • abi.encodeWithSignature(string memory signature, ...):带签名编码。
  • 示例
    function encodeData(uint256 a, uint256 b) public pure returns (bytes memory) {
        return abi.encode(a, b);
    }
    
4.2 keccak256
  • 作用:计算 Keccak-256 哈希。
  • 示例
    function getHash(string memory input) public pure returns (bytes32) {
        return keccak256(abi.encodePacked(input));
    }
    
4.3 sha256
  • 作用:计算 SHA-256 哈希。
  • 示例
    function getSha256(string memory input) public pure returns (bytes32) {
        return sha256(abi.encodePacked(input));
    }
    
4.4 ripemd160
  • 作用:计算 RIPEMD-160 哈希。
  • 示例
    function getRipemd160(string memory input) public pure returns (bytes20) {
        return ripemd160(abi.encodePacked(input));
    }
    

5. 错误处理

5.1 require
  • 作用:检查条件,如果失败则回滚交易。
  • 示例
    function setValue(uint256 newValue) public {
        require(newValue > 0, "Value must be greater than 0");
        myVariable = newValue;
    }
    
5.2 assert
  • 作用:检查内部错误,如果失败则回滚交易。
  • 示例
    function divide(uint256 a, uint256 b) public pure returns (uint256) {
        assert(b != 0);
        return a / b;
    }
    
5.3 revert
  • 作用:直接回滚交易。
  • 示例
    function setValue(uint256 newValue) public {
        if (newValue <= 0) {
            revert("Value must be greater than 0");
        }
        myVariable = newValue;
    }
    

6. 其他全局变量

6.1 gasleft
  • 作用:返回剩余的 Gas。
  • 示例
    function getRemainingGas() public view returns (uint256) {
        return gasleft();
    }
    
6.2 type
  • 作用:获取类型的相关信息。
  • 示例
    function getTypeInfo() public pure returns (uint256) {
        return type(uint256).max;
    }
    

总结

Solidity 中的全局变量提供了访问区块链和交易信息的便捷方式。


原文地址:https://blog.csdn.net/qq_43258522/article/details/145172817

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!