Solidity
取決於時間變數的地址餘額
有沒有辦法比較一個地址在兩個不同時間的餘額,或者一般來說檢查一個地址在特定時間的餘額?
我想做類似…
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 參數,並儘可能接近您所需的時間戳估計塊號。