{"record":{"id":"f6c9dea564591ac6","repo":"hyperledger/fabric","slug":"only-endorser-transactions-are-supported-provided-f6c9de","errorCode":null,"errorMessage":"Only Endorser Transactions are supported, provided type %d","messagePattern":"Only Endorser Transactions are supported, provided type (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"core/handlers/validation/builtin/v20/validation_logic.go","lineNumber":136,"sourceCode":"\t\treturn nil, err\n\t}\n\n\t// ...and the payload...\n\tpayl, err := protoutil.UnmarshalPayload(env.Payload)\n\tif err != nil {\n\t\tlogger.Errorf(\"VSCC error: GetPayload failed, err %s\", err)\n\t\treturn nil, err\n\t}\n\n\tchdr, err := protoutil.UnmarshalChannelHeader(payl.Header.ChannelHeader)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// validate the payload type\n\tif common.HeaderType(chdr.Type) != common.HeaderType_ENDORSER_TRANSACTION {\n\t\tlogger.Errorf(\"Only Endorser Transactions are supported, provided type %d\", chdr.Type)\n\t\terr = fmt.Errorf(\"Only Endorser Transactions are supported, provided type %d\", chdr.Type)\n\t\treturn nil, err\n\t}\n\n\t// ...and the transaction...\n\ttx, err := protoutil.UnmarshalTransaction(payl.Data)\n\tif err != nil {\n\t\tlogger.Errorf(\"VSCC error: GetTransaction failed, err %s\", err)\n\t\treturn nil, err\n\t}\n\n\tcap, err := protoutil.UnmarshalChaincodeActionPayload(tx.Actions[actionPosition].Payload)\n\tif err != nil {\n\t\tlogger.Errorf(\"VSCC error: GetChaincodeActionPayload failed, err %s\", err)\n\t\treturn nil, err\n\t}\n\n\tpRespPayload, err := protoutil.UnmarshalProposalResponsePayload(cap.Action.ProposalResponsePayload)\n\tif err != nil {","sourceCodeStart":118,"sourceCodeEnd":154,"githubUrl":"https://github.com/hyperledger/fabric/blob/2736b63f8fd5932511d56fe68b7039d15977f7f6/core/handlers/validation/builtin/v20/validation_logic.go#L118-L154","documentation":"Returned by v20 extractValidationArtifacts when the envelope's channel header type is not ENDORSER_TRANSACTION. VSCC in the v20 plugin only validates endorser transactions, so config or other header types are rejected with the observed type number.","triggerScenarios":"A block envelope submitted to the v2.0 validator contains a payload of another header type (CONFIG, CONFIG_UPDATE, PEER_RESOURCE_UPDATE, or a fabricated type number) instead of an endorser transaction.","commonSituations":"A malformed or hostile transaction enters a block; tooling writing blocks directly (test harnesses, snapshot replay tools) mixes config envelopes into tx blocks; version mismatches where the tx type field was corrupted.","solutions":["Route only endorser transactions to this validator","Fix clients submitting wrong transaction types"],"exampleFix":"// before\nenv := &common.Envelope{Payload: configPayloadBytes} // wrong type routed to tx validator\n// after\nif common.HeaderType(chdr.Type) != common.HeaderType_ENDORSER_TRANSACTION {\n    // route to config validation instead of validateTx\n}\nenv := &common.Envelope{Payload: endorserTxPayloadBytes}","handlingStrategy":"validation","validationCode":"func isEndorserTx(env *common.Envelope) bool {\n    payload := &common.Payload{}\n    if proto.Unmarshal(env.Payload, payload) != nil { return false }\n    chdr := &common.ChannelHeader{}\n    if proto.Unmarshal(payload.Header.ChannelHeader, chdr) != nil { return false }\n    return common.HeaderType(chdr.Type) == common.HeaderType_ENDORSER_TRANSACTION\n}","typeGuard":"func isEndorserTxType(t int32) bool {\n    return common.HeaderType(t) == common.HeaderType_ENDORSER_TRANSACTION\n}","tryCatchPattern":"artifacts, err := extractValidationArtifacts(bytes, policy)\nif err != nil {\n    if strings.HasPrefix(err.Error(), \"Only Endorser Transactions are supported\") {\n        return nil, validationerrors.InvalidTxType // route to config validation\n    }\n    return nil, err\n}","preventionTips":["Route CONFIG/CONFIG_UPDATE envelopes to config validation, never to tx validation","Set HeaderType explicitly when building envelopes in tests/tools","Decode and log the channel header on rejection for diagnosis","Keep tx producers on supported Fabric SDKs"],"tags":["fabric","transaction","validation","header-type"],"backgroundTag":"unsupported-transaction-type","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"}