最新內容會更新在主站深入淺出區塊鏈社群
原文連結:智慧合約語言 Solidity 教程系列7 - 以太單位及時間單位
這是Solidity教程系列文章第7篇介紹以太單位及時間單位,系列帶你全面深入理解Solidity語言。
寫在前面
Solidity 是以太坊智慧合約程式語言,閱讀本文前,你應該對以太坊、智慧合約有所瞭解,
如果你還不瞭解,建議你先看以太坊是什麼
歡迎訂閱區塊鏈技術專欄閱讀更全面的分析文章。
貨幣單位(Ether Units)
一個數字常量(字面量)後面跟隨一個字尾wei, finney,szabo或ether,這個字尾就是貨幣單位。不同的單位可以轉換。不含任何字尾的預設單位是wei。
不同的以太幣單位轉換關係如下:
- 1 ether == 10^3 finney == 1000 finney
- 1 ether == 10^6 szabo
- 1 ether == 10^18 wei
插曲:以太幣單位其實是密碼學家的名字,是以太坊創始人為了紀念他們在數字貨幣的領域的貢獻。他們分別是:
wei: Wei Dai 戴偉 密碼學家 ,發表 B-money
finney: Hal Finney 芬尼 密碼學家、工作量證明機制(POW)提出
szabo: Nick Szabo 尼克薩博 密碼學家、智慧合約的提出者
我們可以使用一下程式碼驗證一個轉換關係:
pragma solidity ^0.4.16;
contract testUnit {
function tf() public pure returns (bool) {
if (1 ether == 1000 finney){
return true;
}
return false;
}
function ts() public pure returns (bool) {
if (1 ether == 1000000 szabo){
return true;
}
return false;
}
function tgw() public pure returns (bool) {
if (1 ether == 1000000000000000000 wei){
return true;
}
return false;
}
}
時間單位(Time Units)
時間單位: seconds, minutes, hours, days, weeks, years均可做為字尾,並進行相互轉換,規則如下:
- 1 == 1 seconds (預設是seconds為單位)
- 1 minutes == 60 seconds
- 1 hours == 60 minutes
- 1 days == 24 hours
- 1 weeks = 7 days
- 1 years = 365 days
使用這些單位進行日期計算需要特別小心,因為不是每年都是365天,且並不是每天都有24小時,因為還有閏秒。由於無法預測閏秒,必須由外部的預言(oracle)來更新從而得到一個精確的日曆庫。
這些字尾不能用於變數。如果想對輸入的變數說明其不同的單位,可以使用下面的方式:
pragma solidity ^0.4.16;
contract testTUnit {
function currTimeInSeconds() public pure returns (uint256){
return now;
}
function f(uint start, uint daysAfter) public {
if (now >= start + daysAfter * 1 days) {
// ...
}
}
}
參考視訊
我們也推出了目前市面上最全的視訊教程:深入詳解以太坊智慧合約語言Solidity
目前我們也在招募體驗師,可以點選連結瞭解。
參考文件
深入淺出區塊鏈 - 系統學習區塊鏈,打造最好的區塊鏈技術部落格。
如果想與我有更密切的交流可以選擇加入我的知識星球(星球成員可加入微信技術交流群)。