I'm aware of these posts https://ethereum.stackexchange.com/questions/13652/how-do-you-sign-an-verify-a-message-in-javascript-proving-you-own-an-ethereum-ad?noredirect=1&lq=1 https://ethereum.stackexchange.com/questions/2171/how-does-one-properly-use-ecrecover-to-verify-ethereum-signatures -------- I'd like to sign a message and then verify it. I use the following command line in the geth terminal. var msg = web3.sha3('Schoolbus') var signature = web3.eth.sign(web3.eth.accounts[0], msg) var r = signature.slice(0, 66) var s = '0x' + signature.slice(66, 130) var v = '0x' + signature.slice(130, 132) v = web3.toDecimal(v) Then I use the smart contract below, and call: call_ecover(r, s, v, msg) But what i get is: 0x0000000000000000000000000000000000000000 pragma solidity ^0.5.0; contract Call_verify{ function call_ecover(bytes32 r, bytes32 s, uint8 v, bytes32 hash)external pure returns (address){ bytes memory prefix = "\x19Ethereum Signed Message:\n32"; bytes32 prefixedHash = keccak256(abi.encodePacked(prefix,hash)); return ecrecover(prefixedHash, v, r, s); } } Note that I'm using compiler version 0.5.3 on remix. **Question**: Why cannot I get the return value of ecrecover() function in my contract? Am I missing anything?