Отправка транзакции - могу ли я предположить, что при отсутствии поля "данные" поле "газ" всегда должно быть 21000?

Я реализовал функцию перевода ETH со своей учетной записи на другую:

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);
}

Это исключительно для передачи ETH; Я не пытаюсь вызвать какую-либо функцию смарт-контракта, поэтому я могу опустить dataполе из optionsобъекта.

Я заметил, что web3.eth.estimateGas(options)всегда возвращает 21000.

Могу ли я рассчитывать на это и упростить свой код до:

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

?

Спасибо

Ответы (1)

Если toадрес не является смарт-контрактом, то да. Это стандартная стоимость газа для простого перевода эфира.

Если toадрес является смарт-контрактом, даже если вы ничего не отправляете в dataполе, может быть потреблено другое количество газа.

Действительно, мой toадрес не является смарт-контрактом, поэтому dataполе пустое (и теперь я понимаю, что пустое dataполе не обязательно означает неконтрактный toадрес). Большое спасибо!!!