code: func (sdk *FabricSDK) loadConfigs(configProvider core.ConfigProvider) (*configs, error) {
  	c := &configs{
  		identityConfig:    sdk.opts.IdentityConfig,
  		endpointConfig:    sdk.opts.endpointConfig,
  		cryptoSuiteConfig: sdk.opts.CryptoSuiteConfig,
  		metricsConfig:     sdk.opts.metricsConfig,
  	}
  
  	var configBackend []core.ConfigBackend
  	var err error
  
  	if configProvider != nil {
  		configBackend, err = configProvider()
  		if err != nil {
  			return nil, errors.WithMessage(err, "unable to load config backend")
  		}
  	}
  
  	//configs passed through opts take priority over default ones
  	// load crypto suite config
  	c.cryptoSuiteConfig, err = sdk.loadCryptoConfig(configBackend...)
  	if err != nil {
  		return nil, errors.WithMessage(err, "unable to load crypto suite config")
  	}
  
  	//Initialize cryptosuite once crypto Suite config is available
  	err = sdk.initializeCryptoSuite(c.cryptoSuiteConfig)
  	if err != nil {
  		return nil, errors.WithMessage(err, "unable to initialize cryptosuite using crypto suite config")
  	}
  
  	// load endpoint config
  	c.endpointConfig, err = sdk.loadEndpointConfig(configBackend...)
  	if err != nil {
  		return nil, errors.WithMessage(err, "unable to load endpoint config")
  	}
  
  	// load identity config
  	c.identityConfig, err = sdk.loadIdentityConfig(configBackend...)
  	if err != nil {
  		return nil, errors.WithMessage(err, "unable to load identity config")
  	}
  
  	// load metrics config
  	c.metricsConfig, err = sdk.loadMetricsConfig(configBackend...)
  	if err != nil {
  		return nil, errors.WithMessage(err, "unable to load metrics config")
  	}
  
  	sdk.opts.ConfigBackend = configBackend
  
  	return c, nil
  }
docs: //loadConfigs load config from config backend when configs are not provided through opts