0

When i am trying to send signed transaction via ethereumjs-tx. I get this Returned error: invalid sender

web3Http.eth.getTransactionCount(myAddress,"pending").then(function(blockcount){
   
    result = web3Http.utils.toWei(amt.toString(), 'ether');
   
   
          count = blockcount;
    
         
          var rawTransaction = {
           "from":myAddress,
           "gasPrice":web3Http.utils.toHex(20* 1e9),
           "gasLimit":web3Http.utils.toHex(210000),
           "to":contractAddress,"value":"0x0",
           "data":contract.methods.approve(fromAddress,web3Http.utils.toHex(result)).encodeABI(),
           "nonce":web3Http.utils.toHex(count)
          }
         
          var transaction = new Tx(rawTransaction,{'chain':'rinkeby',hardfork: 'petersburg'});
          
          transaction.sign(Buffer.from(process.env.Key, 'hex'));
      
          web3Http.eth.sendSignedTransaction('0x'+transaction.serialize().toString('hex'))
          .on('receipt', ((data)=>{
            resolve(data);
           
          }))
3
  • 1. Make sure that process.env.Key doesn't start with 0x. Sep 19, 2020 at 18:10
  • 2. The '0x'+ part seems redundant (and harmful). Sep 19, 2020 at 18:10
  • Nope process.env.Key doesn't start with 0x and removing 0x+ part doesn't help Sep 20, 2020 at 10:20

1 Answer 1

0

Change the below

      const Tx = require('ethereumjs-tx').Transaction;

      var transaction_data = {
        "from": myAddress,
        "gasPrice": web3Http.utils.toHex(20 * 1e9),
        "gasLimit": web3Http.utils.toHex(210000),
        "to": contractAddress,
        "value": "0x0",
        "data": contract.methods.safeTransferFrom(myAddress, toAddress, tokenId).encodeABI(),
      }

        var privateKey = Buffer.from('abcde', 'hex')

        var transaction = new Tx(transaction_data,{ chain: 'ropsten' , hardfork: 'petersburg' });

        transaction.sign(privateKey);

        web3Http.eth.sendSignedTransaction('0x' + transaction.serialize().toString('hex'))
            .on('transactionHash', console.log);

to the below

      const Tx = require('ethereumjs-tx').Transaction;

      var transaction_data = {
        "from": myAddress,
        "gasPrice": web3Http.utils.toHex(20 * 1e9),
        "gasLimit": web3Http.utils.toHex(210000),
        "to": contractAddress,
        "value": "0x0",
        "data": contract.methods.safeTransferFrom(myAddress, toAddress, tokenId).encodeABI(),
      }

        var privateKey ='abcde'

        web3Http.eth.accounts.signTransaction(transaction_data, privateKey)
        .then(function(value){
            web3Http.eth.sendSignedTransaction(value.transaction_data)
            .then(function(response){
              console.log("response:" + JSON.stringify(response, null, ' '));
            })
          })

web3Http.eth.accounts.signTransaction will take the burden of including the correct chainId and nonce . Reference: https://github.com/ChainSafe/web3.js/issues/1040

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.