임의의 데이터에 서명을 하는 것. 이것은 강력하고 간단하다. 그러나 아주 위험하다. 큰 문제는 당신이 실제 트랜잭션의 서명 데이터를 얻을 수 있는 것이다. 당신의 서비스에 로그인한 유저가 있고, 당신이 그에게 "공격자에게 유저가 5 Eth를 보내라" 라는 메세지에 그들이 실제로 트랜잭션에 서명하도록 할 수 있다고 생각하보자.
트랜잭션은 단지 bytes로 이루어져 있을 뿐이고, 사람들은 그들이 서명하는 것이 무슨 뜻인지 체크하지 않는 경향이 있다. 당장 해가 없어보이는 서명도 나중에 펀드를 공격하여 돈을 가로챌 수도 있다. 그래서 eth_sign을 직접적으로 사용하는 것은 권장하지 않는다.
위의 이슈때문에 후에 추가가 되었다. 이 함수는 접미사로 서명에 어떠한 데이터든지 "\x19Ethereum Signed Message:\n"
복합적인 사용 예제에서, 특히 smart contract에서 EIP-712 stnadard가 탄생했다.
function recoverSignerFromSignature(uint8 v, bytes32 r, bytes32 s, bytes32 hash) external {
address = signer ecrecover(hash, v,r,s_;
require(signer != address (0), "ECDSA: invalid signature");
}