跳到主要内容
ecdsa.com
web3.py / eth-account / eth-keys (Python)Web3 钱包与签名

错误信息

eth_keys.exceptions.BadSignature: Invalid signature

也可能输出为

  • BadSignature: Invalid signature

web3.py / eth-account / eth-keys (Python) — BadSignature from public-key recovery

含义

签名长度正确,但其中的值不构成任何有效的 secp256k1 签名,因此无法恢复出公钥:r 或 s 为零或不小于曲线的阶,或者 r 不是曲线上某个点的 x 坐标。这与用错误密钥生成的签名不同——那样的签名会恢复出另一个地址,而不会抛出任何异常。BadSignature 表示这些字节根本不是签名。

原因

修复方法

  1. 1.

    按被拒绝的签名处理

    把 BadSignature 与长度错误、取值错误一起捕获,并拒绝该请求;不要换用其他 v 值重试。

    python
    from eth_keys.exceptions import BadSignature
    from eth_utils.exceptions import ValidationError
    
    def recover_or_none(message, signature) -> str | None:
        try:
            return Account.recover_message(message, signature=signature)
        except (BadSignature, ValidationError, ValueError):
            return None  # reject the request: the signature is malformed

相关错误

浏览完整的签名错误库