Web3js

錯誤:返回錯誤:gas資金不足*價格+價值

  • March 27, 2022

我使用此程式碼將付款從地址 A 發送到地址 B.. 但我總是收到此錯誤。

(node:18492) UnhandledPromiseRejectionWarning: Error: Returned error: insufficient funds for gas * price + value

我在很多地方都讀到過,如果更改了chainId,它可能會被修復。我更改了許多chainId,但它對我不起作用。我總是出錯:-(

// Require the web3 node module.
var Web3 = require('web3');
var Tx = require('ethereumjs-tx');
// Show Web3 where it needs to look for a connection to Ethereum.
//web3 = new Web3(new Web3.providers.HttpProvider('http://127.0.0.1:8545'));
web3 = new Web3(new Web3.providers.HttpProvider('https://mainnet.infura.io/N6IIa2HvDYOovtgmPbhD'));
var gasPrice = '25000000000';//or get with web3.eth.gasPrice
var gasLimit = '9000';
var addr = '0x.................................';
var toAddress = '0x.................................';
var amountToSend =  "1859274664735255";
var nonce = web3.eth.getTransactionCount(addr); //211;
var rawTransaction = {
"from": addr,
"nonce": web3.utils.toHex(nonce),
"gas": web3.utils.toHex('21000'),
"gasPrice": web3.utils.toHex(gasPrice),
"gasLimit": web3.utils.toHex(gasLimit),
"to": toAddress,
"value": web3.utils.toHex(amountToSend) ,
"chainId": web3.utils.toHex('1')
};
var privateKey = '......................................................';
var privKey = new Buffer(privateKey, 'hex');
console.log("privKey  : ", privKey);
const tx = new Tx(rawTransaction);
tx.sign(privKey);
const serializedTx = `0x${tx.serialize().toString('hex')}`;
web3.eth.sendSignedTransaction(serializedTx);

value參數應為十六進制。實際上所有的數字都應該是十六進制的。

查看https://ethereum.stackexchange.com/a/23656/31933了解更多詳情。

編輯: 問題現在更新為使用十六進制值(字元串值是否正確解析為十六進制?整數會更安全)。

你的 gas 限制是 9000。21000 是任何交易的最小值,所以交易注定會失敗,只使用 9000 gas。此外,設置如此高的 gasPrice 也沒有任何意義——如果沒有足夠的 gas 限制,它也無濟於事。您可以使用https://ethgasstation.info/估算您應該使用的價格。

  • truffle-hdwallet-provider 版本 0.0.3

使用“氣體限制”實現您的程式碼。前任:

const result = await new web3.eth.Contract(JSON.parse(interface))
   .deploy({ data: bytecode })
   .send({ gas: '1000000', from: accounts[0] });
  • truffle-hdwallet-provider 版本 0.0.4、0.0.5 和 0.0.6

在沒有“Gas limit”的情況下實現您的程式碼。前任:

const result = await new web3.eth.Contract(JSON.parse(interface))
    .deploy({data: '0x' + bytecode }) // add 0x bytecode
    .send({from: accounts[0]}); // remove 'gas'

參考:StephenGrider/乙太坊

您可以使用以下連結獲取更多乙太幣並重試。

https://faucet.rinkeby.io/

引用自:https://ethereum.stackexchange.com/questions/43854