Senden einer Transaktion - kann ich davon ausgehen, dass das Feld „Gas“ immer 21000 sein sollte, wenn das Feld „Daten“ fehlt?

Ich habe eine Funktion zum Übertragen von ETH von meinem Konto auf ein anderes Konto implementiert:

async function transfer(to, value) {
    let options = {
        from : PUBLIC_ADDRESS,
        to   : to,
        value: value
    };
    options.gas = await web3.eth.estimateGas(options);
    let signedTransaction = await web3.eth.accounts.signTransaction(options, PRIVATE_KEY);
    return await web3.eth.sendSignedTransaction(signedTransaction.rawTransaction);
}

Dies dient ausschließlich dem ETH-Transfer; Ich versuche nicht, eine intelligente Vertragsfunktion aufzurufen, daher kann ich das dataFeld aus dem optionsObjekt weglassen.

Mir ist aufgefallen, dass web3.eth.estimateGas(options)immer 21000 zurückgegeben wird.

Kann ich mich darauf verlassen und meinen Code vereinfachen zu:

    let options = {
        from : PUBLIC_ADDR,
        to   : to,
        value: value,
        gas  : 21000
    };

?

Vielen Dank

Antworten (1)

Wenn die toAdresse kein Smart Contract ist, dann ja. Dies sind die Standard-Gaskosten eines einfachen Ether-Transfers.

Wenn es sich bei der toAdresse umdata einen Smart Contract handelt, könnte eine andere Gasmenge verbraucht werden , selbst wenn Sie nichts im Feld senden .

In der Tat ist meine toAdresse kein Smart Contract, daher dataist das Feld leer (und ich verstehe jetzt, dass ein leeres dataFeld nicht unbedingt eine Nicht-Vertragsadresse impliziert to). Danke sehr!!!