Skip to content

Commit a28e337

Browse files
committed
refactor the code
1 parent 28aaa52 commit a28e337

File tree

5 files changed

+155
-81
lines changed

5 files changed

+155
-81
lines changed

framework/src/main/java/org/tron/core/config/args/Args.java

Lines changed: 1 addition & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@
5353
import org.tron.common.args.Witness;
5454
import org.tron.common.config.DbBackupConfig;
5555
import org.tron.common.cron.CronExpression;
56-
import org.tron.common.crypto.SignInterface;
5756
import org.tron.common.logsfilter.EventPluginConfig;
5857
import org.tron.common.logsfilter.FilterQuery;
5958
import org.tron.common.logsfilter.TriggerConfig;
@@ -62,19 +61,15 @@
6261
import org.tron.common.parameter.CommonParameter;
6362
import org.tron.common.parameter.RateLimiterInitialization;
6463
import org.tron.common.setting.RocksDbSettings;
65-
import org.tron.common.utils.ByteArray;
6664
import org.tron.common.utils.Commons;
6765
import org.tron.common.utils.LocalWitnesses;
6866
import org.tron.core.Constant;
6967
import org.tron.core.Wallet;
7068
import org.tron.core.config.Configuration;
7169
import org.tron.core.config.Parameter.NetConstants;
7270
import org.tron.core.config.Parameter.NodeConstant;
73-
import org.tron.core.exception.CipherException;
7471
import org.tron.core.exception.TronError;
7572
import org.tron.core.store.AccountStore;
76-
import org.tron.keystore.Credentials;
77-
import org.tron.keystore.WalletUtils;
7873
import org.tron.p2p.P2pConfig;
7974
import org.tron.p2p.dns.update.DnsType;
8075
import org.tron.p2p.dns.update.PublishConfig;
@@ -412,63 +407,7 @@ public static void setParam(final Config config) {
412407
PARAMETER.cryptoEngine = config.hasPath(Constant.CRYPTO_ENGINE) ? config
413408
.getString(Constant.CRYPTO_ENGINE) : Constant.ECKey_ENGINE;
414409

415-
if (StringUtils.isNoneBlank(PARAMETER.privateKey)) {
416-
localWitnesses = (new LocalWitnesses(PARAMETER.privateKey));
417-
byte[] witnessAddress = null;
418-
if (StringUtils.isNoneBlank(PARAMETER.witnessAddress)) {
419-
witnessAddress = Commons.decodeFromBase58Check(PARAMETER.witnessAddress);
420-
if (witnessAddress != null) {
421-
logger.debug("Got localWitnessAccountAddress from cmd");
422-
} else {
423-
PARAMETER.witnessAddress = "";
424-
logger.warn(IGNORE_WRONG_WITNESS_ADDRESS_FORMAT);
425-
}
426-
}
427-
localWitnesses.initWitnessAccountAddress(witnessAddress, PARAMETER.isECKeyCryptoEngine());
428-
logger.debug("Got privateKey from cmd");
429-
} else if (config.hasPath(Constant.LOCAL_WITNESS)) {
430-
localWitnesses = new LocalWitnesses();
431-
byte[] witnessAddress = getWitnessAddress(config);
432-
List<String> localwitness = config.getStringList(Constant.LOCAL_WITNESS);
433-
if (!localwitness.isEmpty()) {
434-
localWitnesses.setPrivateKeys(localwitness);
435-
logger.debug("Got privateKey from config.conf");
436-
}
437-
localWitnesses.initWitnessAccountAddress(witnessAddress, PARAMETER.isECKeyCryptoEngine());
438-
} else if (config.hasPath(Constant.LOCAL_WITNESS_KEYSTORE)) {
439-
localWitnesses = new LocalWitnesses();
440-
List<String> privateKeys = new ArrayList<String>();
441-
if (PARAMETER.isWitness()) {
442-
List<String> localwitness = config.getStringList(Constant.LOCAL_WITNESS_KEYSTORE);
443-
if (!localwitness.isEmpty()) {
444-
String fileName = System.getProperty("user.dir") + "/" + localwitness.get(0);
445-
String password;
446-
if (StringUtils.isEmpty(PARAMETER.password)) {
447-
System.out.println("Please input your password.");
448-
password = WalletUtils.inputPassword();
449-
} else {
450-
password = PARAMETER.password;
451-
PARAMETER.password = null;
452-
}
453-
454-
try {
455-
Credentials credentials = WalletUtils
456-
.loadCredentials(password, new File(fileName));
457-
SignInterface sign = credentials.getSignInterface();
458-
String prikey = ByteArray.toHexString(sign.getPrivateKey());
459-
privateKeys.add(prikey);
460-
} catch (IOException | CipherException e) {
461-
logger.error("Witness node start failed!");
462-
throw new TronError(e, TronError.ErrCode.WITNESS_KEYSTORE_LOAD);
463-
}
464-
}
465-
}
466-
localWitnesses.setPrivateKeys(privateKeys);
467-
byte[] witnessAddress = getWitnessAddress(config);
468-
localWitnesses.initWitnessAccountAddress(witnessAddress, PARAMETER.isECKeyCryptoEngine());
469-
logger.debug("Got privateKey from keystore");
470-
}
471-
410+
localWitnesses = new WitnessInitializer(config).initLocalWitnesses();
472411
if (PARAMETER.isWitness()
473412
&& CollectionUtils.isEmpty(localWitnesses.getPrivateKeys())) {
474413
throw new TronError("This is a witness node, but localWitnesses is null",
@@ -1819,20 +1758,6 @@ public static void logConfig() {
18191758
logger.info("\n");
18201759
}
18211760

1822-
private static byte[] getWitnessAddress(Config config) {
1823-
byte[] witnessAddress = null;
1824-
if (config.hasPath(Constant.LOCAL_WITNESS_ACCOUNT_ADDRESS)) {
1825-
witnessAddress = Commons
1826-
.decodeFromBase58Check(config.getString(Constant.LOCAL_WITNESS_ACCOUNT_ADDRESS));
1827-
if (witnessAddress != null) {
1828-
logger.debug("Got localWitnessAccountAddress from config.conf");
1829-
} else {
1830-
logger.warn(IGNORE_WRONG_WITNESS_ADDRESS_FORMAT);
1831-
}
1832-
}
1833-
return witnessAddress;
1834-
}
1835-
18361761
/**
18371762
* get output directory.
18381763
*/
Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
package org.tron.core.config.args;
2+
3+
import com.typesafe.config.Config;
4+
import java.io.File;
5+
import java.io.IOException;
6+
import java.util.ArrayList;
7+
import java.util.List;
8+
import lombok.extern.slf4j.Slf4j;
9+
import org.apache.commons.lang3.StringUtils;
10+
import org.tron.common.crypto.SignInterface;
11+
import org.tron.common.utils.ByteArray;
12+
import org.tron.common.utils.Commons;
13+
import org.tron.common.utils.LocalWitnesses;
14+
import org.tron.core.Constant;
15+
import org.tron.core.exception.CipherException;
16+
import org.tron.core.exception.TronError;
17+
import org.tron.keystore.Credentials;
18+
import org.tron.keystore.WalletUtils;
19+
20+
@Slf4j
21+
public class WitnessInitializer {
22+
23+
private final Config config;
24+
25+
private LocalWitnesses localWitnesses;
26+
27+
public WitnessInitializer(Config config) {
28+
this.config = config;
29+
}
30+
31+
public LocalWitnesses initLocalWitnesses() {
32+
localWitnesses = new LocalWitnesses();
33+
34+
if (!Args.PARAMETER.isWitness()) {
35+
return localWitnesses;
36+
}
37+
38+
if (tryInitFromCommandLine()) {
39+
return localWitnesses;
40+
}
41+
42+
if (tryInitFromConfig()) {
43+
return localWitnesses;
44+
}
45+
46+
tryInitFromKeystore();
47+
48+
return localWitnesses;
49+
}
50+
51+
private boolean tryInitFromCommandLine() {
52+
if (StringUtils.isBlank(Args.PARAMETER.privateKey)) {
53+
return false;
54+
}
55+
56+
byte[] witnessAddress = null;
57+
this.localWitnesses = new LocalWitnesses(Args.PARAMETER.privateKey);
58+
if (StringUtils.isNotEmpty(Args.PARAMETER.witnessAddress)) {
59+
witnessAddress = Commons.decodeFromBase58Check(Args.PARAMETER.witnessAddress);
60+
if (witnessAddress == null) {
61+
throw new TronError("LocalWitnessAccountAddress format from cmd is incorrect",
62+
TronError.ErrCode.WITNESS_INIT);
63+
}
64+
logger.debug("Got localWitnessAccountAddress from cmd");
65+
}
66+
67+
this.localWitnesses.initWitnessAccountAddress(witnessAddress,
68+
Args.PARAMETER.isECKeyCryptoEngine());
69+
logger.debug("Got privateKey from cmd");
70+
return true;
71+
}
72+
73+
private boolean tryInitFromConfig() {
74+
if (!config.hasPath(Constant.LOCAL_WITNESS) || config.getStringList(Constant.LOCAL_WITNESS)
75+
.isEmpty()) {
76+
return false;
77+
}
78+
79+
List<String> localWitness = config.getStringList(Constant.LOCAL_WITNESS);
80+
this.localWitnesses.setPrivateKeys(localWitness);
81+
logger.debug("Got privateKey from config.conf");
82+
byte[] witnessAddress = getWitnessAddress();
83+
this.localWitnesses.initWitnessAccountAddress(witnessAddress,
84+
Args.PARAMETER.isECKeyCryptoEngine());
85+
return true;
86+
}
87+
88+
private void tryInitFromKeystore() {
89+
if (!config.hasPath(Constant.LOCAL_WITNESS_KEYSTORE)
90+
|| config.getStringList(Constant.LOCAL_WITNESS_KEYSTORE).isEmpty()) {
91+
return;
92+
}
93+
94+
List<String> localWitness = config.getStringList(Constant.LOCAL_WITNESS_KEYSTORE);
95+
if (localWitness.size() > 1) {
96+
logger.warn(
97+
"Multiple keystores detected. Only the first keystore will be used as witness, all "
98+
+ "others will be ignored.");
99+
}
100+
101+
List<String> privateKeys = new ArrayList<>();
102+
String fileName = System.getProperty("user.dir") + "/" + localWitness.get(0);
103+
String password;
104+
if (StringUtils.isEmpty(Args.PARAMETER.password)) {
105+
System.out.println("Please input your password.");
106+
password = WalletUtils.inputPassword();
107+
} else {
108+
password = Args.PARAMETER.password;
109+
Args.PARAMETER.password = null;
110+
}
111+
112+
try {
113+
Credentials credentials = WalletUtils
114+
.loadCredentials(password, new File(fileName));
115+
SignInterface sign = credentials.getSignInterface();
116+
String prikey = ByteArray.toHexString(sign.getPrivateKey());
117+
privateKeys.add(prikey);
118+
} catch (IOException | CipherException e) {
119+
logger.error("Witness node start failed!");
120+
throw new TronError(e, TronError.ErrCode.WITNESS_KEYSTORE_LOAD);
121+
}
122+
123+
this.localWitnesses.setPrivateKeys(privateKeys);
124+
byte[] witnessAddress = getWitnessAddress();
125+
this.localWitnesses.initWitnessAccountAddress(witnessAddress,
126+
Args.PARAMETER.isECKeyCryptoEngine());
127+
logger.debug("Got privateKey from keystore");
128+
}
129+
130+
private byte[] getWitnessAddress() {
131+
if (!config.hasPath(Constant.LOCAL_WITNESS_ACCOUNT_ADDRESS)) {
132+
return null;
133+
}
134+
135+
if (localWitnesses.getPrivateKeys().size() != 1) {
136+
throw new TronError(
137+
"LocalWitnessAccountAddress can only be set when there is only one private key",
138+
TronError.ErrCode.WITNESS_INIT);
139+
}
140+
byte[] witnessAddress = Commons
141+
.decodeFromBase58Check(config.getString(Constant.LOCAL_WITNESS_ACCOUNT_ADDRESS));
142+
if (witnessAddress != null) {
143+
logger.debug("Got localWitnessAccountAddress from config.conf");
144+
} else {
145+
throw new TronError("LocalWitnessAccountAddress format from config is incorrect",
146+
TronError.ErrCode.WITNESS_INIT);
147+
}
148+
return witnessAddress;
149+
}
150+
}

framework/src/main/java/org/tron/core/metrics/node/NodeMetricManager.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@
44
import org.springframework.beans.factory.annotation.Autowired;
55
import org.springframework.stereotype.Component;
66
import org.tron.common.backup.BackupManager;
7-
import org.tron.common.parameter.CommonParameter;
8-
import org.tron.common.utils.ByteUtil;
7+
import org.tron.common.utils.ByteArray;
98
import org.tron.core.ChainBaseManager;
109
import org.tron.core.config.args.Args;
1110
import org.tron.program.Version;
@@ -38,7 +37,7 @@ private void setNodeInfo(NodeInfo nodeInfo) {
3837
nodeInfo.setIp(Args.getInstance().getNodeExternalIp());
3938

4039
byte[] witnessAccountAddress = Args.getLocalWitnesses().getWitnessAccountAddress();
41-
ByteString witnessAddress = !ByteUtil.isNullOrZeroArray(witnessAccountAddress) ? ByteString
40+
ByteString witnessAddress = !ByteArray.isEmpty(witnessAccountAddress) ? ByteString
4241
.copyFrom(witnessAccountAddress) : null;
4342
if (chainBaseManager.getWitnessScheduleStore().getActiveWitnesses().contains(witnessAddress)) {
4443
nodeInfo.setNodeType(1);

framework/src/test/java/org/tron/core/config/args/LocalWitnessTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ public void testConstructor() {
198198
@Test
199199
public void testLocalWitnessConfig() throws IOException {
200200
Args.setParam(
201-
new String[]{"--output-directory", temporaryFolder.newFolder().toString(), "--debug"},
201+
new String[]{"--output-directory", temporaryFolder.newFolder().toString(), "-w", "--debug"},
202202
"config-localtest.conf");
203203
LocalWitnesses witness = Args.getLocalWitnesses();
204204
Assert.assertNotNull(witness.getPrivateKey());

framework/src/test/java/org/tron/core/zksnark/ShieldedReceiveTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ public class ShieldedReceiveTest extends BaseTest {
128128
private static boolean init;
129129

130130
static {
131-
Args.setParam(new String[]{"--output-directory", dbPath()}, "config-localtest.conf");
131+
Args.setParam(new String[]{"--output-directory", dbPath(), "-w"}, "config-localtest.conf");
132132
ADDRESS_ONE_PRIVATE_KEY = getRandomPrivateKey();
133133
FROM_ADDRESS = getHexAddressByPrivateKey(ADDRESS_ONE_PRIVATE_KEY);
134134
}

0 commit comments

Comments
 (0)