深入理解Solidity——全局变量

全局变量(Global Variables)

  • abi.encode(...) returns (bytes):对给定的参数进行ABI编码。
  • abi.encodePacked(...) returns (bytes): Performes packed encoding of the given arguments
  • abi.encodeWithSelector(bytes4 selector, ...) returns (bytes)::对给定的参数进行ABI编码——从第二个预置给定的四字节选择器开始
  • abi.encodeWithSignature(string signature, ...) returns (bytes):相当于abi.encodeWithSelector(bytes4(keccak256(signature), ...)
  • block.blockhash(uint blockNumber) returns (bytes32): 给定的块的hash值, 只有最近工作的256个块的hash值—— 在 0.4.22 后请使用blockhash(uint blockNumber).
  • block.coinbase (address): 当前块的矿工的地址
  • block.difficulty (uint): 当前块的难度
  • block.gaslimit (uint): 当前块的gaslimit
  • block.number (uint):当前块的数量
  • block.timestamp (uint):当前块的时间戳
  • gasleft() returns (uint256): 剩余 gas
  • msg.data(bytes): 完整的calldata
  • msg.gas(uint): 剩余 gas - 0.4.21后请使用 gasleft()
  • msg.sender (address): 消息的发送者(当前调用)
  • msg.value (uint): 和消息一起发送的wei的数量
  • now (uint): 当前块的时间戳(block.timestamp的别名)
  • tx.gasprice (uint):交易的gas价格
  • tx.origin (address):交易的发送者(全调用链)
  • assert(bool condition): abort execution and revert state changes if condition is false (用于内部错误)
  • require(bool condition): abort execution and revert state changes if condition is false (用于输入错误或外部组件的错误)
  • require(bool condition, string message): abort execution and revert state changes if condition is false (用于输入错误或外部组件的错误). 并提供错误信息.
  • revert(): 中止执行并还原状态更改
  • revert(string message):中止执行并还原状态更改,提供解释字符串
  • blockhash(uint blockNumber) returns (bytes32): : 给定的块的hash值, 只有最近工作的256个块的hash值
  • keccak256(...) returns (bytes32):计算(紧凑排列的)参数的 Ethereum-SHA3 hash值
  • sha3(...) returns (bytes32): an alias to keccak256
  • sha256(...) returns (bytes32): 计算(紧凑排列的)参数的SHA256 hash值
  • ripemd160(...) returns (bytes20):计算 256个(紧凑排列的)参数的RIPEMD
  • ecrecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) returns (address): 椭圆曲线签名公钥恢复,错误时返回0
  • addmod(uint x, uint y, uint k) returns (uint): compute (x + y) % k where the addition is performed with arbitrary precision and does not wrap around at 2**256. Assert that k != 0 starting from version 0.5.0.
  • mulmod(uint x, uint y, uint k) returns (uint): compute (x * y) % k where the multiplication is performed with arbitrary precision and does not wrap around at 2**256. Assert that k != 0 starting from version 0.5.0.
  • this (current contract’s type): 当前合约,在地址上显式转换
  • super: 在层次关系上一层的合约
  • selfdestruct(address recipient): 销毁当前的合约,将其资金发送到指定address
  • suicide(address recipient): a deprecated alias to selfdestruct
  • <address>.balance (uint256): address地址中的账户余额(以wei为单位)
  • <address>.send(uint256 amount) returns (bool): 将一定量wei发送给address地址,若失败返回false
  • <address>.transfer(uint256 amount): 将一定量wei发送给address地址,若失败抛出异常。
注解
不要依赖于block.timestampnowblockhash用作随机性的来源,除非你知道你在做什么。
时间戳和块哈希在一定程度上受矿工的影响。例如,挖掘社区中的坏角色可以在选定的散列上运行赌场支付函数,如果他们没有收到任何钱,只需重试一个不同的散列。
当前块时间戳必须严格大于最后一个块的时间戳,但唯一的保证是它将位于规范链中的两个连续块的时间戳之间的某处。
注解
由于区块链是变化的,所以块哈希对于全部区块块不可用。只能访问最近256个块的散列值,所有其他区块哈希将为0。

上一篇:深入理解Solidity——运算符优先顺序

下一篇:深入理解Solidity——函数可见性定义符、修饰符、保留字和语法

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值