【Solidity智能合约系列】07--以太单位及时间单位

关于Ether背景

关于 Ether一词,Vitalik Buterin曾经提过,「Ether」念起来响亮好听,而且其意义为「充满宇宙,让光线行进却不可见的物质」,以太坊的愿景具有类似意义,希望区块链的应用能扩散至每个领域,重新打造一个透明,公平,效率的新世界。

以太单位(Ether Units)

数字常量(字面量)后面添加后缀wei, finney, szabo 或者 ether,这些后缀都是以太坊货币单位,不同的单位可以转换。如果** Ether**没有后缀单位的话,默认是 wei,例如, 2 ether == 2000 finney,评估为 true

Eth不同单位之间的换算方式如下:

  • 1 ether == 10^3 finney
  • 1 ether == 10^6 szabo
  • 1 ether == 10^18 wei

以太坊的单位,沿袭了科学界的传统,用做过杰出贡献的数学、密码学专家的名字命名。
wei: Wei Dai 戴伟 密码学家 ,发表 B-money
finney: Hal Finney 芬尼 密码学家、工作量证明机制(POW)提出
szabo: Nick Szabo 尼克萨博 密码学家、智能合约的提出者

以太坊上的计量单位的背景介绍

时间单位(Time Units)

seconds, minutes, hours, days, weeksyears都可以加在数字常量后面作为时间单位,不同的单位之间可以相互转换,转换方式如下:

  • 1 == 1 seconds (默认单位)

  • 1 minutes == 60 seconds

  • 1 hours == 60 minutes

  • 1 days == 24 hours

  • 1 weeks = 7 days

  • 1 years = 365 days

    注意:使用这些单位进行日期计算需要特别小心,因为不是每年都是365天,且并不是每天都有24小时,因为还有闰秒(leap seconds
    )。由于无法预测闰秒,必须由外部的预言(oracle)来更新从而得到一个精确的日历库。

注意:
由于上诉原因,years后缀已经被废弃了。

这些后缀不适用于变量,如果你想对输入的变量,说明其后缀单位,比如days,你可以通过如下方式来实现:

function f(uint start, uint daysAfter) public {
    if (now >= start + daysAfter * 1 days) {
      // ...
    }
}

你可能感兴趣的:(【Solidity智能合约系列】07--以太单位及时间单位)