code: func (p *Provider) registerSysCC(syscc SelfDescribingSysCC) (bool, error) {
  	if !syscc.Enabled() || !isWhitelisted(syscc) {
  		sysccLogger.Info(fmt.Sprintf("system chaincode (%s,%s,%t) disabled", syscc.Name(), syscc.Path(), syscc.Enabled()))
  		return false, nil
  	}
  
  	// XXX This is an ugly hack, version should be tied to the chaincode instance, not he peer binary
  	version := util.GetSysCCVersion()
  
  	ccid := &ccintf.CCID{
  		Name:    syscc.Name(),
  		Version: version,
  	}
  	err := p.Registrar.Register(ccid, syscc.Chaincode())
  	if err != nil {
  		//if the type is registered, the instance may not be... keep going
  		if _, ok := err.(inproccontroller.SysCCRegisteredErr); !ok {
  			errStr := fmt.Sprintf("could not register (%s,%v): %s", syscc.Path(), syscc, err)
  			sysccLogger.Error(errStr)
  			return false, fmt.Errorf(errStr)
  		}
  	}
  
  	sysccLogger.Infof("system chaincode %s(%s) registered", syscc.Name(), syscc.Path())
  	return true, err
  }
docs: // registerSysCC registers the given system chaincode with the peer