Class |
Method, %
|
Line, %
|
RskSystemProperties |
13.2%
(7/53)
|
12.4%
(14/113)
|
RskSystemProperties$MockitoMock$974318108 |
RskSystemProperties$MockitoMock$974318108$auxiliary$0DMJ1gIB |
RskSystemProperties$MockitoMock$974318108$auxiliary$0veLsN4k |
RskSystemProperties$MockitoMock$974318108$auxiliary$0wRv7ERg |
RskSystemProperties$MockitoMock$974318108$auxiliary$1AoRApvO |
RskSystemProperties$MockitoMock$974318108$auxiliary$1H6V8X0p |
RskSystemProperties$MockitoMock$974318108$auxiliary$1levtL7I |
RskSystemProperties$MockitoMock$974318108$auxiliary$2LPRntKQ |
RskSystemProperties$MockitoMock$974318108$auxiliary$34hYK9tD |
RskSystemProperties$MockitoMock$974318108$auxiliary$4C8PL5gq |
RskSystemProperties$MockitoMock$974318108$auxiliary$54vVEyoh |
RskSystemProperties$MockitoMock$974318108$auxiliary$5Otbrlr6 |
RskSystemProperties$MockitoMock$974318108$auxiliary$6D0R0oww |
RskSystemProperties$MockitoMock$974318108$auxiliary$6mlNjGfG |
RskSystemProperties$MockitoMock$974318108$auxiliary$6Pls2UqY |
RskSystemProperties$MockitoMock$974318108$auxiliary$6sTShqvo |
RskSystemProperties$MockitoMock$974318108$auxiliary$7i6r3nNz |
RskSystemProperties$MockitoMock$974318108$auxiliary$8pGCPHIB |
RskSystemProperties$MockitoMock$974318108$auxiliary$8PJcIAFY |
RskSystemProperties$MockitoMock$974318108$auxiliary$8vKLRgrA |
RskSystemProperties$MockitoMock$974318108$auxiliary$9cWBoLDN |
RskSystemProperties$MockitoMock$974318108$auxiliary$9drbMzrK |
RskSystemProperties$MockitoMock$974318108$auxiliary$9ko11fnr |
RskSystemProperties$MockitoMock$974318108$auxiliary$9uoLuhVy |
RskSystemProperties$MockitoMock$974318108$auxiliary$9wsdZR5p |
RskSystemProperties$MockitoMock$974318108$auxiliary$AIe10aMG |
RskSystemProperties$MockitoMock$974318108$auxiliary$ajJQrwnA |
RskSystemProperties$MockitoMock$974318108$auxiliary$Api7PRat |
RskSystemProperties$MockitoMock$974318108$auxiliary$avtDaFx5 |
RskSystemProperties$MockitoMock$974318108$auxiliary$axx9pH9B |
RskSystemProperties$MockitoMock$974318108$auxiliary$BPaNJ24L |
RskSystemProperties$MockitoMock$974318108$auxiliary$BUgMkH62 |
RskSystemProperties$MockitoMock$974318108$auxiliary$C9W8HsDv |
RskSystemProperties$MockitoMock$974318108$auxiliary$CBJ6jjz5 |
RskSystemProperties$MockitoMock$974318108$auxiliary$cCpv0mQo |
RskSystemProperties$MockitoMock$974318108$auxiliary$cELhRXUv |
RskSystemProperties$MockitoMock$974318108$auxiliary$CJ6cdh9H |
RskSystemProperties$MockitoMock$974318108$auxiliary$CmLGOCSs |
RskSystemProperties$MockitoMock$974318108$auxiliary$CXvevTK3 |
RskSystemProperties$MockitoMock$974318108$auxiliary$Czuj7ArT |
RskSystemProperties$MockitoMock$974318108$auxiliary$D2HxASwu |
RskSystemProperties$MockitoMock$974318108$auxiliary$dGWOIctB |
RskSystemProperties$MockitoMock$974318108$auxiliary$DKj7spaf |
RskSystemProperties$MockitoMock$974318108$auxiliary$DmFO7U6D |
RskSystemProperties$MockitoMock$974318108$auxiliary$duC7pJlF |
RskSystemProperties$MockitoMock$974318108$auxiliary$dvMMBml7 |
RskSystemProperties$MockitoMock$974318108$auxiliary$eArHfTbY |
RskSystemProperties$MockitoMock$974318108$auxiliary$EEpwfaF1 |
RskSystemProperties$MockitoMock$974318108$auxiliary$EgNfZpbB |
RskSystemProperties$MockitoMock$974318108$auxiliary$EQmYWrLk |
RskSystemProperties$MockitoMock$974318108$auxiliary$ERwlS4a8 |
RskSystemProperties$MockitoMock$974318108$auxiliary$eS80XWO0 |
RskSystemProperties$MockitoMock$974318108$auxiliary$Ex5EQU8Y |
RskSystemProperties$MockitoMock$974318108$auxiliary$fBvddFgO |
RskSystemProperties$MockitoMock$974318108$auxiliary$fgu9VRQJ |
RskSystemProperties$MockitoMock$974318108$auxiliary$gFsXtwbE |
RskSystemProperties$MockitoMock$974318108$auxiliary$GJHx75TJ |
RskSystemProperties$MockitoMock$974318108$auxiliary$GQ2qLckW |
RskSystemProperties$MockitoMock$974318108$auxiliary$GRWmHp91 |
RskSystemProperties$MockitoMock$974318108$auxiliary$gUyqivqQ |
RskSystemProperties$MockitoMock$974318108$auxiliary$h6JDGuJ4 |
RskSystemProperties$MockitoMock$974318108$auxiliary$HbIT8h6M |
RskSystemProperties$MockitoMock$974318108$auxiliary$hGpknwQ0 |
RskSystemProperties$MockitoMock$974318108$auxiliary$HhNHVq2E |
RskSystemProperties$MockitoMock$974318108$auxiliary$hjrLbsTn |
RskSystemProperties$MockitoMock$974318108$auxiliary$hPdfDfVW |
RskSystemProperties$MockitoMock$974318108$auxiliary$HU4ux2U4 |
RskSystemProperties$MockitoMock$974318108$auxiliary$I2rxuR4D |
RskSystemProperties$MockitoMock$974318108$auxiliary$IVQncECU |
RskSystemProperties$MockitoMock$974318108$auxiliary$izGnPIje |
RskSystemProperties$MockitoMock$974318108$auxiliary$jEKw1d68 |
RskSystemProperties$MockitoMock$974318108$auxiliary$JSpwY9bY |
RskSystemProperties$MockitoMock$974318108$auxiliary$Jy9jzPOc |
RskSystemProperties$MockitoMock$974318108$auxiliary$KcOJu4gW |
RskSystemProperties$MockitoMock$974318108$auxiliary$KmPgIqhe |
RskSystemProperties$MockitoMock$974318108$auxiliary$KMR5AJkL |
RskSystemProperties$MockitoMock$974318108$auxiliary$KMYQeBTh |
RskSystemProperties$MockitoMock$974318108$auxiliary$kNb7yRTy |
RskSystemProperties$MockitoMock$974318108$auxiliary$KNc5YRrh |
RskSystemProperties$MockitoMock$974318108$auxiliary$l5jGtfSO |
RskSystemProperties$MockitoMock$974318108$auxiliary$L9tGnIrK |
RskSystemProperties$MockitoMock$974318108$auxiliary$lcrhTPcj |
RskSystemProperties$MockitoMock$974318108$auxiliary$ljWJxevd |
RskSystemProperties$MockitoMock$974318108$auxiliary$lT5GRBWh |
RskSystemProperties$MockitoMock$974318108$auxiliary$Ltaybtk3 |
RskSystemProperties$MockitoMock$974318108$auxiliary$m18iY1jB |
RskSystemProperties$MockitoMock$974318108$auxiliary$mIdLvO5Q |
RskSystemProperties$MockitoMock$974318108$auxiliary$mmP2R2H5 |
RskSystemProperties$MockitoMock$974318108$auxiliary$mngmuya9 |
RskSystemProperties$MockitoMock$974318108$auxiliary$mOT371cN |
RskSystemProperties$MockitoMock$974318108$auxiliary$MUCp5FMo |
RskSystemProperties$MockitoMock$974318108$auxiliary$NJjLdIIa |
RskSystemProperties$MockitoMock$974318108$auxiliary$nNxgIi7c |
RskSystemProperties$MockitoMock$974318108$auxiliary$nUZcg0cP |
RskSystemProperties$MockitoMock$974318108$auxiliary$OmIM66JP |
RskSystemProperties$MockitoMock$974318108$auxiliary$OrDBjeLY |
RskSystemProperties$MockitoMock$974318108$auxiliary$P05cDEM9 |
RskSystemProperties$MockitoMock$974318108$auxiliary$P2i7YFFP |
RskSystemProperties$MockitoMock$974318108$auxiliary$PrNBWkUF |
RskSystemProperties$MockitoMock$974318108$auxiliary$Q6hN8hSp |
RskSystemProperties$MockitoMock$974318108$auxiliary$Q9cTlRbK |
RskSystemProperties$MockitoMock$974318108$auxiliary$Qb0XfOaY |
RskSystemProperties$MockitoMock$974318108$auxiliary$qZGdwsAx |
RskSystemProperties$MockitoMock$974318108$auxiliary$r0Vwfrpn |
RskSystemProperties$MockitoMock$974318108$auxiliary$RH7bcGvz |
RskSystemProperties$MockitoMock$974318108$auxiliary$rMenj1QC |
RskSystemProperties$MockitoMock$974318108$auxiliary$RvZww4I7 |
RskSystemProperties$MockitoMock$974318108$auxiliary$s8fbNZA7 |
RskSystemProperties$MockitoMock$974318108$auxiliary$THilTiPh |
RskSystemProperties$MockitoMock$974318108$auxiliary$tnIZMPcw |
RskSystemProperties$MockitoMock$974318108$auxiliary$u9AG6pYf |
RskSystemProperties$MockitoMock$974318108$auxiliary$UcyegjKV |
RskSystemProperties$MockitoMock$974318108$auxiliary$UkMyvCRs |
RskSystemProperties$MockitoMock$974318108$auxiliary$uULVrmNt |
RskSystemProperties$MockitoMock$974318108$auxiliary$uxSqGi4b |
RskSystemProperties$MockitoMock$974318108$auxiliary$VllEQxaU |
RskSystemProperties$MockitoMock$974318108$auxiliary$VOTctLzA |
RskSystemProperties$MockitoMock$974318108$auxiliary$vPyqV7TC |
RskSystemProperties$MockitoMock$974318108$auxiliary$w63TBrLk |
RskSystemProperties$MockitoMock$974318108$auxiliary$w7YWNzww |
RskSystemProperties$MockitoMock$974318108$auxiliary$weCbcTEM |
RskSystemProperties$MockitoMock$974318108$auxiliary$wVvjWhCg |
RskSystemProperties$MockitoMock$974318108$auxiliary$XKyBI4Iz |
RskSystemProperties$MockitoMock$974318108$auxiliary$XpUZIDnk |
RskSystemProperties$MockitoMock$974318108$auxiliary$Yf5r00V1 |
RskSystemProperties$MockitoMock$974318108$auxiliary$YPhEscPy |
RskSystemProperties$MockitoMock$974318108$auxiliary$yVGtubQC |
RskSystemProperties$MockitoMock$974318108$auxiliary$zLjtpAHR |
RskSystemProperties$MockitoMock$974318108$auxiliary$ZxYEwVdp |
Total |
13.2%
(7/53)
|
12.4%
(14/113)
|
1 /*
2 * This file is part of RskJ
3 * Copyright (C) 2017 RSK Labs Ltd.
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU Lesser General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19 package co.rsk.config;
20
21 import co.rsk.core.RskAddress;
22 import co.rsk.rpc.ModuleDescription;
23 import com.typesafe.config.Config;
24 import com.typesafe.config.ConfigObject;
25 import org.ethereum.config.Constants;
26 import org.ethereum.config.SystemProperties;
27 import org.ethereum.core.Account;
28 import org.ethereum.crypto.ECKey;
29 import org.ethereum.crypto.HashUtil;
30
31 import javax.annotation.Nullable;
32 import java.nio.charset.StandardCharsets;
33 import java.time.Duration;
34 import java.util.ArrayList;
35 import java.util.Collections;
36 import java.util.List;
37
38 /**
39 * Created by ajlopez on 3/3/2016.
40 */
41 public class RskSystemProperties extends SystemProperties {
42 /** while timeout period is lower than clean period it doesn't affect much since
43 requests will be checked after a clean period.
44 **/
45 private static final int PD_DEFAULT_CLEAN_PERIOD = 15000; //miliseconds
46 private static final int PD_DEFAULT_TIMEOUT_MESSAGE = PD_DEFAULT_CLEAN_PERIOD - 1; //miliseconds
47 private static final int PD_DEFAULT_REFRESH_PERIOD = 60000; //miliseconds
48
49 private static final String REGTEST_BLOCKCHAIN_CONFIG = "regtest";
50
51 private static final String MINER_REWARD_ADDRESS_CONFIG = "miner.reward.address";
52 private static final String MINER_COINBASE_SECRET_CONFIG = "miner.coinbase.secret";
53 private static final int CHUNK_SIZE = 192;
54
55 //TODO: REMOVE THIS WHEN THE LocalBLockTests starts working with REMASC
56 private boolean remascEnabled = true;
57
58 private List<ModuleDescription> moduleDescriptions;
59
60 public RskSystemProperties(ConfigLoader loader) {
61 super(loader);
62 }
63
64 @Nullable
65 public RskAddress coinbaseAddress() {
66 if (!isMinerServerEnabled()) {
67 //todo(diegoll): we should carefully handle the case when you don't have a coinbase and want to execute pending blocks
68 return new RskAddress(new byte[20]);
69 }
70
71 // validity checks are performed by localCoinbaseAccount
72 Account account = localCoinbaseAccount();
73 if (account != null) {
74 return account.getAddress();
75 }
76
77 String coinbaseAddress = configFromFiles.getString(MINER_REWARD_ADDRESS_CONFIG);
78 if (coinbaseAddress.length() != Constants.getMaxAddressByteLength() * 2) {
79 throw new RskConfigurationException(MINER_REWARD_ADDRESS_CONFIG + " needs to be Hex encoded and 20 byte length");
80 }
81
82 return new RskAddress(coinbaseAddress);
83 }
84
85 @Nullable
86 public Account localCoinbaseAccount() {
87 if (!isMinerServerEnabled()) {
88 return null;
89 }
90
91 // Regtest always has MINER_COINBASE_SECRET_CONFIG set in regtest.conf file. When MINER_REWARD_ADDRESS_CONFIG is set both values exist
92 // and that does not pass the checks below. If MINER_REWARD_ADDRESS_CONFIG exists, that value must be used so consider that
93 // special regtest case by adding this guard.
94 if(configFromFiles.getString(PROPERTY_BC_CONFIG_NAME).equals(REGTEST_BLOCKCHAIN_CONFIG) &&
95 configFromFiles.hasPath(MINER_REWARD_ADDRESS_CONFIG)) {
96 return null;
97 }
98
99 if (configFromFiles.hasPath(MINER_COINBASE_SECRET_CONFIG) &&
100 configFromFiles.hasPath(MINER_REWARD_ADDRESS_CONFIG)) {
101 throw new RskConfigurationException("It is required to have only one of " + MINER_REWARD_ADDRESS_CONFIG + " or " + MINER_COINBASE_SECRET_CONFIG);
102 }
103
104 if (!configFromFiles.hasPath(MINER_COINBASE_SECRET_CONFIG) &&
105 !configFromFiles.hasPath(MINER_REWARD_ADDRESS_CONFIG)) {
106 throw new RskConfigurationException("It is required to either have " + MINER_REWARD_ADDRESS_CONFIG + " or " + MINER_COINBASE_SECRET_CONFIG + " to use the miner server");
107 }
108
109 if (!configFromFiles.hasPath(MINER_COINBASE_SECRET_CONFIG)) {
110 return null;
111 }
112
113 String coinbaseSecret = configFromFiles.getString(MINER_COINBASE_SECRET_CONFIG);
114 return new Account(ECKey.fromPrivate(HashUtil.keccak256(coinbaseSecret.getBytes(StandardCharsets.UTF_8))));
115 }
116
117 public boolean isMinerClientEnabled() {
118 return configFromFiles.getBoolean("miner.client.enabled");
119 }
120
121 public Duration minerClientDelayBetweenBlocks() {
122 return configFromFiles.getDuration("miner.client.delayBetweenBlocks");
123 }
124
125 public Duration minerClientDelayBetweenRefreshes() {
126 return configFromFiles.getDuration("miner.client.delayBetweenRefreshes");
127 }
128
129 public boolean minerClientAutoMine() {
130 return configFromFiles.getBoolean("miner.client.autoMine");
131 }
132
133 public boolean isMinerServerEnabled() {
134 return configFromFiles.getBoolean("miner.server.enabled");
135 }
136
137 public boolean isMinerServerFixedClock() {
138 return configFromFiles.getBoolean("miner.server.isFixedClock");
139 }
140
141 public long minerMinGasPrice() {
142 return configFromFiles.getLong("miner.minGasPrice");
143 }
144
145 public double minerGasUnitInDollars() {
146 return getDouble("miner.gasUnitInDollars", 0);
147 }
148
149 public double minerMinFeesNotifyInDollars() {
150 return getDouble("miner.minFeesNotifyInDollars", 0);
151 }
152
153 public boolean bloomServiceEnabled() {
154 return getBoolean("bloom.service", false);
155 }
156
157 public int bloomNumberOfBlocks() {
158 return getInt("bloom.blocks", 64);
159 }
160
161 public int bloomNumberOfConfirmations() {
162 return getInt("bloom.confirmations", 400);
163 }
164
165 public boolean waitForSync() {
166 return getBoolean("sync.waitForSync", false);
167 }
168
169 public boolean isWalletEnabled() {
170 return getBoolean("wallet.enabled", false);
171 }
172
173 public List<WalletAccount> walletAccounts() {
174 if (!configFromFiles.hasPath("wallet.accounts")) {
175 return Collections.emptyList();
176 }
177
178 List<WalletAccount> ret = new ArrayList<>();
179 List<? extends ConfigObject> list = configFromFiles.getObjectList("wallet.accounts");
180
181 for (ConfigObject configObject : list) {
182 WalletAccount acc = null;
183 if (configObject.get("privateKey") != null) {
184 acc = new WalletAccount(configObject.toConfig().getString("privateKey"));
185 }
186
187 if (acc != null) {
188 ret.add(acc);
189 }
190 }
191
192 return ret;
193 }
194
195 public GarbageCollectorConfig garbageCollectorConfig() {
196 return GarbageCollectorConfig.fromConfig(configFromFiles.getConfig("blockchain.gc"));
197 }
198
199 public int flushNumberOfBlocks() {
200 return configFromFiles.hasPath("blockchain.flushNumberOfBlocks") && configFromFiles.getInt("blockchain.flushNumberOfBlocks") > 0 ?
201 configFromFiles.getInt("blockchain.flushNumberOfBlocks") : 20;
202 }
203
204 public int soLingerTime() {
205 return configFromFiles.getInt("rpc.providers.web.http.linger_time");
206
207 }
208
209 //TODO: REMOVE THIS WHEN THE LocalBLockTests starts working with REMASC
210 public boolean isRemascEnabled() {
211 return remascEnabled;
212 }
213
214 //TODO: REMOVE THIS WHEN THE LocalBLockTests starts working with REMASC
215 public void setRemascEnabled(boolean remascEnabled) {
216 this.remascEnabled = remascEnabled;
217 }
218
219 public long peerDiscoveryMessageTimeOut() {
220 return getLong("peer.discovery.msg.timeout", PD_DEFAULT_TIMEOUT_MESSAGE);
221 }
222
223 public long peerDiscoveryRefreshPeriod() {
224 long period = getLong("peer.discovery.refresh.period", PD_DEFAULT_REFRESH_PERIOD);
225
226 return (period < PD_DEFAULT_REFRESH_PERIOD)? PD_DEFAULT_REFRESH_PERIOD : period;
227 }
228
229 public List<ModuleDescription> getRpcModules() {
230 if (this.moduleDescriptions != null) {
231 return this.moduleDescriptions;
232 }
233
234 List<ModuleDescription> modules = new ArrayList<>();
235
236 if (!configFromFiles.hasPath("rpc.modules")) {
237 return modules;
238 }
239
240 List<? extends ConfigObject> list = configFromFiles.getObjectList("rpc.modules");
241
242 for (ConfigObject configObject : list) {
243 Config configElement = configObject.toConfig();
244 String name = configElement.getString("name");
245 String version = configElement.getString("version");
246 boolean enabled = configElement.getBoolean("enabled");
247 List<String> enabledMethods = null;
248 List<String> disabledMethods = null;
249
250 if (configElement.hasPath("methods.enabled")) {
251 enabledMethods = configElement.getStringList("methods.enabled");
252 }
253
254 if (configElement.hasPath("methods.disabled")) {
255 disabledMethods = configElement.getStringList("methods.disabled");
256 }
257
258 modules.add(new ModuleDescription(name, version, enabled, enabledMethods, disabledMethods));
259 }
260
261 this.moduleDescriptions = modules;
262
263 return modules;
264 }
265
266 public boolean hasMessageRecorderEnabled() {
267 return getBoolean("messages.recorder.enabled",false);
268 }
269
270 public List<String> getMessageRecorderCommands() {
271 if (!configFromFiles.hasPath("messages.recorder.commands")) {
272 return new ArrayList<>();
273 }
274
275 return configFromFiles.getStringList("messages.recorder.commands");
276 }
277
278 public long getTargetGasLimit() {
279 return getLong("targetgaslimit",6_800_000L);
280 }
281
282 public boolean getForceTargetGasLimit() {
283 return getBoolean("forcegaslimit", true);
284 }
285
286 // Sync config properties
287
288 public boolean getIsHeartBeatEnabled() {
289 return getBoolean("sync.heartBeat.enabled", false);
290 }
291
292 public int getExpectedPeers() {
293 return configFromFiles.getInt("sync.expectedPeers");
294 }
295
296 public int getTimeoutWaitingPeers() {
297 return configFromFiles.getInt("sync.timeoutWaitingPeers");
298 }
299
300 public int getTimeoutWaitingRequest() {
301 return configFromFiles.getInt("sync.timeoutWaitingRequest");
302 }
303
304 public int getExpirationTimePeerStatus() {
305 return configFromFiles.getInt("sync.expirationTimePeerStatus");
306 }
307
308 public int getMaxSkeletonChunks() {
309 return configFromFiles.getInt("sync.maxSkeletonChunks");
310 }
311
312 public int getMaxRequestedBodies() {
313 return configFromFiles.getInt("sync.maxRequestedBodies");
314 }
315
316 public int getLongSyncLimit() {
317 return configFromFiles.getInt("sync.longSyncLimit");
318 }
319
320 // its fixed, cannot be set by config file
321 public int getChunkSize() {
322 return CHUNK_SIZE;
323 }
324
325 public VmConfig getVmConfig() {
326 return new VmConfig(vmTrace(), vmTraceOptions(), vmTraceInitStorageLimit(), dumpBlock(), dumpStyle(), getNetworkConstants().getChainId());
327 }
328
329 public long peerDiscoveryCleanPeriod() {
330 return PD_DEFAULT_CLEAN_PERIOD;
331 }
332
333 public int getPeerP2PPingInterval(){
334 return configFromFiles.getInt("peer.p2p.pingInterval");
335 }
336
337 public Integer getGasPriceBump() {
338 return configFromFiles.getInt("transaction.gasPriceBump");
339 }
340
341 public Integer getNumOfAccountSlots() {
342 return configFromFiles.getInt("transaction.accountSlots");
343 }
344
345 public int getStatesCacheSize() {
346 return configFromFiles.getInt("cache.states.max-elements");
347 }
348
349 public int getReceiptsCacheSize() {
350 return configFromFiles.getInt("cache.receipts.max-elements");
351 }
352
353 public int getBtcBlockStoreCacheSize() {
354 return configFromFiles.getInt("cache.btcBlockStore.size");
355 }
356
357 public int getBtcBlockStoreCacheDepth() {
358 return configFromFiles.getInt("cache.btcBlockStore.depth");
359 }
360
361 public long getVmExecutionStackSize() {
362 return configFromFiles.getBytes("vm.executionStackSize");
363 }
364
365 public String cryptoLibrary() {
366 return configFromFiles.getString("crypto.library");
367 }
368
369 public boolean isPeerScoringStatsReportEnabled() {
370 return configFromFiles.getBoolean("scoring.summary.enabled");
371 }
372
373 public long getPeerScoringSummaryTime() {
374 return configFromFiles.getLong("scoring.summary.time");
375 }
376
377 public boolean fastBlockPropagation() {
378 return configFromFiles.getBoolean("peer.fastBlockPropagation");
379 }
380 }