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
127 lines (111 loc) · 4.64 KB
/
Copy pathFullNode.java
File metadata and controls
127 lines (111 loc) · 4.64 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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
package org.tron.program;
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.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.common.parameter.CommonParameter;
import org.tron.common.prometheus.Metrics;
import org.tron.core.Constant;
import org.tron.core.config.DefaultConfig;
import org.tron.core.config.args.Args;
import org.tron.core.net.P2pEventHandlerImpl;
import org.tron.core.services.RpcApiService;
import org.tron.core.services.http.FullNodeHttpApiService;
import org.tron.core.services.interfaceJsonRpcOnPBFT.JsonRpcServiceOnPBFT;
import org.tron.core.services.interfaceJsonRpcOnSolidity.JsonRpcServiceOnSolidity;
import org.tron.core.services.interfaceOnPBFT.RpcApiServiceOnPBFT;
import org.tron.core.services.interfaceOnPBFT.http.PBFT.HttpApiOnPBFTService;
import org.tron.core.services.interfaceOnSolidity.RpcApiServiceOnSolidity;
import org.tron.core.services.interfaceOnSolidity.http.solidity.HttpApiOnSolidityService;
import org.tron.core.services.jsonrpc.FullNodeJsonRpcHttpService;
@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);
CommonParameter parameter = Args.getInstance();
load(parameter.getLogbackPath());
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");
}
// init metrics first
Metrics.init();
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
beanFactory.setAllowCircularReferences(false);
TronApplicationContext context =
new TronApplicationContext(beanFactory);
context.register(DefaultConfig.class);
context.refresh();
Application appT = ApplicationFactory.create(context);
context.registerShutdownHook();
// grpc api server
RpcApiService rpcApiService = context.getBean(RpcApiService.class);
appT.addService(rpcApiService);
// http api server
FullNodeHttpApiService httpApiService = context.getBean(FullNodeHttpApiService.class);
if (CommonParameter.getInstance().fullNodeHttpEnable) {
appT.addService(httpApiService);
}
// JSON-RPC http server
if (CommonParameter.getInstance().jsonRpcHttpFullNodeEnable) {
FullNodeJsonRpcHttpService jsonRpcHttpService =
context.getBean(FullNodeJsonRpcHttpService.class);
appT.addService(jsonRpcHttpService);
}
// full node and solidity node fuse together
// provide solidity rpc and http server on the full node.
RpcApiServiceOnSolidity rpcApiServiceOnSolidity = context
.getBean(RpcApiServiceOnSolidity.class);
appT.addService(rpcApiServiceOnSolidity);
HttpApiOnSolidityService httpApiOnSolidityService = context
.getBean(HttpApiOnSolidityService.class);
if (CommonParameter.getInstance().solidityNodeHttpEnable) {
appT.addService(httpApiOnSolidityService);
}
// JSON-RPC on solidity
if (CommonParameter.getInstance().jsonRpcHttpSolidityNodeEnable) {
JsonRpcServiceOnSolidity jsonRpcServiceOnSolidity = context
.getBean(JsonRpcServiceOnSolidity.class);
appT.addService(jsonRpcServiceOnSolidity);
}
// PBFT API (HTTP and GRPC)
RpcApiServiceOnPBFT rpcApiServiceOnPBFT = context
.getBean(RpcApiServiceOnPBFT.class);
appT.addService(rpcApiServiceOnPBFT);
HttpApiOnPBFTService httpApiOnPBFTService = context
.getBean(HttpApiOnPBFTService.class);
appT.addService(httpApiOnPBFTService);
// JSON-RPC on PBFT
if (CommonParameter.getInstance().jsonRpcHttpPBFTNodeEnable) {
JsonRpcServiceOnPBFT jsonRpcServiceOnPBFT = context.getBean(JsonRpcServiceOnPBFT.class);
appT.addService(jsonRpcServiceOnPBFT);
}
appT.startup();
appT.blockUntilShutdown();
}
}