Skip to content

Commit 95ee80b

Browse files
committed
add checkStandbyWitness method
1 parent e695e87 commit 95ee80b

File tree

3 files changed

+29
-14
lines changed

3 files changed

+29
-14
lines changed

framework/src/main/java/org/tron/core/Wallet.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import static org.tron.common.utils.WalletUtil.isConstant;
2424
import static org.tron.core.config.Parameter.ChainConstant.BLOCK_PRODUCED_INTERVAL;
2525
import static org.tron.core.config.Parameter.ChainConstant.FROZEN_PERIOD;
26+
import static org.tron.core.config.Parameter.ChainConstant.WITNESS_STANDBY_LENGTH;
2627
import static org.tron.core.config.Parameter.DatabaseConstants.EXCHANGE_COUNT_LIMIT_MAX;
2728
import static org.tron.core.config.Parameter.DatabaseConstants.PROPOSAL_COUNT_LIMIT_MAX;
2829

@@ -35,6 +36,7 @@
3536
import com.google.protobuf.InvalidProtocolBufferException;
3637
import java.security.SignatureException;
3738
import java.util.ArrayList;
39+
import java.util.Comparator;
3840
import java.util.HashMap;
3941
import java.util.List;
4042
import java.util.Map;
@@ -2436,7 +2438,7 @@ public double percentageOfBlockReward(long beginCycle, long endCycle, byte[] add
24362438
if (brokerage == 100) {
24372439
continue;
24382440
}
2439-
2441+
24402442
double brokerageRate = (double) brokerage / 100;
24412443
reward += dbManager.getDelegationStore().getReward(cycle, address) / (1 - brokerageRate);
24422444
blockPayReward += dbManager.getDelegationStore().getBlockReward(cycle, address);
@@ -2840,5 +2842,22 @@ public boolean existAddress(byte[] address) {
28402842
}
28412843
return false;
28422844
}
2845+
2846+
public boolean checkStandbyWitness(byte[] address) {
2847+
List<ByteString> witnessAddressList = new ArrayList<>();
2848+
for (WitnessCapsule witnessCapsule : consensusDelegate.getAllWitnesses()) {
2849+
witnessAddressList.add(witnessCapsule.getAddress());
2850+
}
2851+
witnessAddressList.sort(Comparator.comparingLong((ByteString b) ->
2852+
consensusDelegate.getWitness(b.toByteArray()).getVoteCount())
2853+
.reversed()
2854+
.thenComparing(Comparator.comparingInt(ByteString::hashCode).reversed()));
2855+
2856+
if (witnessAddressList.size() > WITNESS_STANDBY_LENGTH) {
2857+
witnessAddressList = witnessAddressList.subList(0, WITNESS_STANDBY_LENGTH);
2858+
}
2859+
boolean contains = witnessAddressList.contains(ByteString.copyFrom(address));
2860+
return contains;
2861+
}
28432862
}
28442863

framework/src/main/java/org/tron/core/services/http/GetNowSRAnnualizedRateOfReturnServlet.java

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,11 @@
33

44
import static org.tron.core.config.Parameter.ChainConstant.MAX_ACTIVE_WITNESS_NUM;
55

