Android Open Source - bitcoin-wallet Block Store






From Project

Back to project page bitcoin-wallet.

License

The source code is released under:

Copyright (C) 2011 by Caleb Anderson Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the ...

If you think the Android project bitcoin-wallet listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package net.dirtyfilthy.bitcoin.core;
/*from ww w.j a  v a  2 s  . c  o  m*/
import java.math.BigInteger;
import java.util.HashMap;

import net.dirtyfilthy.bitcoin.protocol.ProtocolVersion;

// in memory block store, this will quickly exhaust  the 16mb heap under android

public class BlockStore {
  
  private HashMap<BigInteger,Block> byHash=new HashMap<BigInteger,Block>();
  private HashMap<BigInteger,Block> byPrev=new HashMap<BigInteger,Block>();
  protected Block topBlock;
  protected BigInteger highestWork; 
  
  public BlockStore(){
    this(true);
  }
  
  public BlockStore(boolean addGenesis){
    if(addGenesis){
      try {
        put(ProtocolVersion.genesisBlock());
      } catch (BlockExistsException e) {
        // do nothing
      }
    }
  }
  
  public Block top(){
    return topBlock;
  }
  
  
  public synchronized Block put(Block b) throws BlockExistsException {
    byHash.put(new BigInteger(b.hash()),b);
    byPrev.put(new BigInteger(b.getPreviousHash()),b);
    Block prev=getPrevious(b);
    if(topBlock==null || getTotalWork(b).compareTo(topBlock.getTotalWork())>0){
      topBlock=b;
    }
    if(prev!=null){
      b.setHeight(getPrevious(b).getHeight()+1);
    }
    else{
      b.setHeight(0);
    }
    return b;
  }
  
  public boolean has(Block b){
    return getByHash(b.hash())!=null;
  }
  
  public Block getByHash(byte[] hash){
    return byHash.get(new BigInteger(hash));
  }
  
  public Block getByPreviousHash(byte[] prev){
    return byPrev.get(new BigInteger(prev));
  }
  
  public Block getPrevious(Block b){
    return getByHash(b.getPreviousHash());
  }
  

  public BigInteger getTotalWork(Block b){
    BigInteger totalWork;
    if(b.getTotalWork()!=null){
      return b.getTotalWork();
    }
    if(getPrevious(b)==null){
      totalWork=b.getWork();
    }
    else{
      totalWork=b.getWork().add(getTotalWork(getPrevious(b)));
    }
    b.setTotalWork(totalWork);
    return totalWork;
  }
  
  
}




Java Source Code List

net.dirtyfilthy.bitcoin.core.Address.java
net.dirtyfilthy.bitcoin.core.Base58Hash160.java
net.dirtyfilthy.bitcoin.core.BlockChain.java
net.dirtyfilthy.bitcoin.core.BlockExistsException.java
net.dirtyfilthy.bitcoin.core.BlockStore.java
net.dirtyfilthy.bitcoin.core.Block.java
net.dirtyfilthy.bitcoin.core.BtcValue.java
net.dirtyfilthy.bitcoin.core.ByteArrayable.java
net.dirtyfilthy.bitcoin.core.InvalidBlockException.java
net.dirtyfilthy.bitcoin.core.OpCode.java
net.dirtyfilthy.bitcoin.core.OpData.java
net.dirtyfilthy.bitcoin.core.OrphanBlockException.java
net.dirtyfilthy.bitcoin.core.Script.java
net.dirtyfilthy.bitcoin.core.TxIn.java
net.dirtyfilthy.bitcoin.core.TxOut.java
net.dirtyfilthy.bitcoin.core.Tx.java
net.dirtyfilthy.bitcoin.protocol.AddressBook.java
net.dirtyfilthy.bitcoin.protocol.AddressPacket.java
net.dirtyfilthy.bitcoin.protocol.BlockPacket.java
net.dirtyfilthy.bitcoin.protocol.ConnectionHandler.java
net.dirtyfilthy.bitcoin.protocol.Connection.java
net.dirtyfilthy.bitcoin.protocol.GetAddressPacket.java
net.dirtyfilthy.bitcoin.protocol.GetBlocksPacket.java
net.dirtyfilthy.bitcoin.protocol.GetDataPacket.java
net.dirtyfilthy.bitcoin.protocol.GetHeadersPacket.java
net.dirtyfilthy.bitcoin.protocol.HeadersPacket.java
net.dirtyfilthy.bitcoin.protocol.InventoryPacket.java
net.dirtyfilthy.bitcoin.protocol.InventoryVector.java
net.dirtyfilthy.bitcoin.protocol.IrcBootStrap.java
net.dirtyfilthy.bitcoin.protocol.MalformedPacketException.java
net.dirtyfilthy.bitcoin.protocol.PacketFactory.java
net.dirtyfilthy.bitcoin.protocol.PacketType.java
net.dirtyfilthy.bitcoin.protocol.Packet.java
net.dirtyfilthy.bitcoin.protocol.PingPacket.java
net.dirtyfilthy.bitcoin.protocol.ProtocolVersion.java
net.dirtyfilthy.bitcoin.protocol.ReplyPacket.java
net.dirtyfilthy.bitcoin.protocol.TxPacket.java
net.dirtyfilthy.bitcoin.protocol.VersionAckPacket.java
net.dirtyfilthy.bitcoin.protocol.VersionPacket.java
net.dirtyfilthy.bitcoin.util.Base58.java
net.dirtyfilthy.bitcoin.util.BigIntegerTools.java
net.dirtyfilthy.bitcoin.util.HashTools.java
net.dirtyfilthy.bitcoin.util.KeyTools.java
net.dirtyfilthy.bitcoin.util.MyHex.java
net.dirtyfilthy.bitcoin.wallet.ExposedSQLiteCursor.java
net.dirtyfilthy.bitcoin.wallet.InvalidPasswordException.java
net.dirtyfilthy.bitcoin.wallet.KeyRing.java
net.dirtyfilthy.bitcoin.wallet.SqlBlockStore.java
net.dirtyfilthy.bitcoin.wallet.Wallet.java