Итак, допустим, мой кошелек 1 eth, мне нужно его полностью опустошить, и я собираюсь сделать это следующим образом.
Var value = web3.toWei(1) - gas
Это правильно?
Да. Вам нужно будет выяснить, сколько газа (в 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;
Чтобы рассчитать точное значение для отправки, вы должны использовать точные вычисления, которые 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)
Константы были взяты из этих источников на момент публикации:
эт