
在區塊鏈世界裡,我們唯一相信的只有區塊上的信息。也就是說,我們只能透過「包含這筆交易的區塊高度」來判斷事情發生的先後以及時間點。也就是說如果你手續費付的少、交易塞車了一天,那麼不論你多早提交交易,這筆交易的最終時間都會被判斷在「塞車後」成功寫上區塊鏈的時間點。也就是說,區塊鏈無法精準判斷時間先後,這算是為了安全性而帶來的小小缺點。
因此在智能合約的開發過程中,我們不能相一般寫程式一樣輕鬆的使用datetime.now()來知道現在的時間點,我們必須要先知道「最新的區塊高度」,接著才能換算「現在時間」。這個時間點固然不精準了,但是是在區塊鏈中唯一可以被信任的用法。
以下就是我簡單的透過neo-python寫的「獲取現在時間點」的程式。邏輯非常之簡單,如果了解前面說的話又懂邊程的話,看起來應該十分輕鬆。
以上的程式也可以在我的GitHub - 智能合約筆記 裡面找到:https://github.com/antoncoding/neo-smart-contracts/blob/master/sample-timestamp.py
實際把這個合約編譯便放到private-net上面執行,可以透過neo-python執行下列指令:
build {path}/smart-contracts/sample-timestamp.py test 02 02 True True
若是想從頭看看智能合約的架設部屬,可以參考我之前的文章:neo-python: 在NEO上部屬第一個智能合約
函式回給我們的值是1528088393,這就是我們一般程式中常用到的Timestamp格式了。可以利用線上工具看一下這個Timestamp所對應到的時間,確定是合理的。
補充一下,這個timestamp意義是從1970年一月一號到現在的秒數,因此單位是秒。所以如果要設定「一天後」的時間點,只要使用這個Timestamp加上86400秒,就是隔天囉!
大概就是這樣,簡單的一個邏輯,了解之後就會發現要處理時間是很簡單的!