📜  Solidity-特殊变量(1)

📅  最后修改于: 2023-12-03 14:47:30.999000             🧑  作者: Mango

Solidity-特殊变量

Solidity是一种智能合约编程语言,用于在以太坊区块链上编写智能合约。Solidity提供了许多特殊变量,用于访问与合约交互、区块链信息和交易相关的数据。这些特殊变量使得编写具有自动执行功能的智能合约变得更加便捷和灵活。

下面是一些Solidity中常用的特殊变量:

区块和交易相关的特殊变量
block

block是一个包含与当前区块相关信息的全局变量。它包含以下子属性:

  • block.blockhash(uint blockNumber) returns (bytes32):返回指定区块号的区块哈希值。
  • block.coinbase:当前区块的矿工地址。
  • block.difficulty:当前区块的难度级别。
  • block.gaslimit:当前区块的燃气限制。
  • block.number:当前区块的区块号。
  • block.timestamp:当前区块的时间戳。
msg

msg是一个包含与当前消息(交易)相关信息的全局变量。它包含以下属性:

  • msg.data:返回完整的调用数据(即交易数据)。
  • msg.gas:剩余的可用燃气数量。
  • msg.sender:当前调用合约的地址。
  • msg.value:当前附带的以太币数量。
tx

tx是一个包含与当前交易相关信息的全局变量。它包含以下子属性:

  • tx.gasprice:当前交易的燃气价格。
  • tx.origin:发起当前交易的地址。
合约相关的特殊变量
this

this是指当前合约的地址。它可以用于访问当前合约的状态变量和函数。

selfdestruct

selfdestruct是一个特殊的函数地址,用于销毁合约并将其余的余额发送到指定的目标地址。

address(this).balance

address(this).balance用于获取当前合约地址的余额。

其他特殊变量
now

now是一个全局变量,返回当前区块的时间戳。

abi

abi是一个全局变量,用于在Solidity合约中与外部合约进行交互。它定义了与外部合约进行通信时使用的函数选择器和参数编码规则。

示例代码

下面是一个使用Solidity特殊变量的示例代码片段:

pragma solidity ^0.8.0;

contract SpecialVariables {
    address public owner;
    uint public contractCreationTime;
    
    constructor() {
        owner = msg.sender;
        contractCreationTime = block.timestamp;
    }
    
    function destroyContract() public {
        require(msg.sender == owner, "Only the contract owner can destroy the contract");
        selfdestruct(payable(owner));
    }
}

此示例演示了如何使用Solidity中的msg.senderblock.timestamp。构造函数将合约创建者的地址存储在owner变量中,并记录创建合约的时间戳。destroyContract函数使用selfdestruct函数将合约销毁,并将余额发送给合约的所有者。

总结

Solidity提供了许多用于访问区块链信息和交易相关数据的特殊变量。掌握这些特殊变量可以使智能合约的开发更加灵活和强大。