@@ -21,9 +21,14 @@ import (
2121 pb "github.com/hyperledger/fabric-sdk-go/third_party/github.com/hyperledger/fabric/protos/peer"
2222)
2323
24+ // TxnHeaderOptsProvider provides transaction header options which allow
25+ // the provider to specify a custom creator and/or nonce.
26+ type TxnHeaderOptsProvider func () []fab.TxnHeaderOpt
27+
2428//EndorsementHandler for handling endorse transactions
2529type EndorsementHandler struct {
26- next Handler
30+ next Handler
31+ headerOptsProvider TxnHeaderOptsProvider
2732}
2833
2934//Handle for endorsing transactions
@@ -35,7 +40,17 @@ func (e *EndorsementHandler) Handle(requestContext *RequestContext, clientContex
3540 }
3641
3742 // Endorse Tx
38- transactionProposalResponses , proposal , err := createAndSendTransactionProposal (clientContext .Transactor , & requestContext .Request , peer .PeersToTxnProcessors (requestContext .Opts .Targets ))
43+ var TxnHeaderOpts []fab.TxnHeaderOpt
44+ if e .headerOptsProvider != nil {
45+ TxnHeaderOpts = e .headerOptsProvider ()
46+ }
47+
48+ transactionProposalResponses , proposal , err := createAndSendTransactionProposal (
49+ clientContext .Transactor ,
50+ & requestContext .Request ,
51+ peer .PeersToTxnProcessors (requestContext .Opts .Targets ),
52+ TxnHeaderOpts ... ,
53+ )
3954
4055 requestContext .Response .Proposal = proposal
4156 requestContext .Response .TransactionID = proposal .TxnID // TODO: still needed?
@@ -214,6 +229,11 @@ func NewEndorsementHandler(next ...Handler) *EndorsementHandler {
214229 return & EndorsementHandler {next : getNext (next )}
215230}
216231
232+ //NewEndorsementHandlerWithOpts returns a handler that endorses a transaction proposal
233+ func NewEndorsementHandlerWithOpts (next Handler , provider TxnHeaderOptsProvider ) * EndorsementHandler {
234+ return & EndorsementHandler {next : next , headerOptsProvider : provider }
235+ }
236+
217237//NewEndorsementValidationHandler returns a handler that validates an endorsement
218238func NewEndorsementValidationHandler (next ... Handler ) * EndorsementValidationHandler {
219239 return & EndorsementValidationHandler {next : getNext (next )}
@@ -252,15 +272,15 @@ func createAndSendTransaction(sender fab.Sender, proposal *fab.TransactionPropos
252272 return transactionResponse , nil
253273}
254274
255- func createAndSendTransactionProposal (transactor fab.ProposalSender , chrequest * Request , targets []fab.ProposalProcessor ) ([]* fab.TransactionProposalResponse , * fab.TransactionProposal , error ) {
275+ func createAndSendTransactionProposal (transactor fab.ProposalSender , chrequest * Request , targets []fab.ProposalProcessor , opts ... fab. TxnHeaderOpt ) ([]* fab.TransactionProposalResponse , * fab.TransactionProposal , error ) {
256276 request := fab.ChaincodeInvokeRequest {
257277 ChaincodeID : chrequest .ChaincodeID ,
258278 Fcn : chrequest .Fcn ,
259279 Args : chrequest .Args ,
260280 TransientMap : chrequest .TransientMap ,
261281 }
262282
263- txh , err := transactor .CreateTransactionHeader ()
283+ txh , err := transactor .CreateTransactionHeader (opts ... )
264284 if err != nil {
265285 return nil , nil , errors .WithMessage (err , "creating transaction header failed" )
266286 }
0 commit comments