@@ -480,6 +480,18 @@ func (handler *Handler) afterGetState(e *fsm.Event, state string) {
480
480
handler .handleGetState (msg )
481
481
}
482
482
483
+ // is this a txid for which there is a valid txsim
484
+ func (handler * Handler ) isValidTxSim (txid string , fmtStr string , args ... interface {}) (* transactionContext , * pb.ChaincodeMessage ) {
485
+ txContext := handler .getTxContext (txid )
486
+ if txContext == nil || txContext .txsimulator == nil {
487
+ // Send error msg back to chaincode. No ledger context
488
+ errStr := fmt .Sprintf (fmtStr , args ... )
489
+ chaincodeLogger .Errorf (errStr )
490
+ return nil , & pb.ChaincodeMessage {Type : pb .ChaincodeMessage_ERROR , Payload : []byte (errStr ), Txid : txid }
491
+ }
492
+ return txContext , nil
493
+ }
494
+
483
495
// Handles query to ledger to get state
484
496
func (handler * Handler ) handleGetState (msg * pb.ChaincodeMessage ) {
485
497
// The defer followed by triggering a go routine dance is needed to ensure that the previous state transition
@@ -509,8 +521,13 @@ func (handler *Handler) handleGetState(msg *pb.ChaincodeMessage) {
509
521
510
522
var res []byte
511
523
var err error
524
+ var txContext * transactionContext
525
+
526
+ txContext , serialSendMsg = handler .isValidTxSim (msg .Txid , "[%s]No ledger context for GetState. Sending %s" , shorttxid (msg .Txid ), pb .ChaincodeMessage_ERROR )
527
+ if txContext == nil {
528
+ return
529
+ }
512
530
513
- txContext := handler .getTxContext (msg .Txid )
514
531
res , err = txContext .txsimulator .GetState (chaincodeID , key )
515
532
516
533
if err != nil {
@@ -579,8 +596,13 @@ func (handler *Handler) handleRangeQueryState(msg *pb.ChaincodeMessage) {
579
596
}
580
597
581
598
iterID := util .GenerateUUID ()
582
- txContext := handler .getTxContext (msg .Txid )
583
599
600
+ var txContext * transactionContext
601
+
602
+ txContext , serialSendMsg = handler .isValidTxSim (msg .Txid , "[%s]No ledger context for RangeQueryState. Sending %s" , shorttxid (msg .Txid ), pb .ChaincodeMessage_ERROR )
603
+ if txContext == nil {
604
+ return
605
+ }
584
606
chaincodeID := handler .ChaincodeID .Name
585
607
586
608
rangeIter , err := txContext .txsimulator .GetStateRangeScanIterator (chaincodeID , rangeQueryState .StartKey , rangeQueryState .EndKey )
@@ -864,6 +886,13 @@ func (handler *Handler) enterBusyState(e *fsm.Event, state string) {
864
886
var err error
865
887
var res []byte
866
888
889
+ var txContext * transactionContext
890
+
891
+ txContext , triggerNextStateMsg = handler .isValidTxSim (msg .Txid , "[%s]No ledger context for %s. Sending %s" , shorttxid (msg .Txid ), msg .Type .String (), pb .ChaincodeMessage_ERROR )
892
+ if txContext == nil {
893
+ return
894
+ }
895
+
867
896
if msg .Type .String () == pb .ChaincodeMessage_PUT_STATE .String () {
868
897
putStateInfo := & pb.PutStateInfo {}
869
898
unmarshalErr := proto .Unmarshal (msg .Payload , putStateInfo )
@@ -874,13 +903,10 @@ func (handler *Handler) enterBusyState(e *fsm.Event, state string) {
874
903
return
875
904
}
876
905
877
- // Invoke ledger to put state
878
- txContext := handler .getTxContext (msg .Txid )
879
906
err = txContext .txsimulator .SetState (chaincodeID , putStateInfo .Key , putStateInfo .Value )
880
907
} else if msg .Type .String () == pb .ChaincodeMessage_DEL_STATE .String () {
881
908
// Invoke ledger to delete state
882
909
key := string (msg .Payload )
883
- txContext := handler .getTxContext (msg .Txid )
884
910
err = txContext .txsimulator .DeleteState (chaincodeID , key )
885
911
} else if msg .Type .String () == pb .ChaincodeMessage_INVOKE_CHAINCODE .String () {
886
912
//check and prohibit C-call-C for CONFIDENTIAL txs
@@ -902,7 +928,6 @@ func (handler *Handler) enterBusyState(e *fsm.Event, state string) {
902
928
newChaincodeID := chaincodeSpec .ChaincodeID .Name
903
929
chaincodeLogger .Debugf ("[%s] C-call-C %s" , shorttxid (msg .Txid ), newChaincodeID )
904
930
905
- txContext := handler .getTxContext (msg .Txid )
906
931
ctxt := context .Background ()
907
932
ctxt = context .WithValue (ctxt , TXSimulatorKey , txContext .txsimulator )
908
933
0 commit comments