Statische Variable in der Festigkeit?

Ich definiere eine Waage wie folgt:

mapping (address => uint[]) Energy_Balance

um den Verlauf jeder Transaktion aufzubewahren. Ich setze seinen neuen Wert wie folgt:

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

Jetzt möchte ich a so definieren , dass es seinen letzten Wert jedes Maluint counter behalten kann, wenn es um eine Einheit erhöht wird , wie folgt:

balances[owner][counter] = balances[owner][counter] + value

Wenn ich Zähler wie folgt definiere, ist er in der Solidität korrekt und kann seinen letzten Wert behalten ?

static uint counter = 0;
function myFunction(uint value) {
    balances[owner][counter] = balances[owner][counter] + value;
    counter = counter +1;
}

Antworten (1)

Sie können vereinfachen.

function myFunction(uint value) {
  balances[owner].push(value);
}

Außerdem einige nützliche Getter:

function getOwnerValueCount(address owner) returns(uint count) {
  return balances[owner].length;
}

Fügen Sie publicIhrem Mapping hinzu Energy_Balancesund Sie erhalten ungefähr einen "kostenlosen" Getter:

function Energy_Balances(address owner, uint row) public view returns(uint) {
  return Energy_Balances[owner][row];
}

Nebenbei: Konventioneller wäre es zu camelCase energyBalances.

Ich hoffe es hilft.

Danke schön. meinst du im Falle der Verwendung von "energyBalances[owner].push(value);" Ich muss energyBalances nicht als Array wie folgt definieren: Zuordnung (Adresse => uint[]) energyBalances ?
Nein. Vorausgesetzt, Sie haben es getan. mapping (address=>uint [])bedeutet, dass es für jede Adresse ein Array gibt. pushfügt eine weitere Zeile hinzu, sodass Sie den Zähler nicht selbst verwalten müssen.