Saldo einer Adresse in Abhängigkeit von einer Zeitvariablen

Gibt es eine Möglichkeit, den Kontostand einer Adresse zu zwei verschiedenen Zeiten zu vergleichen oder allgemein den Kontostand einer Adresse zu einem bestimmten Zeitpunkt zu überprüfen?

Ich möchte sowas machen wie...

uint256 public startTime
address public exampleAddress

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

Meine bevorzugte Eingabe wäre eine Variable wie oben definiert, aber ein Unix-Zeitstempel oder ein Ereignis wäre auch geeignet.

Kennt jemand eine Möglichkeit, diese Art von Operation durchzuführen?

Vielen Dank im Voraus

Antworten (2)

Kurze Antwort: Nein, Sie können den vergangenen Kontostand einer Adresse nicht über Solidity abrufen. Aber es gibt eine Lösung mit web3js.

Lange Antwort: Sie könnten so etwas tun, um den Saldo einer Adresse zu einem bestimmten Zeitpunkt abzurufen, wie hier zu sehen: Saldoverlauf der Adresse abrufen

mit folgendem Code.

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}`);

Dann könnten Sie es an Ihren Smart Contract übergeben und die beiden Salden dort vergleichen oder in web3 vollständig vergleichen.

Ich glaube nicht, dass dies über den Smart Contract selbst möglich ist.

Das Beste, was Sie haben könnten, ist, den Parameter blocknumber von web3 zu verwenden und die Blocknummer so nah wie möglich an Ihrem gewünschten Zeitstempel zu schätzen.