title: Ethereum: NodeJS web3 - UnhandledPromiseRejectionWarning: Insufficient funds
body: <p>I am using <code>web3.js v1.0.0-beta.34</code> &amp; <code>nodeJS v9.11.2</code> to execute a <code>smart contract</code> on the <code>Kovan</code> <code>testnet</code>. The same method works for me on Ropsten with another smart contract. Here are the two errors I get via the callback:</p>
  
  <p>1.)</p>
  
  <blockquote>
    <p>UnhandledPromiseRejectionWarning: Error: Returned error: Insufficient
    funds. The account you tried to send transaction from does not have
    enough funds. Required 183675000000 and got: 0.</p>
  </blockquote>
  
  <p>2.)</p>
  
  <blockquote>
    <p>(node:15422) UnhandledPromiseRejectionWarning: Unhandled promise
    rejection. This error originated either by throwing inside of an async
    function without a catch block, or by rejecting a promise which was
    not handled with .catch(). (rejection id: 1)</p>
  </blockquote>
  
  <p>This is my smart contract:</p>
  
  <pre><code>pragma solidity ^0.4.24;
  
  contract Test2 {
      address public customer;
      bytes32 public productName;
  
      struct Box {
          uint size;
      }
      Box public box;
  
      constructor() public {
          box.size = 3;
          customer = 0xDa3E3C75....;
          productName = "0x576...";
      }
  
      function changeBox(uint _change) public {
          box.size = _change;
      }
  
      function getBox() public returns (uint) {
          return box.size;
      }  
  }
  </code></pre>
  
  <p>And here is the JavaScript code to make a transaction and execute the <code>function changeBox</code> with web3 and node:</p>
  
  <pre><code>const Tx = require('ethereumjs-tx');
  var Web3 = require('web3'); 
  
  
  var web3 = new Web3(new Web3.providers.HttpProvider('https://kovan.infura.io/api_key'));
  const contractAddress = '0x36075430619b21Fff798454e2D5C81E9C18DEe81';
  var contractABI = new web3.eth.Contract(
      [...json abi...], contractAddress);
  var boxNum;
  
  
  function changeBox(boxNum, callback) {
      web3.eth.defaultAccount = "0x002D189c25958c60...";
      const account = '0x002D189c2595...';
      const privateKey = Buffer.from('240462d5...', 'hex');
      const contractFunction = contractABI.methods.changeBox(Number(boxNum));
      const functionAbi = contractFunction.encodeABI();
      let estimatedGas;
      let nonce;
  
      contractFunction.estimateGas(function(error, gasAmount) {
          if(!error) {
              console.log('Estimated Gas : ' + gasAmount);
              estimatedGas = gasAmount + 10000;
              console.log('New Gas: ' + estimatedGas);
  
              web3.eth.getTransactionCount(account).then(_nonce =&gt; { 
                  nonce = _nonce.toString(16);
                  console.log("Nonce: " + nonce);
  
                  const txParams = {
                      gasPrice: estimatedGas,
                      gasLimit: 5000000,
                      to: contractAddress,
                      data: functionAbi,
                      from: account,
                      nonce: '0x' + nonce
                  };
                  const tx = new Tx(txParams);
                  tx.sign(privateKey);
                  const serializedTx = tx.serialize();
                  web3.eth.sendSignedTransaction('0x' + serializedTx.toString('hex')).on('receipt', receipt =&gt; {
                      callback(receipt);
  
                  });
              });  
          } 
          else {
              callback(error);
          }
      });
  }
  
  //calling the contract with value 6
  changeBox(6, function(err, data) {
      if (!err) {
          console.log(data);
      }
      else {
          console.log(err);
      }});
  </code></pre>