ethereumjs-tx Zurückgegebener Fehler: ungültiger Absender

Wenn ich versuche, eine signierte Transaktion über ethereumjs-tx zu senden. Ich verstehe dasReturned 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);
           
          }))
1. Stellen Sie sicher, dass das process.env.Keynicht mit beginnt 0x.
2. Der '0x'+Teil erscheint überflüssig (und schädlich).
Nein process.env.Key, beginnt nicht mit 0x und das Entfernen 0x+eines Teils hilft nicht

Antworten (1)

Ändern Sie das Folgende

      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);

nach unten

      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übernimmt die Last, die richtige chainId und nonce einzuschließen. Referenz: https://github.com/ChainSafe/web3.js/issues/1040