diff --git a/src/main/java/org/qortal/controller/OnlineAccountsManager.java b/src/main/java/org/qortal/controller/OnlineAccountsManager.java index 05f353e8..a384dd01 100644 --- a/src/main/java/org/qortal/controller/OnlineAccountsManager.java +++ b/src/main/java/org/qortal/controller/OnlineAccountsManager.java @@ -510,10 +510,26 @@ public class OnlineAccountsManager { byte[] timestampBytes = Longs.toByteArray(onlineAccountsTimestamp); List ourOnlineAccounts = new ArrayList<>(); + int remaining = mintingAccounts.size(); for (MintingAccountData mintingAccountData : mintingAccounts) { + remaining--; byte[] privateKey = mintingAccountData.getPrivateKey(); byte[] publicKey = Crypto.toPublicKey(privateKey); + // We don't want to compute the online account nonce and signature again if it already exists + Set onlineAccounts = this.currentOnlineAccounts.computeIfAbsent(onlineAccountsTimestamp, k -> ConcurrentHashMap.newKeySet()); + boolean alreadyExists = onlineAccounts.stream().anyMatch(a -> Arrays.equals(a.getPublicKey(), publicKey)); + if (alreadyExists) { + if (remaining > 0) { + // Move on to next account + continue; + } + else { + // Everything exists, so return true + return true; + } + } + // Generate bytes for mempow byte[] mempowBytes; try {