code: func (tp *configtxProcessor) GenerateSimulationResults(txEnv *common.Envelope, simulator ledger.TxSimulator, initializingLedger bool) error {
  	payload := utils.UnmarshalPayloadOrPanic(txEnv.Payload)
  	channelHdr := utils.UnmarshalChannelHeaderOrPanic(payload.Header.ChannelHeader)
  	txType := common.HeaderType(channelHdr.GetType())
  
  	switch txType {
  	case common.HeaderType_CONFIG:
  		peerLogger.Debugf("Processing CONFIG")
  		return processChannelConfigTx(txEnv, simulator)
  
  	default:
  		return fmt.Errorf("tx type [%s] is not expected", txType)
  	}
  }
docs: // GenerateSimulationResults implements function in the interface 'github.com/hyperledger/fabric/core/ledger/customtx/Processor'
  // This implemantation processes following two types of transactions.
  // CONFIG  - simply stores the config in the statedb. Additionally, stores the resource config seed if the transaction is from the genesis block.
  // PEER_RESOURCE_UPDATE - In a normal course, this validates the transaction against the current resource bundle,
  // computes the full configuration, and stores the full configuration if the transaction is found valid.
  // However, if 'initializingLedger' is true (i.e., either the ledger is being created from the genesis block
  // or the ledger is synching the state with the blockchain, during start up), the full config is computed using
  // the most recent configs from statedb