I'm attempting to call a function on my smart contract (Ropsten) using web3 via an Infura node. I've created a test account in Metmask and have exported the account address and private key. The details look correct, however I am getting the error {"code":-32000,"message":"invalid sender"}
. I'm guessing this is a problem with the signing of the transaction?
Here's my code
const Web3 = require('web3'); const Tx = require('ethereumjs-tx').Transaction; const fs = require('fs'); const pk = Buffer.from('PRIVATE KEY FROM METAMASK', 'hex') const sourceAccount = 'ACCOUNT ADDRESS FROM METAMASK' const web3 = new Web3(new Web3.providers.HttpProvider("https://ropsten.infura.io/v3/API_KEY")); const consumerAddress = '0xc36577aa0171f649be6bd7205148ed83c07198ee'; web3.eth.defaultAccount = sourceAccount; //Get Consumer contract instance const consumerAbi = JSON.parse(fs.readFileSync('rental-contract-abi.json', 'utf8')); let consumerContract = new web3.eth.Contract(consumerAbi, consumerAddress); const myData = consumerContract.methods.checkDate("e716efba3b404da98e28faaa2939c0fd","2019-06-04","AU-NSW").encodeABI(); web3.eth.getTransactionCount(sourceAccount, (err, txCount) => { // Build the transaction const txObject = { nonce: web3.utils.toHex(txCount), to: consumerAddress, from: sourceAccount, chainId: 3, value: web3.utils.toHex(web3.utils.toWei('0', 'ether')), gasLimit: web3.utils.toHex(2100000), gasPrice: web3.utils.toHex(web3.utils.toWei('6', 'gwei')), data: myData } // Sign the transaction const tx = new Tx(txObject); tx.sign(pk); const feeCost = tx.getUpfrontCost() console.log('Total Amount of ETH needed:' + web3.utils.fromWei(feeCost.toString(), 'ether')) console.log('---Serialized TX----') console.log(tx.serialize().toString('hex')) console.log('--------------------') const serializedTx = tx.serialize(); const raw = '0x' + serializedTx.toString('hex'); // Broadcast the transaction const transaction = web3.eth.sendSignedTransaction(raw, (err, tx) => { console.log(tx); console.log(err); }); });
You need to add network information while signing the transaction. Refer to latest web3 docs. Change signing transaction code to :
const tx = new Tx(txObject,{'chain':'ropsten'});
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.