I'm new to Ethereum world. I've just manage to create an example that calculates transaction fee and sends a signed transaction without a contract using Web3js library.

My issue is that my test account is running out of balance pretty quickly. I must be doing something wrong. I did this transaction: https://kovan.etherscan.io/tx/0x5cb10c454d8d331e35ba3812522ea9cd5b82fdb7ecde75c5b48ec1550d99cc98

If you see the details:

Value: 0.000106 Ether ($0.00) 
Gas Limit: 21000 
Gas Used By Txn: 21000 
Gas Price: 0.000106 Ether (106,000 Gwei) 
Actual Tx Cost/Fee: 2.226 Ether ($0.000000)

I see the actual transaction fee is 2.226 Ether!

I'm calculating the transaction fee as follows:

var transactionObject = {
  from: sender,
  value: amount
w3.eth.estimateGas(transactionObject, function(error, gas) {
  w3.eth.getGasPrice(function (error, gasPrice) {
    var gasPrice = Number(gasPrice);
    var transactionFee = gasPrice * gas;

Then this transaction fee, I am using it on my transaction:

w3.eth.getBalance(sender, function(error, balance) {
  if (balance < (transactionFee + transactionValue)) {
    reject("You don't have enough balance to cover this transaction");
  } else {
    w3.eth.getTransactionCount(sender).then(function(count) {
      var transactionObject = {
        nonce: w3.utils.toHex(count),
        from: sender,
        to: receiver,
        gasPrice: w3.utils.toHex(transactionFee),
        value: w3.utils.toHex(transactionValue),
        data: ''
      w3.eth.estimateGas(transactionObject, function (error, gas) {
        transactionObject.gasLimit = gas;
        var tx = new Tx(transactionObject);
        var serializedTx = tx.serialize();
        w3.eth.sendSignedTransaction('0x' + serializedTx.toString('hex'), function (error, result) {
          if(!error) {
          } else {
    }).catch(function(error) {

Am I assigning incorrectly a value or missing some conversion?

  • Have you considered converting explicitly the gas to wei? Seems like it is taking them as ethers. – ranchalp Dec 15 '17 at 16:21
  • @ranchalp do you mean, changing this line: gasPrice: w3.utils.toHex(transactionFee) to gasPrice: w3.utils.toHex(w3.utils.toWeis(transactionFee))? – Eduardo Dec 15 '17 at 16:23

I found the issue, I was passing to:

gasPrice: w3.utils.toHex(transactionFee)

The whole fee: gas * gasPrice.That caused that internally my transaction fee was multiplied again by the gas.

I need to pass:

gasLimit: w3.utils.toHex(gas),
gasPrice: w3.utils.toHex(gasPrice)
  • Yes, but it should be gas: rather than gasLimit:. – Mikhail Vladimirov Apr 17 '19 at 9:55

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.