Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

[BUG] - cardano-submit-api cannot decode Dijkstra era transactions

Abierto Apto para principiantes
#6,719 0 comentarios 0 reacciones 1 asignado Ver en GitHub

Los mantenedores suelen responder en 2 días

@carbolymer ya está trabajando en esto.

Desde el 6/10/2026.

  • #6725 de @carbolymer — abierto

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
78/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
haskell
Área
backend

Línea de trabajo

Empieza en cardano-submit-api/src/Cardano/TxSubmit/Web.hs, en readByteStringTx, donde el issue muestra que la lista de decodificadores de eras termina en Conway. Lee el arreglo de cardano-cli enlazado en el issue para tener contexto y luego revisa las pruebas de la API de submit mencionadas en el informe, especialmente los casos de Dijkstra. El trabajo estará terminado cuando las transacciones Dijkstra con codificaciones modificadas de los campos del body se decodifiquen y se envíen, en lugar de fallar con TxCmdTxReadError.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

bug comp: submit-api Dijkstra PV12 needs triage

Internal/External
Internal

Area
Other (cardano-submit-api)

Summary
cardano-submit-api has no Dijkstra decoder. readByteStringTx in cardano-submit-api/src/Cardano/TxSubmit/Web.hs lists the eras by hand, and the list ends at Conway:

readByteStringTx = firstExceptT TxCmdTxReadError . hoistEither . deserialiseAnyOf
  [ FromSomeType (AsTx AsShelleyEra) (InAnyShelleyBasedEra ShelleyBasedEraShelley)
  , FromSomeType (AsTx AsAllegraEra) (InAnyShelleyBasedEra ShelleyBasedEraAllegra)
  , FromSomeType (AsTx AsMaryEra)    (InAnyShelleyBasedEra ShelleyBasedEraMary)
  , FromSomeType (AsTx AsAlonzoEra)  (InAnyShelleyBasedEra ShelleyBasedEraAlonzo)
  , FromSomeType (AsTx AsBabbageEra) (InAnyShelleyBasedEra ShelleyBasedEraBabbage)
  , FromSomeType (AsTx AsConwayEra)  (InAnyShelleyBasedEra ShelleyBasedEraConway)
  ]

Simple Dijkstra transactions still go through, because the Conway decoder happens to accept them. That hides the bug. It shows up as soon as a transaction uses a body field whose encoding changed in Dijkstra. For example, required signers (body field 14) are now encoded as credentials ([0, keyhash]) where Conway expects plain key-hash bytes. Such a transaction is rejected with HTTP 400:

{"contents":{"contents":[
  "DecoderErrorDeserialiseFailure \"Shelley Tx\" (DeserialiseFailure 3 \"expected list len or indef\")",
  "DecoderErrorDeserialiseFailure \"Shelley Tx\" (DeserialiseFailure 3 \"expected list len or indef\")",
  "DecoderErrorDeserialiseFailure \"Shelley Tx\" (DeserialiseFailure 3 \"expected list len or indef\")",
  "DecoderErrorDeserialiseFailure \"Shelley Tx\" (DeserialiseFailure 3 \"expected list len or indef\")",
  "DecoderErrorDeserialiseFailure \"Shelley Tx\" (DeserialiseFailure 3 \"expected list len or indef\")",
  "DecoderErrorDeserialiseFailure \"Shelley Tx\" (DeserialiseFailure 260 \"expected bytes\")"
 ],"tag":"TxCmdTxReadError"},"tag":"TxSubmitFail"}

The same transactions submitted with cardano-cli transaction submit work: valid ones are accepted, and the negative test gets the expected ledger error instead of a decoding failure.

The code is unchanged on master (b05d8ef62), on leios-prototype, and on the 11.2 release prep branch koslambrou/prepare-11.2 (8ff994d2f). The pinned cardano-api (^>= 11.7) already provides AsDijkstraEra / ShelleyBasedEraDijkstra, so only cardano-submit-api needs to change.

Steps to reproduce

  1. Start a local testnet in the Dijkstra era (protocol version 12).
  2. Build and sign a transaction with a required signer, e.g. cardano-cli dijkstra transaction build ... --required-signer-hash <keyhash>.
  3. POST the raw CBOR to /api/submit/tx with Content-Type: application/cbor.
  4. The request fails with the TxCmdTxReadError shown above.

Found by the cardano-node-tests tests test_mint_build.py::test_witness_redeemer[*-submit_api] and test_mint_negative_build.py::test_witness_redeemer_missing_signer[submit_api-*]. All other submit_api tests pass on Dijkstra.

Expected behavior
Dijkstra transactions are decoded and submitted.

System info

  • OS Name: Fedora Linux 44
  • Node version: cardano-node 11.1.0.164 - linux-x86_64 - ghc-9.6, git rev 8bb6b68d80a8a4fb1904c48805be4f3a516593ef
  • CLI version: cardano-cli 11.2.2.0 - linux-x86_64 - ghc-9.6, git rev 8bb6b68d80a8a4fb1904c48805be4f3a516593ef
  • cardano-submit-api 11.0.0 (same build)

Additional context
cardano-cli had the same kind of hardcoded era list when reading transaction witnesses. It was fixed in IntersectMBO/cardano-cli@6605fa151 ("Derive the accepted era list when reading transaction witnesses"), which builds the list from [minBound .. maxBound]. The same approach would work here.

Lenguaje dominante
Haskell
Estrellas
3.2k
Forks
757
Merge medio
2 d 13 h
PR fusionados (30 d)
18

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de IntersectMBO/cardano-node

Todos los issues de IntersectMBO/cardano-node

Issues similares

Más issues de Haskell

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.