Skip to content

Commit 1e2bb08

Browse files
committed
up
1 parent 356fc16 commit 1e2bb08

File tree

1 file changed

+55
-9
lines changed

1 file changed

+55
-9
lines changed

src/main/java/org/tron/core/services/WhitelistService.java

Lines changed: 55 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,22 @@
11
package org.tron.core.services;
22

3+
import com.google.common.collect.Maps;
34
import java.util.HashMap;
45
import java.util.Map;
6+
import java.util.Map.Entry;
57
import java.util.Objects;
8+
import java.util.stream.Collectors;
69
import javax.annotation.PostConstruct;
10+
import lombok.Getter;
711
import lombok.extern.slf4j.Slf4j;
8-
import org.apache.commons.collections4.CollectionUtils;
912
import org.apache.commons.collections4.MapUtils;
13+
import org.springframework.beans.factory.annotation.Autowired;
1014
import org.springframework.stereotype.Component;
1115
import org.tron.common.utils.ByteArray;
12-
import org.tron.common.utils.ForkController;
1316
import org.tron.core.Wallet;
1417
import org.tron.core.capsule.TransactionCapsule;
1518
import org.tron.core.config.Parameter.ForkBlockVersionEnum;
16-
import org.tron.core.config.args.Args;
19+
import org.tron.core.db.Manager;
1720
import org.tron.core.db.common.WrappedByteArray;
1821
import org.tron.core.exception.WhitelistException;
1922
import org.tron.protos.Protocol.Transaction.Contract;
@@ -23,14 +26,14 @@
2326
@Component
2427
@Slf4j
2528
public class WhitelistService {
26-
private final static String TEST_FROM = "41ceee995c01c9bb7d720f9013336363cdc7c8c4d8";
27-
private final static String TEST_TO = "41216352a10649ffc3e37ba492feb0c35b3b6258e0";
2829
private static Map<WrappedByteArray, WrappedByteArray> whitelist = new HashMap<>();
2930

3031
public WhitelistService() {
31-
// test
32-
whitelist.put(WrappedByteArray.of(ByteArray.fromHexString(TEST_FROM)),
33-
WrappedByteArray.of(ByteArray.fromHexString(TEST_TO)));
32+
WhitelistTestCase.testMap.forEach((k, v) -> {
33+
WrappedByteArray key = WrappedByteArray.of(ByteArray.fromHexString(k));
34+
WrappedByteArray value = WrappedByteArray.of(ByteArray.fromHexString(v));
35+
whitelist.put(key, value);
36+
});
3437
}
3538

3639
// TODO
@@ -44,7 +47,7 @@ public void loadFromConfig() {
4447
}
4548

4649
public static void check(TransactionCapsule transactionCapsule) throws WhitelistException {
47-
if (!ForkController.instance().pass(ForkBlockVersionEnum.VERSION_3_5)) {
50+
if (!ForkController.pass(ForkBlockVersionEnum.VERSION_3_5)) {
4851
return;
4952
}
5053

@@ -70,4 +73,47 @@ public static void check(TransactionCapsule transactionCapsule) throws Whitelist
7073
+ ", to:" + (toAddress == null ? null : Wallet.encode58Check(toAddress)));
7174
}
7275
}
76+
77+
@Component
78+
public static class ForkController {
79+
80+
private static final byte VERSION_UPGRADE = (byte) 1;
81+
82+
@Getter
83+
private static Manager manager;
84+
85+
@Autowired
86+
public void setManager(Manager manager) {
87+
ForkController.manager = manager;
88+
}
89+
90+
public static boolean pass(ForkBlockVersionEnum forkBlockVersionEnum) {
91+
return pass(forkBlockVersionEnum.getValue());
92+
}
93+
94+
private static synchronized boolean pass(int version) {
95+
byte[] stats = manager.getDynamicPropertiesStore().statsByVersion(version);
96+
return check(stats);
97+
}
98+
99+
private static boolean check(byte[] stats) {
100+
if (stats == null || stats.length == 0) {
101+
return false;
102+
}
103+
104+
int count = 0;
105+
for (int i = 0; i < stats.length; i++) {
106+
if (VERSION_UPGRADE == stats[i]) {
107+
++count;
108+
}
109+
}
110+
111+
if (count >= 24) {
112+
return true;
113+
}
114+
115+
return false;
116+
}
117+
}
118+
73119
}

0 commit comments

Comments
 (0)