diff --git a/src/main/java/org/qora/block/Block.java b/src/main/java/org/qora/block/Block.java index db2aaf60..d19a08a2 100644 --- a/src/main/java/org/qora/block/Block.java +++ b/src/main/java/org/qora/block/Block.java @@ -784,7 +784,7 @@ public class Block { * Returns whether Block's timestamp is valid. *

* Used by BlockGenerator to check whether it's time to forge new block, - * and also used by Block.isValid for checks (if not testnet). + * and also used by Block.isValid for checks (if not a testchain). * * @return ValidationResult.OK if timestamp valid, or some other ValidationResult otherwise. * @throws DataException @@ -844,8 +844,8 @@ public class Block { if (this.blockData.getTimestamp() <= parentBlockData.getTimestamp()) return ValidationResult.TIMESTAMP_OLDER_THAN_PARENT; - // These checks are disabled for testnet - if (!BlockChain.getInstance().isTestNet()) { + // These checks are disabled for testchains + if (!BlockChain.getInstance().isTestChain()) { ValidationResult timestampResult = this.isTimestampValid(); if (timestampResult != ValidationResult.OK) diff --git a/src/main/java/org/qora/block/BlockChain.java b/src/main/java/org/qora/block/BlockChain.java index d367b290..e81a4841 100644 --- a/src/main/java/org/qora/block/BlockChain.java +++ b/src/main/java/org/qora/block/BlockChain.java @@ -48,7 +48,7 @@ public class BlockChain { // Properties - private boolean isTestNet = false; + private boolean isTestChain = false; /** Maximum coin supply. */ private BigDecimal maxBalance; @@ -204,8 +204,8 @@ public class BlockChain { // Getters / setters - public boolean isTestNet() { - return this.isTestNet; + public boolean isTestChain() { + return this.isTestChain; } public BigDecimal getUnitFee() { diff --git a/src/main/java/org/qora/block/BlockGenerator.java b/src/main/java/org/qora/block/BlockGenerator.java index 3534aa6c..4cf06371 100644 --- a/src/main/java/org/qora/block/BlockGenerator.java +++ b/src/main/java/org/qora/block/BlockGenerator.java @@ -150,7 +150,7 @@ public class BlockGenerator extends Thread { for (Block testBlock : newBlocks) { // Is new block's timestamp valid yet? - // We do a separate check as some timestamp checks are skipped for testnet + // We do a separate check as some timestamp checks are skipped for testchains if (testBlock.isTimestampValid() != ValidationResult.OK) continue; @@ -308,8 +308,8 @@ public class BlockGenerator extends Thread { } public static void generateTestingBlock(Repository repository, PrivateKeyAccount generator) throws DataException { - if (!BlockChain.getInstance().isTestNet()) { - LOGGER.warn("Attempt to generating testing block but not in testnet mode!"); + if (!BlockChain.getInstance().isTestChain()) { + LOGGER.warn("Ignoring attempt to generate testing block for non-test chain!"); return; } diff --git a/src/main/java/org/qora/block/GenesisBlock.java b/src/main/java/org/qora/block/GenesisBlock.java index cb6ddc41..a336270e 100644 --- a/src/main/java/org/qora/block/GenesisBlock.java +++ b/src/main/java/org/qora/block/GenesisBlock.java @@ -79,9 +79,9 @@ public class GenesisBlock extends Block { // Timestamp of zero means "now" but only valid for test nets! if (info.timestamp == 0) { - if (!blockchain.isTestNet()) { - LOGGER.error("Genesis timestamp of zero (i.e. now) not valid for non-testnet blockchain configs"); - throw new RuntimeException("Genesis timestamp of zero (i.e. now) not valid for non-testnet blockchain configs"); + if (!blockchain.isTestChain()) { + LOGGER.error("Genesis timestamp of zero (i.e. now) not valid for non-test blockchain configs"); + throw new RuntimeException("Genesis timestamp of zero (i.e. now) not valid for non-test blockchain configs"); } // This will only take effect if there is no current genesis block in blockchain diff --git a/src/main/java/org/qora/controller/Controller.java b/src/main/java/org/qora/controller/Controller.java index 780072f2..4b419cd0 100644 --- a/src/main/java/org/qora/controller/Controller.java +++ b/src/main/java/org/qora/controller/Controller.java @@ -152,12 +152,6 @@ public class Controller extends Thread { return String.format(repositoryUrlTemplate, Settings.getInstance().getRepositoryPath()); } - public byte[] getMessageMagic() { - return new byte[] { - 0x12, 0x34, 0x56, 0x78 - }; - } - public long getBuildTimestamp() { return this.buildTimestamp; } @@ -257,8 +251,8 @@ public class Controller extends Thread { Controller.getInstance().start(); // Arbitrary transaction data manager - LOGGER.info("Starting arbitrary-transaction data manager"); - ArbitraryDataManager.getInstance().start(); + // LOGGER.info("Starting arbitrary-transaction data manager"); + // ArbitraryDataManager.getInstance().start(); // Auto-update service LOGGER.info("Starting auto-update"); @@ -393,8 +387,8 @@ public class Controller extends Thread { AutoUpdate.getInstance().shutdown(); // Arbitrary transaction data manager - LOGGER.info("Shutting down arbitrary-transaction data manager"); - ArbitraryDataManager.getInstance().shutdown(); + // LOGGER.info("Shutting down arbitrary-transaction data manager"); + // ArbitraryDataManager.getInstance().shutdown(); LOGGER.info("Shutting down controller"); this.interrupt(); diff --git a/src/main/java/org/qora/network/Network.java b/src/main/java/org/qora/network/Network.java index 971c7e77..d3d80eda 100644 --- a/src/main/java/org/qora/network/Network.java +++ b/src/main/java/org/qora/network/Network.java @@ -66,6 +66,9 @@ public class Network extends Thread { /** Maximum time since last successful connection before a peer is potentially considered "old", in milliseconds. */ private static final long OLD_PEER_CONNECTION_PERIOD = 7 * 24 * 60 * 60 * 1000; // ms + private static final byte[] MAINNET_MESSAGE_MAGIC = new byte[] { 0x12, 0x34, 0x56, 0x78 }; + private static final byte[] TESTNET_MESSAGE_MAGIC = new byte[] { 0x78, 0x56, 0x34, 0x12 }; + private static final String[] INITIAL_PEERS = new String[] { "node1.qora.org", "node2.qora.org", @@ -164,6 +167,10 @@ public class Network extends Thread { } } + public byte[] getMessageMagic() { + return Settings.getInstance().isTestNet() ? TESTNET_MESSAGE_MAGIC : MAINNET_MESSAGE_MAGIC; + } + // Initial setup public static void installInitialPeers(Repository repository) throws DataException { diff --git a/src/main/java/org/qora/network/message/Message.java b/src/main/java/org/qora/network/message/Message.java index e6de48d0..3689bcb1 100644 --- a/src/main/java/org/qora/network/message/Message.java +++ b/src/main/java/org/qora/network/message/Message.java @@ -2,8 +2,8 @@ package org.qora.network.message; import java.util.Map; -import org.qora.controller.Controller; import org.qora.crypto.Crypto; +import org.qora.network.Network; import com.google.common.primitives.Ints; @@ -153,7 +153,7 @@ public abstract class Message { byte[] messageMagic = new byte[MAGIC_LENGTH]; in.readFully(messageMagic); - if (!Arrays.equals(messageMagic, Controller.getInstance().getMessageMagic())) + if (!Arrays.equals(messageMagic, Network.getInstance().getMessageMagic())) // Didn't receive correct Message "magic" throw new MessageException("Received incorrect message 'magic'"); @@ -212,7 +212,7 @@ public abstract class Message { ByteArrayOutputStream bytes = new ByteArrayOutputStream(); // Magic - bytes.write(Controller.getInstance().getMessageMagic()); + bytes.write(Network.getInstance().getMessageMagic()); bytes.write(Ints.toByteArray(this.type.value)); diff --git a/src/main/java/org/qora/settings/Settings.java b/src/main/java/org/qora/settings/Settings.java index 6556b9a0..4baeeec5 100644 --- a/src/main/java/org/qora/settings/Settings.java +++ b/src/main/java/org/qora/settings/Settings.java @@ -26,6 +26,7 @@ import org.qora.block.BlockChain; public class Settings { public static final int DEFAULT_LISTEN_PORT = 9084; + public static final int DEFAULT_TESTNET_PORT = 9184; private static final Logger LOGGER = LogManager.getLogger(Settings.class); private static final String SETTINGS_FILENAME = "settings.json"; @@ -62,7 +63,8 @@ public class Settings { private boolean autoUpdateEnabled = true; // Peer-to-peer related - private int listenPort = DEFAULT_LISTEN_PORT; + private boolean isTestNet = false; + private Integer listenPort; private String bindAddress = "::"; // Use IPv6 wildcard to listen on all local addresses /** Minimum number of peers to allow block generation / synchronization. */ private int minBlockchainPeers = 3; @@ -220,7 +222,7 @@ public class Settings { return this.apiRestricted; // Not set in config file, so restrict if not testnet - return !BlockChain.getInstance().isTestNet(); + return !BlockChain.getInstance().isTestChain(); } public boolean isApiLoggingEnabled() { @@ -239,8 +241,15 @@ public class Settings { return this.maxTransactionTimestampFuture; } + public boolean isTestNet() { + return this.isTestNet; + } + public int getListenPort() { - return this.listenPort; + if (this.listenPort != null) + return this.listenPort; + + return this.isTestNet ? DEFAULT_TESTNET_PORT : DEFAULT_LISTEN_PORT; } public String getBindAddress() { diff --git a/src/test/java/org/qora/test/SettingsTests.java b/src/test/java/org/qora/test/SettingsTests.java index 8149a636..c9903702 100644 --- a/src/test/java/org/qora/test/SettingsTests.java +++ b/src/test/java/org/qora/test/SettingsTests.java @@ -53,7 +53,7 @@ public class SettingsTests { BlockChain blockchain = unmarshaller.unmarshal(json, BlockChain.class).getValue(); System.out.println("BlockChain settings:"); - System.out.println(String.format("TestNet: %s", yn(blockchain.isTestNet()))); + System.out.println(String.format("TestChain: %s", yn(blockchain.isTestChain()))); } } diff --git a/src/test/resources/test-chain-old-asset.json b/src/test/resources/test-chain-old-asset.json index 958c84a7..12c4f95e 100644 --- a/src/test/resources/test-chain-old-asset.json +++ b/src/test/resources/test-chain-old-asset.json @@ -1,5 +1,5 @@ { - "isTestNet": true, + "isTestChain": true, "maxBalance": "10000000000", "blockDifficultyInterval": 10, "minBlockTime": 30, diff --git a/src/test/resources/test-chain-v2.json b/src/test/resources/test-chain-v2.json index 19928abb..04db3c4d 100644 --- a/src/test/resources/test-chain-v2.json +++ b/src/test/resources/test-chain-v2.json @@ -1,5 +1,5 @@ { - "isTestNet": true, + "isTestChain": true, "maxBalance": "10000000000", "blockDifficultyInterval": 10, "minBlockTime": 30,