From bec5b47e4364ac33fa642c89eb91930fbd1c1eda Mon Sep 17 00:00:00 2001 From: proto <34919827+protoniuman@users.noreply.github.com> Date: Mon, 21 Feb 2022 15:20:19 +0100 Subject: [PATCH] online accounts api call, fix level zero accounts Added online zero level accounts to the response of /addresses/online/levels api endpoints --- src/main/java/org/qortal/account/Account.java | 23 ++++++++++++++++++- .../api/resource/AddressesResource.java | 2 +- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/qortal/account/Account.java b/src/main/java/org/qortal/account/Account.java index 417dde6d..aeff7810 100644 --- a/src/main/java/org/qortal/account/Account.java +++ b/src/main/java/org/qortal/account/Account.java @@ -272,7 +272,7 @@ public class Account { /** * Returns 'effective' minting level, or zero if reward-share does not exist. *
- * For founder accounts, this returns "founderEffectiveMintingLevel" from blockchain config. + * this is being used on src/main/java/org/qortal/api/resource/AddressesResource.java to fulfil the online accounts api call * * @param repository * @param rewardSharePublicKey @@ -288,5 +288,26 @@ public class Account { Account rewardShareMinter = new Account(repository, rewardShareData.getMinter()); return rewardShareMinter.getEffectiveMintingLevel(); } + /** + * Returns 'effective' minting level, with a fix for the zero level. + *
+ * For founder accounts, this returns "founderEffectiveMintingLevel" from blockchain config. + * + * @param repository + * @param rewardSharePublicKey + * @return 0+ + * @throws DataException + */ + public static int getRewardShareEffectiveMintingLevelIncludingLevelZero(Repository repository, byte[] rewardSharePublicKey) throws DataException { + // Find actual minter and get their effective minting level + RewardShareData rewardShareData = repository.getAccountRepository().getRewardShare(rewardSharePublicKey); + if (rewardShareData == null) + return 0; + else if(!rewardShareData.getMinter().equals(rewardShareData.getRecipient()))//the minter is different than the recipient this means sponsorship + return 0; + + Account rewardShareMinter = new Account(repository, rewardShareData.getMinter()); + return rewardShareMinter.getEffectiveMintingLevel(); + } } diff --git a/src/main/java/org/qortal/api/resource/AddressesResource.java b/src/main/java/org/qortal/api/resource/AddressesResource.java index abe1960c..39c76cf4 100644 --- a/src/main/java/org/qortal/api/resource/AddressesResource.java +++ b/src/main/java/org/qortal/api/resource/AddressesResource.java @@ -198,7 +198,7 @@ public class AddressesResource { for (OnlineAccountData onlineAccountData : onlineAccounts) { try { - final int minterLevel = Account.getRewardShareEffectiveMintingLevel(repository, onlineAccountData.getPublicKey()); + final int minterLevel = Account.getRewardShareEffectiveMintingLevelIncludingLevelZero(repository, onlineAccountData.getPublicKey()); OnlineAccountLevel onlineAccountLevel = onlineAccountLevels.stream() .filter(a -> a.getLevel() == minterLevel)