code: func (r *retriever) CollectionConfigAt(blockNum uint64, chaincodeName string) (*ledger.CollectionConfigInfo, error) {
  	info, err := r.ledgerInfoRetriever.GetBlockchainInfo()
  	if err != nil {
  		return nil, err
  	}
  	maxCommittedBlockNum := info.Height - 1
  	if maxCommittedBlockNum < blockNum {
  		return nil, &ledger.ErrCollectionConfigNotYetAvailable{MaxBlockNumCommitted: maxCommittedBlockNum,
  			Msg: fmt.Sprintf("The maximum block number committed [%d] is less than the requested block number [%d]", maxCommittedBlockNum, blockNum)}
  	}
  
  	compositeKV, err := r.dbHandle.entryAt(blockNum, collectionConfigNamespace, constructCollectionConfigKey(chaincodeName))
  	if err != nil || compositeKV == nil {
  		return nil, err
  	}
  	return compositeKVToCollectionConfig(compositeKV)
  }
docs: // CollectionConfigAt implements function from the interface ledger.ConfigHistoryRetriever