I'm new to computure program. What does this problem mean in solidity? How can I solve this problem?
Here is the problem:
DeclarationError: Undeclared identifier. "getMessageHash" is not (or not yet) visible at this point.
--> contracts/SigLearning.sol:14:27:
|
14 | bytes32 messageHash = getMessageHash(_message);
| ^^^^^^^^^^^^^^
Here is my code:
//SPDX-License-Identifier: MIT
pragma solidity ^0.8.15;
/*
0. message to sign
- hash(message)
- sign(hash(message),private key) |offchain
- ecrecover(hash(message),signature) == signer
*/
contract VerifySig{
function verify(address _signer, string memory _message, bytes memory _sig) external pure returns(bool){
bytes32 messageHash = getMessageHash(_message);
bytes32 ethSignedMessageHash = getEthSignedMessageHash(mesageHash);
return recover(ethSignedMessageHash,_sig) == _signer;
}
function getMessageHash(string memory _message) external pure returns(bytes32){
return keccak256(abi.encodePacked(_message));
}
function getEthSignedMessageHash(bytes32 _messageHash) external pure returns(bytes32){
return keccak256(abi.encodePacked(
"\x19Ethereum Signed Message: \n32",
_messageHash));
}
function _split(string memory _sig) internal pure returns(bytes32 r, bytes32 s, uint8 v){
require(_sig.length == 65,"invalid signature length");
assembly{
r := mload.(add(_sig,32))
s := mload.(add(_sig,64))
v := byte(0,mload.(_sig,96))
}
}
}