Add option key: genesisBlockHeight. Rename option key regTestBsqGenesisTxId to genesisTxId. Remove hard coded dev genesis tx id and height.

This commit is contained in:
Manfred Karrer 2018-03-05 12:05:24 -05:00
parent 9246b530d3
commit 1f6122e934
No known key found for this signature in database
GPG key ID: 401250966A6B2C46
8 changed files with 63 additions and 85 deletions

View file

@ -180,7 +180,7 @@ public class BisqEnvironment extends StandardEnvironment {
protected final String btcNodes, seedNodes, ignoreDevMsg, useDevPrivilegeKeys, useDevMode, useTorForBtc, rpcUser, rpcPassword,
rpcPort, rpcBlockNotificationPort, dumpBlockchainData, fullDaoNode,
myAddress, banList, dumpStatistics, maxMemory, socks5ProxyBtcAddress,
socks5ProxyHttpAddress, useAllProvidedNodes, numConnectionForBtc, regTestBsqGenesisTxId;
socks5ProxyHttpAddress, useAllProvidedNodes, numConnectionForBtc, genesisTxId, genesisBlockHeight;
public BisqEnvironment(OptionSet options) {
@ -265,8 +265,11 @@ public class BisqEnvironment extends StandardEnvironment {
fullDaoNode = commandLineProperties.containsProperty(DaoOptionKeys.FULL_DAO_NODE) ?
(String) commandLineProperties.getProperty(DaoOptionKeys.FULL_DAO_NODE) :
"";
regTestBsqGenesisTxId = commandLineProperties.containsProperty(DaoOptionKeys.REG_TEST_GENESIS_TX_ID) ?
(String) commandLineProperties.getProperty(DaoOptionKeys.REG_TEST_GENESIS_TX_ID) :
genesisTxId = commandLineProperties.containsProperty(DaoOptionKeys.GENESIS_TX_ID) ?
(String) commandLineProperties.getProperty(DaoOptionKeys.GENESIS_TX_ID) :
"";
genesisBlockHeight = commandLineProperties.containsProperty(DaoOptionKeys.GENESIS_BLOCK_HEIGHT) ?
(String) commandLineProperties.getProperty(DaoOptionKeys.GENESIS_BLOCK_HEIGHT) :
"";
btcNodes = commandLineProperties.containsProperty(BtcOptionKeys.BTC_NODES) ?
@ -423,7 +426,8 @@ public class BisqEnvironment extends StandardEnvironment {
setProperty(DaoOptionKeys.RPC_BLOCK_NOTIFICATION_PORT, rpcBlockNotificationPort);
setProperty(DaoOptionKeys.DUMP_BLOCKCHAIN_DATA, dumpBlockchainData);
setProperty(DaoOptionKeys.FULL_DAO_NODE, fullDaoNode);
setProperty(DaoOptionKeys.REG_TEST_GENESIS_TX_ID, regTestBsqGenesisTxId);
setProperty(DaoOptionKeys.GENESIS_TX_ID, genesisTxId);
setProperty(DaoOptionKeys.GENESIS_BLOCK_HEIGHT, genesisBlockHeight);
setProperty(BtcOptionKeys.BTC_NODES, btcNodes);
setProperty(BtcOptionKeys.USE_TOR_FOR_BTC, useTorForBtc);

View file

@ -197,10 +197,12 @@ public abstract class BisqExecutable {
"set as well.", false))
.withRequiredArg()
.ofType(boolean.class);
parser.accepts(DaoOptionKeys.REG_TEST_GENESIS_TX_ID,
description("Reg test BSQ genesis transaction id when not using the hard coded one", ""))
parser.accepts(DaoOptionKeys.GENESIS_TX_ID,
description("Genesis transaction ID when not using the hard coded one", ""))
.withRequiredArg();
parser.accepts(DaoOptionKeys.GENESIS_BLOCK_HEIGHT,
description("Genesis transaction block height when not using the hard coded one", ""))
.withRequiredArg();
}
public static BisqEnvironment getBisqEnvironment(OptionSet options) {

View file

@ -18,6 +18,7 @@
package io.bisq.core.dao;
import com.google.inject.Singleton;
import com.google.inject.name.Names;
import io.bisq.common.app.AppModule;
import io.bisq.core.dao.blockchain.BsqBlockChainChangeDispatcher;
import io.bisq.core.dao.blockchain.BsqFullNode;
@ -75,8 +76,12 @@ public class DaoModule extends AppModule {
.to(environment.getRequiredProperty(DaoOptionKeys.DUMP_BLOCKCHAIN_DATA));
bindConstant().annotatedWith(named(DaoOptionKeys.FULL_DAO_NODE))
.to(environment.getRequiredProperty(DaoOptionKeys.FULL_DAO_NODE));
bindConstant().annotatedWith(named(DaoOptionKeys.REG_TEST_GENESIS_TX_ID))
.to(environment.getRequiredProperty(DaoOptionKeys.REG_TEST_GENESIS_TX_ID));
String genesisTxId = environment.getProperty(DaoOptionKeys.GENESIS_TX_ID, String.class, BsqBlockChain.BTC_GENESIS_TX_ID);
bind(String.class).annotatedWith(Names.named(DaoOptionKeys.GENESIS_TX_ID)).toInstance(genesisTxId);
Integer genesisBlockHeight = environment.getProperty(DaoOptionKeys.GENESIS_BLOCK_HEIGHT, Integer.class, BsqBlockChain.BTC_GENESIS_BLOCK_HEIGHT);
bind(Integer.class).annotatedWith(Names.named(DaoOptionKeys.GENESIS_BLOCK_HEIGHT)).toInstance(genesisBlockHeight);
}
}

View file

@ -8,5 +8,6 @@ public class DaoOptionKeys {
public static final String DUMP_BLOCKCHAIN_DATA = "dumpBlockchainData";
public static final String FULL_DAO_NODE = "fullDaoNode";
public static final String REG_TEST_GENESIS_TX_ID = "regTestBsqGenesisTxId";
public static final String GENESIS_TX_ID = "genesisTxId";
public static final String GENESIS_BLOCK_HEIGHT = "genesisBlockHeight";
}

View file

@ -32,6 +32,8 @@ import javafx.beans.property.SimpleObjectProperty;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import javax.inject.Named;
/**
* Provide information about the phase and cycle of the request/voting cycle.
* A cycle is the sequence of distinct phases. The first cycle and phase starts with the genesis block height.
@ -84,6 +86,7 @@ public class DaoPeriodService {
private BsqBlockChain bsqBlockChain;
private final VotingDefaultValues votingDefaultValues;
private final VotingService votingService;
private final int genesisBlockHeight;
@Getter
private ObjectProperty<Phase> phaseProperty = new SimpleObjectProperty<>(Phase.UNDEFINED);
private int chainHeight;
@ -97,13 +100,13 @@ public class DaoPeriodService {
public DaoPeriodService(BtcWalletService btcWalletService,
BsqBlockChain bsqBlockChain,
VotingDefaultValues votingDefaultValues,
VotingService votingService) {
VotingService votingService,
@Named(DaoOptionKeys.GENESIS_BLOCK_HEIGHT) int genesisBlockHeight) {
this.btcWalletService = btcWalletService;
this.bsqBlockChain = bsqBlockChain;
this.votingDefaultValues = votingDefaultValues;
this.votingService = votingService;
this.genesisBlockHeight = genesisBlockHeight;
}
@ -122,7 +125,7 @@ public class DaoPeriodService {
Tx tx = bsqBlockChain.getTxMap().get(compensationRequestPayload.getTxId());
return tx != null && isTxHeightInPhase(tx.getBlockHeight(),
chainHeight,
BsqBlockChain.getGenesisHeight(),
genesisBlockHeight,
phase.getDurationInBlocks(),
getNumBlocksOfCycle());
}
@ -131,7 +134,7 @@ public class DaoPeriodService {
Tx tx = bsqBlockChain.getTxMap().get(compensationRequest.getPayload().getTxId());
return tx != null && isInCurrentCycle(tx.getBlockHeight(),
chainHeight,
BsqBlockChain.getGenesisHeight(),
genesisBlockHeight,
getNumBlocksOfCycle());
}
@ -139,33 +142,33 @@ public class DaoPeriodService {
Tx tx = bsqBlockChain.getTxMap().get(compensationRequest.getPayload().getTxId());
return tx != null && isInPastCycle(tx.getBlockHeight(),
chainHeight,
BsqBlockChain.getGenesisHeight(),
genesisBlockHeight,
getNumBlocksOfCycle());
}
public int getNumOfStartedCycles(int chainHeight) {
return getNumOfStartedCycles(chainHeight,
BsqBlockChain.getGenesisHeight(),
genesisBlockHeight,
getNumBlocksOfCycle());
}
// Not used yet be leave it
public int getNumOfCompletedCycles(int chainHeight) {
return getNumOfCompletedCycles(chainHeight,
BsqBlockChain.getGenesisHeight(),
genesisBlockHeight,
getNumBlocksOfCycle());
}
public int getAbsoluteStartBlockOfPhase(int chainHeight, Phase phase) {
return getAbsoluteStartBlockOfPhase(chainHeight,
BsqBlockChain.getGenesisHeight(),
genesisBlockHeight,
phase,
getNumBlocksOfCycle());
}
public int getAbsoluteEndBlockOfPhase(int chainHeight, Phase phase) {
return getAbsoluteEndBlockOfPhase(chainHeight,
BsqBlockChain.getGenesisHeight(),
genesisBlockHeight,
phase,
getNumBlocksOfCycle());
}
@ -185,7 +188,7 @@ public class DaoPeriodService {
private void onChainHeightChanged(int chainHeight) {
this.chainHeight = chainHeight;
final int relativeBlocksInCycle = getRelativeBlocksInCycle(BsqBlockChain.getGenesisHeight(), this.chainHeight, getNumBlocksOfCycle());
final int relativeBlocksInCycle = getRelativeBlocksInCycle(genesisBlockHeight, this.chainHeight, getNumBlocksOfCycle());
phaseProperty.set(calculatePhase(relativeBlocksInCycle));
}

View file

@ -24,7 +24,6 @@ import io.bisq.common.proto.persistable.PersistenceProtoResolver;
import io.bisq.common.storage.Storage;
import io.bisq.common.util.FunctionalReadWriteLock;
import io.bisq.common.util.Tuple2;
import io.bisq.core.app.BisqEnvironment;
import io.bisq.core.dao.DaoOptionKeys;
import io.bisq.core.dao.blockchain.exceptions.BlockNotConnectingException;
import io.bisq.core.dao.blockchain.vo.*;
@ -75,33 +74,8 @@ public class BsqBlockChain implements PersistableEnvelope {
// block 376078 has 2843 recursions and caused once a StackOverflowError, a second run worked. Took 1,2 sec.
// BTC MAIN NET
private static final String BTC_GENESIS_TX_ID = "e5c8313c4144d219b5f6b2dacf1d36f2d43a9039bb2fcd1bd57f8352a9c9809a";
private static final int BTC_GENESIS_BLOCK_HEIGHT = 477865; // 2017-07-28
// TEST NET
// Phase 0 initial genesis tx 6.10.2017: 2f194230e23459a9211322c4b1c182cf3f367086e8059aca2f8f44e20dac527a
// private static final String BTC_TEST_NET_GENESIS_TX_ID = "2f194230e23459a9211322c4b1c182cf3f367086e8059aca2f8f44e20dac527a";
// private static final int BTC_TEST_NET_GENESIS_BLOCK_HEIGHT = 1209140;
// Rebased genesis tx 9th november 2017
private static final String BTC_TEST_NET_GENESIS_TX_ID = "f8b65c65624bd822f92480c39959f8ae4a6f94a9841c1625464ec6353cfba1d9";
private static final int BTC_TEST_NET_GENESIS_BLOCK_HEIGHT = 1227630;
// REG TEST
private static final String BTC_REG_TEST_GENESIS_TX_ID = "5116d4f9107ce2b6bacacf750037f1b51fa302a9c96fe20c0d68b35728182a38";
private static final int BTC_REG_TEST_GENESIS_BLOCK_HEIGHT = 200;
public static int getGenesisHeight() {
switch (BisqEnvironment.getBaseCurrencyNetwork()) {
case BTC_TESTNET:
return BTC_TEST_NET_GENESIS_BLOCK_HEIGHT;
case BTC_REGTEST:
return BTC_REG_TEST_GENESIS_BLOCK_HEIGHT;
case BTC_MAINNET:
default:
return BTC_GENESIS_BLOCK_HEIGHT;
}
}
public static final String BTC_GENESIS_TX_ID = "e5c8313c4144d219b5f6b2dacf1d36f2d43a9039bb2fcd1bd57f8352a9c9809a";
public static final int BTC_GENESIS_BLOCK_HEIGHT = 477865; // 2017-07-28
///////////////////////////////////////////////////////////////////////////////////////////
@ -139,31 +113,19 @@ public class BsqBlockChain implements PersistableEnvelope {
@Inject
public BsqBlockChain(PersistenceProtoResolver persistenceProtoResolver,
@Named(Storage.STORAGE_DIR) File storageDir,
@Named(DaoOptionKeys.REG_TEST_GENESIS_TX_ID) String manualGenesisTxId) {
@Named(DaoOptionKeys.GENESIS_TX_ID) String genesisTxId,
@Named(DaoOptionKeys.GENESIS_BLOCK_HEIGHT) int genesisBlockHeight) {
this.genesisTxId = genesisTxId;
this.genesisBlockHeight = genesisBlockHeight;
storage = new Storage<>(storageDir, persistenceProtoResolver);
bsqBlocks = new LinkedList<>();
txMap = new HashMap<>();
unspentTxOutputsMap = new HashMap<>();
compensationRequestFees = new HashSet<>();
votingFees = new HashSet<>();
storage = new Storage<>(storageDir, persistenceProtoResolver);
switch (BisqEnvironment.getBaseCurrencyNetwork()) {
case BTC_TESTNET:
genesisTxId = BTC_TEST_NET_GENESIS_TX_ID;
genesisBlockHeight = BTC_TEST_NET_GENESIS_BLOCK_HEIGHT;
break;
case BTC_REGTEST:
genesisTxId = manualGenesisTxId.isEmpty() ? BTC_REG_TEST_GENESIS_TX_ID : manualGenesisTxId;
genesisBlockHeight = BTC_REG_TEST_GENESIS_BLOCK_HEIGHT;
break;
case BTC_MAINNET:
default:
genesisTxId = BTC_GENESIS_TX_ID;
genesisBlockHeight = BTC_GENESIS_BLOCK_HEIGHT;
break;
}
lock = new FunctionalReadWriteLock(true);
}

View file

@ -28,7 +28,7 @@ public class DaoPeriodServiceTest {
@Before
public void startup() {
service = new DaoPeriodService(null, null, null, null);
service = new DaoPeriodService(null, null, null, null, 0);
}
@Test
@ -163,14 +163,14 @@ public class DaoPeriodServiceTest {
final int first = gen; // 1
final int second = first + numBlocksOfCycle; //
final int third = first + numBlocksOfCycle + numBlocksOfCycle; //
assertEquals(gen, service.getAbsoluteStartBlockOfPhase(0, gen, DaoPeriodService.Phase.COMPENSATION_REQUESTS,numBlocksOfCycle));
assertEquals(gen, service.getAbsoluteStartBlockOfPhase(gen, gen, DaoPeriodService.Phase.COMPENSATION_REQUESTS,numBlocksOfCycle));
assertEquals(first, service.getAbsoluteStartBlockOfPhase(gen + 1, gen, DaoPeriodService.Phase.COMPENSATION_REQUESTS,numBlocksOfCycle));
assertEquals(first, service.getAbsoluteStartBlockOfPhase(gen + numBlocksOfCycle - 1, gen, DaoPeriodService.Phase.COMPENSATION_REQUESTS,numBlocksOfCycle));
assertEquals(second, service.getAbsoluteStartBlockOfPhase(gen + numBlocksOfCycle, gen, DaoPeriodService.Phase.COMPENSATION_REQUESTS,numBlocksOfCycle));
assertEquals(second, service.getAbsoluteStartBlockOfPhase(gen + numBlocksOfCycle + 1, gen, DaoPeriodService.Phase.COMPENSATION_REQUESTS,numBlocksOfCycle));
assertEquals(second, service.getAbsoluteStartBlockOfPhase(gen + numBlocksOfCycle + numBlocksOfCycle - 1, gen, DaoPeriodService.Phase.COMPENSATION_REQUESTS,numBlocksOfCycle));
assertEquals(third, service.getAbsoluteStartBlockOfPhase(gen + numBlocksOfCycle + numBlocksOfCycle, gen, DaoPeriodService.Phase.COMPENSATION_REQUESTS,numBlocksOfCycle));
assertEquals(gen, service.getAbsoluteStartBlockOfPhase(0, gen, DaoPeriodService.Phase.COMPENSATION_REQUESTS, numBlocksOfCycle));
assertEquals(gen, service.getAbsoluteStartBlockOfPhase(gen, gen, DaoPeriodService.Phase.COMPENSATION_REQUESTS, numBlocksOfCycle));
assertEquals(first, service.getAbsoluteStartBlockOfPhase(gen + 1, gen, DaoPeriodService.Phase.COMPENSATION_REQUESTS, numBlocksOfCycle));
assertEquals(first, service.getAbsoluteStartBlockOfPhase(gen + numBlocksOfCycle - 1, gen, DaoPeriodService.Phase.COMPENSATION_REQUESTS, numBlocksOfCycle));
assertEquals(second, service.getAbsoluteStartBlockOfPhase(gen + numBlocksOfCycle, gen, DaoPeriodService.Phase.COMPENSATION_REQUESTS, numBlocksOfCycle));
assertEquals(second, service.getAbsoluteStartBlockOfPhase(gen + numBlocksOfCycle + 1, gen, DaoPeriodService.Phase.COMPENSATION_REQUESTS, numBlocksOfCycle));
assertEquals(second, service.getAbsoluteStartBlockOfPhase(gen + numBlocksOfCycle + numBlocksOfCycle - 1, gen, DaoPeriodService.Phase.COMPENSATION_REQUESTS, numBlocksOfCycle));
assertEquals(third, service.getAbsoluteStartBlockOfPhase(gen + numBlocksOfCycle + numBlocksOfCycle, gen, DaoPeriodService.Phase.COMPENSATION_REQUESTS, numBlocksOfCycle));
}
@Test
@ -183,13 +183,13 @@ public class DaoPeriodServiceTest {
final int second = first + numBlocksOfCycle; // 30
final int third = first + numBlocksOfCycle + numBlocksOfCycle; //40
assertEquals(first, service.getAbsoluteEndBlockOfPhase(0, gen, DaoPeriodService.Phase.COMPENSATION_REQUESTS, numBlocksOfCycle));
assertEquals(first, service.getAbsoluteEndBlockOfPhase(gen, gen, DaoPeriodService.Phase.COMPENSATION_REQUESTS,numBlocksOfCycle));
assertEquals(first, service.getAbsoluteEndBlockOfPhase(gen + 1, gen, DaoPeriodService.Phase.COMPENSATION_REQUESTS,numBlocksOfCycle));
assertEquals(first, service.getAbsoluteEndBlockOfPhase(gen + numBlocksOfCycle - 1, gen, DaoPeriodService.Phase.COMPENSATION_REQUESTS,numBlocksOfCycle));
assertEquals(second, service.getAbsoluteEndBlockOfPhase(gen + numBlocksOfCycle, gen, DaoPeriodService.Phase.COMPENSATION_REQUESTS,numBlocksOfCycle));
assertEquals(second, service.getAbsoluteEndBlockOfPhase(gen + numBlocksOfCycle + 1, gen, DaoPeriodService.Phase.COMPENSATION_REQUESTS,numBlocksOfCycle));
assertEquals(second, service.getAbsoluteEndBlockOfPhase(gen + numBlocksOfCycle + numBlocksOfCycle - 1, gen, DaoPeriodService.Phase.COMPENSATION_REQUESTS,numBlocksOfCycle));
assertEquals(third, service.getAbsoluteEndBlockOfPhase(gen + numBlocksOfCycle + numBlocksOfCycle, gen, DaoPeriodService.Phase.COMPENSATION_REQUESTS,numBlocksOfCycle));
assertEquals(first, service.getAbsoluteEndBlockOfPhase(gen, gen, DaoPeriodService.Phase.COMPENSATION_REQUESTS, numBlocksOfCycle));
assertEquals(first, service.getAbsoluteEndBlockOfPhase(gen + 1, gen, DaoPeriodService.Phase.COMPENSATION_REQUESTS, numBlocksOfCycle));
assertEquals(first, service.getAbsoluteEndBlockOfPhase(gen + numBlocksOfCycle - 1, gen, DaoPeriodService.Phase.COMPENSATION_REQUESTS, numBlocksOfCycle));
assertEquals(second, service.getAbsoluteEndBlockOfPhase(gen + numBlocksOfCycle, gen, DaoPeriodService.Phase.COMPENSATION_REQUESTS, numBlocksOfCycle));
assertEquals(second, service.getAbsoluteEndBlockOfPhase(gen + numBlocksOfCycle + 1, gen, DaoPeriodService.Phase.COMPENSATION_REQUESTS, numBlocksOfCycle));
assertEquals(second, service.getAbsoluteEndBlockOfPhase(gen + numBlocksOfCycle + numBlocksOfCycle - 1, gen, DaoPeriodService.Phase.COMPENSATION_REQUESTS, numBlocksOfCycle));
assertEquals(third, service.getAbsoluteEndBlockOfPhase(gen + numBlocksOfCycle + numBlocksOfCycle, gen, DaoPeriodService.Phase.COMPENSATION_REQUESTS, numBlocksOfCycle));
}
@Test

View file

@ -97,7 +97,8 @@ public class MonitorEnvironment extends BisqEnvironment {
setProperty(DaoOptionKeys.RPC_BLOCK_NOTIFICATION_PORT, rpcBlockNotificationPort);
setProperty(DaoOptionKeys.DUMP_BLOCKCHAIN_DATA, dumpBlockchainData);
setProperty(DaoOptionKeys.FULL_DAO_NODE, fullDaoNode);
setProperty(DaoOptionKeys.REG_TEST_GENESIS_TX_ID, regTestBsqGenesisTxId);
setProperty(DaoOptionKeys.GENESIS_TX_ID, genesisTxId);
setProperty(DaoOptionKeys.GENESIS_BLOCK_HEIGHT, genesisBlockHeight);
setProperty(BtcOptionKeys.BTC_NODES, btcNodes);
setProperty(BtcOptionKeys.USE_TOR_FOR_BTC, useTorForBtc);