'Sender account not recognized on private ethereum network

I'm currently developing a dApp in Solidity and am working on a web3 library to handle communication with it.

I struggle with the process of new account creation and transaction signing in web3. Before I continue it worth noting that I'm running my own local, private blockchain (currently with Ganache).

My code looks as follows:

try{
    let a = web3.eth.accounts.create()
    let dataTx = someContract.methods.someMethod().encodeABI()
    let rawTx = {
        to: someContract._address,
        from: account.address,
        data: dataTx,
        gas: 10000000000
    }


    const transaction = web3.eth.accounts.signTransaction(rawTx, util.toBuffer(account.privateKey))
    web3.eth.sendTransaction(rawTx).then(console.log)
}
catch(e){
    console.log(e)
}

The problem here is that the web3.eth.sendTransaction() method raises the following exception: Error: Returned error: sender account not recognized.

My understanding is that web3.eth.accounts is used for managing local accounts and web3.eth.personal is used to communicate with a client (e.g. Geth). I wish to keep the private keys of accounts my app creates locally on the device of the web3 client, but it raises this exception.

Where am I going wrong? Should I register the newly created accounts somewhere before running transactions with it? Is there some vital information I'm missing here?

Thanks!



Solution 1:[1]

If you want to use an account other than Ganache provided you, you have to start Ganache providing your accounts data in the form private_key,initial_balance:

Example command: ganache-cli --account 0xf38b5679751228eab7d9f3aa02bd0b0c0f7b44e448c0cfd410a1d7053efb6c56,123456789

And it's output:

Ganache CLI v6.1.8 (ganache-core: 2.2.1)

Available Accounts ================== (0) 0x44fa41e453654ccb365a358e994c764a37eea91f (~0 ETH)

Private Keys ================== (0) 0xf38b5679751228eab7d9f3aa02bd0b0c0f7b44e448c0cfd410a1d7053efb6c56

Gas Price ================== 20000000000

Gas Limit ================== 6721975

Listening on 127.0.0.1:8545

Solution 2:[2]

I am having same issue in my project. The problem in my case is beacuse i am not using same web3 provider to create contract variable. example code:

const providerEth= new Web3.providers.HttpProvider(
    'HTTP://127.0.0.1:8545'
);
const web3Eth = new Web3(providerEth);
const contract= new web3Eth.eth.Contract(abi,address);

Here, we are not using metamask provider although both on same network Still it not recognize the account. So you should create contract like this

const web3Eth = new Web3(window.web3.currentProvider);
const contract= new web3Eth.eth.Contract(abi,address);

const accounts = await web3.eth.getAccounts();
var receipt=await contract.methods.transfer(receiver,amount).send({from:accounts[0]});

Now, you can able to call smart contract function with account address.

Solution 3:[3]

I had the same issue. It happened when I already opened my truffle console and after that I did a restart of my ganache because I wanted to start clean. What fixed it for me was stopping the truffle console job and starting it again.

Solution 4:[4]

You are refering to functionality in web3 1.0.0 which is not yet fully released. If you go to https://web3js.readthedocs.io/en/1.0/getting-started.html you would see that they state the following:

This documentation is work in progress and web3.js 1.0 is not yet released! You can find the current documentation for web3 0.x.x at github.com/ethereum/wiki/wiki/JavaScript-API.

Most probably you are using a version 0.20.x or something like that so check this first. To check this open the dApp in the browser and type in the console the following:

web3.version.api

This should show you which version you are using.

I don't think there is a way to create accounts with web3js 0.20.x directly but you can try to update the web3js to the 1.0.0-beta and try to run your code again. You can find it in NPM here - https://www.npmjs.com/package/web3

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Ferit
Solution 2 Mayuresh Khemnar
Solution 3 Dharman
Solution 4 Dharman