package jelectrum.db;
import java.io.File;
import java.util.Map;
import java.util.Set;
import java.util.HashSet;
import java.util.Collection;
import java.util.LinkedList;
import java.text.DecimalFormat;
import org.bitcoinj.core.Sha256Hash;
import org.bitcoinj.core.Transaction;
import org.bitcoinj.core.StoredBlock;
import org.bitcoinj.core.Block;
import java.util.concurrent.locks.ReentrantReadWriteLock;
import java.util.AbstractMap.SimpleEntry;
import static jelectrum.db.ObjectConversionMap.ConversionMode.*;
import jelectrum.SerializedTransaction;
import jelectrum.SerializedBlock;
import jelectrum.UtxoTrieNode;
import jelectrum.Config;
import jelectrum.BlockChainCache;
import jelectrum.TransactionSummary;
import jelectrum.BlockSummary;
public interface DBFace
{
public Map<Sha256Hash, StoredBlock> getBlockStoreMap();
public Map<String, StoredBlock> getSpecialBlockStoreMap();
public Map<Sha256Hash, SerializedTransaction> getTransactionMap();
public Map<Sha256Hash, SerializedBlock> getBlockMap();
public Map<Sha256Hash, String> getBlockRescanMap();
public Map<String, Object> getSpecialObjectMap();
public Map<Integer, String> getHeaderChunkMap();
public Map<Integer, Sha256Hash> getHeightMap();
public Map<String, UtxoTrieNode> getUtxoTrieMap();
public Map<Sha256Hash, BlockSummary> getBlockSummaryMap();
public void addAddressesToTxMap(Collection<String> addresses, Sha256Hash hash);
public void addAddressesToTxMap(Collection<Map.Entry<String, Sha256Hash> > lst);
public Set<Sha256Hash> getAddressToTxSet(String address);
public SerializedTransaction getTransaction(Sha256Hash hash);
public TransactionSummary getTransactionSummary(Sha256Hash hash);
/**
* Add address and tx mappings a block at a time, if supported
*/
public void addBlockThings(int height, Block blk);
/**
* If returns true, then the DB needs transactions added to the transaction map,
* blocks to the block map
* and addAddressesToTxMap() and addTxsToBlockMap() to be called. If false,
* then addBlockThings() covers it. */
public boolean needsDetails();
public void addTxToBlockMap(Sha256Hash tx, Sha256Hash block);
public void addTxsToBlockMap(Collection<Sha256Hash> txs, Sha256Hash block);
public void addTxsToBlockMap(Collection<Map.Entry<Sha256Hash, Sha256Hash> > lst);
public Set<Sha256Hash> getTxToBlockMap(Sha256Hash tx);
public void commit();
public void setBlockChainCache(BlockChainCache block_chain_cache);
}