use of io.nuls.protocol.service.BlockService in project nuls by nuls-io.
the class ConsensusScheduler method initNulsProtocol.
private void initNulsProtocol() {
try {
// 针对第一版本升级时的特殊处理
NulsVersionManager.init();
BlockService blockService = NulsContext.getServiceBean(BlockService.class);
// 获取最新的记录版本信息的高度
Long consensusVersionHeight = getVersionManagerStorageService().getConsensusVersionHeight();
if (consensusVersionHeight == null) {
// todo 正式上线这里会改成1200000L
consensusVersionHeight = ProtocolConstant.START_CHECK_PROTOCOL_HEIGHT;
}
NulsVersionManager.loadVersionByHeight(consensusVersionHeight);
ProtocolContainer container = NulsVersionManager.getProtocolContainer(NulsContext.MAIN_NET_VERSION);
if (container != null) {
NulsContext.MAIN_NET_VERSION_HEIGHT = container.getEffectiveHeight();
}
// 获取最新的区块高度
long bestHeight = blockService.getBestBlockHeader().getData().getHeight();
// 检查记录的版本最新高度和区块的最新高度是否一致,如果不一致,找出中间相差的块,再做统计
if (consensusVersionHeight < bestHeight) {
for (long i = consensusVersionHeight; i <= bestHeight; i++) {
Result<BlockHeader> result = blockService.getBlockHeader(i);
if (result.isSuccess()) {
NulsProtocolProcess.getInstance().processProtocolUpGrade(result.getData());
}
}
}
} catch (Exception e) {
Log.error(e);
System.exit(-1);
}
}
use of io.nuls.protocol.service.BlockService in project nuls by nuls-io.
the class UtxoAccountsModuleBootstrap method start.
@Override
public void start() {
Log.info("start utxoAccountsModule");
// 启动进行本地数据一致性判断与回滚
try {
UtxoAccountsService utxoAccountsService = NulsContext.getServiceBean(UtxoAccountsService.class);
UtxoAccountsStorageService utxoAccountsStorageService = NulsContext.getServiceBean(UtxoAccountsStorageService.class);
BlockService blockService = NulsContext.getServiceBean(BlockService.class);
long hadSynBlockHeight = utxoAccountsStorageService.getHadSynBlockHeight();
// 启动处理数据一致性
if (!utxoAccountsService.validateIntegrityBootstrap(hadSynBlockHeight)) {
Log.error("start utxoAccountsModule fail." + hadSynBlockHeight);
return;
}
} catch (Exception e) {
Log.error(e);
Log.error("start utxoAccountsModule fail.");
return;
}
ScheduledThreadPoolExecutor executor = TaskManager.createScheduledThreadPool(1, new NulsThreadFactory(UtxoAccountsConstant.MODULE_ID_UTXOACCOUNTS, "utxoAccountsThread"));
executor.scheduleAtFixedRate(NulsContext.getServiceBean(UtxoAccountsThread.class), 15, 1, TimeUnit.SECONDS);
}
use of io.nuls.protocol.service.BlockService in project nuls by nuls-io.
the class ChainContainer method addBlockInBlockList.
private void addBlockInBlockList(Chain chain) {
BlockService blockService = NulsContext.getServiceBean(BlockService.class);
if (chain.getAllBlockList().isEmpty()) {
chain.addBlock(blockService.getBestBlock().getData());
}
while (chain.getAllBlockList().size() < PocConsensusConstant.INIT_BLOCKS_COUNT) {
Block preBlock = chain.getAllBlockList().get(0);
if (preBlock.getHeader().getHeight() == 0) {
break;
}
chain.addPreBlock(blockService.getBlock(preBlock.getHeader().getPreHash()).getData());
}
}
use of io.nuls.protocol.service.BlockService in project nuls by nuls-io.
the class BaseProtocolsModuleBootstrap method start.
@Override
public void start() {
this.waitForDependencyRunning(MessageBusConstant.MODULE_ID_MESSAGE_BUS);
this.waitForDependencyInited(ConsensusConstant.MODULE_ID_CONSENSUS, NetworkConstant.NETWORK_MODULE_ID);
BlockService blockService = NulsContext.getServiceBean(BlockService.class);
Block block0 = blockService.getGengsisBlock().getData();
Block genesisBlock = NulsContext.getInstance().getGenesisBlock();
if (null == block0) {
try {
blockService.saveBlock(genesisBlock);
} catch (NulsException e) {
Log.error(e);
throw new NulsRuntimeException(e);
}
}
Block block = blockService.getBestBlock().getData();
while (null != block && block.verify().isFailed()) {
try {
blockService.rollbackBlock(block);
} catch (NulsException e) {
Log.error(e);
}
block = blockService.getBlock(block.getHeader().getPreHash()).getData();
}
if (null != block) {
NulsContext.getInstance().setBestBlock(block);
this.initHandlers();
((DownloadServiceImpl) NulsContext.getServiceBean(DownloadService.class)).start();
} else {
start();
}
}
Aggregations