diff --git a/src/main/java/org/qortal/block/BlockChain.java b/src/main/java/org/qortal/block/BlockChain.java index 531d3ad4..0aa6860b 100644 --- a/src/main/java/org/qortal/block/BlockChain.java +++ b/src/main/java/org/qortal/block/BlockChain.java @@ -482,7 +482,7 @@ public class BlockChain { } /** - * Some sort start-up/initialization/checking method. + * Some sort of start-up/initialization/checking method. * * @throws SQLException */ @@ -492,7 +492,9 @@ public class BlockChain { rebuildBlockchain(); try (final Repository repository = RepositoryManager.getRepository()) { - BlockData detachedBlockData = repository.getBlockRepository().getDetachedBlockSignature(); + int startHeight = Math.max(repository.getBlockRepository().getBlockchainHeight() - 1440, 1); + + BlockData detachedBlockData = repository.getBlockRepository().getDetachedBlockSignature(startHeight); if (detachedBlockData != null) { LOGGER.error(String.format("Block %d's reference does not match any block's signature", detachedBlockData.getHeight())); diff --git a/src/main/java/org/qortal/repository/BlockRepository.java b/src/main/java/org/qortal/repository/BlockRepository.java index 078128f6..4265b71f 100644 --- a/src/main/java/org/qortal/repository/BlockRepository.java +++ b/src/main/java/org/qortal/repository/BlockRepository.java @@ -152,11 +152,12 @@ public interface BlockRepository { public int trimOldOnlineAccountsSignatures(long timestamp) throws DataException; /** - * Returns first (lowest height) block that doesn't link back to genesis block. + * Returns first (lowest height) block that doesn't link back to specified block. * + * @param startHeight height of specified block * @throws DataException */ - public BlockData getDetachedBlockSignature() throws DataException; + public BlockData getDetachedBlockSignature(int startHeight) throws DataException; /** * Saves block into repository. diff --git a/src/main/java/org/qortal/repository/hsqldb/HSQLDBBlockRepository.java b/src/main/java/org/qortal/repository/hsqldb/HSQLDBBlockRepository.java index 0486bdc7..7f3f2f7c 100644 --- a/src/main/java/org/qortal/repository/hsqldb/HSQLDBBlockRepository.java +++ b/src/main/java/org/qortal/repository/hsqldb/HSQLDBBlockRepository.java @@ -471,14 +471,14 @@ public class HSQLDBBlockRepository implements BlockRepository { } @Override - public BlockData getDetachedBlockSignature() throws DataException { + public BlockData getDetachedBlockSignature(int startHeight) throws DataException { String sql = "SELECT " + BLOCK_DB_COLUMNS + " FROM Blocks " + "LEFT OUTER JOIN Blocks AS ParentBlocks " + "ON ParentBlocks.signature = Blocks.reference " - + "WHERE ParentBlocks.signature IS NULL AND Blocks.height > 1 " + + "WHERE ParentBlocks.signature IS NULL AND Blocks.height > ? " + "ORDER BY Blocks.height ASC LIMIT 1"; - try (ResultSet resultSet = this.repository.checkedExecute(sql)) { + try (ResultSet resultSet = this.repository.checkedExecute(sql, startHeight)) { return getBlockFromResultSet(resultSet); } catch (SQLException e) { throw new DataException("Error fetching block by signature from repository", e);