code: func (flf *fileLedgerFactory) GetOrCreate(chainID string) (blockledger.ReadWriter, error) {
  	flf.mutex.Lock()
  	defer flf.mutex.Unlock()
  
  	key := chainID
  	// check cache
  	ledger, ok := flf.ledgers[key]
  	if ok {
  		return ledger, nil
  	}
  	// open fresh
  	blockStore, err := flf.blkstorageProvider.OpenBlockStore(key)
  	if err != nil {
  		return nil, err
  	}
  	ledger = NewFileLedger(blockStore)
  	flf.ledgers[key] = ledger
  	return ledger, nil
  }
docs: // GetOrCreate gets an existing ledger (if it exists) or creates it if it does not