Zuordnung einer Adresse zu einem Saldo mit Aufbewahrung des Transaktionsverlaufs

Ich habe ein Guthaben wie folgt, so dass ich nach dem Ändern seines Wertes die Historie früherer Transaktionen behalten möchte, zum Beispiel zum ersten Mal der Wert von Energy_Balanceist 5und zum zweiten Mal 2Einheiten hinzugefügt werden, Energy_Balanceso dass der Gesamtwert wird sein 7. Jetzt möchte ich den Verlauf aller Transaktionen aufbewahren, damit wir wissen, was der erste Wert war (dh 5) und was der zweite Transaktionswert war (dh 2). Wenn ich dafür ein definieren muss event, wie definiere ich es und wie rufe ich event auf ?

mapping(address => uint256) Energy_Balance

Im Falle der Verwendung eines Arrays, wie von Benutzer Eli Drion vorgeschlagen , wie folgt:

mapping (address => uint[]) Energy_Balance

Wie kann ich den neuen Wert von Energy_Balance einstellen? Zum Beispiel,

First Transaction: balances[owner][0] = balances[owner][0] + value; 
Second Transaction: balances[owner][1] = balances[owner][1] + value;

ist richtig ?

Verwenden Sie Ereignisse in Ihrem Vertrag und filtern Sie in Ihrer App github.com/ethereum/wiki/wiki/JavaScript-API#web3ethfilter

Antworten (1)

Jetzt möchte ich den Verlauf aller Transaktionen behalten

Sie müssen dann ein Array verwenden, da es hier auf die Reihenfolge ankommt. Wenn Sie keine weiteren Informationen über den Benutzer benötigen, müssen Sie keine Struktur verwenden, sondern können dies direkt tun.

mapping (address => uint[]) txs_history;

Wenn ich dafür ein Ereignis definieren muss, wie definiere ich es und wie rufe ich event auf?

Definieren eines Ereignisses

event MyEvent(address _sender, uint _amount);

Aufrufen eines Ereignisses

function myFunction(uint _amount) {
    //we do alot of things here
    MyEvent(msg.sender, _amount);
}
Danke schön. Meinen Sie, dass einer Ihrer vorgeschlagenen Ansätze ausreicht oder ich sowohl "Array" als auch "Event" verwenden muss? Danke
Wenn Sie eine UI (Website) verwenden, die mit dem Vertrag interagiert, möchten Sie Ereignisse verwenden, da die Website sonst nicht weiß, was passiert.
Es bedeutet also, dass einer der Ansätze ausreicht? ex. Array oder Ereignis? Danke
Hängt davon ab, was Sie tun möchten. Wenn Sie eine Website haben, müssen Sie schließlich auch Ereignisse verwenden.
Danke noch einmal. Und stimmen Sie dem zu, was ich in meiner Frage bearbeitet habe? Ist es richtig ?
Ich verstehe deine letzten beiden Zeilen nicht. Es ist für die Geschichte von txs, nicht um den Saldo zu berechnen. Außerdem möchten Sie vielleicht auch vorzeichenbehaftete Ganzzahlen verwenden, da Token hineinkommen, aber auch herauskommen können
Und stimmen Sie dem zu, was ich für die Berechnung des neuen Guthabens getan habe? Ist es richtig ? Ich verstehe auch nicht, was vorzeichenbehaftete Ganzzahlen bedeuten? Danke
Ja das ist korrekt. Für vorzeichenbehaftete und vorzeichenlose Ganzzahlen lasse ich Sie online herausfinden, was es bedeutet. :)
Danke :) In der Zwischenzeit denke ich, dass ich für "balances[owner][counter] = balances[owner][counter] + value" einen "statischen Uint-Zähler" definieren muss, so dass "counter" seinen letzten Wert behält. Ist es nicht ? Wenn ja, wie kann man es in Solidität definieren? statischer Uint-Zähler = 0 ist richtig?