mirror of
https://github.com/Qortal/altcoinj.git
synced 2025-02-07 14:54:15 +00:00
Provide network parameter IDs as constant strings. Make the "id" field of NetworkParameters private and make the getter upgrade the object using port as a heuristic if the field isn't present. Add a unit test to ensure we can convert old wallets to protobuf form. Resolves issue 134.
This commit is contained in:
parent
2b3e77bea9
commit
db60bfc731
@ -41,6 +41,16 @@ public class NetworkParameters implements Serializable {
|
|||||||
*/
|
*/
|
||||||
public static final byte[] SATOSHI_KEY = Hex.decode("04fc9702847840aaf195de8442ebecedf5b095cdbb9bc716bda9110971b28a49e0ead8564ff0db22209e0374782c093bb899692d524e9d6a6956e7c5ecbcd68284");
|
public static final byte[] SATOSHI_KEY = Hex.decode("04fc9702847840aaf195de8442ebecedf5b095cdbb9bc716bda9110971b28a49e0ead8564ff0db22209e0374782c093bb899692d524e9d6a6956e7c5ecbcd68284");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The string returned by getId() for the main, production network where people trade things.
|
||||||
|
*/
|
||||||
|
public static final String ID_PRODNET = "org.bitcoin.production";
|
||||||
|
/**
|
||||||
|
* The string returned by getId() for the testnet.
|
||||||
|
*/
|
||||||
|
public static final String ID_TESTNET = "org.bitcoin.test";
|
||||||
|
|
||||||
|
|
||||||
// TODO: Seed nodes and checkpoint values should be here as well.
|
// TODO: Seed nodes and checkpoint values should be here as well.
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -79,7 +89,11 @@ public class NetworkParameters implements Serializable {
|
|||||||
*/
|
*/
|
||||||
public byte[] alertSigningKey;
|
public byte[] alertSigningKey;
|
||||||
|
|
||||||
public String id;
|
/**
|
||||||
|
* See getId(). This may be null for old deserialized wallets. In that case we derive it heuristically
|
||||||
|
* by looking at the port number.
|
||||||
|
*/
|
||||||
|
private String id;
|
||||||
|
|
||||||
private static Block createGenesis(NetworkParameters n) {
|
private static Block createGenesis(NetworkParameters n) {
|
||||||
Block genesisBlock = new Block(n);
|
Block genesisBlock = new Block(n);
|
||||||
@ -124,7 +138,7 @@ public class NetworkParameters implements Serializable {
|
|||||||
n.genesisBlock.setTime(1296688602L);
|
n.genesisBlock.setTime(1296688602L);
|
||||||
n.genesisBlock.setDifficultyTarget(0x1d07fff8L);
|
n.genesisBlock.setDifficultyTarget(0x1d07fff8L);
|
||||||
n.genesisBlock.setNonce(384568319);
|
n.genesisBlock.setNonce(384568319);
|
||||||
n.id = "org.bitcoin.test";
|
n.id = ID_TESTNET;
|
||||||
String genesisHash = n.genesisBlock.getHashAsString();
|
String genesisHash = n.genesisBlock.getHashAsString();
|
||||||
assert genesisHash.equals("00000007199508e34a9ff81e6ec0c477a4cccff2a4767a8eee39c11db367b008") : genesisHash;
|
assert genesisHash.equals("00000007199508e34a9ff81e6ec0c477a4cccff2a4767a8eee39c11db367b008") : genesisHash;
|
||||||
return n;
|
return n;
|
||||||
@ -151,7 +165,7 @@ public class NetworkParameters implements Serializable {
|
|||||||
n.genesisBlock.setDifficultyTarget(0x1d00ffffL);
|
n.genesisBlock.setDifficultyTarget(0x1d00ffffL);
|
||||||
n.genesisBlock.setTime(1231006505L);
|
n.genesisBlock.setTime(1231006505L);
|
||||||
n.genesisBlock.setNonce(2083236893);
|
n.genesisBlock.setNonce(2083236893);
|
||||||
n.id = "org.bitcoin.production";
|
n.id = ID_PRODNET;
|
||||||
String genesisHash = n.genesisBlock.getHashAsString();
|
String genesisHash = n.genesisBlock.getHashAsString();
|
||||||
assert genesisHash.equals("000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f") : genesisHash;
|
assert genesisHash.equals("000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f") : genesisHash;
|
||||||
return n;
|
return n;
|
||||||
@ -174,6 +188,14 @@ public class NetworkParameters implements Serializable {
|
|||||||
* A java package style string acting as unique ID for these parameters
|
* A java package style string acting as unique ID for these parameters
|
||||||
*/
|
*/
|
||||||
public String getId() {
|
public String getId() {
|
||||||
|
if (id == null) {
|
||||||
|
// Migrate from old serialized wallets which lack the ID field. This code can eventually be deleted.
|
||||||
|
if (port == 8333) {
|
||||||
|
id = ID_PRODNET;
|
||||||
|
} else if (port == 18333) {
|
||||||
|
id = ID_TESTNET;
|
||||||
|
}
|
||||||
|
}
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,6 +18,7 @@ package com.google.bitcoin.core;
|
|||||||
|
|
||||||
import com.google.bitcoin.store.BlockStore;
|
import com.google.bitcoin.store.BlockStore;
|
||||||
import com.google.bitcoin.store.MemoryBlockStore;
|
import com.google.bitcoin.store.MemoryBlockStore;
|
||||||
|
import com.google.bitcoin.store.WalletProtobufSerializer;
|
||||||
import com.google.bitcoin.utils.BriefLogFormatter;
|
import com.google.bitcoin.utils.BriefLogFormatter;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
@ -586,6 +587,11 @@ public class WalletTest {
|
|||||||
assertEquals(tx.getAppearsInHashes().iterator().next(), new Sha256Hash("00000000019380f5aef28393827737f55a1cf8abb51a36d46ab6f2db0a5b9cb8"));
|
assertEquals(tx.getAppearsInHashes().iterator().next(), new Sha256Hash("00000000019380f5aef28393827737f55a1cf8abb51a36d46ab6f2db0a5b9cb8"));
|
||||||
assertEquals(TransactionConfidence.ConfidenceType.BUILDING, tx.getConfidence().getConfidenceType());
|
assertEquals(TransactionConfidence.ConfidenceType.BUILDING, tx.getConfidence().getConfidenceType());
|
||||||
assertEquals(42814, tx.getConfidence().getAppearedAtChainHeight());
|
assertEquals(42814, tx.getConfidence().getAppearedAtChainHeight());
|
||||||
|
|
||||||
|
// Now check we can serialize old wallets to protocol buffers. Covers bug 134.
|
||||||
|
bios.reset();
|
||||||
|
WalletProtobufSerializer.writeWallet(wallet, bios);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Support for offline spending is tested in PeerGroupTest
|
// Support for offline spending is tested in PeerGroupTest
|
||||||
|
Loading…
x
Reference in New Issue
Block a user