Как рассчитать сумму перевода, чтобы полностью опустошить счет?

Итак, допустим, мой кошелек 1 eth, мне нужно его полностью опустошить, и я собираюсь сделать это следующим образом.

Var value = web3.toWei(1) - gas

Это правильно?

Ответы (2)

Да. Вам нужно будет выяснить, сколько газа (в ETH) будет стоить транзакция, но, к счастью, простые переводы ETH составляют ровно 21 000 газа (я думаю, дважды проверьте это число). Это означает, что вам нужно будет узнать, сколько ETH будет потрачено на газ, и умножить его на выбранную цену газа (например, 10^10).

Таким образом, ваш расчет должен выглядеть примерно так:

var gasPrice = 20*10**9;
var gas = 21000;
var attoethForGas = gasPrice * gas;
var amountToSend = web3.toWei(1) - attoethForGas;
Если я возьму этот газ за 5000 и не смогу полностью опустошить свой счет (возврат неиспользованного газа)
@D.Doy Я обновил ответ, включив в него пример кода, дайте мне знать, если это поможет прояснить ситуацию.
Спасибо за ваш ответ, но, кажется, это не помешало возврату денег за газ слишком большим. Если он должен быть очищен, должен ли я сделать газ достаточно маленьким?
Хм, я не уверен, в чем может быть ваша проблема, я достаточно уверен, что вышеописанный способ отправить все. Можете ли вы поделиться кодом, который у вас есть, который не работает? Не должно быть возврата газа за перевод ETH, даже если он обнуляет баланс.

Чтобы рассчитать точное значение для отправки, вы должны использовать точные вычисления, которые JavaScript не дает вам из коробки. К счастью, web3.js уже возвращает специальный BigNumberобъект из eth.getBalance(). Чтобы выполнить точную математику, вам нужно использовать BigNumberметоды вместо использования арифметических операторов по умолчанию. Например:

gasPrice = new BigNumber(web3.toWei('0.6', 'gwei'))
cost = gasPrice.mul(21000)
value = eth.getBalance(eth.accounts[0]).sub(cost)

Константы были взяты из этих источников на момент публикации:

ethgasstation.info на самом деле в данный момент не работает, 0,6 gwei были довольно стабильной ценой, которую я видел до того, как она упала.