From 31bf388cabe6b20a76f26a3c898896c2b31ba7ec Mon Sep 17 00:00:00 2001 From: catbref Date: Mon, 24 Aug 2020 14:04:11 +0100 Subject: [PATCH] BlockMinter (now under org.qortal.controller package) doesn't need full previous block, only previous block data --- .../{block => controller}/BlockMinter.java | 23 ++++++++++--------- .../org/qortal/controller/Controller.java | 1 - .../org/qortal/test/TransferPrivsTests.java | 2 +- .../org/qortal/test/common/BlockUtils.java | 2 +- .../test/minting/BlocksMintedCountTests.java | 2 +- .../test/minting/DisagreementTests.java | 2 +- .../org/qortal/test/minting/RewardTests.java | 2 +- 7 files changed, 17 insertions(+), 17 deletions(-) rename src/main/java/org/qortal/{block => controller}/BlockMinter.java (94%) diff --git a/src/main/java/org/qortal/block/BlockMinter.java b/src/main/java/org/qortal/controller/BlockMinter.java similarity index 94% rename from src/main/java/org/qortal/block/BlockMinter.java rename to src/main/java/org/qortal/controller/BlockMinter.java index cde8617a..643c7baa 100644 --- a/src/main/java/org/qortal/block/BlockMinter.java +++ b/src/main/java/org/qortal/controller/BlockMinter.java @@ -1,4 +1,4 @@ -package org.qortal.block; +package org.qortal.controller; import java.math.BigInteger; import java.util.ArrayList; @@ -13,8 +13,9 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.qortal.account.Account; import org.qortal.account.PrivateKeyAccount; +import org.qortal.block.Block; import org.qortal.block.Block.ValidationResult; -import org.qortal.controller.Controller; +import org.qortal.block.BlockChain; import org.qortal.data.account.MintingAccountData; import org.qortal.data.account.RewardShareData; import org.qortal.data.block.BlockData; @@ -60,7 +61,7 @@ public class BlockMinter extends Thread { List unconfirmedTransactions = repository.getTransactionRepository().getUnconfirmedTransactions(); for (TransactionData transactionData : unconfirmedTransactions) { - LOGGER.trace(String.format("Deleting unconfirmed transaction %s", Base58.encode(transactionData.getSignature()))); + LOGGER.trace(() -> String.format("Deleting unconfirmed transaction %s", Base58.encode(transactionData.getSignature()))); repository.getTransactionRepository().delete(transactionData); } @@ -69,7 +70,7 @@ public class BlockMinter extends Thread { // Going to need this a lot... BlockRepository blockRepository = repository.getBlockRepository(); - Block previousBlock = null; + BlockData previousBlockData = null; List newBlocks = new ArrayList<>(); @@ -150,8 +151,8 @@ public class BlockMinter extends Thread { isMintingPossible = true; // Check blockchain hasn't changed - if (previousBlock == null || !Arrays.equals(previousBlock.getSignature(), lastBlockData.getSignature())) { - previousBlock = new Block(repository, lastBlockData); + if (previousBlockData == null || !Arrays.equals(previousBlockData.getSignature(), lastBlockData.getSignature())) { + previousBlockData = lastBlockData; newBlocks.clear(); // Reduce log timeout @@ -162,12 +163,12 @@ public class BlockMinter extends Thread { mintingAccountsData.removeIf(mintingAccountData -> newBlocks.stream().anyMatch(newBlock -> Arrays.equals(newBlock.getBlockData().getMinterPublicKey(), mintingAccountData.getPublicKey()))); // Do we need to build any potential new blocks? - List mintingAccounts = mintingAccountsData.stream().map(accountData -> new PrivateKeyAccount(repository, accountData.getPrivateKey())).collect(Collectors.toList()); + List newBlocksMintingAccounts = mintingAccountsData.stream().map(accountData -> new PrivateKeyAccount(repository, accountData.getPrivateKey())).collect(Collectors.toList()); - for (PrivateKeyAccount mintingAccount : mintingAccounts) { + for (PrivateKeyAccount mintingAccount : newBlocksMintingAccounts) { // First block does the AT heavy-lifting if (newBlocks.isEmpty()) { - Block newBlock = Block.mint(repository, previousBlock.getBlockData(), mintingAccount); + Block newBlock = Block.mint(repository, previousBlockData, mintingAccount); if (newBlock == null) { // For some reason we can't mint right now moderatedLog(() -> LOGGER.error("Couldn't build a to-be-minted block")); @@ -233,8 +234,8 @@ public class BlockMinter extends Thread { continue; // Pick best block - final int parentHeight = previousBlock.getBlockData().getHeight(); - final byte[] parentBlockSignature = previousBlock.getSignature(); + final int parentHeight = previousBlockData.getHeight(); + final byte[] parentBlockSignature = previousBlockData.getSignature(); BigInteger bestWeight = null; diff --git a/src/main/java/org/qortal/controller/Controller.java b/src/main/java/org/qortal/controller/Controller.java index b796b1ff..8c742e1c 100644 --- a/src/main/java/org/qortal/controller/Controller.java +++ b/src/main/java/org/qortal/controller/Controller.java @@ -36,7 +36,6 @@ import org.qortal.account.PublicKeyAccount; import org.qortal.api.ApiService; import org.qortal.block.Block; import org.qortal.block.BlockChain; -import org.qortal.block.BlockMinter; import org.qortal.block.BlockChain.BlockTimingByHeight; import org.qortal.controller.Synchronizer.SynchronizationResult; import org.qortal.crypto.Crypto; diff --git a/src/test/java/org/qortal/test/TransferPrivsTests.java b/src/test/java/org/qortal/test/TransferPrivsTests.java index f95e0599..9cfa7a69 100644 --- a/src/test/java/org/qortal/test/TransferPrivsTests.java +++ b/src/test/java/org/qortal/test/TransferPrivsTests.java @@ -7,7 +7,7 @@ import org.qortal.account.Account; import org.qortal.account.PrivateKeyAccount; import org.qortal.account.PublicKeyAccount; import org.qortal.block.BlockChain; -import org.qortal.block.BlockMinter; +import org.qortal.controller.BlockMinter; import org.qortal.data.account.AccountData; import org.qortal.data.transaction.BaseTransactionData; import org.qortal.data.transaction.PaymentTransactionData; diff --git a/src/test/java/org/qortal/test/common/BlockUtils.java b/src/test/java/org/qortal/test/common/BlockUtils.java index 82c41d50..3077b65b 100644 --- a/src/test/java/org/qortal/test/common/BlockUtils.java +++ b/src/test/java/org/qortal/test/common/BlockUtils.java @@ -5,7 +5,7 @@ import org.apache.logging.log4j.Logger; import org.qortal.account.PrivateKeyAccount; import org.qortal.block.Block; import org.qortal.block.BlockChain; -import org.qortal.block.BlockMinter; +import org.qortal.controller.BlockMinter; import org.qortal.data.block.BlockData; import org.qortal.repository.DataException; import org.qortal.repository.Repository; diff --git a/src/test/java/org/qortal/test/minting/BlocksMintedCountTests.java b/src/test/java/org/qortal/test/minting/BlocksMintedCountTests.java index d1062a79..88f63ddf 100644 --- a/src/test/java/org/qortal/test/minting/BlocksMintedCountTests.java +++ b/src/test/java/org/qortal/test/minting/BlocksMintedCountTests.java @@ -7,7 +7,7 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; import org.qortal.account.PrivateKeyAccount; -import org.qortal.block.BlockMinter; +import org.qortal.controller.BlockMinter; import org.qortal.controller.Controller; import org.qortal.data.account.RewardShareData; import org.qortal.repository.DataException; diff --git a/src/test/java/org/qortal/test/minting/DisagreementTests.java b/src/test/java/org/qortal/test/minting/DisagreementTests.java index cd9724b8..4dea75c7 100644 --- a/src/test/java/org/qortal/test/minting/DisagreementTests.java +++ b/src/test/java/org/qortal/test/minting/DisagreementTests.java @@ -10,7 +10,7 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; import org.qortal.account.PrivateKeyAccount; -import org.qortal.block.BlockMinter; +import org.qortal.controller.BlockMinter; import org.qortal.controller.Controller; import org.qortal.data.account.RewardShareData; import org.qortal.data.block.BlockData; diff --git a/src/test/java/org/qortal/test/minting/RewardTests.java b/src/test/java/org/qortal/test/minting/RewardTests.java index d023a108..4d098f67 100644 --- a/src/test/java/org/qortal/test/minting/RewardTests.java +++ b/src/test/java/org/qortal/test/minting/RewardTests.java @@ -14,8 +14,8 @@ import org.junit.Test; import org.qortal.account.PrivateKeyAccount; import org.qortal.asset.Asset; import org.qortal.block.BlockChain; -import org.qortal.block.BlockMinter; import org.qortal.block.BlockChain.RewardByHeight; +import org.qortal.controller.BlockMinter; import org.qortal.data.account.AccountBalanceData; import org.qortal.repository.DataException; import org.qortal.repository.Repository;