mirror of
https://github.com/Qortal/altcoinj.git
synced 2025-02-14 11:15:51 +00:00
Address comments from Miron and Andreas:
- Make GetBlocksMessage/GetHeadersMessage implement toString/hashCode - Minor comment/naming fixes - > not >= for comparing fast catchup time to block header - Return current time in Wallet.getEarliestKeyCreationTime() rather than throw an exception when there are no keys in the wallet.
This commit is contained in:
parent
dd2be6eeb4
commit
623389a156
@ -23,9 +23,9 @@ import java.util.List;
|
|||||||
|
|
||||||
public class GetBlocksMessage extends Message {
|
public class GetBlocksMessage extends Message {
|
||||||
private static final long serialVersionUID = 3479412877853645644L;
|
private static final long serialVersionUID = 3479412877853645644L;
|
||||||
private long version;
|
protected long version;
|
||||||
private List<Sha256Hash> locator;
|
protected List<Sha256Hash> locator;
|
||||||
private Sha256Hash stopHash;
|
protected Sha256Hash stopHash;
|
||||||
|
|
||||||
public GetBlocksMessage(NetworkParameters params, List<Sha256Hash> locator, Sha256Hash stopHash) {
|
public GetBlocksMessage(NetworkParameters params, List<Sha256Hash> locator, Sha256Hash stopHash) {
|
||||||
super(params);
|
super(params);
|
||||||
@ -83,4 +83,21 @@ public class GetBlocksMessage extends Message {
|
|||||||
// Next, a block ID to stop at.
|
// Next, a block ID to stop at.
|
||||||
stream.write(stopHash.getBytes());
|
stream.write(stopHash.getBytes());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (!(o instanceof GetBlocksMessage)) return false;
|
||||||
|
GetBlocksMessage other = (GetBlocksMessage) o;
|
||||||
|
return (other.version == version &&
|
||||||
|
locator.size() == other.locator.size() && locator.containsAll(other.locator) &&
|
||||||
|
stopHash.equals(other.stopHash));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
int hashCode = (int) version ^ "getblocks".hashCode();
|
||||||
|
for (int i = 0; i < locator.size(); i++) hashCode ^= locator.get(i).hashCode();
|
||||||
|
hashCode ^= stopHash.hashCode();
|
||||||
|
return hashCode;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -28,4 +28,36 @@ public class GetHeadersMessage extends GetBlocksMessage {
|
|||||||
public GetHeadersMessage(NetworkParameters params, List<Sha256Hash> locator, Sha256Hash stopHash) {
|
public GetHeadersMessage(NetworkParameters params, List<Sha256Hash> locator, Sha256Hash stopHash) {
|
||||||
super(params, locator, stopHash);
|
super(params, locator, stopHash);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
StringBuffer b = new StringBuffer();
|
||||||
|
b.append("getheaders: ");
|
||||||
|
for (Sha256Hash hash : locator) {
|
||||||
|
b.append(hash.toString());
|
||||||
|
b.append(" ");
|
||||||
|
}
|
||||||
|
return b.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Compares two getheaders messages. Note that even though they are structurally identical a GetHeadersMessage
|
||||||
|
* will not compare equal to a GetBlocksMessage containing the same data.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (!(o instanceof GetHeadersMessage)) return false;
|
||||||
|
GetHeadersMessage other = (GetHeadersMessage) o;
|
||||||
|
return (other.version == version &&
|
||||||
|
locator.size() == other.locator.size() && locator.containsAll(other.locator) &&
|
||||||
|
stopHash.equals(other.stopHash));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
int hashCode = (int) version ^ "getheaders".hashCode();
|
||||||
|
for (int i = 0; i < locator.size(); i++) hashCode ^= locator.get(i).hashCode();
|
||||||
|
hashCode ^= stopHash.hashCode();
|
||||||
|
return hashCode;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -356,7 +356,7 @@ public class Peer {
|
|||||||
fastCatchupTimeSecs = secondsSinceEpoch;
|
fastCatchupTimeSecs = secondsSinceEpoch;
|
||||||
// If the given time is before the current chains head block time, then this has no effect (we already
|
// If the given time is before the current chains head block time, then this has no effect (we already
|
||||||
// downloaded everything we need).
|
// downloaded everything we need).
|
||||||
if (fastCatchupTimeSecs >= blockChain.getChainHead().getHeader().getTimeSeconds()) {
|
if (fastCatchupTimeSecs > blockChain.getChainHead().getHeader().getTimeSeconds()) {
|
||||||
downloadBlockBodies = false;
|
downloadBlockBodies = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -483,7 +483,7 @@ public class Peer {
|
|||||||
}
|
}
|
||||||
blockLocator.add(0, topBlock.getHash());
|
blockLocator.add(0, topBlock.getHash());
|
||||||
}
|
}
|
||||||
// The stopHash field is set to zero already by the constructor.
|
// The toHash field is set to zero already by the constructor.
|
||||||
|
|
||||||
if (downloadBlockBodies) {
|
if (downloadBlockBodies) {
|
||||||
GetBlocksMessage message = new GetBlocksMessage(params, blockLocator, toHash);
|
GetBlocksMessage message = new GetBlocksMessage(params, blockLocator, toHash);
|
||||||
|
@ -453,7 +453,7 @@ public class PeerGroup {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Tells the PeerGroup to download only block headers before a certain time and bodies after that. See
|
* Tells the PeerGroup to download only block headers before a certain time and bodies after that. See
|
||||||
* {@link Peer#setFastCatchupTime(long)} for further explanation.
|
* {@link Peer#setFastCatchupTime(long)} for further explanation. Call this before starting block chain download.
|
||||||
*/
|
*/
|
||||||
public synchronized void setFastCatchupTimeSecs(long secondsSinceEpoch) {
|
public synchronized void setFastCatchupTimeSecs(long secondsSinceEpoch) {
|
||||||
fastCatchupTimeSecs = secondsSinceEpoch;
|
fastCatchupTimeSecs = secondsSinceEpoch;
|
||||||
|
@ -1030,13 +1030,13 @@ public class Wallet implements Serializable {
|
|||||||
* This method is most often used in conjunction with {@link PeerGroup#setFastCatchupTimeSecs(long)} in order to
|
* This method is most often used in conjunction with {@link PeerGroup#setFastCatchupTimeSecs(long)} in order to
|
||||||
* optimize chain download for new users of wallet apps. Backwards compatibility notice: if you get zero from this
|
* optimize chain download for new users of wallet apps. Backwards compatibility notice: if you get zero from this
|
||||||
* method, you can instead use the time of the first release of your software, as it's guaranteed no users will
|
* method, you can instead use the time of the first release of your software, as it's guaranteed no users will
|
||||||
* have wallets pre-dating this time.
|
* have wallets pre-dating this time. <p>
|
||||||
*
|
*
|
||||||
* @throws IllegalStateException if there are no keys in the wallet.
|
* If there are no keys in the wallet, the current time is returned.
|
||||||
*/
|
*/
|
||||||
public long getEarliestKeyCreationTime() {
|
public long getEarliestKeyCreationTime() {
|
||||||
if (keychain.size() == 0) {
|
if (keychain.size() == 0) {
|
||||||
throw new IllegalStateException("No keys in wallet");
|
return Utils.now().getTime() / 1000;
|
||||||
}
|
}
|
||||||
long earliestTime = Long.MAX_VALUE;
|
long earliestTime = Long.MAX_VALUE;
|
||||||
for (ECKey key : keychain) {
|
for (ECKey key : keychain) {
|
||||||
|
@ -327,16 +327,14 @@ public class WalletTest {
|
|||||||
@Test
|
@Test
|
||||||
public void keyCreationTime() throws Exception {
|
public void keyCreationTime() throws Exception {
|
||||||
wallet = new Wallet(params);
|
wallet = new Wallet(params);
|
||||||
// No keys throws an exception.
|
|
||||||
try {
|
|
||||||
wallet.getEarliestKeyCreationTime();
|
|
||||||
fail();
|
|
||||||
} catch (IllegalStateException e) {}
|
|
||||||
long now = Utils.rollMockClock(0).getTime() / 1000; // Fix the mock clock.
|
long now = Utils.rollMockClock(0).getTime() / 1000; // Fix the mock clock.
|
||||||
wallet.addKey(new ECKey());
|
// No keys returns current time.
|
||||||
assertEquals(now, wallet.getEarliestKeyCreationTime());
|
assertEquals(now, wallet.getEarliestKeyCreationTime());
|
||||||
Utils.rollMockClock(60);
|
Utils.rollMockClock(60);
|
||||||
wallet.addKey(new ECKey());
|
wallet.addKey(new ECKey());
|
||||||
assertEquals(now, wallet.getEarliestKeyCreationTime());
|
assertEquals(now + 60, wallet.getEarliestKeyCreationTime());
|
||||||
|
Utils.rollMockClock(60);
|
||||||
|
wallet.addKey(new ECKey());
|
||||||
|
assertEquals(now + 60, wallet.getEarliestKeyCreationTime());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user