智能合约基础3

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

单位和全局可用变量

在智能合约的代码中,是含有单位的。

1、以太单位

文字数字可以采用 后缀weigweiether指定 Ether 的子面额,其中不带后缀的 Ether 数字被假定为 Wei。 assert(1 wei == 1); assert(1 gwei == 1e9); //1后面9个0 assert(1 ether == 1e18); //1后面18个0

2、时间单位

字面值后的后缀如secondsminuteshoursdays and weeks可以用来指定时间单位,其中秒是基本单位。 1 == 1 seconds 1 minutes == 60 seconds 1 hours == 60 minutes 1 days == 24 hours 1 weeks == 7 days 提示:如果您使用这些单位执行日历计算,请小心,因为并非每年都等于 365 天,而且由于闰秒,甚至每天都有 24 小时。由于无法预测闰秒,因此必须由外部预言机更新精确的日历库。并且,这些后缀不能用于变量

如果想以days为单位解释一个函数参数,你可以通过以下方式: function f(uint start, uint daysAfter) public { if (block.timestamp >= start + daysAfter * 1 days) { //在开始的多少天后然后与时间戳进行对比。 // ... } }

3、特殊变量和函数

`` blockhash(uint blockNumber) returns (bytes32) //给定块的哈希值,当blocknumber`它是 256 个最近的块之一时;否则返回零,也就是说,他只返回最新的256个块中的一个

block.basefee( uint) //当前区块的基本费用

block.chainid(uint) //当前链 id

block.coinbase() //当前区块矿工地址,返回address payable类型

block.difficulty( uint) //当前区块难度

block.gaslimit( uint) // 当前区块gaslimit

block.number(uint) //当前区块号

block.timestamp( uint) //当前区块的时间戳,自 unix 纪元以来的秒数

gasleft() returns (uint256) //剩余气体

msg.data() //完整的通话数据bytes calldata

msg.sender( address) //消息的发送者(当前通话),该全局变量使用的非常频繁,基本每一个项目的智能合约中都存在。

msg.sig( bytes4) //calldata 的前四个字节(即函数标识符)

msg.value(uint) //随消息发送的 wei 数量

tx.gasprice( uint) //交易的gas价格

tx.origin( address): //交易的发送者(完整的调用链) `` 提示:**msg.sender和 msg.value`可以为每个外部函数调用而改变。这包括对库函数的调用。**

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值