Search in sources :

Example 1 with ProtocolInfoPo

use of io.nuls.protocol.storage.po.ProtocolInfoPo in project nuls by nuls-io.

the class NulsVersionManager method loadVersionByHeight.

public static void loadVersionByHeight(long versionHeight) {
    List<ProtocolInfoPo> infoPoList = getVersionManagerStorageService().getProtocolInfoList(versionHeight);
    // 获取数据库已保存的协议信息
    if (infoPoList != null && !infoPoList.isEmpty()) {
        for (ProtocolInfoPo infoPo : infoPoList) {
            ProtocolContainer container = getProtocolContainer(infoPo.getVersion());
            copyProtocolFromInfoPo(container, infoPo);
        }
    }
    // 获取数据库已保存的临时协议信息,如果发现临时协议信息在最新版本里能查询到就复制到最新版本信息里
    List<ProtocolTempInfoPo> tempInfoPoList = getVersionManagerStorageService().getProtocolTempInfoList(versionHeight);
    if (tempInfoPoList == null) {
        return;
    }
    for (int i = 0; i < tempInfoPoList.size(); i++) {
        ProtocolTempInfoPo tempInfoPo = tempInfoPoList.get(i);
        ProtocolContainer container = getProtocolContainer(tempInfoPo.getVersion());
        if (container != null) {
            copyProtocolFromTempInfoPo(container, tempInfoPo);
            // 如果有协议升级了,要做升级相关处理
            if (container.getStatus() == ProtocolContainer.VALID && container.getVersion() > NulsContext.MAIN_NET_VERSION) {
                NulsContext.MAIN_NET_VERSION = container.getVersion();
                NulsContext.MAIN_NET_VERSION_HEIGHT = container.getEffectiveHeight();
                getVersionManagerStorageService().saveMainVersion(NulsContext.MAIN_NET_VERSION);
                // 如果是版本号为2的协议生效后,记录一下生效区块的高度,从当前高度后的交易,序列化hash方法需要改变
                if (container.getVersion() == 2) {
                    getVersionManagerStorageService().saveChangeTxHashBlockHeight(container.getEffectiveHeight());
                    NulsContext.CHANGE_HASH_SERIALIZE_HEIGHT = container.getEffectiveHeight();
                }
            }
            continue;
        }
        // 如果有临时协议已经生效,说明当前版本不是最新版本,需要强制升级
        if (tempInfoPo.getStatus() == ProtocolContainer.VALID) {
            NulsContext.mastUpGrade = true;
        }
        tempContainerMap.put(tempInfoPo.getProtocolKey(), tempInfoPo);
    }
}
Also used : ProtocolInfoPo(io.nuls.protocol.storage.po.ProtocolInfoPo) ProtocolTempInfoPo(io.nuls.protocol.storage.po.ProtocolTempInfoPo)

Example 2 with ProtocolInfoPo

use of io.nuls.protocol.storage.po.ProtocolInfoPo in project nuls by nuls-io.

the class NulsProtocolProcess method saveContainerList.

private void saveContainerList(long versionHeight) {
    List<ProtocolInfoPo> infoPoList = new ArrayList<>();
    for (ProtocolContainer container : NulsVersionManager.getAllProtocolContainers().values()) {
        ProtocolInfoPo infoPo = ProtocolTransferTool.toProtocolInfoPo(container);
        infoPoList.add(infoPo);
    }
    getVersionManagerStorageService().saveProtocolInfoList(versionHeight, infoPoList);
}
Also used : ProtocolContainer(io.nuls.protocol.base.version.ProtocolContainer) ProtocolInfoPo(io.nuls.protocol.storage.po.ProtocolInfoPo)

Example 3 with ProtocolInfoPo

use of io.nuls.protocol.storage.po.ProtocolInfoPo in project nuls by nuls-io.

the class NulsProtocolProcess method containerRollBack.

private void containerRollBack(long versionHeight) {
    List<ProtocolInfoPo> infoPoList = getVersionManagerStorageService().getProtocolInfoList(versionHeight);
    // 用数据库已保存的每个区块统计的协议信息覆盖容器
    if (infoPoList != null && !infoPoList.isEmpty()) {
        for (ProtocolInfoPo infoPo : infoPoList) {
            ProtocolContainer container = NulsVersionManager.getProtocolContainer(infoPo.getVersion());
            copyProtocolFromInfoPo(container, infoPo);
        }
    }
    ProtocolContainer container = NulsVersionManager.getProtocolContainer(NulsContext.MAIN_NET_VERSION);
    if (container.getStatus() != ProtocolContainer.VALID) {
        int version = NulsContext.MAIN_NET_VERSION;
        while (true) {
            version--;
            container = NulsVersionManager.getProtocolContainer(version);
            if (container.getStatus() == ProtocolContainer.VALID) {
                break;
            }
        }
        NulsContext.MAIN_NET_VERSION = version;
        NulsContext.MAIN_NET_VERSION_HEIGHT = container.getEffectiveHeight();
        getVersionManagerStorageService().saveMainVersion(version);
        if (version == 1) {
            getVersionManagerStorageService().deleteChangeTxHashBlockHeight();
        }
    }
}
Also used : ProtocolContainer(io.nuls.protocol.base.version.ProtocolContainer) ProtocolInfoPo(io.nuls.protocol.storage.po.ProtocolInfoPo)

Example 4 with ProtocolInfoPo

use of io.nuls.protocol.storage.po.ProtocolInfoPo in project nuls by nuls-io.

the class ProtocolTransferTool method toProtocolInfoPo.

public static ProtocolInfoPo toProtocolInfoPo(ProtocolContainer container) {
    ProtocolInfoPo infoPo = new ProtocolInfoPo();
    infoPo.setVersion(container.getVersion());
    infoPo.setPercent(container.getPercent());
    infoPo.setDelay(container.getDelay());
    infoPo.setCurrentDelay(container.getCurrentDelay());
    infoPo.setCurrentPercent(container.getCurrentPercent());
    infoPo.setAddressSet(container.getAddressSet());
    infoPo.setStatus(container.getStatus());
    infoPo.setRoundIndex(container.getRoundIndex());
    infoPo.setEffectiveHeight(container.getEffectiveHeight());
    infoPo.setPrePercent(container.getPrePercent());
    return infoPo;
}
Also used : ProtocolInfoPo(io.nuls.protocol.storage.po.ProtocolInfoPo) BlockProtocolInfoPo(io.nuls.protocol.storage.po.BlockProtocolInfoPo)

Aggregations

ProtocolInfoPo (io.nuls.protocol.storage.po.ProtocolInfoPo)4 ProtocolContainer (io.nuls.protocol.base.version.ProtocolContainer)2 BlockProtocolInfoPo (io.nuls.protocol.storage.po.BlockProtocolInfoPo)1 ProtocolTempInfoPo (io.nuls.protocol.storage.po.ProtocolTempInfoPo)1