From a3febdf00e1e6bb922b264bae03cfb9215d7820c Mon Sep 17 00:00:00 2001 From: CalDescent Date: Sat, 2 Jul 2022 17:26:53 +0100 Subject: [PATCH] Pass timestamp to OnlineAccountsManager.isMemoryPoWActive() so that block timestamp can be used. --- .../controller/OnlineAccountsManager.java | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/main/java/org/qortal/controller/OnlineAccountsManager.java b/src/main/java/org/qortal/controller/OnlineAccountsManager.java index 9e9301ca..332fac18 100644 --- a/src/main/java/org/qortal/controller/OnlineAccountsManager.java +++ b/src/main/java/org/qortal/controller/OnlineAccountsManager.java @@ -302,7 +302,7 @@ public class OnlineAccountsManager { // Validate mempow if feature trigger is active if (now >= BlockChain.getInstance().getOnlineAccountsMemoryPoWTimestamp()) { - if (!getInstance().verifyMemoryPoW(onlineAccountData)) { + if (!getInstance().verifyMemoryPoW(onlineAccountData, now)) { LOGGER.trace(() -> String.format("Rejecting online reward-share for account %s due to invalid PoW nonce", mintingAccount.getAddress())); return false; } @@ -524,7 +524,7 @@ public class OnlineAccountsManager { // Compute nonce Integer nonce; - if (isMemoryPoWActive()) { + if (isMemoryPoWActive(NTP.getTime())) { try { nonce = this.computeMemoryPoW(mempowBytes, publicKey, onlineAccountsTimestamp); if (nonce == null) { @@ -549,7 +549,7 @@ public class OnlineAccountsManager { OnlineAccountData ourOnlineAccountData = new OnlineAccountData(onlineAccountsTimestamp, signature, publicKey, nonce); // Make sure to verify before adding - if (verifyMemoryPoW(ourOnlineAccountData)) { + if (verifyMemoryPoW(ourOnlineAccountData, NTP.getTime())) { ourOnlineAccounts.add(ourOnlineAccountData); } } @@ -582,9 +582,8 @@ public class OnlineAccountsManager { // MemoryPoW - private boolean isMemoryPoWActive() { - Long now = NTP.getTime(); - if (now >= BlockChain.getInstance().getOnlineAccountsMemoryPoWTimestamp() || Settings.getInstance().isOnlineAccountsMemPoWEnabled()) { + private boolean isMemoryPoWActive(Long timestamp) { + if (timestamp >= BlockChain.getInstance().getOnlineAccountsMemoryPoWTimestamp() || Settings.getInstance().isOnlineAccountsMemPoWEnabled()) { return true; } return false; @@ -600,7 +599,7 @@ public class OnlineAccountsManager { } private Integer computeMemoryPoW(byte[] bytes, byte[] publicKey, long onlineAccountsTimestamp) throws TimeoutException { - if (!isMemoryPoWActive()) { + if (!isMemoryPoWActive(NTP.getTime())) { LOGGER.info("Mempow start timestamp not yet reached, and onlineAccountsMemPoWEnabled not enabled in settings"); return null; } @@ -626,8 +625,8 @@ public class OnlineAccountsManager { return nonce; } - public boolean verifyMemoryPoW(OnlineAccountData onlineAccountData) { - if (!isMemoryPoWActive()) { + public boolean verifyMemoryPoW(OnlineAccountData onlineAccountData, Long timestamp) { + if (!isMemoryPoWActive(timestamp)) { // Not active yet, so treat it as valid return true; }