{"record":{"id":"98623582a8f7a4db","repo":"hyperledger/fabric","slug":"failed-sending-proposal-got-s","errorCode":null,"errorMessage":"Failed sending proposal, got %s","messagePattern":"Failed sending proposal, got (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/peer/channel/list.go","lineNumber":69,"sourceCode":"\t\t},\n\t}\n\n\tvar prop *pb.Proposal\n\tc, _ := cc.cf.Signer.Serialize()\n\tprop, _, err = protoutil.CreateProposalFromCIS(common2.HeaderType_ENDORSER_TRANSACTION, \"\", invocation, c)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"Cannot create proposal, due to %s\", err)\n\t}\n\n\tvar signedProp *pb.SignedProposal\n\tsignedProp, err = protoutil.GetSignedProposal(prop, cc.cf.Signer)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"Cannot create signed proposal, due to %s\", err)\n\t}\n\n\tproposalResp, err := cc.cf.EndorserClient.ProcessProposal(context.Background(), signedProp)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"Failed sending proposal, got %s\", err)\n\t}\n\n\tif proposalResp.Response == nil || proposalResp.Response.Status != http.StatusOK {\n\t\treturn nil, fmt.Errorf(\"Received bad response, status %d: %s\", proposalResp.Response.Status, proposalResp.Response.Message)\n\t}\n\n\tvar channelQueryResponse pb.ChannelQueryResponse\n\terr = proto.Unmarshal(proposalResp.Response.Payload, &channelQueryResponse)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"Cannot read channels list response, %s\", err)\n\t}\n\n\treturn channelQueryResponse.Channels, nil\n}\n\nfunc list(cf *ChannelCmdFactory) error {\n\tvar err error\n\tif cf == nil {","sourceCodeStart":51,"sourceCodeEnd":87,"githubUrl":"https://github.com/hyperledger/fabric/blob/2736b63f8fd5932511d56fe68b7039d15977f7f6/internal/peer/channel/list.go#L51-L87","documentation":"Error in getChannels: the endorser client's ProcessProposal call for the peer's channels-list proposal returned a transport/gRPC error; %s is that error. It usually means the peer is unreachable, TLS misconfigured, or the endorser service rejected the connection.","triggerScenarios":"EndorserClient.ProcessProposal returns an error — peer unreachable, connection refused, TLS handshake failure, gRPC deadline exceeded, or the peer closing the connection.","commonSituations":"Peer service down or wrong --peerAddress; missing --tlsRootCertFile for a TLS-enabled peer; network/firewall/DNS issues in containers; client cert not trusted under mutual TLS.","solutions":["Verify the peer is running and the address/port in --peerAddress is correct","Provide --tlsRootCertFile matching the peer's TLS CA when TLS is enabled","Test connectivity (nc/openssl s_client) to the endorser port from the client host","Check peer logs and gRPC keepalive/deadline settings if timeouts occur"],"exampleFix":"// before: wrong port -> connection refused\npeer channel list --peerAddress peer0.example.com:7050\n// after\npeer channel list --peerAddress peer0.example.com:7051 --tlsRootCertFile tls/ca.crt","handlingStrategy":"retry","validationCode":"// pre-flight: TLS and reachability\nconn, err := tls.DialWithDialer(&net.Dialer{Timeout: 3 * time.Second}, \"tcp\", host,\n    &tls.Config{RootCAs: caPool})\nif err != nil { return fmt.Errorf(\"cannot reach endorser over TLS: %w\", err) }\nconn.Close()","typeGuard":null,"tryCatchPattern":"proposalResp, err := cc.cf.EndorserClient.ProcessProposal(context.Background(), signedProp)\nif err != nil {\n    // transient network errors: retry with backoff; TLS/cert errors: fix config, don't retry\n    return nil, fmt.Errorf(\"Failed sending proposal, got %s\", err)\n}","preventionTips":["Match --peerAddress to the peer's TLS certificate SAN","Always supply --tlsRootCertFile for TLS peers","Health-check the peer service in scripts before calls","Watch for container DNS/port-mapping mistakes (7051 vs mapped port)"],"tags":["fabric","grpc","network","endorser"],"backgroundTag":"connection-refused","analyzedSha":"2736b63f8fd5932511d56fe68b7039d15977f7f6","analyzedAt":"2026-09-04T08:52:36.465Z","contentChangedAt":"2026-09-04T08:52:36.465Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}