6-
import com.alibaba.fastjson.JSONObject;
76
import javax.servlet.http.HttpServletRequest;
87
import javax.servlet.http.HttpServletResponse;
98
import lombok.extern.slf4j.Slf4j;
109
import org.springframework.beans.factory.annotation.Autowired;
1110
import org.springframework.stereotype.Component;
12-
import org.tron.common.utils.Commons;
1311
import org.tron.common.utils.DecodeUtil;
1412
import org.tron.core.Wallet;
1513
import org.tron.core.exception.AddressNotFound;
@@ -31,7 +29,8 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) {
3129
if (!DecodeUtil.addressValid(address)) {
3230
throw new InvalidAddress("Invalid address!");
3331
}
34-
long rewardOfVoteEachBlock = wallet.getRewardOfVoteEachBlock() / 1000000;
32+
long rewardOfVoteEachBlock = wallet.checkStandbyWitness(address)
33+
? wallet.getRewardOfVoteEachBlock() / 1000000 : 0;
3534
long rewardOfBlockEachBlock = wallet.checkAddress(address)
3635
? wallet.getRewardOfBlockEachBlock() / 1000000 : 0;
3736
double srNumber = MAX_ACTIVE_WITNESS_NUM;
@@ -46,7 +45,7 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) {
4645
totalVote = wallet.queryNowTotalVoteNumber();
4746
ratio = wallet.queryNowSrRatio(address);
4847
annualizedRateOfReturn = wallet.getAnnualizedRateOfReturn(rewardOfBlockEachBlock,
49-
blockNumberEachDay, srNumber,srVote,totalVote,rewardOfVoteEachBlock,ratio);
48+
blockNumberEachDay, srNumber, srVote, totalVote, rewardOfVoteEachBlock, ratio);
5049
response.getWriter().println("{\"annualizedRateOfReturn\": " + annualizedRateOfReturn + "}");
5150
} catch (Exception e) {
5251
Util.processError(e, response);
@@ -56,16 +55,13 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) {
5655
@Override
5756
protected void doPost(HttpServletRequest request, HttpServletResponse response) {
5857
try {
59-
PostParams params = PostParams.getPostParams(request);
60-
String addressStr = JSONObject.parseObject(params.getParams()).getString("address");
61-
if (!DecodeUtil.addressValid(Commons.decodeFromBase58Check(addressStr))) {
58+
byte[] address = Util.getAddress(request);
59+
if (!DecodeUtil.addressValid(address)) {
6260
throw new InvalidAddress("Invalid address!");
6361
}
64-
Account.Builder build = Account.newBuilder();
65-
JsonFormat.merge(params.getParams(), build, params.isVisible());
6662
double annualizedRateOfReturn = 0;
67-
byte[] address = build.getAddress().toByteArray();
68-
long rewardOfVoteEachBlock = wallet.getRewardOfVoteEachBlock() / 1000000;
63+
long rewardOfVoteEachBlock = wallet.checkStandbyWitness(address)
64+
? wallet.getRewardOfVoteEachBlock() / 1000000 : 0;
6965
long rewardOfBlockEachBlock = wallet.checkAddress(address)
7066
? wallet.getRewardOfBlockEachBlock() / 1000000 : 0;
7167
double srNumber = MAX_ACTIVE_WITNESS_NUM;
@@ -80,7 +76,7 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response)
8076
totalVote = wallet.queryNowTotalVoteNumber();
8177
ratio = wallet.queryNowSrRatio(address);
8278
annualizedRateOfReturn = wallet.getAnnualizedRateOfReturn(rewardOfBlockEachBlock,
83-
blockNumberEachDay, srNumber,srVote,totalVote,rewardOfVoteEachBlock,ratio);
79+
blockNumberEachDay, srNumber, srVote, totalVote, rewardOfVoteEachBlock, ratio);
8480
response.getWriter().println("{\"annualizedRateOfReturn\": " + annualizedRateOfReturn + "}");
8581
} catch (Exception e) {
8682
Util.processError(e, response);

framework/src/test/java/stest/tron/wallet/onlinestress/TestApproveProposal.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,12 @@
1414
import org.testng.annotations.BeforeSuite;
1515
import org.testng.annotations.Test;
1616
import org.tron.api.GrpcAPI;
17-
import org.tron.protos.Protocol.ChainParameters;
1817
import org.tron.api.GrpcAPI.EmptyMessage;
1918
import org.tron.api.GrpcAPI.ProposalList;
2019
import org.tron.api.WalletGrpc;
2120
import org.tron.api.WalletSolidityGrpc;
2221
import org.tron.core.Wallet;
22+
import org.tron.protos.Protocol.ChainParameters;
2323
import org.tron.protos.contract.BalanceContract.TransferContract;
2424
import stest.tron.wallet.common.client.Configuration;
2525
import stest.tron.wallet.common.client.Parameter.CommonConstant;

0 commit comments

Comments
 (0)