Search in sources :

Example 6 with ProtocolTempInfoPo

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;
}
Also used : ProtocolTempInfoPo(io.nuls.protocol.storage.po.ProtocolTempInfoPo)

Example 7 with ProtocolTempInfoPo

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);
    }
}
Also used : ProtocolContainer(io.nuls.protocol.base.version.ProtocolContainer) ProtocolTempInfoPo(io.nuls.protocol.storage.po.ProtocolTempInfoPo)

Example 8 with ProtocolTempInfoPo

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());
        }
    }
}
Also used : ProtocolTempInfoPo(io.nuls.protocol.storage.po.ProtocolTempInfoPo)

Example 9 with ProtocolTempInfoPo

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;
                }
            }
        }
    }
}
Also used : ProtocolTempInfoPo(io.nuls.protocol.storage.po.ProtocolTempInfoPo)

Aggregations

ProtocolTempInfoPo (io.nuls.protocol.storage.po.ProtocolTempInfoPo)9 ProtocolContainer (io.nuls.protocol.base.version.ProtocolContainer)3 BlockExtendsData (io.nuls.consensus.poc.model.BlockExtendsData)2 BlockHeader (io.nuls.kernel.model.BlockHeader)2 HashMap (java.util.HashMap)2 ProtocolContainerDTO (io.nuls.client.rpc.resources.dto.ProtocolContainerDTO)1 MeetingRound (io.nuls.consensus.poc.model.MeetingRound)1 ProtocolInfoPo (io.nuls.protocol.storage.po.ProtocolInfoPo)1 ApiOperation (io.swagger.annotations.ApiOperation)1 ApiResponses (io.swagger.annotations.ApiResponses)1 ArrayList (java.util.ArrayList)1 List (java.util.List)1