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;
/ * f r o m w w 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