code: func (sub *Subscription) ChaincodeDeployDone(succeeded bool) {
  	// Run a new goroutine which would dispatch a single pending update.
  	// This is to prevent any ledger locks being obtained during the state query
  	// to affect the locks held while invoking this method by the ledger itself.
  	// We first lock and then take the pending update, to preserve order.
  	sub.Lock()
  	go func() {
  		defer func() {
  			sub.pendingUpdates = nil
  			sub.Unlock()
  		}()
  		// If we haven't succeeded in deploying the chaincode, just skip the update
  		if !succeeded {
  			Logger.Errorf("Chaincode deploy for updates %v failed", sub.pendingUpdates)
  			return
  		}
  		for _, update := range sub.pendingUpdates {
  			sub.processPendingUpdate(update)
  		}
  	}()
  }
docs: // ChaincodeDeployDone gets invoked when the chaincode deploy transaction or chaincode install
  // (the context in which the above function was invoked)