Hex statt uint durch Mapping erhalten [duplizieren]

Ich habe eine einfache Methode, bei der ich zähle, wie oft eine bestimmte Adresse die Smart-Contract-Methode aufgerufen hat. Hier ist Code:

mapping (address => uint) countTotal;

function countSends() public returns(uint retClicks) {
    clicksTotal[msg.sender]++;
    return countTotal[msg.sender];
}

Offensichtlich erwarte ich, dass ich beim ersten Senden 1 bekomme, dann 2, dann 3 ...

Aber aus irgendeinem Grund bekomme ich web3jseinen Hexadezimalwert wie 0xea6166fd3f8249c3dd3ed1dcbb3af9989aebdcf9f5eb079fc6d570296e6f4509. Wie kann ich eine reguläre Ganzzahl ohne Vorzeichen erhalten?

BEARBEITEN: Doppelte Kindermädchen im Zusammenhang mit theoretischer Diskussion ... dies erklärt viel besser, was Sie tun müssen: Wie erhält man Werte, die von nicht konstanten Transaktionsfunktionen zurückgegeben werden?

Bitte teilen Sie Ihren Code mit. Aber meine Vermutung: Das ist ein Transaktionshash. callTransaktionen haben nicht wirklich Rückgabewerte ... wenn Sie den Zustand ändern und einen Wert "zurückgeben" möchten, werden Sie wahrscheinlich ein Ereignis oder ein nach der Transaktion verwenden .
@smarx Ja, ich schaue es mir nur an ... scheint, dass ich warten muss, bis die Transaktion bestätigt ist, damit die korrekte Zählung zurückgegeben wird.
Nun, Sie müssen warten, bis die Transaktion abgebaut ist, bevor die Änderung stattgefunden hat, aber es wird immer noch keinen Rückgabewert geben.
Einfaches Beispiel für die Verwendung eines Ereignisses, um den Rückgabewert zu erhalten: ethereum.stackexchange.com/questions/6380/…

Antworten (1)

Ich vermute, du hast einen Tippfehler. Statt clicksTotal [msg.sender]++; ändern Sie es in countTotal [msg.sender]++;

Versuche dies.

mapping (address => uint) countTotal;

function countSends() public returns(uint retClicks) {
    countTotal[msg.sender]++;
    return countTotal[msg.sender];
}