Pular para o conteúdo
ecdsa.com
web3.py / eth-account / eth-keys (Python)Carteiras e assinaturas Web3

Mensagem de erro

eth_keys.exceptions.BadSignature: Invalid signature

Também aparece como

  • BadSignature: Invalid signature

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

O que significa

A assinatura tem o comprimento certo, mas os valores dela não descrevem nenhuma assinatura secp256k1 válida, então nenhuma chave pública pode ser recuperada: r ou s é zero ou não é menor que a ordem da curva, ou r não é a coordenada x de um ponto da curva. Isso é diferente de uma assinatura feita com a chave errada — essa recupera um endereço diferente sem nenhuma exceção. BadSignature significa que os bytes nem chegam a ser uma assinatura.

Por que acontece

Como corrigir

  1. 1.

    Tratar como assinatura rejeitada

    Capture BadSignature junto com os erros de comprimento e de valor e rejeite a requisição; não tente de novo com outros valores de 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

Erros relacionados

Ver toda a base de erros de assinatura