1
votes

Hyperledger Fabric: Erreur: impossible d'assembler la transaction: ProposalResponsePayloads ne correspond pas

Quelles sont les étapes à suivre pour résoudre l'erreur ci-dessous lorsque vous essayez d'appeler un code de chaîne?

Error: could not assemble transaction: ProposalResponsePayloads do not match - proposal response: version:1 response:<status:200 payload:"[\"00000\"]" > ...

nous obtenons cette erreur lorsque vous essayez d'appeler un code de chaîne à l'aide de peer chaincode invoke


0 commentaires

3 Réponses :


3
votes

Vérifiez que vous avez installé le chaincode sur tous les pairs ciblés par votre commande peer chaincode invoke . C'est la cause la plus probable de cette erreur.

D'autres façons dont cette erreur peut se produire:

  • Vous avez modifié votre code de chaîne et au lieu d'installer une nouvelle version et de mettre à niveau le code de chaîne, vous avez essayé d'être intelligent et d'écraser le code de chaîne avec le nouveau fichier en pensant que Fabric ne le remarquerait pas.

  • Cela peut également se produire s'il n'y a pas de conteneur de code de chaîne en cours d'exécution sur l'homologue cible et que le démon Docker est introuvable sur le nœud homologue lorsqu'il tente d'instancier un conteneur ou que l'instanciation échoue pour une autre raison

  • Une autre raison pour laquelle cette erreur peut se produire est si certains nœuds homologues utilisent LevelDB et d'autres utilisent CouchDB

L'erreur elle-même provient de ici < / a>. La première étape pour déboguer cette erreur consiste à appeler le code de chaîne individuellement un par un sur un nœud homologue à la fois.


0 commentaires

2
votes

@morpheus: y a très bien répondu:

J'ai donc appris que j'ajouterai à la liste ci-dessus des raisons possibles:

J'avais par erreur ajouté quelque chose comme obtenir l'horodatage actuel, et je l'utilisais pour capturer la date de l'événement. Cela a conduit à des réponses de transaction différentes par les endosseurs, conduisant ainsi à une charge utile de réponse non concordante. Le point à retenir est que le résultat de l'exécution doit être déterministe car il va être exécuté sur tous les homologues d'approbation sélectionnés.

Utilisez donc ctx.GetStub (). GetTxTimestamp () pour capturer l'heure de l'événement. C'est l'heure à laquelle la transaction a commencé et elle sera constante à travers les exécutions de l'endosseur


1 commentaires

Merci! Je retourne bêtement un horodatage dans ma réponse lors de l'exécution réussie d'une demande à mon code de chaîne. Cela conduit différents pairs à créer différentes propositions de transaction, essayant d'identifier ce problème depuis un certain temps maintenant.



0
votes

Une autre raison que j'ai oublié de vérifier est l'utilisation du stockage de valeurs générées aléatoirement.

Je n'ai jamais utilisé "Id" aléatoire jusqu'à présent et je n'ai pas remarqué que cela conduisait à ENDORSEMENT_MISMATCH


0 commentaires