「人」與「人」之間無非時時刻刻都在交易,只是每一種交易的形式與媒介有所不同,而區塊鏈的世界也有特定的交易單位,主要分為兩大類型的單位, 分別是以乙太幣單位以及時間單位。
💰 乙太幣單位
最小單位為「wei」, 而其餘主要會用到的單位分別是「gwei」與「ether」。
// 1 wei是貨幣中的最小單位
uint oneWei = 1 wei;
require(oneWei == 1, "1 wei is not equal to 1");
// 1 gwei is equal to 10^9 wei
uint oneGWei = 1 gwei;
require(oneGWei == 1e9, "1 gwei is not equal to 1e9");
require(oneGWei == pow(10, 9));
// 1 ether is equal to 10^18 wei
uint oneEther = 1 ether;
require(oneEther == 1e18, "1 ether is not equal to 1e18");
require(oneEther == pow(10, 18));
require(oneEther == 1000000000 * oneGWei, "1 ether is not equal to 1000000000 gwei");
🕑 時間單位
時間單位的部份就比較容易理解了, 非常直觀, 以「秒」為基礎單位進行延伸。
// 1秒
assert(1 seconds == 1);
// 1分鐘 = 60秒
assert(1 minutes == 60 seconds);
// 1小時 = 60分鐘
assert(1 hours == 60 minutes);
// 1天=24小時
assert(1 days == 24 hours);
// 1周 = 7天
assert(1 weeks == 7 days);
由於block(區塊)中通常帶有時間戳記, 而單位也是秒, 因此我們可以進行一些區塊的驗證如下:
function validate(uint start, uint secondsAfter) public {
// 區塊的時間戳記至少在3秒以前, 才算有效
if (block.timestamp >= start + secondsAfter * 3 seconds) {
// ...
}
}
結語
「單位」在區塊鏈的世界中真的非常重要,尤其與金流及驗證有關的演算都是需要進行單位轉換的演算,因此我們務必打好基礎,理解各個單位的用法、等價方式…,才能夠撰寫出一份完整的合約內容。