Ошибка: недостаточно средств на газ * цена + стоимость

Я просматриваю первое руководство на веб-сайте Ethereum.

Я скомпилировал код контракта с помощью Remix и создал следующий скрипт. Для краткости я удалил двоичные строки:

var _greeting = 'Hello World!';
var browser_untitled_sol_greeterContract = web3.eth.contract([{"constant":false,"inputs":[],"name":"kill","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"greet","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_greeting","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"}]);
var browser_untitled_sol_greeter = browser_untitled_sol_greeterContract.new(
 _greeting,
 {
   from: web3.eth.accounts[0], 
   data: 'BINARY_STRING', 
   gas: '4700000'
 }, function (e, contract){
   console.log(e, contract);
   if (typeof contract.address !== 'undefined') {
     console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash);
   }
})

var browser_untitled_sol_mortalContract = web3.eth.contract([{"constant":false,"inputs":[],"name":"kill","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"}]);
var browser_untitled_sol_mortal = browser_untitled_sol_mortalContract.new(
   {
     from: web3.eth.accounts[0], 
     data: 'BINARY_STRING', 
     gas: '4700000'
   }, function (e, contract){
     console.log(e, contract);
     if (typeof contract.address !== 'undefined') {
       console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash);
   }
})

При загрузке этого скрипта я получаю:

Error: insufficient funds for gas * price + value.

При звонке eth.getBalance(eth.accounts[0]) получаю: 399577000000000

Я не могу понять, сколько eth должно быть на моем балансе, чтобы запустить этот скрипт, или нужно ли мне преобразовать eth в газ.


person FaureHu    schedule 19.11.2017    source источник


Ответы (2)


Вы не «превращаете» эфир в газ. Вы используете эфир для оплаты использованного газа.

В любом случае сообщение об ошибке кажется правильным. Ваш баланс довольно низкий. eth.getBalance() возвращает баланс в Вэй. Ваш баланс составляет всего ~ 0,0004 эфира, что довольно мало (вы можете конвертировать в эфир, используя https://etherconverter.online/ или преобразовать в код с web3.fromWei(val, 'ether')).

Количество эфира, которое вам нужно, зависит от операций, выполняемых в контракте, и от того, сколько вы готовы платить за использованный газ (вы можете изменить значение по умолчанию gasPrice в объекте транзакции). Попробуйте добыть или перевести больше эфира на свой счет.

person Adam Kipnis    schedule 20.11.2017
comment
Это 1 доллар США. Как может так дорого стоить заключение контракта? - person FaureHu; 20.11.2017
comment
Не знаю, как вы к этому пришли. .0004 эфира ‹0,15 долл. США. Стоимость будет зависеть от того, сколько логики у вас есть в коде контракта и как быстро вы хотите, чтобы он был добыт. - person Adam Kipnis; 21.11.2017

какой тип сети, testrpc или частная сеть? если вы отправляете транзакцию в частной сети, которая инициализирована с помощью geth init genesis.json, не устанавливайте chainId как 0

person leonzhao    schedule 20.11.2017