This question already has an answer here:

When using web3.js to execute a function in a contract, I always get the following error: "authentication needed: password or unlock​." I know that I have to unlock account first via either geth console or web3.personal.unlockAccount(web3.personal.listAccounts[0],"", duration)​. However, it is not convenient to use console when the smart contract executes in the real network. Moreover, I am not comfortable to use web3.personal.unlockAccount​ because I have to provide the password of the account in the clear text. So, what is the best way to unlock account programmatically while still keeping the password secret?

marked as duplicate by Richard Horrocks, flygoing, Ismael, gisdev_p, eth Dec 7 '17 at 18:50

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.


You have a few options on how to obscure your password:

1) one simple way is I save a temp variable and clear my screen in console:

pw = ‘myPassword’;

control+k // clear screen

Then I can unlock and take my time with unlocking:

web3.personal.unlockAccount(web3.personal.listAccounts[0],pw, duration);

2) you can obscure it my creating your own UI to input the password and conceal it: <input type=“password” />

After you handle this input according to your preferred method of UI, then you need to do a bit more manual work of signing the raw transaction and sending it. You need to use a library like ethereumjs-tx.

You’d need to convert the function call into hex data, sign it with ethereumjs-tx, and then send the transaction with that signed data to the Blockchain. So a few more steps here.

3) You can use Metamask, and the signing is done through that. You’d need a Metamask enabled chrome browser, your accounts in that Metamask vault, and you’d need to use the Metamask-injected web3 and call the contract function through that.

4) You can use an app with a web3 browser like Mist or Parity; open your web app through their built in browsers, then you can sign through those apps.

  • and where is the correct answer? Uncaught Error: The MetaMask Web3 object does not support synchronous methods like personal_unlockAccount without a callback parameter. – Vyachaslav Gerchicov May 28 '18 at 10:23

Not the answer you're looking for? Browse other questions tagged or ask your own question.