Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

Data: constructors with an index above 127 write the tag 102 pair with the wrong header

Ouverte Adaptée aux débutants
#601 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

Personne n'a encore pris cette issue.

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
76/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
blockchain, typescript
Domaine
backend

Piste de recherche

Localisez l'encodeur de données Plutus (Constr) dans le SDK TypeScript et les options de data preset introduites dans #598, puis trouvez où la paire tag-102 [index, fields] est encodée. Selon encodeData dans PlutusCore/Data.hs, la paire doit être un tableau défini de 2 éléments, tandis que seuls les champs utilisent les options de liste. Ajoutez des tests de régression vérifiant les octets de nœud d866 82 1880 9f01ff / d866 82 1903e8 9f01ff et leurs hachages blake2b-256 pour Constr 128 [1] et Constr 1000 [1], ainsi qu'une vérification que les constructeurs 0-127 sont inchangés.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

Summary

For a constructor index above 127, Plutus data is written as tag 102 wrapping a pair [index, fields]. The node writes that pair as a definite 2-element array and the fields as a list. The SDK writes the pair with the list options, so every data preset that uses indefinite lists gets the wrong header, and no preset produces the node's bytes. The datum hash differs from cardano-cli and from what a validator computes with serialise_data.

Value Node (cardano-cli 10.5.1, Aiken v1.1.24) SDK default and CML_DATA_DEFAULT_OPTIONS CARDANO_NODE_DATA_OPTIONS
Constr 128 [1] d866 82 1880 9f01ff, hash fd05a09e… d866 9f 1880 9f01ff ff, hash e964637c… d866 82 1880 8101, hash 1bd42101…
Constr 1000 [1] d866 82 1903e8 9f01ff, hash ba07c752… d866 9f 1903e8 9f01ff ff, hash 1f014ffb… d866 82 1903e8 8101, hash c8b3c9a8…

The node hashes come from cardano-cli conway transaction hash-script-data; Aiken's serialiseData returns the same bytes, and their blake2b-256 equals those hashes.

Haskell source: PlutusCore/Data.hs encodeData writes CBOR.encodeTag 102 <> CBOR.encodeListLen 2 <> tagEncoding <> encode ds. The pair is always definite; only the fields follow the list encoding.

Affected

The Plutus data encoder for constructors with an index above 127 (tag 102), under every data preset.

Fix

Always write the tag 102 pair as a definite 2-element array, and write the fields with the list options. Decoding already accepts both forms; keep that.

Regression test

  • Constr 128 [1] and Constr 1000 [1] with the node-layout preset from #598 give the node bytes above, and their blake2b-256 equals the cardano-cli hashes.
  • An Aiken validator that compares blake2b_256(serialise_data(datum)) with its redeemer accepts the SDK hash.
  • Constructors 0 to 127 are unchanged.

Must FAIL on main today and PASS after the fix.

Langage dominant
TypeScript
Étoiles
22
Forks
33
Merge moyen
2 j 7 h
PR mergées (30 j)
39

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de IntersectMBO/evolution-sdk

Toutes les issues de IntersectMBO/evolution-sdk

Issues similaires

Plus d'issues TypeScript

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.