forked from tronprotocol/java-tron
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathFullNode.java
More file actions
105 lines (90 loc) · 3.59 KB
/
FullNode.java
File metadata and controls
105 lines (90 loc) · 3.59 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
package org.tron.program;
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.joran.JoranConfigurator;
import java.io.File;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.tron.common.application.Application;
import org.tron.common.application.ApplicationFactory;
import org.tron.common.application.TronApplicationContext;
import org.tron.core.Constant;
import org.tron.core.config.DefaultConfig;
import org.tron.core.config.args.Args;
import org.tron.core.services.RpcApiService;
import org.tron.core.services.WitnessService;
import org.tron.core.services.http.FullNodeHttpApiService;
import org.tron.core.services.interfaceOnSolidity.RpcApiServiceOnSolidity;
import org.tron.core.services.interfaceOnSolidity.http.solidity.HttpApiOnSolidityService;
@Slf4j(topic = "app")
public class FullNode {
public static void load(String path) {
try {
File file = new File(path);
if (!file.exists() || !file.isFile() || !file.canRead()) {
return;
}
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
JoranConfigurator configurator = new JoranConfigurator();
configurator.setContext(lc);
lc.reset();
configurator.doConfigure(file);
} catch (Exception e) {
logger.error(e.getMessage());
}
}
/**
* Start the FullNode.
*/
public static void main(String[] args) {
logger.info("Full node running.");
Args.setParam(args, Constant.TESTNET_CONF);
Args cfgArgs = Args.getInstance();
load(cfgArgs.getLogbackPath());
if (cfgArgs.isHelp()) {
logger.info("Here is the help message.");
return;
}
if (Args.getInstance().isDebug()) {
logger.info("in debug mode, it won't check energy time");
} else {
logger.info("not in debug mode, it will check energy time");
}
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
beanFactory.setAllowCircularReferences(false);
TronApplicationContext context =
new TronApplicationContext(beanFactory);
context.register(DefaultConfig.class);
context.refresh();
Application appT = ApplicationFactory.create(context);
shutdown(appT);
// grpc api server
RpcApiService rpcApiService = context.getBean(RpcApiService.class);
appT.addService(rpcApiService);
if (cfgArgs.isWitness()) {
appT.addService(new WitnessService(appT, context));
}
// http api server
FullNodeHttpApiService httpApiService = context.getBean(FullNodeHttpApiService.class);
appT.addService(httpApiService);
// fullnode and soliditynode fuse together, provide solidity rpc and http server on the fullnode.
if (Args.getInstance().getStorage().getDbVersion() == 2) {
RpcApiServiceOnSolidity rpcApiServiceOnSolidity = context
.getBean(RpcApiServiceOnSolidity.class);
appT.addService(rpcApiServiceOnSolidity);
HttpApiOnSolidityService httpApiOnSolidityService = context
.getBean(HttpApiOnSolidityService.class);
appT.addService(httpApiOnSolidityService);
}
appT.initServices(cfgArgs);
appT.startServices();
appT.startup();
rpcApiService.blockUntilShutdown();
}
public static void shutdown(final Application app) {
logger.info("********register application shutdown hook********");
Runtime.getRuntime().addShutdownHook(new Thread(app::shutdown));
}
}