调用它消耗 3,000 gas,返回恢复出的公钥所对应的 20 字节地址;遇到无效输入,例如 v 不是 27 或 28、r 和 s 超出取值范围,则返回零字节(在 Solidity 中即零地址)。它不强制 low-S,因此把签名用作唯一标识的合约必须自行拒绝大于 n/2 的 s(EIP-2 只对交易应用了这条规则)。
安全用法:始终把结果与预期的签名者比较,并拒绝零地址;检查签名数据中的 nonce 或截止时间,以防止重放;对按 EIP-191 或 EIP-712 构造的数据计算哈希,而不是直接对原始值计算哈希;对于智能合约账户,改用 ERC-1271。OpenZeppelin 的 ECDSA.recover 和 SignatureChecker 封装了这些检查。