Вызов стоит 3 000 газа и возвращает 20-байтный адрес восстановленного открытого ключа, а при некорректных входных данных, например если v не равно 27 или 28 либо r и s выходят за допустимый диапазон, — ноль байт (в Solidity это нулевой адрес). Правило low-S при этом не проверяется, поэтому контракт, который использует подписи как уникальные идентификаторы, должен сам отклонять s больше n/2 (EIP-2 ввёл это правило только для транзакций).
Как использовать безопасно: всегда сравнивайте результат с ожидаемым подписантом и отклоняйте нулевой адрес, проверяйте nonce или срок (deadline) в подписанных данных, чтобы подпись нельзя было использовать повторно, хешируйте данные EIP-191 или EIP-712, а не сырые значения, и для аккаунтов на смарт-контрактах используйте ERC-1271. ECDSA.recover и SignatureChecker из OpenZeppelin уже включают эти проверки.