use of io.nuls.protocol.storage.po.ProtocolTempInfoPo in project nuls by nuls-io.
the class ProtocolTransferTool method createProtocolTempInfoPo.
public static ProtocolTempInfoPo createProtocolTempInfoPo(BlockExtendsData extendsData) {
ProtocolTempInfoPo infoPo = new ProtocolTempInfoPo();
infoPo.setVersion(extendsData.getCurrentVersion());
infoPo.setDelay(extendsData.getDelay());
infoPo.setPercent(extendsData.getPercent());
return infoPo;
}
use of io.nuls.protocol.storage.po.ProtocolTempInfoPo in project nuls by nuls-io.
the class NulsProtocolProcess method tempContainerRollBack.
private void tempContainerRollBack(BlockHeader blockHeader, long versionHeight) {
boolean reProcess = false;
List<ProtocolTempInfoPo> tempInfoPoList = getVersionManagerStorageService().getProtocolTempInfoList(versionHeight);
if (tempInfoPoList == null || tempInfoPoList.isEmpty()) {
return;
}
// 遇到这个情况的时候,需要复制到container里,重新保存到数据库后,再递归判断是否还有
for (int i = tempInfoPoList.size() - 1; i >= 0; i--) {
ProtocolTempInfoPo tempInfoPo = tempInfoPoList.get(i);
ProtocolContainer container = NulsVersionManager.getProtocolContainer(tempInfoPo.getVersion(), tempInfoPo.getPercent(), tempInfoPo.getDelay());
if (container != null) {
copyProtocolFromTempInfoPo(container, tempInfoPo);
getVersionManagerStorageService().removeProtocolTempInfoList(versionHeight);
saveProtocol(blockHeader);
reProcess = true;
break;
}
}
if (reProcess) {
tempContainerRollBack(blockHeader, versionHeight);
} else {
Map<String, ProtocolTempInfoPo> tempContainers = new HashMap<>();
for (ProtocolTempInfoPo tempInfoPo : tempInfoPoList) {
tempContainers.put(tempInfoPo.getProtocolKey(), tempInfoPo);
}
NulsVersionManager.setTempProtocolContainers(tempContainers);
}
}
use of io.nuls.protocol.storage.po.ProtocolTempInfoPo in project nuls by nuls-io.
the class NulsProtocolProcess method calcTempDelay.
private void calcTempDelay(BlockHeader blockHeader, BlockExtendsData extendsData) {
for (ProtocolTempInfoPo tempInfoPo : NulsVersionManager.getTempProtocolContainers().values()) {
if (tempInfoPo.getStatus() != ProtocolContainer.DELAY_LOCK || tempInfoPo.getVersion() < NulsContext.MAIN_NET_VERSION) {
continue;
}
tempInfoPo.setRoundIndex(extendsData.getRoundIndex());
tempInfoPo.setCurrentDelay(tempInfoPo.getCurrentDelay() + 1);
// 当延迟块数达到升级条件时,改变协议状态为生效
if (tempInfoPo.getCurrentDelay() >= tempInfoPo.getDelay()) {
upgradeTempProtocol(tempInfoPo, blockHeader);
Log.info("========== Temp协议当前延迟块数:" + tempInfoPo.getCurrentDelay());
Log.info("********** Temp协议生效了!!!!!!!!! **********");
Log.info("********** Temp协议生效了!!!!!!!!! **********");
Log.info("********** Temp协议生效了!!!!!!!!! **********");
Log.info("********** Temp当前协议生效下一块开始执行新协议 **********");
Log.info("********** Temp生效协议version:" + tempInfoPo.getVersion());
Log.info("********** Temp生效协议高度:" + tempInfoPo.getEffectiveHeight());
}
}
}
use of io.nuls.protocol.storage.po.ProtocolTempInfoPo in project nuls by nuls-io.
the class NulsVersionManager method checkHasLaterVersion.
/**
* 检查是否有更高版本,如果有切生效的话,需要强制升级
*/
private static void checkHasLaterVersion() {
Map<String, ProtocolTempInfoPo> protocolTempMap = getVersionManagerStorageService().getProtocolTempMap();
for (ProtocolTempInfoPo tempInfoPo : protocolTempMap.values()) {
if (tempInfoPo.getVersion() > NulsContext.CURRENT_PROTOCOL_VERSION) {
if (tempInfoPo.getStatus() == ProtocolContainer.VALID) {
// 其他有桌面程序的系统检查到NulsContext.mastUpGrade = true时,在页面上提示需强制升级
if (System.getProperties().getProperty("os.name").toUpperCase().indexOf("LINUX") != -1) {
Log.error("The version is too low to upgrade");
NulsContext.getInstance().exit(1);
return;
} else {
NulsContext.mastUpGrade = true;
return;
}
}
}
}
}
Aggregations