From d4c1a1b043f229a9f52f08de007a27f6b8df2456 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Tue, 27 May 2014 15:35:00 +0200 Subject: [PATCH] Add missing @Override annotations. --- .../google/bitcoin/core/AddressMessage.java | 1 + .../java/com/google/bitcoin/core/Block.java | 7 +++++++ .../com/google/bitcoin/core/BloomFilter.java | 1 + .../com/google/bitcoin/core/ChildMessage.java | 1 + .../java/com/google/bitcoin/core/ECKey.java | 2 ++ .../com/google/bitcoin/core/FilteredBlock.java | 2 ++ .../google/bitcoin/core/GetBlocksMessage.java | 4 ++++ .../com/google/bitcoin/core/InventoryItem.java | 1 + .../google/bitcoin/core/PartialMerkleTree.java | 1 + .../java/com/google/bitcoin/core/Peer.java | 10 ++++++++++ .../com/google/bitcoin/core/PeerAddress.java | 1 + .../com/google/bitcoin/core/PeerGroup.java | 4 ++++ .../java/com/google/bitcoin/core/Ping.java | 1 + .../java/com/google/bitcoin/core/Pong.java | 1 + .../bitcoin/core/StoredTransactionOutput.java | 1 + .../com/google/bitcoin/core/Transaction.java | 5 +++++ .../bitcoin/core/TransactionBroadcast.java | 2 ++ .../google/bitcoin/core/TransactionInput.java | 3 +++ .../bitcoin/core/TransactionOutPoint.java | 2 ++ .../google/bitcoin/core/TransactionOutput.java | 2 ++ .../google/bitcoin/core/UnknownMessage.java | 1 + .../core/UnsafeByteArrayOutputStream.java | 6 ++++++ .../google/bitcoin/core/VersionMessage.java | 1 + .../java/com/google/bitcoin/core/Wallet.java | 8 ++++++++ .../com/google/bitcoin/crypto/ChildNumber.java | 1 + .../com/google/bitcoin/net/BlockingClient.java | 1 + .../bitcoin/net/discovery/DnsDiscovery.java | 3 +++ .../bitcoin/net/discovery/IrcDiscovery.java | 2 ++ .../bitcoin/net/discovery/SeedPeers.java | 2 ++ .../bitcoin/net/discovery/TorDiscovery.java | 4 ++++ .../google/bitcoin/params/MainNetParams.java | 1 + .../google/bitcoin/params/RegTestParams.java | 1 + .../google/bitcoin/params/TestNet2Params.java | 1 + .../google/bitcoin/params/TestNet3Params.java | 1 + .../google/bitcoin/params/UnitTestParams.java | 1 + .../channels/PaymentChannelCloseException.java | 1 + .../java/com/google/bitcoin/script/Script.java | 1 + .../bitcoin/store/H2FullPrunedBlockStore.java | 17 +++++++++++++++++ .../google/bitcoin/store/MemoryBlockStore.java | 5 +++++ .../store/MemoryFullPrunedBlockStore.java | 18 ++++++++++++++++++ .../store/PostgresFullPrunedBlockStore.java | 17 +++++++++++++++++ .../google/bitcoin/store/SPVBlockStore.java | 5 +++++ .../bitcoin/testing/TestWithPeerGroup.java | 1 + .../google/bitcoin/wallet/BasicKeyChain.java | 1 + .../bitcoin/wallet/DefaultCoinSelector.java | 2 ++ .../com/google/bitcoin/core/PeerGroupTest.java | 5 +++++ .../java/com/google/bitcoin/core/PeerTest.java | 1 + .../com/google/bitcoin/core/WalletTest.java | 4 ++++ .../channels/ChannelConnectionTest.java | 1 + .../channels/PaymentChannelStateTest.java | 1 + .../protocols/payments/PaymentSessionTest.java | 1 + .../google/bitcoin/examples/PeerMonitor.java | 8 ++++++++ .../google/bitcoin/examples/PrintPeers.java | 2 ++ 53 files changed, 177 insertions(+) diff --git a/core/src/main/java/com/google/bitcoin/core/AddressMessage.java b/core/src/main/java/com/google/bitcoin/core/AddressMessage.java index db4f33d0..aba6fc18 100644 --- a/core/src/main/java/com/google/bitcoin/core/AddressMessage.java +++ b/core/src/main/java/com/google/bitcoin/core/AddressMessage.java @@ -88,6 +88,7 @@ public class AddressMessage extends Message { } } + @Override public int getMessageSize() { if (length != UNKNOWN_LENGTH) return length; diff --git a/core/src/main/java/com/google/bitcoin/core/Block.java b/core/src/main/java/com/google/bitcoin/core/Block.java index 93bb3afd..ac7c315e 100644 --- a/core/src/main/java/com/google/bitcoin/core/Block.java +++ b/core/src/main/java/com/google/bitcoin/core/Block.java @@ -226,6 +226,7 @@ public class Block extends Message { transactionBytesValid = parseRetain; } + @Override void parse() throws ProtocolException { parseHeader(); parseTransactions(); @@ -242,6 +243,7 @@ public class Block extends Message { return optimalEncodingMessageSize; } + @Override protected void parseLite() throws ProtocolException { // Ignore the header since it has fixed length. If length is not provided we will have to // invoke a light parse of transactions to calculate the length. @@ -304,6 +306,7 @@ public class Block extends Message { * Ensure the object is parsed if needed. This should be called in every getter before returning a value. If the * lazy parse flag is not set this is a method returns immediately. */ + @Override protected void maybeParse() { throw new LazyParseException( "checkParse() should never be called on a Block. Instead use checkParseHeader() and checkParseTransactions()"); @@ -319,6 +322,7 @@ public class Block extends Message { * * @throws ProtocolException */ + @Override public void ensureParsed() throws ProtocolException { try { maybeParseHeader(); @@ -414,6 +418,7 @@ public class Block extends Message { * * @throws IOException */ + @Override public byte[] bitcoinSerialize() { // we have completely cached byte array. if (headerBytesValid && transactionBytesValid) { @@ -468,6 +473,7 @@ public class Block extends Message { return len; } + @Override protected void unCache() { // Since we have alternate uncache methods to use internally this will only ever be called by a child // transaction so we only need to invalidate that part of the cache. @@ -523,6 +529,7 @@ public class Block extends Message { * Returns the hash of the block (which for a valid, solved block should be * below the target). Big endian. */ + @Override public Sha256Hash getHash() { if (hash == null) hash = calculateHash(); diff --git a/core/src/main/java/com/google/bitcoin/core/BloomFilter.java b/core/src/main/java/com/google/bitcoin/core/BloomFilter.java index 13e2893e..e6b75be8 100644 --- a/core/src/main/java/com/google/bitcoin/core/BloomFilter.java +++ b/core/src/main/java/com/google/bitcoin/core/BloomFilter.java @@ -140,6 +140,7 @@ public class BloomFilter extends Message { /** * Serializes this message to the provided stream. If you just want the raw bytes use bitcoinSerialize(). */ + @Override void bitcoinSerializeToStream(OutputStream stream) throws IOException { stream.write(new VarInt(data.length).encode()); stream.write(data); diff --git a/core/src/main/java/com/google/bitcoin/core/ChildMessage.java b/core/src/main/java/com/google/bitcoin/core/ChildMessage.java index b2b4f161..b91845bf 100644 --- a/core/src/main/java/com/google/bitcoin/core/ChildMessage.java +++ b/core/src/main/java/com/google/bitcoin/core/ChildMessage.java @@ -79,6 +79,7 @@ public abstract class ChildMessage extends Message { adjustLength(0, adjustment); } + @Override protected void adjustLength(int newArraySize, int adjustment) { super.adjustLength(newArraySize, adjustment); if (parent != null) diff --git a/core/src/main/java/com/google/bitcoin/core/ECKey.java b/core/src/main/java/com/google/bitcoin/core/ECKey.java index dc265cca..fb7db016 100644 --- a/core/src/main/java/com/google/bitcoin/core/ECKey.java +++ b/core/src/main/java/com/google/bitcoin/core/ECKey.java @@ -404,6 +404,7 @@ public class ECKey implements EncryptableItem, Serializable { return pub.isCompressed(); } + @Override public String toString() { StringBuilder b = new StringBuilder(); b.append("pub:").append(Utils.bytesToHexString(pub.getEncoded())); @@ -1028,6 +1029,7 @@ public class ECKey implements EncryptableItem, Serializable { * Indicates whether the private key is encrypted (true) or not (false). * A private key is deemed to be encrypted when there is both a KeyCrypter and the encryptedPrivateKey is non-zero. */ + @Override public boolean isEncrypted() { return keyCrypter != null && encryptedPrivateKey != null && encryptedPrivateKey.encryptedBytes.length > 0; } diff --git a/core/src/main/java/com/google/bitcoin/core/FilteredBlock.java b/core/src/main/java/com/google/bitcoin/core/FilteredBlock.java index 55d7bfdc..2c49f73e 100644 --- a/core/src/main/java/com/google/bitcoin/core/FilteredBlock.java +++ b/core/src/main/java/com/google/bitcoin/core/FilteredBlock.java @@ -41,6 +41,7 @@ public class FilteredBlock extends Message { super(params, payloadBytes, 0); } + @Override public void bitcoinSerializeToStream(OutputStream stream) throws IOException { if (header.transactions == null) header.bitcoinSerializeToStream(stream); @@ -89,6 +90,7 @@ public class FilteredBlock extends Message { } /** Gets the hash of the block represented in this Filtered Block */ + @Override public Sha256Hash getHash() { return header.getHash(); } diff --git a/core/src/main/java/com/google/bitcoin/core/GetBlocksMessage.java b/core/src/main/java/com/google/bitcoin/core/GetBlocksMessage.java index f862501a..7cf764a7 100644 --- a/core/src/main/java/com/google/bitcoin/core/GetBlocksMessage.java +++ b/core/src/main/java/com/google/bitcoin/core/GetBlocksMessage.java @@ -42,6 +42,7 @@ public class GetBlocksMessage extends Message { super(params, msg, 0); } + @Override protected void parseLite() throws ProtocolException { cursor = offset; version = readUint32(); @@ -51,6 +52,7 @@ public class GetBlocksMessage extends Message { length = (int) (cursor - offset + ((startCount + 1) * 32)); } + @Override public void parse() throws ProtocolException { cursor = offset; version = readUint32(); @@ -72,6 +74,7 @@ public class GetBlocksMessage extends Message { return stopHash; } + @Override public String toString() { StringBuffer b = new StringBuffer(); b.append("getblocks: "); @@ -82,6 +85,7 @@ public class GetBlocksMessage extends Message { return b.toString(); } + @Override protected void bitcoinSerializeToStream(OutputStream stream) throws IOException { // Version, for some reason. Utils.uint32ToByteStreamLE(NetworkParameters.PROTOCOL_VERSION, stream); diff --git a/core/src/main/java/com/google/bitcoin/core/InventoryItem.java b/core/src/main/java/com/google/bitcoin/core/InventoryItem.java index 40706e2b..0c6572f9 100644 --- a/core/src/main/java/com/google/bitcoin/core/InventoryItem.java +++ b/core/src/main/java/com/google/bitcoin/core/InventoryItem.java @@ -39,6 +39,7 @@ public class InventoryItem { } + @Override public String toString() { return type.toString() + ": " + hash; } diff --git a/core/src/main/java/com/google/bitcoin/core/PartialMerkleTree.java b/core/src/main/java/com/google/bitcoin/core/PartialMerkleTree.java index 0391bf75..8f06aa40 100644 --- a/core/src/main/java/com/google/bitcoin/core/PartialMerkleTree.java +++ b/core/src/main/java/com/google/bitcoin/core/PartialMerkleTree.java @@ -64,6 +64,7 @@ public class PartialMerkleTree extends Message { super(params, payloadBytes, offset); } + @Override public void bitcoinSerializeToStream(OutputStream stream) throws IOException { Utils.uint32ToByteStreamLE(transactionCount, stream); diff --git a/core/src/main/java/com/google/bitcoin/core/Peer.java b/core/src/main/java/com/google/bitcoin/core/Peer.java index be725fb8..8a6a50ed 100644 --- a/core/src/main/java/com/google/bitcoin/core/Peer.java +++ b/core/src/main/java/com/google/bitcoin/core/Peer.java @@ -303,6 +303,7 @@ public class Peer extends PeerSocketHandler { return connectionOpenFuture; } + @Override protected void processMessage(Message m) throws Exception { // Allow event listeners to filter the message stream. Listeners are allowed to drop messages by // returning null. @@ -601,6 +602,7 @@ public class Peer extends PeerSocketHandler { if (downloadTxDependencies) { Futures.addCallback(downloadDependencies(fTx), new FutureCallback>() { + @Override public void onSuccess(List dependencies) { try { log.info("{}: Dependency download complete!", getAddress()); @@ -613,6 +615,7 @@ public class Peer extends PeerSocketHandler { } } + @Override public void onFailure(Throwable throwable) { log.error("Could not download dependencies of tx {}", fTx.getHashAsString()); log.error("Error was: ", throwable); @@ -667,10 +670,12 @@ public class Peer extends PeerSocketHandler { final ListenableFuture future = downloadDependenciesInternal(tx, new Object(), results); final SettableFuture> resultFuture = SettableFuture.create(); Futures.addCallback(future, new FutureCallback() { + @Override public void onSuccess(Object ignored) { resultFuture.set(results); } + @Override public void onFailure(Throwable throwable) { resultFuture.setException(throwable); } @@ -730,6 +735,7 @@ public class Peer extends PeerSocketHandler { } ListenableFuture> successful = Futures.successfulAsList(futures); Futures.addCallback(successful, new FutureCallback>() { + @Override public void onSuccess(List transactions) { // Once all transactions either were received, or we know there are no more to come ... // Note that transactions will contain "null" for any positions that weren't successful. @@ -748,10 +754,12 @@ public class Peer extends PeerSocketHandler { // There are some children to download. Wait until it's done (and their children and their // children...) to inform the caller that we're finished. Futures.addCallback(Futures.successfulAsList(childFutures), new FutureCallback>() { + @Override public void onSuccess(List objects) { resultFuture.set(marker); } + @Override public void onFailure(Throwable throwable) { resultFuture.setException(throwable); } @@ -759,6 +767,7 @@ public class Peer extends PeerSocketHandler { } } + @Override public void onFailure(Throwable throwable) { resultFuture.setException(throwable); } @@ -771,6 +780,7 @@ public class Peer extends PeerSocketHandler { // from getdata are done, so we can watch for the pong message as a substitute. log.info("{}: Dep resolution waiting for a pong with nonce {}", this, nonce); ping(nonce).addListener(new Runnable() { + @Override public void run() { // The pong came back so clear out any transactions we requested but didn't get. for (GetDataRequest req : getDataFutures) { diff --git a/core/src/main/java/com/google/bitcoin/core/PeerAddress.java b/core/src/main/java/com/google/bitcoin/core/PeerAddress.java index ba8d08ec..b8f1fbba 100644 --- a/core/src/main/java/com/google/bitcoin/core/PeerAddress.java +++ b/core/src/main/java/com/google/bitcoin/core/PeerAddress.java @@ -132,6 +132,7 @@ public class PeerAddress extends ChildMessage { stream.write((byte) (0xFF & port)); } + @Override protected void parseLite() { length = protocolVersion > 31402 ? MESSAGE_SIZE : MESSAGE_SIZE - 4; } diff --git a/core/src/main/java/com/google/bitcoin/core/PeerGroup.java b/core/src/main/java/com/google/bitcoin/core/PeerGroup.java index 610bc5f9..02631766 100644 --- a/core/src/main/java/com/google/bitcoin/core/PeerGroup.java +++ b/core/src/main/java/com/google/bitcoin/core/PeerGroup.java @@ -774,6 +774,7 @@ public class PeerGroup extends AbstractExecutionThreadService implements Transac protected void triggerShutdown() { // Force the thread to wake up. Uninterruptibles.putUninterruptibly(jobQueue, new Runnable() { + @Override public void run() { } }); @@ -1093,6 +1094,7 @@ public class PeerGroup extends AbstractExecutionThreadService implements Transac final Runnable[] pingRunnable = new Runnable[1]; pingRunnable[0] = new Runnable() { private boolean firstRun = true; + @Override public void run() { // Ensure that the first ping happens immediately and later pings after the requested delay. if (firstRun) { @@ -1372,6 +1374,7 @@ public class PeerGroup extends AbstractExecutionThreadService implements Transac * Calls {@link PeerGroup#broadcastTransaction(Transaction,int)} with getMinBroadcastConnections() as the number * of connections to wait for before commencing broadcast. */ + @Override public ListenableFuture broadcastTransaction(final Transaction tx) { return broadcastTransaction(tx, Math.max(1, getMinBroadcastConnections())); } @@ -1550,6 +1553,7 @@ public class PeerGroup extends AbstractExecutionThreadService implements Transac } // Sort by ping time. Collections.sort(candidates2, new Comparator() { + @Override public int compare(PeerAndPing peerAndPing, PeerAndPing peerAndPing2) { return Longs.compare(peerAndPing.pingTime, peerAndPing2.pingTime); } diff --git a/core/src/main/java/com/google/bitcoin/core/Ping.java b/core/src/main/java/com/google/bitcoin/core/Ping.java index 6f11c95f..550d15c6 100644 --- a/core/src/main/java/com/google/bitcoin/core/Ping.java +++ b/core/src/main/java/com/google/bitcoin/core/Ping.java @@ -44,6 +44,7 @@ public class Ping extends Message { this.hasNonce = false; } + @Override public void bitcoinSerializeToStream(OutputStream stream) throws IOException { if (hasNonce) Utils.int64ToByteStreamLE(nonce, stream); diff --git a/core/src/main/java/com/google/bitcoin/core/Pong.java b/core/src/main/java/com/google/bitcoin/core/Pong.java index 2f2a6a62..393a18ed 100644 --- a/core/src/main/java/com/google/bitcoin/core/Pong.java +++ b/core/src/main/java/com/google/bitcoin/core/Pong.java @@ -43,6 +43,7 @@ public class Pong extends Message { length = 8; } + @Override public void bitcoinSerializeToStream(OutputStream stream) throws IOException { Utils.int64ToByteStreamLE(nonce, stream); } diff --git a/core/src/main/java/com/google/bitcoin/core/StoredTransactionOutput.java b/core/src/main/java/com/google/bitcoin/core/StoredTransactionOutput.java index 64d56ff0..f2bb5b4e 100644 --- a/core/src/main/java/com/google/bitcoin/core/StoredTransactionOutput.java +++ b/core/src/main/java/com/google/bitcoin/core/StoredTransactionOutput.java @@ -138,6 +138,7 @@ public class StoredTransactionOutput implements Serializable { return height; } + @Override public String toString() { return String.format("Stored TxOut of %s (%s:%d)", value.toFriendlyString(), hash.toString(), index); } diff --git a/core/src/main/java/com/google/bitcoin/core/Transaction.java b/core/src/main/java/com/google/bitcoin/core/Transaction.java index 73d989e7..86b93eb6 100644 --- a/core/src/main/java/com/google/bitcoin/core/Transaction.java +++ b/core/src/main/java/com/google/bitcoin/core/Transaction.java @@ -210,6 +210,7 @@ public class Transaction extends ChildMessage implements Serializable { /** * Returns the transaction hash as you see them in the block explorer. */ + @Override public Sha256Hash getHash() { if (hash == null) { byte[] bits = bitcoinSerialize(); @@ -472,11 +473,13 @@ public class Transaction extends ChildMessage implements Serializable { } public static final byte SIGHASH_ANYONECANPAY_VALUE = (byte) 0x80; + @Override protected void unCache() { super.unCache(); hash = null; } + @Override protected void parseLite() throws ProtocolException { //skip this if the length has been provided i.e. the tx is not part of a block @@ -535,6 +538,7 @@ public class Transaction extends ChildMessage implements Serializable { return cursor - offset + 4; } + @Override void parse() throws ProtocolException { if (parsed) @@ -606,6 +610,7 @@ public class Transaction extends ChildMessage implements Serializable { return getConfidence().getDepthInBlocks() >= params.getSpendableCoinbaseDepth(); } + @Override public String toString() { return toString(null); } diff --git a/core/src/main/java/com/google/bitcoin/core/TransactionBroadcast.java b/core/src/main/java/com/google/bitcoin/core/TransactionBroadcast.java index f3f7fc55..8dfd91a5 100644 --- a/core/src/main/java/com/google/bitcoin/core/TransactionBroadcast.java +++ b/core/src/main/java/com/google/bitcoin/core/TransactionBroadcast.java @@ -70,6 +70,7 @@ public class TransactionBroadcast { } private class EnoughAvailablePeers implements Runnable { + @Override public void run() { // We now have enough connected peers to send the transaction. // This can be called immediately if we already have enough. Otherwise it'll be called from a peer @@ -122,6 +123,7 @@ public class TransactionBroadcast { } private class ConfidenceChange implements TransactionConfidence.Listener { + @Override public void onConfidenceChanged(Transaction tx, ChangeReason reason) { // The number of peers that announced this tx has gone up. final TransactionConfidence conf = tx.getConfidence(); diff --git a/core/src/main/java/com/google/bitcoin/core/TransactionInput.java b/core/src/main/java/com/google/bitcoin/core/TransactionInput.java index b9c41a26..b3403b4f 100644 --- a/core/src/main/java/com/google/bitcoin/core/TransactionInput.java +++ b/core/src/main/java/com/google/bitcoin/core/TransactionInput.java @@ -128,6 +128,7 @@ public class TransactionInput extends ChildMessage implements Serializable { this.value = null; } + @Override protected void parseLite() throws ProtocolException { int curs = cursor; int scriptLen = (int) readVarInt(36); @@ -135,6 +136,7 @@ public class TransactionInput extends ChildMessage implements Serializable { cursor = curs; } + @Override void parse() throws ProtocolException { outpoint = new TransactionOutPoint(params, bytes, cursor, this, parseLazy, parseRetain); cursor += outpoint.getMessageSize(); @@ -273,6 +275,7 @@ public class TransactionInput extends ChildMessage implements Serializable { /** * Returns a human readable debug string. */ + @Override public String toString() { if (isCoinBase()) return "TxIn: COINBASE"; diff --git a/core/src/main/java/com/google/bitcoin/core/TransactionOutPoint.java b/core/src/main/java/com/google/bitcoin/core/TransactionOutPoint.java index dacc8439..51da7281 100644 --- a/core/src/main/java/com/google/bitcoin/core/TransactionOutPoint.java +++ b/core/src/main/java/com/google/bitcoin/core/TransactionOutPoint.java @@ -87,6 +87,7 @@ public class TransactionOutPoint extends ChildMessage implements Serializable { super(params, payload, offset, parent, parseLazy, parseRetain, MESSAGE_LENGTH); } + @Override protected void parseLite() throws ProtocolException { length = MESSAGE_LENGTH; } @@ -163,6 +164,7 @@ public class TransactionOutPoint extends ChildMessage implements Serializable { /** * Returns the hash of the transaction this outpoint references/spends/is connected to. */ + @Override public Sha256Hash getHash() { maybeParse(); return hash; diff --git a/core/src/main/java/com/google/bitcoin/core/TransactionOutput.java b/core/src/main/java/com/google/bitcoin/core/TransactionOutput.java index 1b247b45..ca21ae51 100644 --- a/core/src/main/java/com/google/bitcoin/core/TransactionOutput.java +++ b/core/src/main/java/com/google/bitcoin/core/TransactionOutput.java @@ -134,6 +134,7 @@ public class TransactionOutput extends ChildMessage implements Serializable { return script; } + @Override protected void parseLite() throws ProtocolException { // TODO: There is no reason to use Coin for values, they are always smaller than 21 million * COIN // The only reason to use Coin would be to properly read values from the reference implementation, however @@ -144,6 +145,7 @@ public class TransactionOutput extends ChildMessage implements Serializable { length = cursor - offset + scriptLen; } + @Override void parse() throws ProtocolException { scriptBytes = readBytes(scriptLen); } diff --git a/core/src/main/java/com/google/bitcoin/core/UnknownMessage.java b/core/src/main/java/com/google/bitcoin/core/UnknownMessage.java index 02a5932a..526afe5a 100644 --- a/core/src/main/java/com/google/bitcoin/core/UnknownMessage.java +++ b/core/src/main/java/com/google/bitcoin/core/UnknownMessage.java @@ -25,6 +25,7 @@ public class UnknownMessage extends EmptyMessage { this.name = name; } + @Override public String toString() { return "Unknown message [" + name + "]: " + (bytes == null ? "" : Utils.bytesToHexString(bytes)); } diff --git a/core/src/main/java/com/google/bitcoin/core/UnsafeByteArrayOutputStream.java b/core/src/main/java/com/google/bitcoin/core/UnsafeByteArrayOutputStream.java index 48c5e7a7..a60eca82 100644 --- a/core/src/main/java/com/google/bitcoin/core/UnsafeByteArrayOutputStream.java +++ b/core/src/main/java/com/google/bitcoin/core/UnsafeByteArrayOutputStream.java @@ -44,6 +44,7 @@ public class UnsafeByteArrayOutputStream extends ByteArrayOutputStream { * * @param b the byte to be written. */ + @Override public void write(int b) { int newcount = count + 1; if (newcount > buf.length) { @@ -61,6 +62,7 @@ public class UnsafeByteArrayOutputStream extends ByteArrayOutputStream { * @param off the start offset in the data. * @param len the number of bytes to write. */ + @Override public void write(byte b[], int off, int len) { if ((off < 0) || (off > b.length) || (len < 0) || ((off + len) > b.length) || ((off + len) < 0)) { @@ -84,6 +86,7 @@ public class UnsafeByteArrayOutputStream extends ByteArrayOutputStream { * @param out the output stream to which to write the data. * @throws IOException if an I/O error occurs. */ + @Override public void writeTo(OutputStream out) throws IOException { out.write(buf, 0, count); } @@ -96,6 +99,7 @@ public class UnsafeByteArrayOutputStream extends ByteArrayOutputStream { * * @see java.io.ByteArrayInputStream#count */ + @Override public void reset() { count = 0; } @@ -108,6 +112,7 @@ public class UnsafeByteArrayOutputStream extends ByteArrayOutputStream { * @return the current contents of this output stream, as a byte array. * @see java.io.ByteArrayOutputStream#size() */ + @Override public byte toByteArray()[] { return count == buf.length ? buf : Utils.copyOf(buf, count); } @@ -119,6 +124,7 @@ public class UnsafeByteArrayOutputStream extends ByteArrayOutputStream { * of valid bytes in this output stream. * @see java.io.ByteArrayOutputStream#count */ + @Override public int size() { return count; } diff --git a/core/src/main/java/com/google/bitcoin/core/VersionMessage.java b/core/src/main/java/com/google/bitcoin/core/VersionMessage.java index dd622fd4..65678892 100644 --- a/core/src/main/java/com/google/bitcoin/core/VersionMessage.java +++ b/core/src/main/java/com/google/bitcoin/core/VersionMessage.java @@ -236,6 +236,7 @@ public class VersionMessage extends Message { throw new UnsupportedOperationException(); } + @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("\n"); diff --git a/core/src/main/java/com/google/bitcoin/core/Wallet.java b/core/src/main/java/com/google/bitcoin/core/Wallet.java index 9e0a74ba..edeedab0 100644 --- a/core/src/main/java/com/google/bitcoin/core/Wallet.java +++ b/core/src/main/java/com/google/bitcoin/core/Wallet.java @@ -605,6 +605,7 @@ public class Wallet extends BaseTaggableObject implements Serializable, BlockCha * * @return ECKey object or null if no such key was found. */ + @Override @Nullable public ECKey findKeyFromPubHash(byte[] pubkeyHash) { lock.lock(); @@ -646,6 +647,7 @@ public class Wallet extends BaseTaggableObject implements Serializable, BlockCha * Locates a keypair from the basicKeyChain given the raw public key bytes. * @return ECKey or null if no such key was found. */ + @Override @Nullable public ECKey findKeyFromPubKey(byte[] pubkey) { lock.lock(); @@ -1027,6 +1029,7 @@ public class Wallet extends BaseTaggableObject implements Serializable, BlockCha * inactive side chain. We must still record these transactions and the blocks they appear in because a future * block might change which chain is best causing a reorganize. A re-org can totally change our balance! */ + @Override public boolean notifyTransactionIsInBlock(Sha256Hash txHash, StoredBlock block, BlockChain.NewBlockType blockType, int relativityOffset) throws VerificationException { @@ -1189,6 +1192,7 @@ public class Wallet extends BaseTaggableObject implements Serializable, BlockCha *

Note that if the tx has inputs containing one of our keys, but the connected transaction is not in the wallet, * it will not be considered relevant.

*/ + @Override public boolean isTransactionRelevant(Transaction tx) throws ScriptException { lock.lock(); try { @@ -1402,6 +1406,7 @@ public class Wallet extends BaseTaggableObject implements Serializable, BlockCha *

Used to update confidence data in each transaction and last seen block hash. Triggers auto saving. * Invokes the onWalletChanged event listener if there were any affected transactions.

*/ + @Override public void notifyNewBestBlock(StoredBlock block) throws VerificationException { // Check to see if this block has been seen before. Sha256Hash newBlockHash = block.getHeader().getHash(); @@ -1859,6 +1864,7 @@ public class Wallet extends BaseTaggableObject implements Serializable, BlockCha ArrayList all = new ArrayList(getTransactions(includeDead)); // Order by date. Collections.sort(all, Collections.reverseOrder(new Comparator() { + @Override public int compare(Transaction t1, Transaction t2) { return t1.getUpdateTime().compareTo(t2.getUpdateTime()); } @@ -2728,6 +2734,7 @@ public class Wallet extends BaseTaggableObject implements Serializable, BlockCha * *

The oldBlocks/newBlocks lists are ordered height-wise from top first to bottom last.

*/ + @Override public void reorganize(StoredBlock splitPoint, List oldBlocks, List newBlocks) throws VerificationException { lock.lock(); try { @@ -3957,6 +3964,7 @@ public class Wallet extends BaseTaggableObject implements Serializable, BlockCha * when they confirm - which may be quite some time later - recalculate the transaction and check if it's the same. * If not, redisplay the confirm window and try again. */ + @Override public ReentrantLock getLock() { return lock; } diff --git a/core/src/main/java/com/google/bitcoin/crypto/ChildNumber.java b/core/src/main/java/com/google/bitcoin/crypto/ChildNumber.java index f89251f7..6bec1003 100644 --- a/core/src/main/java/com/google/bitcoin/crypto/ChildNumber.java +++ b/core/src/main/java/com/google/bitcoin/crypto/ChildNumber.java @@ -69,6 +69,7 @@ public class ChildNumber { return i & (~HARDENED_BIT); } + @Override public String toString() { return String.format("%d%s", num(), isHardened() ? "'" : ""); } diff --git a/core/src/main/java/com/google/bitcoin/net/BlockingClient.java b/core/src/main/java/com/google/bitcoin/net/BlockingClient.java index 46f5a212..e50de5e7 100644 --- a/core/src/main/java/com/google/bitcoin/net/BlockingClient.java +++ b/core/src/main/java/com/google/bitcoin/net/BlockingClient.java @@ -120,6 +120,7 @@ public class BlockingClient implements MessageWriteTarget { * Closes the connection to the server, triggering the {@link StreamParser#connectionClosed()} * event on the network-handling thread where all callbacks occur. */ + @Override public void closeConnection() { // Closes the channel, triggering an exception in the network-handling thread triggering connectionClosed() try { diff --git a/core/src/main/java/com/google/bitcoin/net/discovery/DnsDiscovery.java b/core/src/main/java/com/google/bitcoin/net/discovery/DnsDiscovery.java index d2d3726c..0de687ca 100644 --- a/core/src/main/java/com/google/bitcoin/net/discovery/DnsDiscovery.java +++ b/core/src/main/java/com/google/bitcoin/net/discovery/DnsDiscovery.java @@ -64,6 +64,7 @@ public class DnsDiscovery implements PeerDiscovery { this.netParams = netParams; } + @Override public InetSocketAddress[] getPeers(long timeoutValue, TimeUnit timeoutUnit) throws PeerDiscoveryException { if (dnsSeeds == null || dnsSeeds.length == 0) throw new PeerDiscoveryException("No DNS seeds configured; unable to find any peers"); @@ -75,6 +76,7 @@ public class DnsDiscovery implements PeerDiscovery { List> tasks = Lists.newArrayList(); for (final String seed : dnsSeeds) { tasks.add(new Callable() { + @Override public InetAddress[] call() throws Exception { return InetAddress.getAllByName(seed); } @@ -113,6 +115,7 @@ public class DnsDiscovery implements PeerDiscovery { } /** We don't have a way to abort a DNS lookup, so this does nothing */ + @Override public void shutdown() { } } diff --git a/core/src/main/java/com/google/bitcoin/net/discovery/IrcDiscovery.java b/core/src/main/java/com/google/bitcoin/net/discovery/IrcDiscovery.java index 05bf6e98..9d256594 100644 --- a/core/src/main/java/com/google/bitcoin/net/discovery/IrcDiscovery.java +++ b/core/src/main/java/com/google/bitcoin/net/discovery/IrcDiscovery.java @@ -75,6 +75,7 @@ public class IrcDiscovery implements PeerDiscovery { protected void onIRCReceive(String message) { } + @Override public void shutdown() { try { if (connection != null) { @@ -89,6 +90,7 @@ public class IrcDiscovery implements PeerDiscovery { * does not mean it is accepting connections. The given time out value is applied for every IP returned by DNS * for the given server, so a timeout value of 1 second may result in 5 seconds delay if 5 servers are advertised. */ + @Override public InetSocketAddress[] getPeers(long timeoutValue, TimeUnit timeoutUnit) throws PeerDiscoveryException { ArrayList addresses = new ArrayList(); connection = null; diff --git a/core/src/main/java/com/google/bitcoin/net/discovery/SeedPeers.java b/core/src/main/java/com/google/bitcoin/net/discovery/SeedPeers.java index c70bc457..781abc51 100644 --- a/core/src/main/java/com/google/bitcoin/net/discovery/SeedPeers.java +++ b/core/src/main/java/com/google/bitcoin/net/discovery/SeedPeers.java @@ -62,6 +62,7 @@ public class SeedPeers implements PeerDiscovery { /** * Returns an array containing all the Bitcoin nodes within the list. */ + @Override public InetSocketAddress[] getPeers(long timeoutValue, TimeUnit timeoutUnit) throws PeerDiscoveryException { try { return allPeers(); @@ -131,6 +132,7 @@ public class SeedPeers implements PeerDiscovery { 0xb5a4b052, 0x21f062d1, 0x72ab89b2, 0x74a45318, 0x8312e6bc, 0xb916965f, 0x8aa7c858, 0xfe7effad, }; + @Override public void shutdown() { } } diff --git a/core/src/main/java/com/google/bitcoin/net/discovery/TorDiscovery.java b/core/src/main/java/com/google/bitcoin/net/discovery/TorDiscovery.java index 1f535e6a..5502ac99 100644 --- a/core/src/main/java/com/google/bitcoin/net/discovery/TorDiscovery.java +++ b/core/src/main/java/com/google/bitcoin/net/discovery/TorDiscovery.java @@ -112,6 +112,7 @@ public class TorDiscovery implements PeerDiscovery { } } + @Override public InetSocketAddress[] getPeers(long timeoutValue, TimeUnit timeoutUnit) throws PeerDiscoveryException { if (hostNames == null) throw new PeerDiscoveryException("Unable to find any peers via DNS"); @@ -148,6 +149,7 @@ public class TorDiscovery implements PeerDiscovery { List> circuitFutures = Lists.newArrayList(); for (final Router router : routers) { circuitFutures.add(threadPool.submit(new Callable() { + @Override public Circuit call() throws Exception { return torClient.getCircuitManager().openInternalCircuitTo(Lists.newArrayList(router)); } @@ -187,6 +189,7 @@ public class TorDiscovery implements PeerDiscovery { for (final Circuit circuit : circuits) { for (final String seed : hostNames) { lookupFutures.add(threadPool.submit(new Callable() { + @Override public Lookup call() throws Exception { return new Lookup(circuit.getFinalCircuitNode().getRouter(), lookup(circuit, seed)); } @@ -269,6 +272,7 @@ public class TorDiscovery implements PeerDiscovery { throw new RuntimeException("Could not look up " + seed); } + @Override public synchronized void shutdown() { if (threadPool != null) { shutdownThreadPool(); diff --git a/core/src/main/java/com/google/bitcoin/params/MainNetParams.java b/core/src/main/java/com/google/bitcoin/params/MainNetParams.java index 45d33ce5..0cd2ce47 100644 --- a/core/src/main/java/com/google/bitcoin/params/MainNetParams.java +++ b/core/src/main/java/com/google/bitcoin/params/MainNetParams.java @@ -74,6 +74,7 @@ public class MainNetParams extends NetworkParameters { return instance; } + @Override public String getPaymentProtocolId() { return PAYMENT_PROTOCOL_ID_MAINNET; } diff --git a/core/src/main/java/com/google/bitcoin/params/RegTestParams.java b/core/src/main/java/com/google/bitcoin/params/RegTestParams.java index aecf9291..9de6a7ba 100644 --- a/core/src/main/java/com/google/bitcoin/params/RegTestParams.java +++ b/core/src/main/java/com/google/bitcoin/params/RegTestParams.java @@ -65,6 +65,7 @@ public class RegTestParams extends TestNet2Params { return instance; } + @Override public String getPaymentProtocolId() { return null; } diff --git a/core/src/main/java/com/google/bitcoin/params/TestNet2Params.java b/core/src/main/java/com/google/bitcoin/params/TestNet2Params.java index 184fb591..b5b3a7be 100644 --- a/core/src/main/java/com/google/bitcoin/params/TestNet2Params.java +++ b/core/src/main/java/com/google/bitcoin/params/TestNet2Params.java @@ -56,6 +56,7 @@ public class TestNet2Params extends NetworkParameters { return instance; } + @Override public String getPaymentProtocolId() { return null; } diff --git a/core/src/main/java/com/google/bitcoin/params/TestNet3Params.java b/core/src/main/java/com/google/bitcoin/params/TestNet3Params.java index 5e2acdc6..923c9a16 100644 --- a/core/src/main/java/com/google/bitcoin/params/TestNet3Params.java +++ b/core/src/main/java/com/google/bitcoin/params/TestNet3Params.java @@ -62,6 +62,7 @@ public class TestNet3Params extends NetworkParameters { return instance; } + @Override public String getPaymentProtocolId() { return PAYMENT_PROTOCOL_ID_TESTNET; } diff --git a/core/src/main/java/com/google/bitcoin/params/UnitTestParams.java b/core/src/main/java/com/google/bitcoin/params/UnitTestParams.java index 663eb4fb..dd1d5ee8 100644 --- a/core/src/main/java/com/google/bitcoin/params/UnitTestParams.java +++ b/core/src/main/java/com/google/bitcoin/params/UnitTestParams.java @@ -54,6 +54,7 @@ public class UnitTestParams extends NetworkParameters { return instance; } + @Override public String getPaymentProtocolId() { return null; } diff --git a/core/src/main/java/com/google/bitcoin/protocols/channels/PaymentChannelCloseException.java b/core/src/main/java/com/google/bitcoin/protocols/channels/PaymentChannelCloseException.java index 6e90efcd..0044a9d8 100644 --- a/core/src/main/java/com/google/bitcoin/protocols/channels/PaymentChannelCloseException.java +++ b/core/src/main/java/com/google/bitcoin/protocols/channels/PaymentChannelCloseException.java @@ -74,6 +74,7 @@ public class PaymentChannelCloseException extends Exception { return error; } + @Override public String toString() { return "PaymentChannelCloseException for reason " + getCloseReason().toString(); } diff --git a/core/src/main/java/com/google/bitcoin/script/Script.java b/core/src/main/java/com/google/bitcoin/script/Script.java index da01ccbb..a43118b2 100644 --- a/core/src/main/java/com/google/bitcoin/script/Script.java +++ b/core/src/main/java/com/google/bitcoin/script/Script.java @@ -104,6 +104,7 @@ public class Script { /** * Returns the program opcodes as a string, for example "[1234] DUP HASH160" */ + @Override public String toString() { StringBuilder buf = new StringBuilder(); for (ScriptChunk chunk : chunks) diff --git a/core/src/main/java/com/google/bitcoin/store/H2FullPrunedBlockStore.java b/core/src/main/java/com/google/bitcoin/store/H2FullPrunedBlockStore.java index 26904f5c..d7d09e4a 100644 --- a/core/src/main/java/com/google/bitcoin/store/H2FullPrunedBlockStore.java +++ b/core/src/main/java/com/google/bitcoin/store/H2FullPrunedBlockStore.java @@ -157,6 +157,7 @@ public class H2FullPrunedBlockStore implements FullPrunedBlockStore { } } + @Override public synchronized void close() { for (Connection conn : allConnections) { try { @@ -377,6 +378,7 @@ public class H2FullPrunedBlockStore implements FullPrunedBlockStore { } } + @Override public void put(StoredBlock storedBlock) throws BlockStoreException { maybeConnect(); try { @@ -386,6 +388,7 @@ public class H2FullPrunedBlockStore implements FullPrunedBlockStore { } } + @Override public void put(StoredBlock storedBlock, StoredUndoableBlock undoableBlock) throws BlockStoreException { maybeConnect(); // We skip the first 4 bytes because (on prodnet) the minimum target has 4 0-bytes @@ -506,16 +509,19 @@ public class H2FullPrunedBlockStore implements FullPrunedBlockStore { } } + @Override @Nullable public StoredBlock get(Sha256Hash hash) throws BlockStoreException { return get(hash, false); } + @Override @Nullable public StoredBlock getOnceUndoableStoredBlock(Sha256Hash hash) throws BlockStoreException { return get(hash, true); } + @Override @Nullable public StoredUndoableBlock getUndoBlock(Sha256Hash hash) throws BlockStoreException { maybeConnect(); @@ -576,10 +582,12 @@ public class H2FullPrunedBlockStore implements FullPrunedBlockStore { } } + @Override public StoredBlock getChainHead() throws BlockStoreException { return chainHeadBlock; } + @Override public void setChainHead(StoredBlock chainHead) throws BlockStoreException { Sha256Hash hash = chainHead.getHeader().getHash(); this.chainHeadHash = hash; @@ -597,10 +605,12 @@ public class H2FullPrunedBlockStore implements FullPrunedBlockStore { } } + @Override public StoredBlock getVerifiedChainHead() throws BlockStoreException { return verifiedChainHeadBlock; } + @Override public void setVerifiedChainHead(StoredBlock chainHead) throws BlockStoreException { Sha256Hash hash = chainHead.getHeader().getHash(); this.verifiedChainHeadHash = hash; @@ -633,6 +643,7 @@ public class H2FullPrunedBlockStore implements FullPrunedBlockStore { } } + @Override @Nullable public StoredTransactionOutput getTransactionOutput(Sha256Hash hash, long index) throws BlockStoreException { maybeConnect(); @@ -663,6 +674,7 @@ public class H2FullPrunedBlockStore implements FullPrunedBlockStore { } } + @Override public void addUnspentTransactionOutput(StoredTransactionOutput out) throws BlockStoreException { maybeConnect(); PreparedStatement s = null; @@ -688,6 +700,7 @@ public class H2FullPrunedBlockStore implements FullPrunedBlockStore { } } + @Override public void removeUnspentTransactionOutput(StoredTransactionOutput out) throws BlockStoreException { maybeConnect(); try { @@ -706,6 +719,7 @@ public class H2FullPrunedBlockStore implements FullPrunedBlockStore { } } + @Override public void beginDatabaseBatchWrite() throws BlockStoreException { maybeConnect(); try { @@ -715,6 +729,7 @@ public class H2FullPrunedBlockStore implements FullPrunedBlockStore { } } + @Override public void commitDatabaseBatchWrite() throws BlockStoreException { maybeConnect(); try { @@ -725,6 +740,7 @@ public class H2FullPrunedBlockStore implements FullPrunedBlockStore { } } + @Override public void abortDatabaseBatchWrite() throws BlockStoreException { maybeConnect(); try { @@ -735,6 +751,7 @@ public class H2FullPrunedBlockStore implements FullPrunedBlockStore { } } + @Override public boolean hasUnspentOutputs(Sha256Hash hash, int numOutputs) throws BlockStoreException { maybeConnect(); PreparedStatement s = null; diff --git a/core/src/main/java/com/google/bitcoin/store/MemoryBlockStore.java b/core/src/main/java/com/google/bitcoin/store/MemoryBlockStore.java index 06539a41..54eda06b 100644 --- a/core/src/main/java/com/google/bitcoin/store/MemoryBlockStore.java +++ b/core/src/main/java/com/google/bitcoin/store/MemoryBlockStore.java @@ -47,27 +47,32 @@ public class MemoryBlockStore implements BlockStore { } } + @Override public synchronized void put(StoredBlock block) throws BlockStoreException { if (blockMap == null) throw new BlockStoreException("MemoryBlockStore is closed"); Sha256Hash hash = block.getHeader().getHash(); blockMap.put(hash, block); } + @Override public synchronized StoredBlock get(Sha256Hash hash) throws BlockStoreException { if (blockMap == null) throw new BlockStoreException("MemoryBlockStore is closed"); return blockMap.get(hash); } + @Override public StoredBlock getChainHead() throws BlockStoreException { if (blockMap == null) throw new BlockStoreException("MemoryBlockStore is closed"); return chainHead; } + @Override public void setChainHead(StoredBlock chainHead) throws BlockStoreException { if (blockMap == null) throw new BlockStoreException("MemoryBlockStore is closed"); this.chainHead = chainHead; } + @Override public void close() { blockMap = null; } diff --git a/core/src/main/java/com/google/bitcoin/store/MemoryFullPrunedBlockStore.java b/core/src/main/java/com/google/bitcoin/store/MemoryFullPrunedBlockStore.java index f1b8f9dd..ecc0a330 100644 --- a/core/src/main/java/com/google/bitcoin/store/MemoryFullPrunedBlockStore.java +++ b/core/src/main/java/com/google/bitcoin/store/MemoryFullPrunedBlockStore.java @@ -66,6 +66,7 @@ class StoredTransactionOutPoint implements Serializable { return this.hash.hashCode() + (int)index; } + @Override public String toString() { return "Stored transaction out point: " + hash.toString() + ":" + index; } @@ -266,12 +267,14 @@ public class MemoryFullPrunedBlockStore implements FullPrunedBlockStore { } } + @Override public synchronized void put(StoredBlock block) throws BlockStoreException { Preconditions.checkNotNull(blockMap, "MemoryFullPrunedBlockStore is closed"); Sha256Hash hash = block.getHeader().getHash(); blockMap.put(hash, new StoredBlockAndWasUndoableFlag(block, false)); } + @Override public synchronized void put(StoredBlock storedBlock, StoredUndoableBlock undoableBlock) throws BlockStoreException { Preconditions.checkNotNull(blockMap, "MemoryFullPrunedBlockStore is closed"); Sha256Hash hash = storedBlock.getHeader().getHash(); @@ -279,6 +282,7 @@ public class MemoryFullPrunedBlockStore implements FullPrunedBlockStore { blockMap.put(hash, new StoredBlockAndWasUndoableFlag(storedBlock, true)); } + @Override @Nullable public synchronized StoredBlock get(Sha256Hash hash) throws BlockStoreException { Preconditions.checkNotNull(blockMap, "MemoryFullPrunedBlockStore is closed"); @@ -286,6 +290,7 @@ public class MemoryFullPrunedBlockStore implements FullPrunedBlockStore { return storedBlock == null ? null : storedBlock.block; } + @Override @Nullable public synchronized StoredBlock getOnceUndoableStoredBlock(Sha256Hash hash) throws BlockStoreException { Preconditions.checkNotNull(blockMap, "MemoryFullPrunedBlockStore is closed"); @@ -293,27 +298,32 @@ public class MemoryFullPrunedBlockStore implements FullPrunedBlockStore { return (storedBlock != null && storedBlock.wasUndoable) ? storedBlock.block : null; } + @Override @Nullable public synchronized StoredUndoableBlock getUndoBlock(Sha256Hash hash) throws BlockStoreException { Preconditions.checkNotNull(fullBlockMap, "MemoryFullPrunedBlockStore is closed"); return fullBlockMap.get(hash); } + @Override public synchronized StoredBlock getChainHead() throws BlockStoreException { Preconditions.checkNotNull(blockMap, "MemoryFullPrunedBlockStore is closed"); return chainHead; } + @Override public synchronized void setChainHead(StoredBlock chainHead) throws BlockStoreException { Preconditions.checkNotNull(blockMap, "MemoryFullPrunedBlockStore is closed"); this.chainHead = chainHead; } + @Override public synchronized StoredBlock getVerifiedChainHead() throws BlockStoreException { Preconditions.checkNotNull(blockMap, "MemoryFullPrunedBlockStore is closed"); return verifiedChainHead; } + @Override public synchronized void setVerifiedChainHead(StoredBlock chainHead) throws BlockStoreException { Preconditions.checkNotNull(blockMap, "MemoryFullPrunedBlockStore is closed"); this.verifiedChainHead = chainHead; @@ -324,47 +334,55 @@ public class MemoryFullPrunedBlockStore implements FullPrunedBlockStore { fullBlockMap.removeByMultiKey(chainHead.getHeight() - fullStoreDepth); } + @Override public void close() { blockMap = null; fullBlockMap = null; transactionOutputMap = null; } + @Override @Nullable public synchronized StoredTransactionOutput getTransactionOutput(Sha256Hash hash, long index) throws BlockStoreException { Preconditions.checkNotNull(transactionOutputMap, "MemoryFullPrunedBlockStore is closed"); return transactionOutputMap.get(new StoredTransactionOutPoint(hash, index)); } + @Override public synchronized void addUnspentTransactionOutput(StoredTransactionOutput out) throws BlockStoreException { Preconditions.checkNotNull(transactionOutputMap, "MemoryFullPrunedBlockStore is closed"); transactionOutputMap.put(new StoredTransactionOutPoint(out), out); } + @Override public synchronized void removeUnspentTransactionOutput(StoredTransactionOutput out) throws BlockStoreException { Preconditions.checkNotNull(transactionOutputMap, "MemoryFullPrunedBlockStore is closed"); if (transactionOutputMap.remove(new StoredTransactionOutPoint(out)) == null) throw new BlockStoreException("Tried to remove a StoredTransactionOutput from MemoryFullPrunedBlockStore that it didn't have!"); } + @Override public synchronized void beginDatabaseBatchWrite() throws BlockStoreException { blockMap.beginDatabaseBatchWrite(); fullBlockMap.BeginTransaction(); transactionOutputMap.beginDatabaseBatchWrite(); } + @Override public synchronized void commitDatabaseBatchWrite() throws BlockStoreException { blockMap.commitDatabaseBatchWrite(); fullBlockMap.CommitTransaction(); transactionOutputMap.commitDatabaseBatchWrite(); } + @Override public synchronized void abortDatabaseBatchWrite() throws BlockStoreException { blockMap.abortDatabaseBatchWrite(); fullBlockMap.AbortTransaction(); transactionOutputMap.abortDatabaseBatchWrite(); } + @Override public synchronized boolean hasUnspentOutputs(Sha256Hash hash, int numOutputs) throws BlockStoreException { for (int i = 0; i < numOutputs; i++) if (getTransactionOutput(hash, i) != null) diff --git a/core/src/main/java/com/google/bitcoin/store/PostgresFullPrunedBlockStore.java b/core/src/main/java/com/google/bitcoin/store/PostgresFullPrunedBlockStore.java index 3009345a..158e3fed 100644 --- a/core/src/main/java/com/google/bitcoin/store/PostgresFullPrunedBlockStore.java +++ b/core/src/main/java/com/google/bitcoin/store/PostgresFullPrunedBlockStore.java @@ -215,6 +215,7 @@ public class PostgresFullPrunedBlockStore implements FullPrunedBlockStore { } } + @Override public synchronized void close() { for (Connection conn : allConnections) { try { @@ -445,6 +446,7 @@ public class PostgresFullPrunedBlockStore implements FullPrunedBlockStore { } } + @Override public void put(StoredBlock storedBlock) throws BlockStoreException { maybeConnect(); try { @@ -454,6 +456,7 @@ public class PostgresFullPrunedBlockStore implements FullPrunedBlockStore { } } + @Override public void put(StoredBlock storedBlock, StoredUndoableBlock undoableBlock) throws BlockStoreException { maybeConnect(); // We skip the first 4 bytes because (on prodnet) the minimum target has 4 0-bytes @@ -598,14 +601,17 @@ public class PostgresFullPrunedBlockStore implements FullPrunedBlockStore { } } + @Override public StoredBlock get(Sha256Hash hash) throws BlockStoreException { return get(hash, false); } + @Override public StoredBlock getOnceUndoableStoredBlock(Sha256Hash hash) throws BlockStoreException { return get(hash, true); } + @Override public StoredUndoableBlock getUndoBlock(Sha256Hash hash) throws BlockStoreException { maybeConnect(); PreparedStatement s = null; @@ -666,10 +672,12 @@ public class PostgresFullPrunedBlockStore implements FullPrunedBlockStore { } } + @Override public StoredBlock getChainHead() throws BlockStoreException { return chainHeadBlock; } + @Override public void setChainHead(StoredBlock chainHead) throws BlockStoreException { Sha256Hash hash = chainHead.getHeader().getHash(); this.chainHeadHash = hash; @@ -687,10 +695,12 @@ public class PostgresFullPrunedBlockStore implements FullPrunedBlockStore { } } + @Override public StoredBlock getVerifiedChainHead() throws BlockStoreException { return verifiedChainHeadBlock; } + @Override public void setVerifiedChainHead(StoredBlock chainHead) throws BlockStoreException { Sha256Hash hash = chainHead.getHeader().getHash(); this.verifiedChainHeadHash = hash; @@ -728,6 +738,7 @@ public class PostgresFullPrunedBlockStore implements FullPrunedBlockStore { } } + @Override public StoredTransactionOutput getTransactionOutput(Sha256Hash hash, long index) throws BlockStoreException { maybeConnect(); PreparedStatement s = null; @@ -758,6 +769,7 @@ public class PostgresFullPrunedBlockStore implements FullPrunedBlockStore { } } + @Override public void addUnspentTransactionOutput(StoredTransactionOutput out) throws BlockStoreException { maybeConnect(); PreparedStatement s = null; @@ -825,6 +837,7 @@ public class PostgresFullPrunedBlockStore implements FullPrunedBlockStore { } } + @Override public void removeUnspentTransactionOutput(StoredTransactionOutput out) throws BlockStoreException { maybeConnect(); // TODO: This should only need one query (maybe a stored procedure) @@ -843,6 +856,7 @@ public class PostgresFullPrunedBlockStore implements FullPrunedBlockStore { } } + @Override public void beginDatabaseBatchWrite() throws BlockStoreException { maybeConnect(); @@ -857,6 +871,7 @@ public class PostgresFullPrunedBlockStore implements FullPrunedBlockStore { } } + @Override public void commitDatabaseBatchWrite() throws BlockStoreException { maybeConnect(); @@ -872,6 +887,7 @@ public class PostgresFullPrunedBlockStore implements FullPrunedBlockStore { } } + @Override public void abortDatabaseBatchWrite() throws BlockStoreException { maybeConnect(); @@ -890,6 +906,7 @@ public class PostgresFullPrunedBlockStore implements FullPrunedBlockStore { } } + @Override public boolean hasUnspentOutputs(Sha256Hash hash, int numOutputs) throws BlockStoreException { maybeConnect(); PreparedStatement s = null; diff --git a/core/src/main/java/com/google/bitcoin/store/SPVBlockStore.java b/core/src/main/java/com/google/bitcoin/store/SPVBlockStore.java index ba28626f..0070e3d0 100644 --- a/core/src/main/java/com/google/bitcoin/store/SPVBlockStore.java +++ b/core/src/main/java/com/google/bitcoin/store/SPVBlockStore.java @@ -161,6 +161,7 @@ public class SPVBlockStore implements BlockStore { return RECORD_SIZE * numHeaders + FILE_PROLOGUE_BYTES /* extra kilobyte for stuff */; } + @Override public void put(StoredBlock block) throws BlockStoreException { final MappedByteBuffer buffer = this.buffer; if (buffer == null) throw new BlockStoreException("Store closed"); @@ -182,6 +183,7 @@ public class SPVBlockStore implements BlockStore { } finally { lock.unlock(); } } + @Override @Nullable public StoredBlock get(Sha256Hash hash) throws BlockStoreException { final MappedByteBuffer buffer = this.buffer; @@ -228,6 +230,7 @@ public class SPVBlockStore implements BlockStore { protected StoredBlock lastChainHead = null; + @Override public StoredBlock getChainHead() throws BlockStoreException { final MappedByteBuffer buffer = this.buffer; if (buffer == null) throw new BlockStoreException("Store closed"); @@ -248,6 +251,7 @@ public class SPVBlockStore implements BlockStore { } finally { lock.unlock(); } } + @Override public void setChainHead(StoredBlock chainHead) throws BlockStoreException { final MappedByteBuffer buffer = this.buffer; if (buffer == null) throw new BlockStoreException("Store closed"); @@ -261,6 +265,7 @@ public class SPVBlockStore implements BlockStore { } finally { lock.unlock(); } } + @Override public void close() throws BlockStoreException { try { buffer.force(); diff --git a/core/src/main/java/com/google/bitcoin/testing/TestWithPeerGroup.java b/core/src/main/java/com/google/bitcoin/testing/TestWithPeerGroup.java index c652f411..9c724cfb 100644 --- a/core/src/main/java/com/google/bitcoin/testing/TestWithPeerGroup.java +++ b/core/src/main/java/com/google/bitcoin/testing/TestWithPeerGroup.java @@ -51,6 +51,7 @@ public class TestWithPeerGroup extends TestWithNetworkConnections { setUp(new MemoryBlockStore(params)); } + @Override public void setUp(BlockStore blockStore) throws Exception { super.setUp(blockStore); diff --git a/core/src/main/java/com/google/bitcoin/wallet/BasicKeyChain.java b/core/src/main/java/com/google/bitcoin/wallet/BasicKeyChain.java index b413ecee..ec7d9d16 100644 --- a/core/src/main/java/com/google/bitcoin/wallet/BasicKeyChain.java +++ b/core/src/main/java/com/google/bitcoin/wallet/BasicKeyChain.java @@ -62,6 +62,7 @@ public class BasicKeyChain implements EncryptableKeyChain { } /** Returns the {@link KeyCrypter} in use or null if the key chain is not encrypted. */ + @Override @Nullable public KeyCrypter getKeyCrypter() { lock.lock(); diff --git a/core/src/main/java/com/google/bitcoin/wallet/DefaultCoinSelector.java b/core/src/main/java/com/google/bitcoin/wallet/DefaultCoinSelector.java index 25cfa656..f8d078e3 100644 --- a/core/src/main/java/com/google/bitcoin/wallet/DefaultCoinSelector.java +++ b/core/src/main/java/com/google/bitcoin/wallet/DefaultCoinSelector.java @@ -17,6 +17,7 @@ import java.util.*; * "spending" more priority than would be required to get the transaction we are creating confirmed. */ public class DefaultCoinSelector implements CoinSelector { + @Override public CoinSelection select(Coin biTarget, LinkedList candidates) { long target = biTarget.longValue(); HashSet selected = new HashSet(); @@ -45,6 +46,7 @@ public class DefaultCoinSelector implements CoinSelector { @VisibleForTesting static void sortOutputs(ArrayList outputs) { Collections.sort(outputs, new Comparator() { + @Override public int compare(TransactionOutput a, TransactionOutput b) { int depth1 = 0; int depth2 = 0; diff --git a/core/src/test/java/com/google/bitcoin/core/PeerGroupTest.java b/core/src/test/java/com/google/bitcoin/core/PeerGroupTest.java index b0480ad3..6e445461 100644 --- a/core/src/test/java/com/google/bitcoin/core/PeerGroupTest.java +++ b/core/src/test/java/com/google/bitcoin/core/PeerGroupTest.java @@ -140,6 +140,7 @@ public class PeerGroupTest extends TestWithPeerGroup { final CountDownLatch latch = new CountDownLatch(1); final AtomicBoolean result = new AtomicBoolean(); peerGroup.addPeerDiscovery(new PeerDiscovery() { + @Override public InetSocketAddress[] getPeers(long unused, TimeUnit unused2) throws PeerDiscoveryException { if (!result.getAndSet(true)) { // Pretend we are not connected to the internet. @@ -150,6 +151,7 @@ public class PeerGroupTest extends TestWithPeerGroup { return new InetSocketAddress[]{new InetSocketAddress("localhost", 1)}; } } + @Override public void shutdown() { } }); @@ -331,6 +333,7 @@ public class PeerGroupTest extends TestWithPeerGroup { assertTrue(tx.getConfidence().wasBroadcastBy(peerOf(p2).getAddress())); tx.getConfidence().addEventListener(new TransactionConfidence.Listener() { + @Override public void onConfidenceChanged(Transaction tx, TransactionConfidence.Listener.ChangeReason reason) { event[1] = tx; } @@ -470,10 +473,12 @@ public class PeerGroupTest extends TestWithPeerGroup { ); peerGroup.addEventListener(listener); peerGroup.addPeerDiscovery(new PeerDiscovery() { + @Override public InetSocketAddress[] getPeers(long unused, TimeUnit unused2) throws PeerDiscoveryException { return addresses.toArray(new InetSocketAddress[addresses.size()]); } + @Override public void shutdown() { } }); diff --git a/core/src/test/java/com/google/bitcoin/core/PeerTest.java b/core/src/test/java/com/google/bitcoin/core/PeerTest.java index 7346ce41..9b835314 100644 --- a/core/src/test/java/com/google/bitcoin/core/PeerTest.java +++ b/core/src/test/java/com/google/bitcoin/core/PeerTest.java @@ -84,6 +84,7 @@ public class PeerTest extends TestWithNetworkConnections { peer.addWallet(wallet); } + @Override @After public void tearDown() throws Exception { super.tearDown(); diff --git a/core/src/test/java/com/google/bitcoin/core/WalletTest.java b/core/src/test/java/com/google/bitcoin/core/WalletTest.java index 6bbdb01b..a681b4b0 100644 --- a/core/src/test/java/com/google/bitcoin/core/WalletTest.java +++ b/core/src/test/java/com/google/bitcoin/core/WalletTest.java @@ -836,6 +836,7 @@ public class WalletTest extends TestWithWallet { flags[0] = flags[1] = false; final TransactionConfidence.Listener.ChangeReason[] reasons = new TransactionConfidence.Listener.ChangeReason[1]; notifiedTx[0].getConfidence().addEventListener(new TransactionConfidence.Listener() { + @Override public void onConfidenceChanged(Transaction tx, TransactionConfidence.Listener.ChangeReason reason) { flags[1] = true; reasons[0] = reason; @@ -919,6 +920,7 @@ public class WalletTest extends TestWithWallet { final Transaction[] called = new Transaction[2]; wallet.addEventListener(new AbstractWalletEventListener() { + @Override public void onCoinsReceived(Wallet wallet, Transaction tx, Coin prevBalance, Coin newBalance) { called[0] = tx; } @@ -1211,10 +1213,12 @@ public class WalletTest extends TestWithWallet { Sha256Hash hash1 = Sha256Hash.hashFileContents(f); wallet.autosaveToFile(f, 1, TimeUnit.SECONDS, new WalletFiles.Listener() { + @Override public void onBeforeAutoSave(File tempFile) { results[0] = tempFile; } + @Override public void onAfterAutoSave(File newlySavedFile) { results[1] = newlySavedFile; latch.countDown(); diff --git a/core/src/test/java/com/google/bitcoin/protocols/channels/ChannelConnectionTest.java b/core/src/test/java/com/google/bitcoin/protocols/channels/ChannelConnectionTest.java index 63b40397..fab61b99 100644 --- a/core/src/test/java/com/google/bitcoin/protocols/channels/ChannelConnectionTest.java +++ b/core/src/test/java/com/google/bitcoin/protocols/channels/ChannelConnectionTest.java @@ -61,6 +61,7 @@ public class ChannelConnectionTest extends TestWithWallet { } }; + @Override @Before public void setUp() throws Exception { super.setUp(); diff --git a/core/src/test/java/com/google/bitcoin/protocols/channels/PaymentChannelStateTest.java b/core/src/test/java/com/google/bitcoin/protocols/channels/PaymentChannelStateTest.java index 9adc85e6..c424d6a8 100644 --- a/core/src/test/java/com/google/bitcoin/protocols/channels/PaymentChannelStateTest.java +++ b/core/src/test/java/com/google/bitcoin/protocols/channels/PaymentChannelStateTest.java @@ -58,6 +58,7 @@ public class PaymentChannelStateTest extends TestWithWallet { } } + @Override @Before public void setUp() throws Exception { super.setUp(); diff --git a/core/src/test/java/com/google/bitcoin/protocols/payments/PaymentSessionTest.java b/core/src/test/java/com/google/bitcoin/protocols/payments/PaymentSessionTest.java index 513cf23a..22f58312 100644 --- a/core/src/test/java/com/google/bitcoin/protocols/payments/PaymentSessionTest.java +++ b/core/src/test/java/com/google/bitcoin/protocols/payments/PaymentSessionTest.java @@ -197,6 +197,7 @@ public class PaymentSessionTest { return paymentLog; } + @Override protected ListenableFuture sendPayment(final URL url, final Protos.Payment payment) { paymentLog.add(new PaymentLogItem(url, payment)); return null; diff --git a/examples/src/main/java/com/google/bitcoin/examples/PeerMonitor.java b/examples/src/main/java/com/google/bitcoin/examples/PeerMonitor.java index 987c3085..cb6fe884 100644 --- a/examples/src/main/java/com/google/bitcoin/examples/PeerMonitor.java +++ b/examples/src/main/java/com/google/bitcoin/examples/PeerMonitor.java @@ -101,6 +101,7 @@ public class PeerMonitor { private void refreshUI() { // Tell the Swing UI thread to redraw the peers table. SwingUtilities.invokeLater(new Runnable() { + @Override public void run() { peerTableModel.updateFromPeerGroup(); } @@ -125,6 +126,7 @@ public class PeerMonitor { JLabel instructions = new JLabel("Number of peers to connect to: "); final SpinnerNumberModel spinnerModel = new SpinnerNumberModel(4, 0, 100, 1); spinnerModel.addChangeListener(new ChangeListener() { + @Override public void stateChanged(ChangeEvent changeEvent) { peerGroup.setMaxConnections(spinnerModel.getNumber().intValue()); } @@ -151,6 +153,7 @@ public class PeerMonitor { // Refresh the UI every half second to get the latest ping times. The event handler runs in the UI thread. new Timer(1000, new ActionListener() { + @Override public void actionPerformed(ActionEvent actionEvent) { peerTableModel.updateFromPeerGroup(); } @@ -174,6 +177,7 @@ public class PeerMonitor { fireTableDataChanged(); } + @Override public int getRowCount() { return connectedPeers.size() + pendingPeers.size(); } @@ -191,10 +195,12 @@ public class PeerMonitor { } } + @Override public int getColumnCount() { return 6; } + @Override public Class getColumnClass(int column) { switch (column) { case PROTOCOL_VERSION: @@ -208,6 +214,7 @@ public class PeerMonitor { } } + @Override public Object getValueAt(int row, int col) { if (row >= connectedPeers.size()) { // Peer that isn't connected yet. @@ -266,6 +273,7 @@ public class PeerMonitor { this.bold = new Font("Sans Serif", Font.BOLD, 12); } + @Override public Component getTableCellRendererComponent(JTable table, Object contents, boolean selected, boolean hasFocus, int row, int column) { row = table.convertRowIndexToModel(row); diff --git a/examples/src/main/java/com/google/bitcoin/examples/PrintPeers.java b/examples/src/main/java/com/google/bitcoin/examples/PrintPeers.java index d4600f88..678a4a71 100644 --- a/examples/src/main/java/com/google/bitcoin/examples/PrintPeers.java +++ b/examples/src/main/java/com/google/bitcoin/examples/PrintPeers.java @@ -85,6 +85,7 @@ public class PrintPeers { final SettableFuture future = SettableFuture.create(); // Once the connection has completed version handshaking ... peer.addEventListener(new AbstractPeerEventListener() { + @Override public void onPeerConnected(Peer p, int peerCount) { // Check the chain height it claims to have. VersionMessage ver = peer.getPeerVersionMessage(); @@ -106,6 +107,7 @@ public class PrintPeers { peer.close(); } + @Override public void onPeerDisconnected(Peer p, int peerCount) { if (!future.isDone()) System.out.println("Failed to talk to " + addr);