Solidity

取決於時間變數的地址餘額

  • June 5, 2018

有沒有辦法比較一個地址在兩個不同時間的餘額,或者一般來說檢查一個地址在特定時間的餘額?

我想做類似…

uint256 public startTime
address public exampleAddress

function exampleFunction () public constant returns (uint value) {
   if (balanceOf(exampleAddress) < balanceOf_atStartTime(exampleAddress)) {
       returns X;
   }
}

我的首選輸入是上面定義的變數,但 Unix Timestamp 或事件也很合適。

有誰知道這種操作的方法?

非常感謝您提前

簡短回答:不,您無法通過 Solidity 獲取地址過去的餘額。但是有一個使用 web3js 的解決方案。

長答案:您可以做這樣的事情來獲取某個時間的地址餘額,如下所示: 獲取地址的餘額歷史記錄

使用以下程式碼。

let blockNum = web3.eth.blockNumber;
const historicTimestamp = new Date(historicDate).getTime();
while(true) {
 const block = web3.eth.getBlock(blockNum);
 if(block.timestamp < historicTimestamp) break;
 --blockNum;
}

//The blockNumber here is your required block number
web3.eth.getBalance(address, blockNumber).then(balance => `Balance at block number is ${balance}`);

然後你可以將它傳遞給你的智能合約並比較那裡的兩個餘額或在 web3 中完全比較。

我不認為這可以通過智能合約本身來完成。

最好的辦法是嘗試使用 web3 中的blocknumber 參數,並儘可能接近您所需的時間戳估計塊號。

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