¿Qué significa el error "16: obligatorio-script-verify-flag-failed (firma DER no canónica)"?

¿Qué puede significar este error? Leí el código y varias de mis transacciones no cumplieron con los criterios del error, pero aún así se rechazan. Intenté decodificar a través de varios medios (aunque ninguno es súper detallado) sin éxito para discernir el problema. Algunos han afirmado que al leer el registro de depuración de bitcoin se puede encontrar una razón más detallada, pero mi registro no dice nada sobre mi transacción sin procesar rechazada.

Sí, hay otra pregunta muy similar a esta, pero proporcionó un código para obtener una respuesta para su código específico y las respuestas no abordaron qué podría haberlo causado ni cómo discernir, más específicamente, qué puede estar causándolo. dentro del código.

Todo en mis transacciones que he estado intentando se crea manualmente. Pero cumplen con los criterios especificados. Estoy rehaciendo algunos en este momento, pero me preguntaba si se están realizando otras comprobaciones además de las que ha mencionado para este error en particular.

Incluso he considerado que obtuve los números incorrectos en mi creación manual de las variables, pero creo que eso haría que fallara con un error diferente si ese fuera el caso.

Respuestas (1)

¿Qué puede significar este error?

Este error solo puede significar que esta función devolvió falso:

bool static IsValidSignatureEncoding(const std::vector<unsigned char> &sig) {

¿Cuándo esta función devuelve verdadero? Cuando se cumplen todas estas condiciones:

/**
 * A canonical signature exists of: <30> <total len> <02> <len R> <R> <02> <len S> <S> <hashtype>
 * Where R and S are not negative (their first byte has its highest bit not set), and not
 * excessively padded (do not start with a 0 byte, unless an otherwise negative number follows,
 * in which case a single 0 byte is necessary and even required).

¿Cómo estás generando tu firma?