package jelectrum; import java.util.Map; import java.util.Set; import java.util.HashMap; import java.util.HashSet; import org.bitcoinj.core.Sha256Hash; import org.bitcoinj.core.Transaction; import org.bitcoinj.core.Block; import com.google.common.collect.ImmutableMap; import org.junit.Assert; import jelectrum.proto.Kraken.ProtoBlockSummary; import jelectrum.proto.Kraken.ProtoTxSummary; public class BlockSummary implements java.io.Serializable { private static final long serialVersionUID = 8859834861291838970L; private int height; private Sha256Hash block_hash; private HashMap<Sha256Hash, TransactionSummary> tx_map; public BlockSummary(int height, Block blk, TXUtil tx_util, Map<Sha256Hash, TransactionSummary> tx_cache) { this.height = height; this.block_hash = blk.getHash(); tx_map = new HashMap<>(); for(Transaction tx : blk.getTransactions()) { TransactionSummary tx_sum = new TransactionSummary(tx, tx_util, tx_cache); tx_map.put(tx.getHash(), tx_sum); synchronized(tx_cache) { tx_cache.put(tx.getHash(), tx_sum); } } } public int getHeight() { return height; } public Sha256Hash getHash() { return block_hash; } public Map<Sha256Hash, TransactionSummary> getTxMap() { return ImmutableMap.copyOf(tx_map);} public ProtoBlockSummary getProto() { ProtoBlockSummary.Builder b_b = ProtoBlockSummary.newBuilder(); b_b.setHeight(getHeight()); b_b.setBlockHash( block_hash.toString() ); Map<String,ProtoTxSummary> mut_tx = b_b.getMutableTx(); for(Map.Entry<Sha256Hash, TransactionSummary> me : tx_map.entrySet()) { mut_tx.put(me.getKey().toString(), me.getValue().getProto()); } return b_b.build(); } public Set<String> getAllAddresses() { HashSet<String> set = new HashSet<>(); for(TransactionSummary tx : tx_map.values()) { set.add(tx.getHash().toString()); set.addAll(tx.getAddresses()); } return set; } public Set<Sha256Hash> getMatchingTransactions(String address) { Set<Sha256Hash> set = new HashSet<>(); for(TransactionSummary tx : tx_map.values()) { if (tx.getAddresses().contains(address)) { set.add(tx.getHash()); } } return set; } }