hyperledger/fabric · error

%s - proposal response: %v

Error message

%s - proposal response: %v

What it means

After invokeOrQuery obtains a proposal response, an error from processing is reported together with the raw proposal response: errors.Errorf("%s - proposal response: %v", err, proposalResp). It surfaces the underlying endorser/processing error alongside the full response payload for diagnosis.

Source

Thrown at internal/peer/chaincode/common.go:107

	}

	// call with empty txid to ensure production code generates a txid.
	// otherwise, tests can explicitly set their own txid
	txID := ""

	proposalResp, err := ChaincodeInvokeOrQuery(
		spec,
		channelID,
		txID,
		invoke,
		cf.Signer,
		cf.Certificate,
		cf.EndorserClients,
		cf.DeliverClients,
		cf.BroadcastClient,
	)
	if err != nil {
		return errors.Errorf("%s - proposal response: %v", err, proposalResp)
	}

	if invoke {
		logger.Debugf("ESCC invoke result: %v", proposalResp)
		pRespPayload, err := protoutil.UnmarshalProposalResponsePayload(proposalResp.Payload)
		if err != nil {
			return errors.WithMessage(err, "error while unmarshalling proposal response payload")
		}
		ca, err := protoutil.UnmarshalChaincodeAction(pRespPayload.Extension)
		if err != nil {
			return errors.WithMessage(err, "error while unmarshalling chaincode action")
		}
		if proposalResp.Endorsement == nil {
			return errors.Errorf("endorsement failure during invoke. response: %v", proposalResp.Response)
		}
		logger.Infof("Chaincode invoke successful. result: %v", ca.Response)
	} else {
		if proposalResp == nil {

View on GitHub (pinned to 2736b63f8f)

Solutions

  1. Read the wrapped err prefix — it names the root cause (connection, chaincode status, etc.)
  2. Check endorser connectivity/TLS config (--peerAddresses, --tlsRootCertFiles)
  3. Inspect chaincode logs for errors returned in proposalResp.Response.Message
  4. Retry after fixing the failing peer or chaincode logic
Defensive patterns

Strategy: try-catch

Validate before calling

// Pre-check endorser reachability
peer channel list --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles certs/peer.pem

Try / catch

err := invokeOrQuery(...)
if err != nil {
  var perr *endorserError
  if errors.As(err, &perr) { log.Errorf("endorser said: %s", perr.Message) }
  return fmt.Errorf("invoke failed: %w", err)
}

Prevention

When it happens

Trigger: invokeOrQuery returns an error (e.g. failure building/endorsing the proposal, no endorser reachable) while proposalResp is non-nil and is printed for context.

Common situations: Endorsers partially failing so a response is returned but processing still errors; TLS/connection issues to the endorser; chaincode rejecting the transaction (response status >= 400 combined with sendFailed paths).

Related errors


AI-assisted analysis of hyperledger/fabric@2736b63f8f (2026-09-04). Data as JSON: /api/errors/90b5c486a7ac4ab6. Report an issue: GitHub.