美文网首页
solidity系列教程<十一>特殊变量和特殊方法

solidity系列教程<十一>特殊变量和特殊方法

作者: addin_gao | 来源:发表于2019-04-18 11:01 被阅读0次

    区块和交易属性

    block.blockhash(uint blockNumber) returns (bytes32):指定区块的区块哈希——仅可用于最新的 256 个区块且不包括当前区块;而 blocks 从 0.4.22 版本开始已经不推荐使用,由 blockhash(uint blockNumber) 代替
    block.coinbase (address): 挖出当前区块的矿工地址
    block.difficulty (uint): 当前区块难度
    block.gaslimit (uint): 当前区块 gas 限额
    block.number (uint): 当前区块号
    block.timestamp (uint): 自 unix epoch 起始当前区块以秒计的时间戳
    gasleft() returns (uint256):剩余的 gas
    msg.data (bytes): 完整的 calldata
    msg.gas (uint): 剩余 gas - 自 0.4.21 版本开始已经不推荐使用,由 gesleft() 代替
    msg.sender (address): 消息发送者(当前调用)
    msg.sig (bytes4): calldata 的前 4 字节(也就是函数标识符)
    msg.value (uint): 随消息发送的 wei 的数量
    now (uint): 目前区块时间戳(block.timestamp)
    tx.gasprice (uint): 交易的 gas 价格
    tx.origin (address): 交易发起者(完全的调用链)

    地址相关

    • <address>.balance (uint256):
      以 Wei 为单位的地址类型余额。

    • <address>.transfer(uint256 amount):
      向 地址类型发送数量为 amount 的 Wei,失败时抛出异常,发送 2300 gas 的矿工费,不可调节。

    • <address>.send(uint256 amount) returns (bool):
      向地址类型发送数量为 amount 的 Wei,失败时返回 false,发送 2300 gas 的矿工费用,不可调节

    使用 send 有很多危险:如果调用栈深度已经达到 1024(这总是可以由调用者所强制指定),转账会失败;并且如果接收者用光了 gas,转账同样会失败。为了保证以太币转账安全,总是检查 send 的返回值,利用 transfer 或者下面更好的方式: 用这种接收者取回钱的模式。

    相关文章

      网友评论

          本文标题:solidity系列教程<十一>特殊变量和特殊方法

          本文链接:https://www.haomeiwen.com/subject/kujdiftx.html