class RepositoryImpl implements Repository {

    @Override
    public synchronized byte[] getRoot() {
        if (this.trie.hasStore()) {
            this.trie.save();
        }

        byte[] rootHash = this.trie.getHash().getBytes();

        logger.trace("getting repository root hash {}", Hex.toHexString(rootHash));

        return rootHash;
    }

    public  RepositoryImpl(TrieStore store, TrieStore.Pool trieStorePool, int memoryStorageLimit);
    public  RepositoryImpl(
            TrieStore store,
            KeyValueDataSource detailsDS,
            TrieStore.Pool trieStorePool,
            int memoryStorageLimit);
    private  RepositoryImpl(
            TrieStore store,
            DetailsDataStore detailsDataStore,
            TrieStore.Pool trieStorePool,
            int memoryStorageLimit);

}