Der Kontostand verringert sich nach dem Senden von Ether nicht

Hier ist zum Beispiel meine Beispielfunktion in Smart Contract:

function adoptCreeptomas(uint256 beastQuantity, address referrer
) public payable whenNotPaused {
    msg.sender.transfer(50);
}

Und dann versuche ich, diesen Vertrag zu testen:

describe("adopted creeptoma", async function() {
    it('adopted', async function() {
        let instance = await CreeptomaPresale.deployed();

        let pre = convertEther(getBalance(investor));
        await instance.adoptCreeptomas.call(beastQuantity, 0 {from: investor, value: ether(100)});
        let after = convertEther(getBalance(investor));
        console.log("before: " + pre + "--after: " + after);
    });
});

Das Druckprotokoll lautet:before: 100--after: 100

Hier ist meine getBalanceMethode:

export function getBalance(address) {
    return web3.eth.getBalance(address)
}

Ich weiß nicht, warum der Kontostand nicht abnimmt. Bitte hilf mir.

Danke

Antworten (1)

Du sagst, call()wenn du adoptCreeptomas. call()macht es explizit zu einem schreibgeschützten, nicht zustandsändernden Trockenlaufvorgang. Es wird nicht signiert oder zum Mining an das Netzwerk gesendet. Wenn Sie also das nächste Mal nachsehen, hat sich nichts geändert.

Schauen Sie hier für eine detaillierte Erklärung. Was ist der Unterschied zwischen einer Transaktion und einem Anruf?

Ich hoffe es hilft.

Vielen Dank. Es gibt einen Punkt, den ich nicht verstehe. Ich sehe, dass mein Kontostand um eine Zahl verringert wird, die in den Vertrag geschoben wird. zB: {from: investor, value: ether(15)}aber nicht meine nummer bei method transfer. zum Beispiel: msg.sender.transfer(10);Bedeutet das also, dass der gesamte Äther durch die Funktion im Vertrag verbraucht wird? Danke.
Ich denke, weil meine Methode immer den gesamten Ether aus der Eingabe verbrauchen wird. Aber ich bin mir nicht sicher. Wie kann ich dies in diesem Fall vermeiden, damit ich nicht alle Ether des Benutzers verwende?
Das wichtigste zuerst. Sie sollten ganache-cli oder Ihre eigene private Kette verwenden, damit das Experimentieren nichts kostet. Der Ether geht von fromAdresse zu toAdresse, wenn die Transaktion erfolgreich ist.