I am getting a problem when I run this statement in the console window (from browser) to get signature of the account:
ethereum.request({ method: "personal_sign", params: [account, hash] });
I did not used to have this problem, it works fine and returns a promise with the digital signature of the account (from Metamask). It would open up Metamask, I would do a digital signing and return the result of the digital signature to the promise.
Now it reports an error whenever I run the statement. The error message is:
code: -32602 message: "Invalid parameters: must provide an Ethereum address."
Has something changed? I could not find any other details from ethereum.org or Metamask. If anyone has some knowledge on this, what seems to be the problem?
First element of params ("account") have to be one of the connected accounts.
You can access accounts with;
window.ethereum
.request({ method: "eth_requestAccounts" })
.then(accounts => {
console.log(accounts);
})
This has to do with MetaMask and the Ethereum window object in the browser.
Originally I tested the contract on a testnet using an injected Web3 provider.
When I was trying to test locally I used one of the JVM generated accounts.
You should not use them. Instead use a MetaMask account (copy the address) and do the ff:
assign the address to a variable (do the same with the hash):
account = Metamask address, hash = bytes32 value of your hashed message
I can then issue the ethereum.request command that will run the "personal_sign" method with the parameters of account and hash.
The promise will return the digital signature of the account when signing a message.