Quand je configure l’indexeur Dusk, je suis tombé dans un piège : faire utiliser une même fonction de hachage à l’identifiant de transaction et à l’identifiant de contrat. Le hachage de bloc et le Merkle root utilisent SHA3-256 ; le bytecode du contrat et le filtre d’événements (event bloom) utilisent BLAKE3 ; l’identifiant de contrat et l’identifiant de transaction utilisent BLAKE2b ; l’intégrité du portefeuille et la dérivation de clés utilisent SHA2-256.
C’est comme quatre sceaux d’une salle d’archives. Le sceau d’enregistrement, le sceau du contrat et le sceau de retrait permettent d’obtenir des numéros ; pourtant, le système d’archivage ne reconnaît que le sceau précis. Si on choisit le mauvais algorithme, la sortie ressemble quand même à un hachage normal, mais les nœuds ne retrouvent pas l’objet correspondant. Un autre piège consiste à hacher une deuxième fois la chaîne de caractères représentant le hexadécimal ; l’interface du protocole consomme généralement des bytes bruts. Encoder encore une couche en plus, et tout change.
Donc, quand je l’intègre, je conserve les octets d’origine : j’utilise l’SDK officiel ou Rust pour générer les ID, puis je teste avec des vecteurs à partir de blocs, transactions et contrats connus. La documentation Dusk @Dusk Dusk recommande aussi d’éviter de réimplémenter plusieurs fois l’encodage du protocole. Multiplier les algorithmes pour séparer les responsabilités, c’est aussi rendre la version, l’endianness et le format d’entrée vérifiables. Produire une chaîne de caractères de longueur correcte prouve seulement que la fonction s’est exécutée ; l’identité sur la chaîne doit encore être confirmée en contrepartie #dusk $DUSK
C’est comme quatre sceaux d’une salle d’archives. Le sceau d’enregistrement, le sceau du contrat et le sceau de retrait permettent d’obtenir des numéros ; pourtant, le système d’archivage ne reconnaît que le sceau précis. Si on choisit le mauvais algorithme, la sortie ressemble quand même à un hachage normal, mais les nœuds ne retrouvent pas l’objet correspondant. Un autre piège consiste à hacher une deuxième fois la chaîne de caractères représentant le hexadécimal ; l’interface du protocole consomme généralement des bytes bruts. Encoder encore une couche en plus, et tout change.
Donc, quand je l’intègre, je conserve les octets d’origine : j’utilise l’SDK officiel ou Rust pour générer les ID, puis je teste avec des vecteurs à partir de blocs, transactions et contrats connus. La documentation Dusk @Dusk Dusk recommande aussi d’éviter de réimplémenter plusieurs fois l’encodage du protocole. Multiplier les algorithmes pour séparer les responsabilités, c’est aussi rendre la version, l’endianness et le format d’entrée vérifiables. Produire une chaîne de caractères de longueur correcte prouve seulement que la fonction s’est exécutée ; l’identité sur la chaîne doit encore être confirmée en contrepartie #dusk $DUSK