Solidity

我可以在合約內部檢索合約被探勘的時間戳嗎?

  • August 9, 2016

我知道now別名block.timestamp (uint): current block timestamp時間單位的關鍵字

但是我沒有找到一種方法來獲取合約被探勘的區塊時間戳。我應該使用事件並將now關鍵字“記錄”到開始變數中嗎?

您必須通過在建構子中保存 block.timestamp 將其編碼到您的合約中:

contract A {
 uint public createdTimestamp;
 function A() {
   createdTimestamp = block.timestamp;
 }
}

您可以像這樣訪問:

contract B is Test {
 function testTimestamp () {
   A a = new A();
   uint timestamp = a.createdTimestamp();
   //@log timestamp `uint timestamp`
 }
}

或記錄事件,如果您不需要從鏈中訪問此資訊:

contract A {
 event created(uint timestamp);
 function A() {
   created(block.timestamp);
 }
}

但是查詢任意合約是不可能的,但是這可以通過對合約程式碼的二進制搜尋在 O(log_2 n) 中實現。

引用自:https://ethereum.stackexchange.com/questions/2450