【区块链安全 | 第二十三篇】单位和全局可用变量(一)

文章目录

  • [单位和全局可用变量(Units and Globally Available Variables)](#单位和全局可用变量(Units and Globally Available Variables))
    • [以太单位(Ether Units)](#以太单位(Ether Units))
    • [时间单位(Time Units)](#时间单位(Time Units))
    • 保留关键字

单位和全局可用变量(Units and Globally Available Variables)

以太单位(Ether Units)

在 Solidity 中,数字字面量可以使用 weigweiether 作为后缀,指定以太的子单位。如果数字没有后缀,则默认单位为 wei

solidity 复制代码
assert(1 wei == 1);
assert(1 gwei == 1e9); // 1 gwei = 10^9 wei
assert(1 ether == 1e18); // 1 ether = 10^18 wei

这些单位的后缀只是对数字进行以 10 为底的幂次乘法。

注意finneyszabo 这两个单位在 Solidity 0.7.0 版本中被移除。

时间单位(Time Units)

数值字面量可以使用 secondsminuteshoursdaysweeks 作为后缀,指定时间单位。这些单位的基础单位是 seconds,并且被简单地定义为:

  • 1 == 1 seconds
  • 1 minutes == 60 seconds
  • 1 hours == 60 minutes
  • 1 days == 24 hours
  • 1 weeks == 7 days

注意

1.这些单位在日历计算中可能会导致误差,因为一年不总是 365 天,甚至一天也不总是 24 小时(例如由于闰秒的影响)。

2.由于闰秒无法预测,要实现精准的日历计算,需要使用外部预言机(oracle)提供更新的时间数据。

3.years 单位在 Solidity 0.5.0 版本中被移除,原因同上。

以下代码是不允许的:

solidity 复制代码
uint duration = 3;
uint timePeriod = duration days; // 错误:无法对变量使用时间单位后缀

如果想要让函数参数表示天数,正确的做法是:

solidity 复制代码
function f(uint start, uint daysAfter) public {
    if (block.timestamp >= start + daysAfter * 1 days) {
        // 逻辑代码
    }
}

保留关键字

以下关键字在 Solidity 中是保留的。它们可能在未来成为语法的一部分:

afteraliasapplyautobytecasecopyofdefaultdefinefinalimplementsininlineletmacromatchmutablenullofpartialpromisereferencerelocatablesealedsizeofstaticsupportsswitchtypedeftypeofvar

相关推荐
一名优秀的码农15 小时前
vulhub系列-74-Hackable III(超详细)
安全·web安全·网络安全·网络攻击模型·安全威胁分析
千里念行客24017 小时前
康华生物拐点已至:狂苗龙头加速转型 开启预防+治疗双轮增长新征程
大数据·科技·安全·健康医疗
金士镧(厦门)新材料有限公司18 小时前
片状碳酸镧:一种“低调但很忙”的稀土材料
科技·安全·全文检索·生活·能源
m0_7381207219 小时前
渗透基础知识ctfshow——Web应用安全与防护(第六 七章)
服务器·前端·安全
一只鼠标猴19 小时前
甲方安全运营:漏洞整改推动实操指南
运维·安全·网络安全·安全架构·安全运营·漏洞整改
DianSan_ERP19 小时前
淘宝订单接口集成中如何正确处理消费者敏感信息的安全与合规问题?
大数据·运维·网络·人工智能·安全·servlet
星幻元宇VR19 小时前
VR科普赛车|沉浸式学习交通安全知识
科技·学习·安全·生活·vr
KKKlucifer19 小时前
安全智能体:数据安全运营自动化与自主决策的技术突破
运维·安全·自动化
VBsemi-专注于MOSFET研发定制19 小时前
高端地铁/轻轨门控系统控制器功率器件选型方案——高可靠、长寿命与安全驱动系统设计指南
安全
EasyGBS19 小时前
国密GB35114协议国标GB28181平台EasyGBS双标融合筑牢金融视频监控安全技术底座
安全·金融·音视频